用户: Trebor/综合 Tait 可计算性

注 0.1. 本篇已经废弃. 读者可以在找到文章的内容. 它经过了重新组织, 并且有更充足的上下文.

注 0.2. 这篇是英文, 但是写的更好懂一点.

1简单类型 算术

假定读者已经大致了解简单类型 算术是什么. 我们规定有一个基本类型 , 含有两个元素 .1 我们也要求函数和乘积类型. 典范性说的是任何一个表达式 都等于 其中之一 (并且这两种可能是互斥的). 这里的等价关系即 -等价. 而可正规性指的是任何一个表达式 都有一个 -等价的表达式是正规的. 我们互相递归地定义正规表达式和中性表达式:

定义 1.1. 正规表达式要么是类型为 的中性表达式, 要么是 之一, 要么形如 , 其中 是正规表达式.

中性表达式要么是变量, 要么形如 , 其中 是中性表达式, 是正规表达式.

一些读者可能之前接触的正规表达式的定义和这里不同, 是先定义 -规约, 再定义正规表达式为 “不可以再进行规约的表达式”. 我引用 Jonathan Sterling 在他的博士论文中的论述:

正规化对不同的人来说含义不同; 其中常见的一种观点是, 可正规性是某种重写系统的性质, 此时它通常有强/弱两个版本. 重写系统的强可正规性说的是一切可能的规约策略最终都必然会停止. 当然, 在这种解读下, 可正规性就不再是类型论的性质, 而是类型论的其中一种呈现方式的性质. [...]

不幸的是, 当代的类型论难以使用重写系统的技术; 一部分原因是重写系统目前看来非常不适合处理外延性和唯一性. 为此, 越来越多的类型论学者开始使用无重写的方式研究可正规性, 如求值正规化 (normalization by evaluation) 等.

无论是证明典范性还是可正规性都需要不少功夫, 因为简单地直接归纳是行不通的. 我们需要先通过归纳法证明一个更强的命题.2 有很多这样的方案, 大致思路是在每个类型 上定义一个谓词 , 并归纳证明其性质. (因为集合 上的谓词 等价于它的子集 , 所以这两者可以交换使用.) 如这比较不直观, 而且很难想到. 利用范畴语言, 可以给出更加系统的表述, 其中这些略微复杂的构造其实都是自然而唯一的.

为此, 我们首先需要将简单类型 算术的语法做成范畴语言. 我们令所有的上下文 为范畴 中的对象, 而 的态射就是在 上下文中的一列表达式, 其中第 个表达式的类型恰好是 中的第 个类型. 换言之, 这一列表达式给出了从 的替换 (substitution). 并且我们认为 -相等的项给出相同的替换.

实际上由于简单类型 算术自身的性质, 我们可以等价地让对象为所有的类型, 而态射为这些类型间的函数. 因为可以表述为但是用上下文的方法更具普适性. 此后为了行文简洁, 我们会混淆这两个方法.

我们实际上有非常好的方式刻画这个范畴.

定理 1.2. 是由图表 生成的自由 Descartes 闭范畴.

“自由生成” 在这里的含义或许需要阐明. 我们定义这样一种数学结构, 其中包含一个 Descartes 闭范畴以及选定一个对象 和两个态射 . 这些数学结构之间可以定义一些同态, 即保持选定的对象和态射的 Descartes 闭函子. 那么这就构成了一个范畴 (其实是 2-范畴), 姑且称作 . 那么其中的始对象就是我们所说的被自由生成的范畴.

证明. 把这个定理展开, 就可以发现它整齐地打包了很多预备的引理. 在这里我们只提到重要的引理, 其余部分都是直接展开定义即可.

首先我们需要证明 构成范畴, 需要验证结合律. 这就是替换引理. (很不幸的是这个词可以指代两个不同的引理.) 这可以通过对表达式的结构做归纳得到.

