Skip to content

Commit 0252fbc

Browse files
committed
Comprehension category
1 parent 0be637d commit 0252fbc

File tree

4 files changed

+41
-8
lines changed

4 files changed

+41
-8
lines changed

category.typ

Lines changed: 25 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -112,7 +112,7 @@ $))
112112

113113
另一方面,展映射仍然是范畴中的箭头,因此如果通过刻画展映射间接描述依值类型,就可以用上范畴论中的许多工具。这又与 Bénabou 发展的纤维化范畴论不谋而合。这一节,我们来考察另一种定义依值类型的模型的办法,称作概括范畴。
114114

115-
如果要以展映射为基础定义类型论的模型,就要考虑态射范畴 $cal(C)^->$,即对象是 $cal(C)$ 中的态射,态射是 $cal(C)$ 中的交换方的范畴。我们的第一个想法是选择其子范畴 $cal(E) arrow.hook cal(C)^->$不过我们暂且先取任意的函子 $F : cal(E) -> cal(C)^->$稍后再讨论将此函子限定为子范畴含入映射的情况。这样,$cal(E)$ 就是全体语义类型的范畴,而 $cal(C)$ 是全体语义语境的范畴。我们有函子 $cal(E) -> cal(C)^(->)$$Gamma$ 上的依值类型 $A$ 映射到对应的展映射 $(Gamma, A) -> Gamma$。可以发现,$F$ 复合上函子 $cod : cal(C)^(->) -> cal(C)$ 得到的 $cal(E) -> cal(C)$ 就应该将每个类型映射到它所处的语境。
115+
如果要以展映射为基础定义类型论的模型,就要考虑态射范畴 $cal(C)^->$,即对象是 $cal(C)$ 中的态射,态射是 $cal(C)$ 中的交换方的范畴。我们的第一个想法是选择其子范畴 $cal(E) arrow.hook cal(C)^->$不过我们可暂且先取任意的函子 $F : cal(E) -> cal(C)^->$有需要时再讨论将此函子限定为子范畴含入映射的情况。这样,$cal(E)$ 就是全体语义类型的范畴,而 $cal(C)$ 是全体语义语境的范畴。我们有函子 $cal(E) -> cal(C)^(->)$$Gamma$ 上的依值类型 $A$ 映射到对应的展映射 $(Gamma, A) -> Gamma$。可以发现,$F$ 复合上函子 $cod : cal(C)^(->) -> cal(C)$ 得到的 $cal(E) -> cal(C)$ 就应该将每个类型映射到它所处的语境。
116116

117117
接下来,我们需要将代换操作翻译到展映射的语言中。考虑集合族 $A_x$ 与对应的展映射 $p : (Gamma, A) -> Gamma$。假如有映射 $sigma : Delta -> Gamma$,那么 $Delta$ 上对应的集合族是 $(A sigma)_x = A_(sigma(x))$,因此有
118118
#eq($ (Delta, A sigma) &= {(x, a) mid(|) x in Delta, a in A_(sigma(x))} \ &tilde.equiv {(x, y) mid(|) x in Delta, y in (Gamma, A), p(y) = sigma(x)} $)
@@ -190,11 +190,30 @@ $))
190190
#define[概括范畴][comprehension category] 包含一个范畴 $cal(C)$ 表示语境,一个范畴 $cal(E)$ 表示类型,有函子 $F : cal(E) -> cal(C)^->$,使得与 $cod : cal(C)^-> -> cal(C)$ 复合之后可以得到纤维范畴 $cal(E) -> cal(C)$,并且 $F$ 将拉回态射映到拉回态射.#footnote[我们无需要求 $cal(C)$ 有全部拉回,即 $cod : cal(C)^-> -> cal(C)$ 不一定是纤维范畴。不过如果加上这个条件,$F$ 就是纤维化范畴之间的保持结构的映射。] 同时,$cal(C)$ 有终对象表示空语境。
191191
]
192192

