有类型 λ 演算 à la Church 学习笔记-5(λ立方体的强正规性)

目录:类型论驿站写作计划

前一篇:有类型 λ 演算 à la Church 学习笔记-4(纯类型系统的特性)

后一篇:有类型 λ 演算 à la Church 学习笔记-6(逻辑的表示)


对于一个伪项 M ,如果不存在从 M 开始的无限归约,那么我们称 M 是强正规(strongly normalizing)的,记为 \text{SN}(M)


定义1

\lambda \text{S} 是一个PTS,如果 \lambda \text{S} 中所有的合法项都是强正规的,即 \Gamma \vdash A:B \Rightarrow \text{SN}(A)\ \&\ \text{SN}(B) ,那么我们称 \lambda\text{S} 系统是强正规的,记为 \lambda \text{S}\vDash \text{SN} .


如欲证明整个 \lambda 立方体都是强正规的,只需证明 \lambda \text{C} 是强正规的就可以了。而 \lambda \text{C} 的证明可以分为两步:

(1) \lambda\omega \vDash \text{SN}\Rightarrow \lambda \text{C}\vDash \text{SN} ,

(2) \lambda\omega \vDash \text{SN}

PTS的强正规性证明比较繁琐,这份笔记忽略了绝大部分证明过程。因为有很多重要的定义,有助于理解函数式程序语言,所以我把定义和不带证明过程的定理抄录在这里。


\lambda\omega \vDash \text{SN}\Rightarrow \lambda \text{C}\vDash \text{SN} 的证明(2-14)


定义2

  1. \mathcal{T}_i = \{ M\in\mathcal{T} \mid \sharp(M) = i\}, \mathcal{T}_{i,j}=\mathcal{T}_i \cup \mathcal{T}_j, \mathcal{T}_{i,j,k}=\mathcal{T}_i \cup \mathcal{T}_j \cup \mathcal{T_k}, \dots
  2. A\in \mathcal{T} ,在 \lambda \text{C} 中,我们使用下列术语:
  • A 是一个种类(kind) \Leftrightarrow \exists \Gamma [\Gamma \vdash A:\square] \Leftrightarrow \sharp(A) =2
  • A 是一个构子(constructor) \Leftrightarrow \exists \Gamma, B [\Gamma \vdash A:B:\square] ,此时 \Leftrightarrow \sharp(A) =1
  • A 是一个类型(type) \Leftrightarrow \exists \Gamma [\Gamma \vdash A:*] ,此时 \Leftrightarrow \sharp(A) =1
  • A 是一个对象(object) \Leftrightarrow \exists \Gamma, B [\Gamma \vdash A:B:*] \Leftrightarrow \sharp(A) =0
  • A\equiv \square\Leftrightarrow \sharp(A) =3


定义3

映射 \rho:\mathcal{T}_{2,3}\to\mathcal{T} 定义如下:

  • \rho(\square) = *
  • \rho(*)=*
  • \rho(\Pi x:A.B) = \rho(A)\to\rho(B), 如果 \sharp(A)=2
  • \rho(\Pi x:A.B) = \rho(B), 如果 \sharp(A)\neq2
  • \rho(\lambda x:A.B) = \rho(B)
  • \rho(B A) =\rho(B)

如果 \sharp(A)\in\{2,3\} ,那么 \rho(A) 是有定义的,且 FV(\rho(A))=\varnothing .


引理4

  1. \Gamma \vdash_{\lambda\text{C}} A:\square \Rightarrow \vdash_{\lambda\omega} \rho(A):\square.
  2. A\in\mathcal{T}_{2,3} 且\sharp(a) = \sharp(x),那么\rho(A[x:=a])\equiv \rho(A).
  3. A\in\mathcal{T}_{2,3} 为合法,且 A\twoheadrightarrow_\beta B ,那么 \rho(A)\equiv \rho(B) .
  4. \Gamma \vdash_{\lambda C} A_i:\square, i=1,2. 那么 A_1 =_\beta A_2 \Rightarrow \rho(A_1)\equiv \rho(A_2) .

