归纳类型(Inductive Type)是下图的类型等式(Type Equation)的解,那从下述等式出来,看看LEAN是如何定义归纳类型的。
一、归纳规格 K(Inductive Specification K)
K 在《归纳类型(Inductive Type)浅析》中,指的是类型函数的函数体。这里,根据LEAN的定义,K 是归纳规格的类型(The type of inductive specification),是和类型(Sum Type),即代表了一些列的构建函数(a list of constructors),其中 (c : e)表示一个构建函数(constructor),其名字为 c,类型为 e。
因此,有 K ≡ ∑ᵢ(cᵢ:αᵢ),其中 K 可以为 0,即该归纳类型没有构建函数(no constructor)。也就是,无构建函数的归纳类型,因不能构建其正规元素,即空集。
二、望远镜表示法(Telescope Notation,x :: α)
1. x :: α ≡ x₁:α₁, x₂:α₂, ..., xₙ:αₙ
2. Γ,x::α ⊢ e : β ≡ Γ, x₁:α₁, x₂:α₂, ..., xₙ:αₙ ⊢ e : β
3. Γ ⊢ x::α ≡ Γ ⊢ x₁:α₁ and Γ,x₁:α₁ ⊢ x₂:α₂ and ... Γ, x₁:α₁, x₂:α₂, ..., xₙ₋₁:αₙ₋₁ ⊢ xₙ:αₙ
4. λx::α.β ≡ λx₁:α₁.λx₂:α₂....λxₙ:αₙ.β
5. e::α, f:∀x::α.β ⊢ f e : β[e/x] ≡ f e₁ ... eₙ
三、归纳规格K的定义(Γ,t : F ⊢ K spec)
基于上述的望远镜表示,定义了 K 作为一个归纳类型的合适的归纳规格。也就是说明,K是如何组织其归纳类型的构建函数。
四、构建函数的定义(Γ,t : F ⊢ α ctor)
1. 无参构建函数(Constructor without argmuent),如 zero: Nat。
2. 有无递归参数的构建函数(Constructor with non-recursive arguments)
3. 有递归参参数的构建函数(Constructor with recursive arguments)
其中,类型变量 t 指向的是,正在定义的归纳类型。
五、归纳函数的定义
1. 语法表达结构,分别是,归纳类型定义(Definition),构建函数(Introduction),归纳类型的正规元素的使用函数(Elimination)。
2. 归纳类型赋型规则(Typing Rule),也叫类型构造规则(Type Formation Rule)。
3. 归纳类型的构建函数赋型规则(Typing Rule for constructors),同时也是该归纳类型的正规元素定义规则(Introduction Rule),因构建函数就是用来构建其正规元素(canonical element)的。
由于归纳类型的使用规则(Elimination Rule)比较复杂,通过下一篇文章进行阐述。
口