用户: 算,就使劲算/如何把你的类型论变成一个范畴

读者最好了解依赖类型论 (dependent type theory) 和范畴论的基本概念. 没有的话也无妨, 您可以随便逛逛. 我们将始终要求涉及的类型论 是依赖类型论.

1句法范畴

对于一个类型论 , 我们可以纯粹通过 中的语句定义一个范畴. 它的对象是类型论 中的语境 (context):

而态射 则是这两个语境间的 substitution:其中 满足:

恒等态射 是保持所有变量不变的 substitution:

而给定态射 :

它们的复合 则是将 进行 substitute:

定义 1.1. 这个范畴叫做 的句法范畴 (syntactic category) 1, 记作 .

1.

又称为 category of contexts.

注 1.2. 句法范畴中 态射复合的结合律 (也就是 substitution 的结合律) 一般被称为 substitution lemma.

我们用 表示空语境, 也就是不包含任何类型的语境 .

定理 1.3. 空语境 是句法范畴的一个终对象 (terminal object).

证明. 没什么可大惊小怪的, 只是定义而已.

注 1.4. 不同的语境在句法范畴中可能是同构的对象. 例如, 任取两个闭类型 , 通过交换自由变量我们可以得到一个表现对称性的同构:之后我们会看到更多例子. 这说明句法范畴实际上并不能完全地还原句法.

最后, 任何闭类型 (closed type), 也就是在空语境下合法定义的类型:都可以通过语境 来将其看做是句法范畴中的一个对象. 所有闭类型组成 的一个满子范畴, 记作 .

一般来说, 这是一个真子范畴. 不过之后我们会看到, 如果 包含 类型和 类型的话, 这两个范畴就自然等价了. 按照定义, 空语境到闭类型的态射 实际上就是所谓的闭 term(closed term).

来个简单的例子:

例 1.5. 假设类型论 包含一个自然数对象 . 考虑 中的这两个态射:它们的复合就是 .

预层与 Judgement

对于一个类型论 而言, 句法范畴上的预层范畴 也很重要. 一种简单的说法是, 类型论 中的每一类与 substitution 交换的 judgement 都会对应一个预层 , 并且每一个语境 上的此类 judgement(商去某种自然定义的 judgemental equality 后): 都会精确对应预层上的一个元素: 反之任何预层也可看做是一类关于 的 judgement 类. 而 judgement 类之间的推导规则: 则对应预层之间的自然变换: 从这个角度来说, 可以被视作一种 logical framework, 它提供了描述 的元语言. 而 Yoneda 嵌入则是将语言嵌入元语言的映射. 方便起见, 我们之后不会在记号上区分 .

为了进一步阐明这一点, 我们来考虑类型论中两种最基本的 judgement:

对应这两种 judgement, 我们来定义两个预层和它们间的自然变换:

对于任意语境 , 是所有满足 的元素 商去类型间 judgemental equality 后的商集. 相应地, 则是满足 的元素对 商去 judgemental equality 后的商集. 可以认为这里的 . 最后我们定义:

预层的函子性来自于这类 judgement 都与 substitution 交换, 也就是对于任意 substitution 和 judgement , 我们有类型论中的规则:

对于任意范畴 , 和预层 , 我们有一个自然的范畴等价 2:

2.

这里的 指 comma category, 也被记作 . 当 是预层时又被称为 category of elements, 常使用 的记号.

而经由 , 预层 成为 中的对象, 因此我们也可以视其为 中的对象, 它可以这样表述: 对于任意 , 由 Yoneda 引理, 我们可以将其等同于元素 . 此时一个 的对象可以看做一个元素对 , 其中 , 而 . 那么 在其上的值就是: 也就是满足 的集合. 为了方便起见, 接下来我们将不会区分 的这两种形式.

注 1.6. 就像注 1.4 中所指出的, 一类 judgement 所对应的预层实际上无法还原最初的 judgement. 不过当我们试图对句法范畴中的概念作 judgement 的时候, 实际上只需要用到对应的预层. 因此从现在开始, 每当我们作出这样一个 judgement, 我们总是指对应预层中的元素.

例如, 当我们需要这样一个 judgement 时: 我们其实是指一个元素: 在本文中无论多么复杂的 judgement 都可以这样翻译, 但很多时候这需要读者自己完成.