193-
- Discuss possible morphisms between types
194-
- Motivate equivalence between fibered categories and pseudofunctors
195-
- Making $cal(E) -> cal(C)$ discrete or making $F$ full both eliminates this extra information
196-
- Discrete fibrations behave much better
197-
- Possible use case as modeling subtypes or other kinds of coercions
193+
将概括范畴与自然模型相比,事实上多出了额外的信息。概括范畴中 $cal(E)$ 的对象直观上是类型 $Gamma tack A istype$ 的语义解释,而这个范畴中的态射则是类型之间的某种态射。假设 $Gamma tack A istype$$Delta tack B istype$$F : cal(E) -> cal(C)^->$ 将态射 $A -> B$ 映射到某个代换 $(Gamma, A) -> (Delta, B)$。但是并非所有这样的代换都一定在 $F$ 的像里,并且 $cal(E)$ 中的多个态射可能映射到同一个代换。而自然模型中没有额外规定类型之间的态射。我们有三种办法解决此问题。
194+
195+
其一是令 $cal(E)$$cal(C)^->$ 的满子范畴,这样相当于要求 $A -> B$ 的映射与代换 $(Gamma, A) -> (Delta, B)$ 一一对应,使得这些额外的自由度被 $cal(C)$ 完全决定。这是让 $cal(E)$ 海纳百川,兼收并蓄。
196+
197+
其二是令 $cal(E)$ 只包含纤维化要求必须存在的映射。换句话说, $cal(E)$ 中的任何态射都出现在某个 $p$-拉回方中。这有更简洁的描述。
198+
#definition[
199+
考虑函子 $p : cal(E) -> cal(C)$。给定 $cal(C)$ 中的态射 $sigma : Delta -> Gamma$$A in cal(E)$,使得 $p(A) = Gamma$,如果总是存在唯一的 $f : B -> A$ 使得 $p(f) = sigma$,就说 $p$#define[离散纤维化][discrete fibration]。
200+
#eq(diagram({
201+
node((0,0), $B$, name: <B>)
202+
node((1,0), $A$, name: <A>)
203+
edge(<B>, "-->", <A>, $f$)
204+
205+
node((0,1), $Delta$, name: <Delta>)
206+
node((1,1), $Gamma$, name: <Gamma>)
207+
edgeR(<Delta>, "->", <Gamma>, $sigma$)
208+
209+
edge(<B>, "|->", <Delta>)
210+
edge(<A>, "|->", <Gamma>)
211+
}))
212+
此时,此图一定是 $p$-拉回方。因此离散纤维化都是纤维化。
213+
]
214+
假如在概括范畴中令 $p : cal(E) -> cal(C)$ 是离散纤维化,就使得 $cal(E)$ 中只包含必须的态射,从而也消除了多余的自由度。
215+
216+
第三种办法则是反其道而行之,不去修改概括范畴使得语义匹配语法,而是修改语法使得它匹配概括范畴。这就需要添加一类新的语法,描述类型之间的映射。它可以用于包含子类型的系统,是前沿研究的课题 @comprehension-type-theory
198217

199218
=== 范畴的依值类型语言
200219

common.typ

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,7 @@
5858
// Equations
5959
#let eq(content) = [\
6060
#box(align(center, content), width: 1fr)\
61-
]
61+
] // TODO add parameter and manually tune some vertical spacing
6262
#let varnothing = sym.diameter
6363
#let cal(it) = text(font: "KaTeX_Caligraphic", it) // TODO spacing difference?
6464

examples.typ

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -419,7 +419,7 @@ $)
419419
根据@sec:J-equivalences 的结论,J 原理可以拆分为 $contr$$transp$ 两个部分。其中 $contr$ 的部分不难满足,但 $transp$ 则有些问题。按照依值群胚的定义,完全可以有 $Gamma$ 的两个点 $x$$y$,有道路连接,同时依值群胚 $A$ 满足 $A_x$ 为空,但是 $A_y$ 不为空。此时就无法将 $A_y$ 中的元素转换到 $A_x$ 中。为此,我们需要额外给依值群胚添加条件,使得它能满足 $transp$ 的要求。
420420

421421
#definition[
422-
给定群胚 $Gamma$ 与依值群胚 $A$,如果对于每条道路 $p in hom_Gamma (x, y)$$A$ 中的依值点 $alpha in A_x$,都有一条 $p$ 上的依值道路 $xi in hom_A^p (alpha, beta)$$alpha$ 为起点,就称 $A$#define[纤维化][fibration]
422+
给定群胚 $Gamma$ 与依值群胚 $A$,如果对于每条道路 $p in hom_Gamma (x, y)$$A$ 中的依值点 $alpha in A_x$,都有一条 $p$ 上的依值道路 $xi in hom_A^p (alpha, beta)$$alpha$ 为起点,就称 $A$#define[群胚纤维化][fibration in groupoids],在上下文中仅讨论群胚时可以简称纤维化
423423
]
424424
定义中的道路 $xi$ 称作 $p$#define[抬升][lift]。注意在抬升的定义中只能限制 $xi$ 的一个端点。
425425

references.yaml

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -238,3 +238,17 @@ synthetic-computability:
238238
# title: Proceedings of the 21st Annual Conference on Mathematical Foundations of Programming Semantics (MFPS XXI)
239239
serial-number:
240240
doi: 10.1016/j.entcs.2005.11.049
241+
242+
comprehension-type-theory:
243+
type: misc
244+
note: ArXiv preprint
245+
title: A Type Theory for Comprehension Categories with Applications to Subtyping
246+
author:
247+
- Najmaei, Niyousha
248+
- vd.Weide, Niels
249+
- Ahrens, Benedikt
250+
- North, Paige Randall
251+
date: 2025
252+
serial-number:
253+
doi: 10.48550/arXiv.2503.10868
254+

0 commit comments

Comments
 (0)