其次我们需要证明 Descartes 闭. 这实际上就是简单类型 算术的语法决定的, 而其中那些自然同构的等式则是由 规则保证.

接下来需要证明任意给定一个这样的范畴 , 都能找到保持选定的对象和态射的 Descartes 闭函子 . 这之中需要证明的是替换与 规约是可交换的. 而这函子 (在唯一的自然同构意义下) 的唯一性来源于其所有类型都是用 三者生成的.

2范畴模型

在研究逻辑学的时候, 经常可以通过构造模型来研究形式理论. 这实际上在通常的数学中就很常见, 如一个具体的群就是群的公理所构成的形式理论的一个模型; 或者 Cauchy 实数就是实数公理的一个模型.3

不同的理论的 “模型” 定义也不同. 基于一阶逻辑的公理理论的模型比较熟知, 但是研究其他理论时 (如类型论) 就不能用了. 为此产生了许多不同的模型定义. 在范畴论中, 可以将这些定义全部统一. 一个范畴模型就是从语法范畴出发的保持语法结构的函子. 在我们这里, 简单类型 理论的模型就是从 出发的保持 的 Descartes 闭函子.

如果你回顾上文, 就会发现我们刚刚已经证明的定理 1.2 可以表述成 “ 是简单类型 算术的范畴模型构成的 2-范畴中的始对象”. 特别地, 语法范畴本身也是模型之一.

我们现在就可以迅速证明 . 考虑所有集合的范畴 , 它是 Descartes 闭的. 我们再选择 的两个态射即可. 如果 , 那么说明定理 1.2 产生的函子 满足 , 进一步得到 的两个元素相等, 矛盾. 但是注意这个模型仍然无法证明典范性, 因为 仍然有可能把不相等的表达式 映射到相等的函数.

题外话: 与语法

有些读者或许会疑惑: 既然 不像 那样有消去子, 那么为什么可以说 呢? 这个涉及到语言和元语言之间的混淆.

在一般的依值类型论中, 可以在语言内部证明 . 但是无法证明 . 因为有一些模型中的确有 . 但是在语法范畴中这两者是不相等的, 也就是说不存在一系列 -规约连接这两者. 这其实类似于研究环的时候, 不一定是不相等的, 但是从环的公理出发是肯定无法证明这两者相等的. 换句话说, 自由环 . 因此, 我们研究的典范性, 实际上是在始对象 (自由对象) 中涌现的性质. 由于在语言内部能够证明的事物, 肯定在一切模型中都成立, 因此典范性必然是元语言的性质.

3典范性

为了研究典范性, 我们需要先找出类型论中的闭元素, 即不包含自由变量的表达式. 这很容易, 我们只需要要求上下文为空即可. 因此我们考虑 . 这是一个 的函子.

如上文所述, 我们一般的思路是为每一个类型赋予一个谓词. 在范畴论中, 我们经常使用一个 的态射作为 上的 “谓词”. 大致来说, 我们认为如果 非空, 那么这个谓词就取值为真, 否则为假. (当然这个大致说法只在集合范畴里成立, 其他范畴中只能起启发作用.)4 因此, 我们考虑这样一个范畴 , 它的对象是形如 的态射, (准确地说, 是一个三元组 .) 其中 中的对象, 是集合. 这个范畴里的态射是这样的交换图:其中 的一个替代, 是某个函数.

如果读者熟悉范畴论, 就应该知道这是逗号范畴的特例:它也可以看成是下面这个拉回:

注意这时候我们自动有了一个函子 , 它把 中的对象 映射到 .

我们希望能够取 为一个模型. 回顾模型的定义, 我们的第一步当然是要证明:

引理 3.1. 是 Descartes 闭范畴, 并且 是 Descartes 闭函子.

这个证明实际上对应的就是通常的证明中在类型上递归定义谓词. 但是注意这个命题本身已经完全限制了构造的可能性, 因此无需任何创意, 仅仅是机械地展开定义即可. 留给读者作为练习.

