h5i
本中文版由作者借助 AI 翻译而成。作者并非中文母语者,译文未经人工逐句校对,可能存在错误。如发现问题,请在 GitHub 上提交 issue。

第 14 章

系统的性质

前文已经指出,内核的算法会终止,也不会接受 False 的证明。这两点都依赖类型系统的定理,而证明这些定理远比内核自身的计算困难。本章将说明每条定理的作用,并概述如何由它们推出一致性;完整证明见附录 D。

核心系统

下面的定理针对的是核心系统:图 3.1 的规则,加上第 13 章的宇宙,不含第二部分的常量。按 Barendregt 的说法,这是一个纯类型系统(Pure Type System):构造演算(Calculus of Constructions)[Coquand 1988],在其非谓词的 Sort 0\Sort{0} 之上加一层谓词宇宙的层级,接近 Luo 的扩展构造演算(Extended Calculus of Constructions)[Luo 1990]。前三条性质对每个函数式纯类型系统都成立 [Barendregt 1992],而在存在非谓词性的情况下,强规范化要困难得多,需要 Girard 的可归约性候选(reducibility candidates)方法 [Girard 1972; Coquand 1988; Luo 1990]。本章末尾说明加入归纳类型后会有什么变化。

四条性质

定理 14.1(类型唯一性). 若 Γ⊢t:A\Gamma \vdash t : A 且 Γ⊢t:B\Gamma \vdash t : B,则 A≡BA \conv B。

一个项在转换意义下只有一个类型。Infer\Infer 依赖这一点:它要计算的答案只有一个,Check\Check 可以放心地与之比较,不必担心另一棵推导会给出某个不可转换的不同类型。

定理 14.2(类型正确性). 若 Γ⊢t:A\Gamma \vdash t : A,则或者对某个 uu 有 A=Sort uA = \Sort{u},或者对某个 uu 有 Γ⊢A:Sort u\Gamma \vdash A : \Sort{u}。

良类型项的类型本身也是一个类型(或者是一个宇宙;宇宙按 T-Sort 也有类型,只是不必写成那种形式)。因此 Infer\Infer 的结果总能再交给 InferSort\InferSort,算法构造的上下文也始终保持良构。

定理 14.3(类型保持性). 若 Γ⊢t:A\Gamma \vdash t : A 且 t→βt′t \betared t',则 Γ⊢t′:A\Gamma \vdash t' : A。

计算保持类型,正是它为 T-Conv 以及“通过规范化判定相等”这一整套策略提供了依据:归约一个项永远不会使它离开自己的类型,所以比较范式,比较的正是该比较的东西。

定理 14.4(强规范化). 若 Γ⊢t:A\Gamma \vdash t : A,则从 tt 出发的每一个 β 归约序列都是有限的。

每个良类型项都能到达范式,无论按什么顺序归约。这是最深刻的一条:Whnf\Whnf、Normalize\Normalize,从而 IsDefEq\IsDefEq 和 Infer\Infer,在良类型输入上终止都是因为它;下一节还会说明,一致性同样建立在它之上。

四条性质按一种确定的模式支撑着两项保证,如下图所示:箭头读作“为……所需”。

图 14.1. 元理论各部分如何衔接。

类型唯一性 (14.1) 类型正确性 (14.2) 主体归约 (14.3) 强规范化 (14.4) Infer 与 Check良定义(第 5 章) 范式分析(附录 D) 可判定性 一致性 (14.5)

这些性质合起来,给出了我们对一个内核所要求的两项保证。

  • 可判定性. 算法 5.1 在每个输入上都终止,所以一个证明是否正确总能被判定。
  • 一致性. 没有封闭项能证明 False。

一致性

定理 14.5(一致性). 不存在封闭项 tt 使得 ⋅⊢t:Π(P:Sort 0). P\cdot \vdash t : \tPi{P}{\Sort{0}}{P}。

论证分两半,不看细节也能看出它的轮廓。

归结到范式. 由强规范化,这样的项 tt 会有范式 nn;由类型保持性,nn 的类型不变。因此只需证明:没有任何处于范式的封闭项具有类型 Π(P:Sort 0). P\tPi{P}{\Sort{0}}{P}。全部困难都在这一步,因为它用到了定理 14.4。