语境扩张

如果在某个 context 下有一个合法类型 , 遵照类型论的基本规则, 我们可以扩充 得到一个更大的 context . 为了标注自由变量的名字, 我们同时也使用 的记法. 在这个新的 context 下, 自由变量 3 的合法 term. 此时, 我们会在句法范畴 4 中得到一个交换方块:

在这个方块中, 下方的 对应 judgement:

上方的 称为 generic term, 对应 judgement:

左侧的 5 称为 projection. 它对于任何 substitution 满足 . 由 Yoneda 引理, 这唯一确定了态射 . 其实 满足类似等式 , 这也可作为 的另一种定义.

注 1.7. 态射 总是对应一个自由变量. 因此如果语境清楚, 我们总是可以在没有命名的情况下, 使用 来指代这个类型为 的自由变量. 这是一种局部无名 (locally nameless) 表示法. 更一般的, 如果我们有连续扩张: 那么就有一列态射 (这里 ): 它们分别对应类型为 的自由变量. 这实际上就是 de Brujin index.

3.

自由变量当然可以任意取名, 而不一定是 . 我们也可以使用注 1.7 中的局部无名表示法.

4.

严格来说是在预层范畴 中. 不过方便起见, 我们就不区分这两种说法了.

5.

没错, 这和 的自然变换重名. 好在这一般不会造成混淆.

定理 1.8. 这是一个笛卡尔方块.

证明. 我们需要验证拉回的泛性质. 假设有一个交换方块:

这个方块意味着什么? 答案是一个 judgement: 事实上这种方块和这类 judgement 是一一对应的. 现在我们可以构造一个交换图:

上方和左侧三角形的交换性就是等式 . 我们由此得到泛性质的存在性部分, 而将这个论证倒过来则可以证明其唯一性.

这给出了句法范畴上非常重要的附加结构, 称之为语境扩张 (context extension). 一个直接的推论是, 自然变换 其实是所谓的可表变换.

定义 1.9. 给定范畴 , 及其预层范畴 中的自然变换 . 如果对于任何对象 和元素 , 都存在拉回方块:

我们就称自然变换 是可表 (representable) 变换.

推论 1.10. 自然变换 是可表变换.

最后, 如果有两个语境 , 并将 展开成 telescope: 那么我们用 来记如下一系列扩张后的语境:

可表态射

为了方便之后的论证, 我们来定义一个叫做可表态射的概念. 简而言之, 可表态射就是对应语境扩张的态射. 亦或者, 它们是一种性质良好的 fibration.

定义 1.11. 给定一个类型论 , 我们称句法范畴 中形如 的态射为生成可表态射 (generating representable map). 如果一个态射是一系列生成可表态射的复合, 我们称其为可表态射 (representable map). 所有的生成可表态射记作 , 而所有的可表态射记作 .

注 1.12. 换句话说, 可表态射其实就是这种态射:

注 1.13. 生成可表态射 一般也被叫做 display map. 我们使用的术语来自 [1].

我们之后会看到, 如果类型论 包含外延相等类型, 所有的态射都同构于可表态射. 但一般来说, 这是不成立的.

注 1.14. 一个到空语境的态射 是生成可表态射当且仅当 是一个闭类型. 按定义, 所有到空语境的态射都是可表态射.

可表态射的一个重要性质是它们 stable under base change. 这可以从定理 1.8 直接推出.

定义 1.15. 给定范畴 , 和其中的一类态射 . 如果 中态射沿着任意态射的 base change 都存在, 并且 base change 后仍属于 , 那么我们称 是一个稳定类 (stable class).

定理 1.16. 生成可表态射类 与可表态射类 都是稳定类.

笛卡尔积

这一节我们来解释为什么句法范畴总是容许有限乘积 (admits finite products). 首先, 正如我们一开始指出的 (定理 1.3), 空语境 是一个终对象.

引理 1.17. 对于任意语境 , 语境 是它们在句法范畴中的乘积.

证明. 因为 的 substitution 一一对应于 分别到 的一对 substitution.

对任意范畴 , 其容许有限乘积当且仅当其包含终对象并且容许二元乘积. 我们立即可以由此推出:

定理 1.18. 句法范畴 容许有限乘积.

2 类型

现在假设我们的类型论 包含 类型 (简记作 包含 ). 这意味着我们有如下的规则:

我们可以将这些规则利用预层翻译到句法范畴之上. 为此我们首先定义两个新的预层和它们间的自然变换: 对于任意语境 :

注 2.1. 这里及以后我们都会使用这种类似模式匹配 (pattern matching) 的写法来定义自然变换.

你可以认为 实际上 classify 了一对 judgements6:而在此基础之上 则 classify 了:

注 2.2. 如果我们使用预层范畴的内语言 (internal language), 也就是将其作为一种类型论使用, 那么这里的两个预层可以等价地表述为: 则是到第一个变量的投影.

接下来, 我们把每个 类型的规则对应到预层之中. 首先 type formation 我们有自然变换:随后 term introduction 也就是 -abstraction 给出一个自然变换:

按定义我们有一个交换方块:

接下来 term elimination 也就是 function application 会给出自然变换:

这里的拉回 取自上面方块的右下角. 而 可以被看作类型为 的自由变量.

6.

当然这里全部都要商去 judgemental equality.

定理 2.3. 刚刚的交换方块是一个笛卡尔方块.

证明. 我们只需要证明从泛性质得出的自然变换是一个同构:它的逆其实就是 . 等式 分别对应 类型的 规则. 不信的话请验证一下吧.

Exponential Object

这一小节将解释类型论中的 类型如何给出其句法范畴中可表态射间的 exponential object. 本小节所涉及的类型论 都包含 . 我们从最简单的情形: 一个生成可表态射 开始.

引理 2.4. 存在关于 的自然同构: 这意味着 中的一个 exponential object .

证明. 选定 , 等式左侧的元素是二元组 , 其中 满足 judgement: 而等式右侧的元素则是二元组 , 其中 满足 judgement: 由此可知 能够给出 间的一一对应. 自然性嘛, 就留给读者作为练习.

给定一个生成可表态射 , 如果我们有另一个可表态射 , 其中:

我们记 为如下语境:

注意到 是可表态射.

引理 2.5. 存在关于 的自然同构:

证明. 只需要对生成可表态射 证明这个定理即可. 假设有可表态射 , 我们来证明有如下关于 的自然同构: 证明的细节比较繁琐. 总之, 等式左侧的元素可看成一列元素: 其满足: 等式右侧的元素也可看做一列元素: 其满足: 现在我们借助 就能建立 间的一一对应.

我们引入一个关于伴随函子的概念:

定义 2.6. 给定一个函子 , 如果对于某个 存在对象 和关于 的自然同构: 我们就称 的右伴随在 处有定义, 其值为 .

将这个同构用两次就可以记得得到如下引理:

引理 2.7. 给定函子 , 如果对于 我们有:

1.

函子 的右伴随在 处有定义, 其值为 ;

2.

函子 的右伴随在 处有定义, 其值为 .

那么函子 的右伴随在 处有定义, 其值为 .

本节的主要定理是:

定理 2.8. 如果类型论 包含 , 那么任意可表态射 所诱导拉回函子 的右伴随在可表态射处有定义, 并且其值仍是可表态射.

证明. 由引理 2.7, 我们只需要对生成可表态射 作证明即可, 也就是引理 2.5.

注 2.9. 我们一般用 记这个右伴随.

对于任意范畴 和态射类 以及对象 , 我们用 内由 中态射所组成的满子范畴.

推论 2.10. 如果类型论 包含 , 那么任意可表态射 诱导的拉回函子 有右伴随.

推论 2.11. 如果类型论 包含 , 那么对于任意语境 , 范畴 是笛卡尔闭范畴 (cartesian closed category).

证明. 给定可表态射 , 我们可以使用定理 2.8 得到关于 的自然同构: 这说明 就是我们需要的 exponential object.

最后我们引入一个新术语来概括本节的主要内容 (见 [3] 定义 27):

定义 2.12. 给定有终对象的范畴 , 如果一个稳定类 , 满足如下条件:

1.

任意到终对象的态射都属于 ;

2.

中的态射在复合下封闭;

3.

任意 诱导的拉回函子 处有右伴随.

我们就称 是一个闭类 (closed class).

推论 2.13. 如果类型论 包含 , 那么可表态射类 是闭类.

3外延相等