证明:

  1. A:\square 的生成使用归纳。情况一: \Gamma \vdash_{\lambda C} A:\square\Gamma', x:C\vdash_{\lambda C} A: \square ,来自于 \Gamma' \vdash_{\lambda C} A:\square\Gamma'\vdash_{\lambda C} C:s ,使用归纳假设可知 \vdash_{\lambda\omega} \rho(A):\square. 情况二: \Gamma \vdash_{\lambda C} A:\square\Gamma \vdash_{\lambda C} (A_1A_2):B[x:=A_2] ,来自于 \Gamma \vdash_{\lambda C} A_1 :(\Pi x:C.B); \Gamma \vdash_{\lambda C} A_2 :C. 要么 B\equiv \square ,根据上一次笔记中使用的引理19,可知这是不可能的。要么 B\equiv x, A_2 \equiv \square ,这会导致 \square : C ,也不可能。
  2. A 的结构做归纳。
  3. \twoheadrightarrow 关系做归纳。
  4. 从3可证。


接下来我们开始定义映射 \tau ,这需要借助一个特殊的类型为 * 的变量 0 . 我们还需要定义类型的典型常量(canonical constants)。因此我们还需要设定一个语境 \Gamma_0 ,从中可以推出所有类型都有栖居者(inhabitant)。


定义5

  1. \Gamma_0 是含有下列两个判断的 \lambda\omega 语境: 0:*,c:\bot ;其中 \bot \equiv \Pi x:*.x
  2. \Gamma\vdash_{\lambda\omega} B : * ,那么我们定义 c^BcB
  3. \Gamma\vdash_{\lambda\omega} B : \square ,那么我们归纳地定义 c^B 如下:
  • c^* \equiv 0
  • c^{B_1\to B_2} \equiv \lambda x:B_1.c^{B_2}


引理6

\Gamma\vdash_{\lambda\omega} B : s 那么 \Gamma_0,\Gamma\vdash_{\lambda\omega} c^B:B.

证明略。


定义7

  1. 映射 \tau:\mathcal{T}_{1,2,3}\to\mathcal{T} 定义如下:
  • \tau(\square) = 0
  • \tau(*) = 0
  • \tau(^\square x) =\ ^\square x
  • \sharp(A)=2, \tau(\Pi x:A.B) = \Pi x:\rho(A).\tau(A)\to\tau(B).
  • \sharp(A)=1, \tau(\Pi x:A.B) = \Pi x:\tau(A).\tau(B).
  • \sharp(A)=0, \tau(\Pi x:A.B) = \tau(B).
  • \sharp(A)=2, \tau(\lambda x:A.B) = \lambda x:\rho(A).\tau(B).
  • \sharp(A)\not=2, \tau(\lambda x:A.B) = \tau(B).
  • \sharp(A)=0, \tau(BA) = \tau(B).
  • \sharp(A)\neq 0, \tau(BA) = \tau(B)\tau(A).

2. 将映射扩展到伪语境上:

  • \tau(^*x:A) =\ ^* x:\tau(A)
  • \tau(^\square x:A) =\ ^\square x:\rho(A),\ ^*x:\tau(A)
  • \Gamma\equiv x_1:A_1,\dots,x_n:A_n 为伪语境,那么 \tau(\Gamma) = \Gamma_0, \tau(x_1:A_1),\dots(x_n:A_n)

通过对 A 的结构进行归纳,可知如果 A\in\mathcal{T}_{1,2,3} ,那么 \tau(A) 是存在定义的,且 ^*x\not\in FV(\tau(A))


引理8

  1. B\in\mathcal{T}_{1,2,3} ,且 \sharp(a)=\sharp(x) ,那么如果 x \equiv\ ^\square x ,则有 \tau(B[x:=a])=\tau(B)[x:=\tau(a)] ,如果 x \equiv\ ^* x ,则有 \tau(B[x:=a])=\tau(B)
  2. 如果 A\in\mathcal{T}_{1,2,3} 是合法的,且 A\twoheadrightarrow B ,那么 \tau(A)\twoheadrightarrow \tau(B) .

