Semantic kind interpretation and substitution
Semantic interpretation of kinds
DefinitionSemantic interpretation of kinds#✓fully proved
Interpret kinds over a carrier for term types.
def Kind.Sem (α : Type u) : Kind → Type u
| .star => α
| .arrow κ μ => Kind.Sem α κ → Kind.Sem α μ
inductive Kind where
| star : Kind
| arrow : Kind → Kind → Kind
deriving DecidableEq, Repr
CSLibExt/Languages/LambdaCalculus/FOmega/Syntax.lean:37
Uses 1 · Used by 25
AbbreviationKinded semantic environment#✓fully proved
An environment supplies a value of the declared kind for every variable.
abbrev KEnv (α : Type u) (Δ : List Kind) :=
∀ {κ}, KVar Δ κ → Kind.Sem α κ
inductive Kind where
| star : Kind
| arrow : Kind → Kind → Kind
deriving DecidableEq, Repr
CSLibExt/Languages/LambdaCalculus/FOmega/Syntax.lean:37
inductive KVar : List Kind → Kind → Type where
| zero {Δ : List Kind} {κ : Kind} : KVar (κ :: Δ) κ
| succ {Δ : List Kind} {κ μ : Kind} : KVar Δ κ → KVar (μ :: Δ) κ
CSLibExt/Languages/LambdaCalculus/FOmega/Syntax.lean:43
def Kind.Sem (α : Type u) : Kind → Type u
| .star => α
| .arrow κ μ => Kind.Sem α κ → Kind.Sem α μ
CSLibExt/Languages/LambdaCalculus/FOmega/KindSemantics.lean:26
Uses 3 · Used by 23
DefinitionExtension of a kinded semantic environment#✓fully proved
Extend a semantic environment at its newest kinded variable.
def KEnv.extend {α : Type u} {Δ : List Kind} {κ : Kind}
(ρ : KEnv α Δ) (a : Kind.Sem α κ) : KEnv α (κ :: Δ)
| _, .zero => a
| _, .succ x => ρ x
inductive Kind where
| star : Kind
| arrow : Kind → Kind → Kind
deriving DecidableEq, Repr
CSLibExt/Languages/LambdaCalculus/FOmega/Syntax.lean:37
abbrev KEnv (α : Type u) (Δ : List Kind) :=
∀ {κ}, KVar Δ κ → Kind.Sem α κ
CSLibExt/Languages/LambdaCalculus/FOmega/KindSemantics.lean:31
def Kind.Sem (α : Type u) : Kind → Type u
| .star => α
| .arrow κ μ => Kind.Sem α κ → Kind.Sem α μ
CSLibExt/Languages/LambdaCalculus/FOmega/KindSemantics.lean:26
Uses 4 · Used by 11
StructureKind algebra of arrow and universal type constructors#✓fully proved
The two type constructors at star; higher kinds need no extra laws.
structure KindAlgebra (α : Type u) where
arr : α → α → α
all : {κ : Kind} → (Kind.Sem α κ → α) → α
inductive Kind where
| star : Kind
| arrow : Kind → Kind → Kind
deriving DecidableEq, Repr
CSLibExt/Languages/LambdaCalculus/FOmega/Syntax.lean:37
def Kind.Sem (α : Type u) : Kind → Type u
| .star => α
| .arrow κ μ => Kind.Sem α κ → Kind.Sem α μ
CSLibExt/Languages/LambdaCalculus/FOmega/KindSemantics.lean:26
Uses 2 · Used by 8
Evaluation of type operators
DefinitionSemantic evaluation of kinded type operators#✓fully proved
Interpret a kinded operator by ordinary function abstraction/application.
def eval (M : KindAlgebra α) : {Δ : List Kind} → KEnv α Δ →
{κ : Kind} → Ty Δ κ → Kind.Sem α κ
| _, ρ, _, .var x => ρ x
| _, ρ, _, .lam b => fun a => eval M (KEnv.extend ρ a) b
| _, ρ, _, .app f a => eval M ρ f (eval M ρ a)
| _, ρ, _, .arr a b => M.arr (eval M ρ a) (eval M ρ b)
| _, ρ, _, .all b => M.all (fun a => eval M (KEnv.extend ρ a) b)
structure KindAlgebra (α : Type u) where
arr : α → α → α
all : {κ : Kind} → (Kind.Sem α κ → α) → α
CSLibExt/Languages/LambdaCalculus/FOmega/KindSemantics.lean:41
inductive Kind where
| star : Kind
| arrow : Kind → Kind → Kind
deriving DecidableEq, Repr
CSLibExt/Languages/LambdaCalculus/FOmega/Syntax.lean:37
abbrev KEnv (α : Type u) (Δ : List Kind) :=
∀ {κ}, KVar Δ κ → Kind.Sem α κ
CSLibExt/Languages/LambdaCalculus/FOmega/KindSemantics.lean:31
inductive Ty : List Kind → Kind → Type where
| var {Δ : List Kind} {κ : Kind} : KVar Δ κ → Ty Δ κ
| lam {Δ : List Kind} {κ μ : Kind} :
Ty (κ :: Δ) μ → Ty Δ (.arrow κ μ)
| app {Δ : List Kind} {κ μ : Kind} :
Ty Δ (.arrow κ μ) → Ty Δ κ → Ty Δ μ
| arr {Δ : List Kind} : Ty Δ .star → Ty Δ .star → Ty Δ .star
| all {Δ : List Kind} {κ : Kind} : Ty (κ :: Δ) .star → Ty Δ .star
CSLibExt/Languages/LambdaCalculus/FOmega/Syntax.lean:61
def Kind.Sem (α : Type u) : Kind → Type u
| .star => α
| .arrow κ μ => Kind.Sem α κ → Kind.Sem α μ
CSLibExt/Languages/LambdaCalculus/FOmega/KindSemantics.lean:26
def KEnv.extend {α : Type u} {Δ : List Kind} {κ : Kind}
(ρ : KEnv α Δ) (a : Kind.Sem α κ) : KEnv α (κ :: Δ)
| _, .zero => a
| _, .succ x => ρ x
CSLibExt/Languages/LambdaCalculus/FOmega/KindSemantics.lean:35
Uses 7 · Used by 9
TheoremEvaluation depends only on the environment pointwise#✓fully proved
Interpretation depends only on the pointwise kinded environment.
theorem eval_congr (M : KindAlgebra α) {ρ τ : KEnv α Δ}
(h : ∀ {ν} (x : KVar Δ ν), ρ x = τ x) (t : Ty Δ κ) :
eval M ρ t = eval M τ t
structure KindAlgebra (α : Type u) where
arr : α → α → α
all : {κ : Kind} → (Kind.Sem α κ → α) → α
CSLibExt/Languages/LambdaCalculus/FOmega/KindSemantics.lean:41
abbrev KEnv (α : Type u) (Δ : List Kind) :=
∀ {κ}, KVar Δ κ → Kind.Sem α κ
CSLibExt/Languages/LambdaCalculus/FOmega/KindSemantics.lean:31
inductive KVar : List Kind → Kind → Type where
| zero {Δ : List Kind} {κ : Kind} : KVar (κ :: Δ) κ
| succ {Δ : List Kind} {κ μ : Kind} : KVar Δ κ → KVar (μ :: Δ) κ
CSLibExt/Languages/LambdaCalculus/FOmega/Syntax.lean:43
inductive Ty : List Kind → Kind → Type where
| var {Δ : List Kind} {κ : Kind} : KVar Δ κ → Ty Δ κ
| lam {Δ : List Kind} {κ μ : Kind} :
Ty (κ :: Δ) μ → Ty Δ (.arrow κ μ)
| app {Δ : List Kind} {κ μ : Kind} :
Ty Δ (.arrow κ μ) → Ty Δ κ → Ty Δ μ
| arr {Δ : List Kind} : Ty Δ .star → Ty Δ .star → Ty Δ .star
| all {Δ : List Kind} {κ : Kind} : Ty (κ :: Δ) .star → Ty Δ .star
CSLibExt/Languages/LambdaCalculus/FOmega/Syntax.lean:61
def eval (M : KindAlgebra α) : {Δ : List Kind} → KEnv α Δ →
{κ : Kind} → Ty Δ κ → Kind.Sem α κ
| _, ρ, _, .var x => ρ x
| _, ρ, _, .lam b => fun a => eval M (KEnv.extend ρ a) b
| _, ρ, _, .app f a => eval M ρ f (eval M ρ a)
| _, ρ, _, .arr a b => M.arr (eval M ρ a) (eval M ρ b)
| _, ρ, _, .all b => M.all (fun a => eval M (KEnv.extend ρ a) b)
CSLibExt/Languages/LambdaCalculus/FOmega/KindSemantics.lean:50
TheoremEvaluation of a renamed type operator#✓fully proved
Semantic renaming is precomposition of the kinded environment.
theorem eval_rename (M : KindAlgebra α) (η : KEnv α Ε)
(ρ : KRen Δ Ε) (t : Ty Δ κ) :
eval M η (rename ρ t) = eval M (fun {_} x => η (ρ x)) t
structure KindAlgebra (α : Type u) where
arr : α → α → α
all : {κ : Kind} → (Kind.Sem α κ → α) → α
CSLibExt/Languages/LambdaCalculus/FOmega/KindSemantics.lean:41
abbrev KEnv (α : Type u) (Δ : List Kind) :=
∀ {κ}, KVar Δ κ → Kind.Sem α κ
CSLibExt/Languages/LambdaCalculus/FOmega/KindSemantics.lean:31
abbrev KRen (Δ Ε : List Kind) := ∀ {κ}, KVar Δ κ → KVar Ε κ
CSLibExt/Languages/LambdaCalculus/FOmega/Syntax.lean:48
inductive Ty : List Kind → Kind → Type where
| var {Δ : List Kind} {κ : Kind} : KVar Δ κ → Ty Δ κ
| lam {Δ : List Kind} {κ μ : Kind} :
Ty (κ :: Δ) μ → Ty Δ (.arrow κ μ)
| app {Δ : List Kind} {κ μ : Kind} :
Ty Δ (.arrow κ μ) → Ty Δ κ → Ty Δ μ
| arr {Δ : List Kind} : Ty Δ .star → Ty Δ .star → Ty Δ .star
| all {Δ : List Kind} {κ : Kind} : Ty (κ :: Δ) .star → Ty Δ .star
CSLibExt/Languages/LambdaCalculus/FOmega/Syntax.lean:61
def eval (M : KindAlgebra α) : {Δ : List Kind} → KEnv α Δ →
{κ : Kind} → Ty Δ κ → Kind.Sem α κ
| _, ρ, _, .var x => ρ x
| _, ρ, _, .lam b => fun a => eval M (KEnv.extend ρ a) b
| _, ρ, _, .app f a => eval M ρ f (eval M ρ a)
| _, ρ, _, .arr a b => M.arr (eval M ρ a) (eval M ρ b)
| _, ρ, _, .all b => M.all (fun a => eval M (KEnv.extend ρ a) b)
CSLibExt/Languages/LambdaCalculus/FOmega/KindSemantics.lean:50
def rename {Δ Ε : List Kind} (ρ : KRen Δ Ε) :
{κ : Kind} → Ty Δ κ → Ty Ε κ
| _, .var x => .var (ρ x)
| _, .lam b => .lam (rename (KRen.lift ρ) b)
| _, .app f a => .app (rename ρ f) (rename ρ a)
| _, .arr a b => .arr (rename ρ a) (rename ρ b)
| _, .all b => .all (rename (KRen.lift ρ) b)
CSLibExt/Languages/LambdaCalculus/FOmega/Syntax.lean:73
Uses 12 · Used by 2
TheoremEvaluation of a substituted type operator#✓fully proved
Semantic simultaneous substitution at every kind, including higher kinds.
theorem eval_subst (M : KindAlgebra α) (η : KEnv α Ε)
(σ : Sub Δ Ε) (t : Ty Δ κ) :
eval M η (subst σ t) =
eval M (fun {_} x => eval M η (σ x)) t
structure KindAlgebra (α : Type u) where
arr : α → α → α
all : {κ : Kind} → (Kind.Sem α κ → α) → α
CSLibExt/Languages/LambdaCalculus/FOmega/KindSemantics.lean:41
abbrev KEnv (α : Type u) (Δ : List Kind) :=
∀ {κ}, KVar Δ κ → Kind.Sem α κ
CSLibExt/Languages/LambdaCalculus/FOmega/KindSemantics.lean:31
abbrev Sub (Δ Ε : List Kind) := ∀ {κ}, KVar Δ κ → Ty Ε κ
CSLibExt/Languages/LambdaCalculus/FOmega/Syntax.lean:82
inductive Ty : List Kind → Kind → Type where
| var {Δ : List Kind} {κ : Kind} : KVar Δ κ → Ty Δ κ
| lam {Δ : List Kind} {κ μ : Kind} :
Ty (κ :: Δ) μ → Ty Δ (.arrow κ μ)
| app {Δ : List Kind} {κ μ : Kind} :
Ty Δ (.arrow κ μ) → Ty Δ κ → Ty Δ μ
| arr {Δ : List Kind} : Ty Δ .star → Ty Δ .star → Ty Δ .star
| all {Δ : List Kind} {κ : Kind} : Ty (κ :: Δ) .star → Ty Δ .star
CSLibExt/Languages/LambdaCalculus/FOmega/Syntax.lean:61
def eval (M : KindAlgebra α) : {Δ : List Kind} → KEnv α Δ →
{κ : Kind} → Ty Δ κ → Kind.Sem α κ
| _, ρ, _, .var x => ρ x
| _, ρ, _, .lam b => fun a => eval M (KEnv.extend ρ a) b
| _, ρ, _, .app f a => eval M ρ f (eval M ρ a)
| _, ρ, _, .arr a b => M.arr (eval M ρ a) (eval M ρ b)
| _, ρ, _, .all b => M.all (fun a => eval M (KEnv.extend ρ a) b)
CSLibExt/Languages/LambdaCalculus/FOmega/KindSemantics.lean:50
def subst {Δ Ε : List Kind} (σ : Sub Δ Ε) :
{κ : Kind} → Ty Δ κ → Ty Ε κ
| _, .var x => σ x
| _, .lam b => .lam (subst (liftSub σ) b)
| _, .app f a => .app (subst σ f) (subst σ a)
| _, .arr a b => .arr (subst σ a) (subst σ b)
| _, .all b => .all (subst (liftSub σ) b)
CSLibExt/Languages/LambdaCalculus/FOmega/Syntax.lean:91
Uses 13 · Used by 2
TheoremEvaluation of an instantiated type operator#✓fully proved
Semantic instantiation is environment extension by the argument value.
theorem eval_instantiate (M : KindAlgebra α) (η : KEnv α Δ)
(b : Ty (μ :: Δ) κ) (a : Ty Δ μ) :
eval M η (instantiate b a) =
eval M (KEnv.extend η (eval M η a)) b
structure KindAlgebra (α : Type u) where
arr : α → α → α
all : {κ : Kind} → (Kind.Sem α κ → α) → α
CSLibExt/Languages/LambdaCalculus/FOmega/KindSemantics.lean:41
abbrev KEnv (α : Type u) (Δ : List Kind) :=
∀ {κ}, KVar Δ κ → Kind.Sem α κ
CSLibExt/Languages/LambdaCalculus/FOmega/KindSemantics.lean:31
inductive Ty : List Kind → Kind → Type where
| var {Δ : List Kind} {κ : Kind} : KVar Δ κ → Ty Δ κ
| lam {Δ : List Kind} {κ μ : Kind} :
Ty (κ :: Δ) μ → Ty Δ (.arrow κ μ)
| app {Δ : List Kind} {κ μ : Kind} :
Ty Δ (.arrow κ μ) → Ty Δ κ → Ty Δ μ
| arr {Δ : List Kind} : Ty Δ .star → Ty Δ .star → Ty Δ .star
| all {Δ : List Kind} {κ : Kind} : Ty (κ :: Δ) .star → Ty Δ .star
CSLibExt/Languages/LambdaCalculus/FOmega/Syntax.lean:61
def eval (M : KindAlgebra α) : {Δ : List Kind} → KEnv α Δ →
{κ : Kind} → Ty Δ κ → Kind.Sem α κ
| _, ρ, _, .var x => ρ x
| _, ρ, _, .lam b => fun a => eval M (KEnv.extend ρ a) b
| _, ρ, _, .app f a => eval M ρ f (eval M ρ a)
| _, ρ, _, .arr a b => M.arr (eval M ρ a) (eval M ρ b)
| _, ρ, _, .all b => M.all (fun a => eval M (KEnv.extend ρ a) b)
CSLibExt/Languages/LambdaCalculus/FOmega/KindSemantics.lean:50
def instantiate {Δ : List Kind} {κ μ : Kind}
(b : Ty (κ :: Δ) μ) (a : Ty Δ κ) : Ty Δ μ := subst (single a) b
CSLibExt/Languages/LambdaCalculus/FOmega/Syntax.lean:105
def KEnv.extend {α : Type u} {Δ : List Kind} {κ : Kind}
(ρ : KEnv α Δ) (a : Kind.Sem α κ) : KEnv α (κ :: Δ)
| _, .zero => a
| _, .succ x => ρ x
CSLibExt/Languages/LambdaCalculus/FOmega/KindSemantics.lean:35
Uses 13 · Used by 2
Loading dependency explorer…
The dependency explorer needs JavaScript and its graph data.