Lambda 编码

演算中, 编码是 Church 编码、Scott 编码和 Parigot 编码等借助 表达式表示复杂数据结构的手法的统称.

编码所需的类型论至少需要 F 系统依值类型论的强度, 在无类型 演算中最为方便.

编码的表达能力极其强大, 虽然在计算机科学的研究中一般仅讨论它对自然数和一些有限集合的编码, 但它实际上可以通过 Leibniz 相等原则编码相等类型, 通过命题宇宙编码逻辑截断类型, 等等.

1基本思想

类型论中的类型一般由构造规则、消去规则和计算规则定义, 所谓 编码就是借助 表达式去 “实现” 出这些规则.

Church 自然数

考虑自然数类型, 它的消去规则 本质上就是将自然数 转化为如下表达式:

那么, 直接将自然数 定义为

再使用函数应用去定义消去规则, 即可在不直接引入自然数类型的情况下使用自然数:

注意 是自然数, 那么它按照上面的定义理应是一个二元函数, 因此我们可以直接将参数 应用上去.

以上便是 Church 编码自然数的思路. 其它种类的编码稍有不同, 但大体思路都是一致的. 任何使用自然数的消去规则定义的操作都可以很容易地翻译到 Church 自然数, 例如加法和乘法:

F 系统里, 我们可以赋予这种自然数以类型:

单位类型

参见: 参数性

单位类型只有一个元素, 因此单独讨论它的实例不太有意义, 但如果限定到 F 系统中, 可以定义出这个类型:

该类型在 F 系统中唯一可以写出的实例是 , 对应单位类型的构造规则.

2局限

自然数减法

Church 自然数 中介绍的自然数极难定义减法. 特别的, 它很难定义自然数的前驱操作, 而减法依赖这个操作.

(..)

参数性与归纳类型

Martin-Löf 类型论构造演算等大多数能表达相等类型的类型论中, 虽然可以轻易地定义自然数类型和 Church 编码的自然数之间的转换函数, 却不能证明这两个函数互逆, 这是因为这些类型论不能在内部证明参数性.

这个问题的最简单情况可以直接考虑 单位类型 中的编码. 为避免符号和自然数混淆, 记 为标准的单位类型、如下函数为两者之间的转换函数, 它们直接忽略参数、返回目标类型的唯一实例:

两者互逆的命题如下:

其中 非常容易证明, 但 化简后会变成如下命题:

这个命题就是参数性的特殊情况, 需要非常特殊的类型论才能从类型论内部构造出来.

注 2.1. F 系统的参数性是元理论层面的定理, 它甚至不能表达相等类型, 从而无法证明如上命题. 但是我们可以认为上面的命题是 F 系统的元定理.

术语翻译

编码英文 -encoding