证明略。


引理9

\Gamma \vdash _{\lambda C} B:\squareB\equiv \square ,则有 \Gamma \vdash_{\lambda C} A:B \Rightarrow \tau (\Gamma)\vdash_{\lambda \omega} \tau(A):\rho(B).

证明略。


下面我们开始定义第三个伪项上的部分映射。


定义10

映射 [[-]]:\mathcal{T}_{0,1,2}\to\mathcal{T} 定义如下:

  • [[*]]=c^0
  • [[^*x]] =\ ^*x
  • [[^\square x]] =\ ^*x
  • 如果 \sharp(A) =2, [[\Pi x:A.B]]=c^{0\to 0 \to 0}[[A]]([[B]][^\square x:=c^{\rho(A)}][^*x:=c^{\tau(A)}])
  • 如果 \sharp(A) \not=2, [[\Pi x:A.B]]=c^{0\to 0 \to 0}[[A]]([[B]][^*x:=c^{\tau(A)}])
  • 如果 \sharp(A) =2, [[\lambda x:A.B]]=(\lambda z:0.\lambda^\square x:\rho(A).\lambda^*x:\tau(A).[[B]])[[A]]
  • 如果 \sharp(A) \neq 2, [[\lambda x:A.B]]=(\lambda z:0.\lambda^*x:\tau(A).[[B]])[[A]]
  • 如果 \sharp(A) =2, [[BA]] = [[B]]\tau(A)[[A]]
  • 如果 \sharp(A) \not =2, [[BA]] = [[B]][[A]]


命题11

\Gamma \vdash_{\lambda C}A:B \Rightarrow \tau(\Gamma) \vdash_{\lambda\omega} [[A]]:\tau(B).\\


引理12

A,B\in T ,那么

  1. x\equiv\ ^*x \Rightarrow [[A[^*x:=B]]] \equiv [[A]][^*x:=[[B]]]
  2. x\equiv\ ^\square x \Rightarrow [[A[^\square x:=B]]] \equiv [[A]][^\square x:=\tau(B),^*x:=[[B]]]


引理13

A,B\in\mathcal{T}_{0,1,2} ,那么

A\to B \Rightarrow [[A]]\twoheadrightarrow_{\not=0}[[B]] \\

其中 \not=0 表示归约的步数不为0。


定理14

\lambda\omega \vDash \text{SN}\Rightarrow \lambda \text{C}\vDash \text{SN}


推论15

在直觉主义算数系统海廷算数(HA)中,我们可以证明:

\lambda\omega \vDash \text{SN}\Leftrightarrow \lambda \text{C}\vDash \text{SN}\\


\lambda\omega \vDash \text{SN} 的证明步骤


  1. 定义映射 \mid -\mid:\mathcal{T}_0\to \Lambda ,使得 \Gamma\vdash_{\lambda\omega} A:B :*\Rightarrow \text{SN}(|A|) .
  2. 证明 \Gamma\vdash_{\lambda\to} A:B :*\Rightarrow \text{SN}(A) .
  3. 证明 \Gamma\vdash_{\lambda\omega} A:B :\square \Rightarrow \text{SN}(A) .
  4. 证明 \Gamma\vdash_{\lambda\omega} A:B :*\Rightarrow \text{SN}(A) .
  5. 证明 \Gamma\vdash_{\lambda\omega} A:B\Rightarrow \text{SN}(A)\ \&\ \text{SN}(B) .


具体细节详见 Barendregt 的原书。


目录:类型论驿站写作计划

前一篇:有类型 λ 演算 à la Church 学习笔记-4(纯类型系统的特性)

后一篇:有类型 λ 演算 à la Church 学习笔记-6(逻辑的表示)

编辑于 2018-03-30 16:35