接下来, 我们只需要在 中选择一个对象 和两个态射 . 选择了之后, 根据定理 1.2 我们立刻得知有唯一的保持这个对象和态射的函子 . 如果 也保持这个对象和态射的话, 那么这两个函子都在 中. 根据始对象的性质, 必然等于恒等函子 . 知道了这个, 我们自然要选择合适的对象. 这也不难, 如图构造即可:注意整个交换图都在 中.

现在 等于恒等函子. 我们需要证明的是任何一个表达式 都一定恰好是 其中之一. 因此我们考虑 , 根据 中态射的定义, 这对应一个交换图:其中左侧是 , 因为 是 Descartes 闭函子, 因此在同构意义下保持始对象. 右侧则是因为 按照定义需要保持范畴中选定的 对象. 那么虚线表示的映射就选出了 的其中一个. 无论是哪种, 必然保持这个映射. 又因为 , 我们可以得出结论, 必然是 其中之一.5

4可正规性

从可正规性开始就略微复杂了, 因为可正规性要求考虑所有的表达式, 包括那些有自由变量的表达式 . 然而我们之前使用了 作为构造逗号范畴的函子, 只考虑了空上下文 的情况. 但是如果不使用 , 我们也不能使用某个固定的上下文, 因为在 -抽象中, 上下文是会改变的, 因此就走不通了. 我们需要同时考虑所有的上下文. 换句话说, 我们需要考虑上下文构成的范畴 .

与此同时, 注意到一般的替代并不明显保持可正规性, 如果已知 是可正规的, 的可正规性似乎和 没有任何关系. 但是如果我们限制这些替代只能替代变量的话, 问题就解决了: 如果 可正规, 那么 显然也是可正规的. 这对多变量的替代也成立. 这种特殊的替代称为重命名. 因此, 我们应该考虑 中由重命名作为态射的子范畴 .6

是含入函子. 我们需要考虑所有的可能有自由变量的式子, 因此应该考虑注意 是范畴 的对象, 其中 . 这个范畴称为 上的预层范畴,7 它和集合范畴 有许多相似的性质, 这在后面会讲到.

仿照之前的做法, 我们应该在每个 上找一些谓词, 也就是形如 的态射. 注意这里 也是 的对象. 因此同理我们构造范畴 . 注意到如果把 改成范畴 , 那么就退化到上一节中的 .

但是我们仍然需要证明 是 Descartes 闭的. 我们在下一节会讲述大幅简化论证的方法. 这里为了完整性继续用朴素的方法构造.

5合成语言

6Tait 瑜伽

脚注

1.

或许有读者会说:“为什么不叫 类型呢?” 实际上这并不是 类型, 因为没有配备消去子 (eliminator), 因此不满足其泛性质.

2.

对于简单类型来说有一些纯组合的手段, 但是这些方法是无法推广到更复杂的类型系统的.

3.

满足实数公理的模型都是同构的, 因此它具有范畴性 (categoricity). 不过注意这个名词和范畴论没有关系, “categorical” 本身具有 “明确的; 绝对的” 的含义.

4.

有些读者可能会认为, 我们需要让 为单射, 即 要么是空集要么是单点集. 在这里这个要求可有可无. 没有这个要求时行文更简洁.

5.

直接观察交换图, 并且对 做一些分析, 可以绕过 直接说明这一点, 不过使用 说理在后面更加干净.

6.

这里实际上有一些细微的问题. 其一是如何用纯范畴语言定义重命名; 其二是重命名是否允许引入 (1) 重复的变量 (2) 变量顺序交换 (3) 若不许交换顺序, 那么两个出现的变量之间是否可以夹一个不出现的变量. 在我们这个例子中, 最好的定义是所有的类型 (作为一个集合) 自由生成的有限乘积范畴. 对于依值类型论来说, 也有一个优雅的泛性质决定.

7.

这个名称来源于几何, 不必太担心具体是为什么.