分析范式. 范式项要么是宇宙、Π\Pi、λ\lambda,要么是一个变量作用于若干参数(称为中性项,neutral term)。类型为 Π\Pi 的封闭范式项必定是 λ\lambda:它不可能是中性项,因为作用域内没有任何变量;而宇宙和 Π\Pi 类型的类型是宇宙,不是 Π\Pi。于是 n=λ(P:Sort 0). sn = \tLam{P}{\Sort{0}}{s},其中 P:Sort 0⊢s:PP : \Sort{0} \vdash s : P 且 ss 是范式。现在问 ss 能是什么:宇宙、Π\Pi 或 λ\lambda 的类型会是宇宙或 Π\Pi,而不是变量 PP。中性项必须以作用域内的某个变量开头,而作用域内只有 PP 本身,其类型是 Sort 0\Sort{0}:这个类型不是 PP,所以 ss 不能是 PP;它也不是函数类型,所以 PP 不能作用于任何东西。每种情形都不可能。

附录 D 严格地完成这一论证,包括上述情形分析默默用到的关于类型和转换的标准事实(生成引理、合流性、替换)。

加入归纳类型之后

第二部分的 ι 规则彼此不重叠,也不与 β 重叠,所以归约仍然合流。类型保持性、强规范化和一致性对归纳构造演算(Calculus of Inductive Constructions)都是已知结果 [Werner 1994],而我们带归纳类型的系统只是它的一个小片段。上面的简短一致性论证本身已不再够用,因为范式现在还包括卡住的递归子应用,例如 nn 为变量时的 Nat.rec0  M  z  s  n\NatRec{0}\;M\;z\;s\;n;一致性仍由强规范化导出,但需要对范式做更细致的分析,其中中性项也可以以常量为头部。

第 8 章的每一条接受条件都对应这一分析可能失败的一种方式:没有正性,ι 归约可能循环,强规范化就丢失了;没有宇宙条件,一个类型可以包含自己所在的宇宙,第 13 章的悖论就会卷土重来;没有对命题的消去限制,证明无关性(Lean 假定它成立)就会被推翻。

Lean 的完整理论带有定义性证明无关性、宇宙多态、商类型以及一般的嵌套归纳类型和互归纳类型,其元理论更为微妙;Carneiro 的论文 [Carneiro 2019] 是这方面的参考文献。但核心结构是一样的:强规范化加上范式分析。

练习

按第 13 章的说法,带有 Type:Type\mathsf{Type} : \mathsf{Type} 的内核会失去四条性质中的哪几条?

解答

强规范化(Hurkens 的项没有范式)和一致性(它的类型是 Π(P:Type). P\tPi{P}{\mathsf{Type}}{P})。类型唯一性和类型保持性仍然成立;它们是规则形状的性质,与宇宙结构无关。

一致性论证说,类型为 Π\Pi 的封闭范式项必定是 λ\lambda。加入常量后这一点为何不再成立?取而代之的是什么?

解答

像 succ\suc 或 Nat.rec0\NatRec{0} 这样的常量是封闭的,而且可以作为范式项的头部,所以类型为 Π\Pi 的封闭范式项可以是 succ\suc 本身,也可以是卡住的递归子应用。分析因此还要考虑以常量为头部的中性项,并利用模式赋予构造子和递归子的具体类型,证明它们都不能具有类型 Π(P:Sort 0). P\tPi{P}{\Sort{0}}{P}。Werner 的论文对归纳构造演算完成了这项工作。

要点回顾

  • 类型唯一性和类型正确性使 Infer\Infer 良定义;类型保持性为通过规范化判定相等提供依据;强规范化使一切终止。
  • 一致性由强规范化加上对范式的情形分析得出:作用域内没有任何东西能证明任意的 PP。
  • 只要接受条件成立,归纳类型保持全部四条性质;每条条件各自阻止一种特定的失败。
  • 内核假定这些定理,而不证明它们;它的职责是忠实、清晰地实现这些定理所描述的系统。