这一节我们来解释, 为何当你的类型论包含外延相等 (extensional identity) 类型时 (简记作 包含 ), 句法范畴将容许所有的有限极限 (admits finite limits). 首先外延相等的规则是:

我们首先来解释一下这些 jugdements 如何翻译成预层. Type formation 对应如下的自然变换:Term introduction 对应一个交换方块. 这里 是对角映射 , 而 :

我们可以由 equality reflection 推出这是一个笛卡尔方块.

对角映射

外延相等类型和对角映射 (diagonal map) 间有密切的联系.

定理 3.1. 如果类型论 包含 , 那么句法范畴 中有同构 7:

7.

我们在这里使用了局部无名法, 见注 1.7

证明. 这个同构由态射 给出. 它们的互逆性需要用到 equality reflection.

由此可知 实际上就是对角映射.

可表态射与有限极限

本节的主要定理在此:

定理 3.2. 如果类型论 包含 , 那么句法范畴 中的所有态射都同构于某个可表态射.

证明. 选定一个态射 , 这里我们把语境展开成 telescope:

先构造一个新的语境:

我们有如下 substitution, 它可以使得 成为 中的对象:

使用 equality reflection 可得 , 由此我们可以定义两个 中的态射:

可以验证 实际上互为逆映射, 因而 . 再由对称性知在 中有同构:

而上式右侧是一个可表态射, 因此 同构于一个可表态射.

本小节开头的断言就是一个直接的推论:

推论 3.3. 如果类型论 包含 , 那么句法范畴 容许所有有限极限.

证明. 只需证明句法范畴有终对象和关于所有态射的 base change. 前者可以取空语境 . 而对于后者, 我们知道关于可表态射的 base change 总是存在 (定理 1.16), 而定理 3.2 表明所有的态射都同构于可表态射, 因此关于一切态射的 base change 都存在.

4局部笛卡尔闭范畴

经由之前的讨论, 我们可以立即得到这个众所周知的定理:

定理 4.1. 如果类型论 包含 , 那么句法范畴 是局部笛卡尔闭范畴.

证明. 在命题给出的条件下, 推论 3.3 说明句法范畴容许有限极限, 只需要再验证对于任意语境 , 范畴 都是笛卡尔闭范畴. 换句话说, 就是对于任意 , 对应的 exponential object 总是存在. 由定理 3.2, 我们可以假设 都是可表态射, 此时使用定理 2.11 即可.

注 4.2. 这个定理最初来自于 [2]. 不过我们的版本条件更宽松, 只要求类型论 包含 .

5 类型

现在我们假设 包含单位类型, 或者叫 类型 (简记为 包含 ):并且 类型满足 规则:

我们也可以加入 type eliminator rule, 不过这其实是 admissible 的.

这些 judgement 比较容易翻译,type formation 就是空语境下的一个元素:

由于 是终对象, 这等价于预层 的一个整体截面 (global section). Term introduction 也是一个元素:

这也可看成是一个三角形:

规则则对应下面的方块总是笛卡尔方块:或者说 关于 的 lifting 存在且唯一.

终对象

定理 5.1. 如果类型论 包含 , 那么 是句法范畴 的一个终对象.

证明. 任何 满足: 类型的 规则, 我们只能有一个这样的 , 也就是 .

注 5.2. 由终对象的唯一性, 我们知道在句法范畴中空语境同构于 类型:

6 类型

现在我们假设 包含 类型 (简记为 包含 ), 也就是说 有如下规则:

如果我们将这些 judgements 翻译到预层上, 那么 type formation 类似于 类型的情形:

接下来, 我们先定义一个新预层 和一个自然变换 . 对于任意语境 :

注 6.1. 如果我们使用预层范畴的内语言, 那么这里的预层可以等价地表述为: 则是到第一个变量的投影.

此时 term introduction 对应自然变换:

按定义我们有一个交换方块:

类型的 规则则对应这个方块是笛卡尔方块.

闭类型范畴

如果 包含 , 那么它句法范畴的结构会大幅简化. 这是因为除了空语境, 所有的 telescope 都会等价于一个单独的闭类型. 方便起见, 我们假设 也包含 , 这样就可以包括所有的情形. 给定一个语境 并将其展开成 telescope: 我们定义 为如下的一系列 类型的组合: 当然特殊情形 需要定义. 对于空语境, 也就是 时, 我们定义: 时, 我们则将其定义为对应的闭类型: 实际上 可以看做是 的函子. 我们用 的自然嵌入.

