LEAN类型理论(LEAN Type Thoery),由 Mario Carneiro 于 2019年发表。其中描述了,LEAN类型理论的所定义的所有推演规则(Inference Rules)、表达式(Expressions),及从而推导出的该类型理论的属性(Properties)。具体内容请查看Mario Carneiro的论文 《The Type Theory of LEAN》。
后续将通过多篇文章,就分部份地介绍并注解其中主要推演规则(Inference Rules),以帮助读者更好地理解相关内容,不足之处,请指教批评。
这是第一篇,注解了 《The Type Theory of LEAN》 中的 2.1 Typing 部分。
一、表达式语法(Syntax of Expressions)
𝑙 ::= 𝑢 | 0 | S𝑙 | max(𝑙, 𝑙) | imax(𝑙, 𝑙)
e ::= x | Uₗ| e e | λx:e.e | ∀x:e.e
Γ ::= · | Γ, x:e
表达式语法,定义了推演规则中能使用哪些表达式,其种类有三,分别是
1. 𝑙(Level),用来指示类型宇宙(Type Universes)的层次。类型宇宙(Type Universes),简称宇宙(Unvierses),也可成为类型空间(Type Space)等。在LEAN编程语言中,类型宇宙(Universe)用 Sort u 来表示,其 u 的值可取任意一个的自然数,即这里的 𝑙(Level)。当 u = 0 时,即 Sort 0,是最底层的类型宇宙, 也称 Prop,命题类型宇宙。当 u = 1时, 即 Sort 1 ≡ Type 0 ≡ Type,也称零级类型。 另有,Sort u ≡ Type (u - 1), u ≥ 1。
a. 𝑢 (universe variable)
b. 0(zero leve)
c. S𝑙(next level of Level 𝑙, S for Successor as in definition of Nat)
d. max(𝑙, 𝑙) 和 imax(𝑙, 𝑙),定义在两个层次上的函数,输出另一个层次。
2. e(Expression),主体表达式。其它两种表达式, 𝑙(Level)和 Γ (Gamma),可认为是辅助表达式,为主体表达式服务的。
a. x (expression varaible, representing one expression of e)
b. Uₗ(Universe of Level 𝑙,𝑙 representing one expression of Level )
c. e e(Application)
d. λx:e.e(Abstraction)
e. ∀x:e.e(Dependent Function/Arrow Type)
3. Γ (Gamma),表示一系列的假设(a list of assumptions or hypotheses)也称为,假设列表。假设是指变量及其类型,x: α。
a. ·(Empty list of assumptions or hypotheses)
b. Γ, x:e(recursive definition of a list of assumptions or hypotheses in form of x: e)
二、赋型规则(Typing Rules)(Γ ⊢ e : α)
It's to define what type the expression is of.
其中,定义了所用于给表达式 赋予 类型 的推演规则,即赋型规则(Typing Rules)。意思是,基于 Γ 的假设下,表达式 e 的类型为 α。
1. Weakening 赋型规则
前提(Premises):
a. 在 Γ 的假设下,α 是 类型宇宙 Uₗ 中的一个类型。
b. 在 Γ 的假设下,表达式 e 的类型是 β 。
结论(Conclusion):
在 Γ 的假设,及 类型为α 的 变量 x,下,表达式 e 的类型是 β。
注释:
在已经充分的条件下,再增加额外的假设,并不会影响对应的结论。
2. Identity
前提(Premises):
a. 在 Γ 的假设下,α 是 类型宇宙 Uₗ 中的一个类型。
结果(Conclusion):
在 Γ 的假设,及 类型为α 的 变量 x,下,表达式 x 的类型是 α。
3. 类型宇宙的类型(Typing the Universe)
前提(Premises):无,即该规则为公理(Axiom)
结果(Conclusion):
类型宇宙 Uₗ 的类型是其下一层类型宇宙,Uₛₗ 。
4. Application (函数应用)
注释:
a. 类型表达式 β 依赖于类型为α 的 变量 x。
b. 将 e₁ 中的变量x,替换成 e₂,最终结果的类型为 β[e₂/x],即替换类型表达式 β 中的变量x同时替换成 e₂ 。
5. Abstaction(抽象化)
前提(Premises):
a. 在 Γ 的假设,及 类型为α 的 变量 x,下,表达式 e 的类型是 β。
结论(Conclusion):
在 Γ 的假设,表达式 λx:α.e 的类型为 ∀x:α.β。
注释:
a. 类型表达式 β 依赖于类型为α 的 变量 x。
b. 该规则定义了,类型为 ∀x:α.β的元素是依赖函数。
6. 类型宇宙
前提(Premises):
a. 在 Γ 的假设下,α 是 类型宇宙 Uₗ₁中的一个类型。
b. 在 Γ 的假设,及 类型为α 的 变量 x,下,β是 类型宇宙 Uₗ₂中的一个类型。
结论(Conclusion):
在 Γ 的假设,∀x:α.β的类型为 imax(Uₗ₁, Uₗ₂)。
注释:
该规则定义了类型所存在的类型宇宙。
7. 定义上相等的类型
前提(Premises):
a. 在 Γ 的假设下,表达式 e 的类型是 α。
b. 在 Γ 的假设,类型表达式 α 与类型表达式β是 定义上相等。
结论(Conclusion):
在 Γ 的假设,表达式 e 的类型是 β。
注释:
该规则定义了,两个定义上相等的类型可以进行替换。
三、类型定义规则(Type Rules)(Γ ⊢ α type)
It's to define what type can be used for typing expressions.
前提(Premises):
a. 在 Γ 的假设下,α 是 类型宇宙 Uₗ 中的一个类型。
结论(Conclusion):
在 Γ 的假设,α 是一个类型。
注释:
该规则定义了,可以给表达式赋型的类型。
四、可用的假设(Assumptions)(⊢ Γ ok)
It's to define what is a ok/good list of assumptions/hypotheses.
1. 空假设
注释:
假设列表可以为空,用 · 表示。
2. 假设串联(Assumption Concatenation)
前提(Premises):
a. 在 Γ 的假设下,α 是一个类型。
结论(Conclusion):
假设列表可以是 假设列表Γ 与 类型为α 的变量x 的串联。
注释:
该规则定义了,如何给假设列表增加更多的假设,即类型为α 的变量x(x:α)。
口