定理 6.2. 如果类型论 包含 , 那么 是一个范畴等价. 或者说闭类型范畴等价于整个句法范畴:

证明. 请读者验证 , 很简单的.

注 6.3. 从定理 6.2 可以看出, 即便类型论 不包含 , 它的句法范畴 也会表现得好像包含 类型. 而语境扩张相当于构造 类型. 实际上本文中的许多证明都借助了这一点. 如果 包含 , 这些证明 (起码在记号上) 就可以简化. 读者不妨自己试一试.

同样的构造可以应用到任意语境 下, 从而证明:

定理 6.4. 如果类型论 包含 , 那么其句法范畴 中的可表态射等价于生成可表态射:

使用定理 3.2 和定理 6.4 我们可以推出:

推论 6.5. 如果类型论 包含 , , 那么其句法范畴 中所有态射都等价于生成可表态射.

最后合并定理 4.1 和定理 6.2 我们可以得到:

推论 6.6. 如果类型论 包含 , , , 那么其闭类型范畴 是局部笛卡尔闭范畴.

7内涵相等

当类型论 不再是外延的 (譬如在同伦类型论的情形下), 而是包含内涵相等 (intensional equality) 类型时 (简记为 包含 ), 其句法范畴的结构会变得更加丰富. 同伦类型论 (homotopy type theory) 就是这样一种情形. 这一节我们就来解释这件事.

内涵相等的规则是:

Judgement 到预层的翻译和外延相等的情形很相似. Type formation 对应如下的自然变换:

Term introduction 对应一个交换方块. 这里 是对角映射 , 而 :

但这个方块不再是笛卡尔方块. 事实上它的笛卡尔性等价于 equality reflection. 内涵相等的 规则对应一个 extension-lifting problem. 对于如下任意交换方块 8, 都存在对角方向的映射使整个图交换:事实上, 左上角三角形的交换性对应 规则, 而右下角三角形的交换性对应 term elimination.

8.

我们在这里使用了局部无名法, 见注 1.7

注 7.1. 我们可以纯粹使用预层表述 规则, 而不用涉及语境扩张. 不过这件事稍微有些复杂, 详情请见 [3].

规则与提升性质

刚刚我们所使用的是双侧对称形式的 规则, 但我们在之后的内容中会用到单侧的 规则. 这两种形式是完全等价的, 一个证明可在 [4] 中找到. 用预层来表述, 单侧 规则就是对于任何 , 如下的提升问题总有解:

方便起见, 我们将使用 来记左侧态射 . 如同可表态射 , 我们可以使用更一般的记号: 这里 满足: 方便起见我们会使用如下简写: 我们称这样形如 的态射为 elementary acyclic cofibration 9. 现在基于单侧 规则的提升性质, 我们可以解决句法范畴中的一整类提升问题:

引理 7.2. 假设类型论 包含 . 给定句法范畴 中的 elementary acyclic cofibration 和可表态射 , 如下的提升问题总有解:

证明. 只需注意到在相对提升问题中, 右侧态射在 base change 下封闭, 且左侧和右侧态射都在复合下封闭即可.

9.

这是作者为了方便临时起的名字, 并不是标准术语 (似乎本来就没有标准术语).

弱分解系统

在本小节我们来解释, 当 包含 时, 句法范畴内会自然地形成一个弱分解系统 (见 [5]).

定义 7.3. 给定一个范畴 和其中的两个态射类 . 如果下面两个条件得到满足, 我们就称 中的一组弱分解系统 (weak factorization system):

1.

(分解的存在性) 对于任何 中态射 , 都存在 使得 :

2.

(提升性质) 对于任何满足 的交换方块, 都存在对角方向态射使得整个图交换:

在我们将要定义的弱分解系统中, 就是所有的可表态射, 而 则简单粗暴地定义成所有相对于可表态射满足提升性质的态射.

定义 7.4. 给定范畴 和态射类 , 以及一个态射 . 如果对于任意 的 (如下) 方块, 都存在对角方向映射使得整个图交换: 我们就称 满足关于 的左提升性质.

定义 7.5. 假设类型论 包含 , 我们称关于可表态射满足左提升性质的态射为 acyclic cofibration. 全体 acyclic cofibration 构成的态射类记作 .

此时定义 7.3 中的提升性质是平凡的, 我们只需要验证分解的存在性. 实际上我们的证明只涉及 elementary acyclic cofibration. 当然, 我们必须说明 elementary acyclic cofibration 的确是 acyclic cofibration. 这不过就是引理 7.2 换种说法. 我们在此重新叙述一遍:

引理 7.6. 所有的 elementary acyclic cofibration 都是 acyclic cofibration.

本节的主要定理是:

定理 7.7. 如果类型论 包含 , 那么其句法范畴 中的任何态射都可以分解为 elementary acyclic cofibration 和可表态射的复合 10:

10.

我们这里的说法并不完全正确, 严格来说只是同构于 elementary acyclic cofibration 和可表态射.

证明. 选定一个态射 , 这里我们把语境展开成 telescope:

先构造一个新的语境:

我们有如下 substitution, 它可以使得 成为 中的对象:

我们可以定义一个 中的态射:

再由对称性知在 中有两个同构:

第一式右侧是一个可表态射, 而我们可以通过第二式把 看成一个 elementary acyclic cofibration, 这样就完成了证明.

注 7.8. 这个证明和定理 3.2 的证明非常相似. 我们完全可以认为它们是同一个构造在两种不同相等类型上的应用.

结合引理 7.6 我们就立即可以得到以下推论:

推论 7.9. 如果类型论 包含 , 那么其句法范畴 中的 acyclic cofibration 和可表态射 构成弱分解系统.

最后我们引入一个新术语来概括本节的主要内容 (见 [3] 引理 29 前的定义):

定义 7.10. 给定范畴 和态射类 , 记 为全体关于 满足左提升性质的态射类. 如果 构成一个弱分解系统, 我们就称 是一个分解类 (factorizing class).

推论 7.11. 如果类型论 包含 , 那么可表态射类 是分解类.

8内涵类型论

这一节我们来研究内涵类型论 (intensional type theory) 的句法范畴. 首先我们对之前几节的内容做一个简单的概括:

定理 8.1. 如果类型论 包含 , 那么可表态射类 是句法范畴 中的稳定闭分解类 (stable, closed and factorizing class).

证明. 稳定性是定理 1.16, 闭性是定理 2.8 而分解性是推论 7.11.

注 8.2. 外延类型论的句法范畴的是局部笛卡尔闭范畴 (见定理 4.1). 而定理 8.1 则可以看作是对应的内涵类型论版本.

9范畴语义

什么是范畴语义 (categorical semantics)? 如果用一句话概括, 范畴语义就是把一个类型论中的语句翻译到一个范畴当中去. 当然, 有很多基本问题需要阐明. 事实上, 如何翻译, 翻译到什么样的范畴里, 这些问题截至目前并没有标准答案, 现有的解决方案也不止一种. 在这一节里, 我们选择 category with families(简称为 CwF) 的理论来建立范畴语义.

定理 9.1. 给定一个类型论 , 它的句法范畴 是一个 CwF, 我们称其为项模型 (term model).

定理 9.2. 一个 总是包含 范畴意义下的始对象 (bi-initial object), 这个始对象被称为始模型 (initial model).

猜想 9.3. (Initiality Conjecture) 项模型是始模型.

严格来说, 这并不是一个猜想, 因为它依赖于我们究竟如何定义类型论 , 以及对应的 . 事实上, 在很多的重要的情形下, 它已经被证明了.

参考文献

[1]

Uemura, T. (2019). A General Framework for the Semantics of Type Theory. https://arxiv.org/abs/1904.04097. arXiv.

[2]

Seely, R. A. G. (1984). Locally cartesian closed categories and type theory. Math. Proc. Cambridge Philos. Soc. 95.1, pp. 33–48.

[3]

Awodey, S. (2018). Natural models of homotopy type theory. Mathematical Structures in Computer Science 28.2, pp. 241–286.

[4]

The Univalent Foundations Program (2013). Homotopy Type Theory: Univalent Foundations of Mathematics. http://homotopytypetheory.org/book/. Institute for Advanced Study.

[5]

Gambino, N., Garner, R. (2008). The identity type weak factorisation system. Theoretical Computer Science 409(1), 94–109.