范畴论笔记

第1章 范畴

第1.1节 引入

范畴论在某种意义上可以被视为函数的代数学.

第1.2节 集合的函数

f是从集合A到集合B的函数, 记为f:AB. 若用range(f)表示f的值域, 那么range(f)B. 现在设我们还有一个函数g:BC, 那么我们可以构造复合gf:AC, 其由(gf)(a)=g(f(a)),aA给定. 函数复合是结合性的, 即若再有一个函数h:CD, 那么(hg)f=h(gf).这里的函数相等显然是外延相等 (体现为逐点的函数值相等), 即对于每个aA((hg)f)(a)=(h(gf))(a)=h(g(f(a))).对于任意的集合A, 存在一个恒等函数1A:AA, 其由1A(a)=a定义. 恒等函数在某种意义上是函数复合的单位元, 即f1A=1Bf=f.对于函数的概念进行抽象或许提供了定义范畴的动机.

第1.3节 范畴的定义

定义1.1. 一个范畴由以下资料构成:以上这些资料需要满足以下法则.

范畴的定义是全然抽象的, 对象不必是集合, 箭头不必是函数.

第1.4节 范畴的例子

  1. 另外一类在数学中常见的例子是带结构集合的范畴, 即带有结构的集合和保持结构的函数, 这些概念在某种意义上是以相对独立的方式确定的. 读者可能熟悉的例子有如果你不熟悉其中某些例子, 也不要紧张. 之后我们将更仔细地检视其中一些. 暂时, 让我们讨论一下以上例子中的最后一个.
  2. 偏序集即装备了偏序关系的集合, 偏序集之间的箭头即单调映射. 如果m:AB是一个从偏序集A到偏序集B之间的单调映射, 那么aAam(a)Bm(a),a,aA.那么, 偏序集和单调映射何以成为范畴呢? 我们需要知道1A:AA是单调的, 但这是显然的, 因为aAaaAa. 我们也需要知道如果f:ABg:BC是单调的, 那么gf:AC是单调的. 这当然也是成立的, 因为aaf(a)f(a)g(f(a))g(f(a))(gf)(a)(gf)(a).因此, 我们有由偏序集和单调函数构成的范畴Pos.
  3. 到目前为止我们已经考虑了的范畴是所谓具体范畴的例子. 不严格地说, 这些范畴的对象是可能装备有某种结构的集合, 而箭头是特定的函数, 比如说保持结构的函数. 我们将在之后看到这个概念并非全然一致的, 见评注1.7. 但是, 理解范畴论的一种方式在于"doing without elements", 将函数替换成箭头. 让我们现在来看看一些例子以明白这种观念并非可选, 而是基础性的.
    Rel是以下范畴: 取集合为对象, 而取二元关系为箭头. 也就是说, 一个箭头f:AB是一个任意的子集fA×B. 集合A上的恒等箭头为恒等关系, 即1A={(a,a)A×A|aA}A×A.给定RA×BSB×C, 我们定义复合SR(a,c)SR当且仅当b.(a,b)R&(b,c)S.此即SR的"relative product". 我们将验证Rel在事实上是一个范畴的工作留给读者. (要做什么?)
    现在我们要举另一个箭头并非函数的范畴的例子, 令对象是有限集合A,B,C而箭头F:AB是由自然数构成的矩阵F=(ni,j)i<a,j<b, 其中a=|A|b=|B|, 这个记号的含义是集合的元素个数, 也就是基数或者说势. 箭头的复合即通常的矩阵乘法, 恒等箭头即通常的单位矩阵. 对象在这里的作用仅仅是为了确保矩阵乘法有定义, 但是矩阵并非对象之间的函数.
  4. 有限范畴
    当然, 范畴的对象不必是集合, 以下是一些非常简单的例子:
定义1.2. 一个范畴CD之间的函子F:CD是从对象到对象和从箭头到箭头的映射, 其满足
  1. F(f:AB)=F(f):F(A)F(B);
  2. F(1A)=1F(A);
  3. F(gf)=F(g)F(f).
  1. 一个预序是一个装备有满足自反性和传递性的二元关系的集合. 若将集合的元素视为对象, 而两个对象之间存在唯一的箭头当且仅当其满足二元关系, 则预序可以被视为范畴.
  2. 拓扑学一例: 令X是一个拓扑空间, 其开集族为O(X). 根据包含关系进行排序, O(X)就成了一个poset category. 而且, X上我们也可以通过specialization定义一个预序, 即将关系xy定义为对于每个开集UO(X), xU可以推出yU. 若X满足T1公理, 那么这个预序只会是平凡的. 但是如果不是, 这个预序可能会是相当有趣的, 代数几何和指称语义中都有这样的空间的例子. 我们将对于以下事实的证明留作练习, T0空间在specilization序下实际上是偏序集. [译注: 使用反证法.]
  3. 逻辑学一例: 给定一个逻辑演绎系统, 存在一个与之相关的证明的范畴, 其对象是公式φ,ψ,φψ的箭头是从(uncanceled)假设φ开始的推出ψ的一个演绎.φψ箭头的复合不过就是将演绎以显然的方式放在一起, 因而当然是结合的. 我们应该看出从φψ的箭头可以有很多个, 因为证明可以有很多个. 这种范畴实际上具有丰富的结构, 之后我们将和λ演算一起讨论它.
  4. 计算机科学一例: 给定一个函数式编程语言L, 存在一个与之相关的范畴, 其对象是L的数据类型, 而箭头是L的可计算函数. 两个程序XfYgZ的复合显然是将g应用于f的输出, 还有一种写法是gf=f;g.恒等箭头当然是"什么也不做"的程序.
    这种范畴对于编程语言的指称语义的想法而言是基本的. 例如, 如果C(L)是我们刚才定义的范畴, 那么以Scott domain的范畴D作为解释的L的指称语义实际上不过就是一个函子S:C(L)D因为S赋予L的类型以domain, L的程序以domain之间的连续函数. 这个例子和前一个例子都和所谓的笛卡尔闭范畴 (CCC) 有关, 之后我们将讨论CCC.
  5. X是一个集合, 那么我们可以将X当作一个范畴Dis(X), 其对象是X的元素而箭头就只有必要的恒等箭头. 这样的范畴被称为离散范畴, 实际上我们应该注意到离散范畴不过就是非常特殊的偏序集.
  6. 一个幺半群 (monoid, 偶尔会说semigroup with unit) 是一个集合M装备了一个二元运算:M×MM, 并且这个运算是结合的, 即对于x,y,zM, 我们有x(yz)=(xy)z另外, 这个运算还有一个幺元, 即存在uM使得对于每个xM都有ux=xu=x等价地说, 其实一个幺半群是一个仅有一个对象的范畴. 这个范畴的箭头是幺半群的元素. 恒等箭头即幺元u. 箭头的复合不过就是幺半群的二元运算而已.
    幺半群太过常见了. 例如, ,,相对于加法是幺半群, 其幺元 (可能用加法的单位元更好) 是0, 相对于乘法也是, 其幺元是1. 另外, 对于任意的集合X, 从XX的所有函数构成的集合, 即HomSets(X,X)在函数复合下也是一个幺半群. 更一般地, 对于任意的范畴C中的任意的对象C, 从CC的箭头的集合HomC(C,C)在范畴C的箭头复合运算下是一个幺半群.
    既然幺半群也是所谓的带结构的集合, 那么存在这样一个范畴Mon, 其对象是幺半群, 而箭头是保持幺半群结构的函数. 更细致地说, 从幺半群M到幺半群N的一个同态是一个函数h:MN满足对于任意的m,nM, 有h(mMn)=h(m)Nh(n)并且h(uM)=uN我们应该观察到, 从MN的同态可以被视为函子, 若是将MN视为范畴. 在这种意义下, 范畴是一般化了的幺半群, 函子是一般化了的同态.

第1.5节 同构

定义1.3. 在任意的集合C中, 称箭头f:AB同构, 如果存在箭头g:BA满足gf=1Afg=1B.这样的逆显然是唯一的, 我们记g=f1. 我们称A同构于B, 如果其间存在同构, 此时记AB.
定义1.4. 一个群G是一个幺半群, 并且每个元素g都有一个逆元g1. 换言之, G是一个只有一个对象的范畴, 并且其每个箭头都是同构. [译注: 箭头都是同构的范畴被称为群胚.]

在加法下并非一个群, 在加法下的确是一个群, 正有理数集合+在乘法下是一个群. 对于任意的集合X, X上的所有自同构, 或者说置换, 构成了群Aut(X). 所谓的置换群是子群GAut(X). 因此, G必须满足以下性质:

  1. 恒等函数1XG之中.
  2. 如果g,gG, 那么ggG.
  3. 如果gG, 那么g1G.

两个群之间的同态h:GH实际上是幺半群的同态, 而且其也必然保持逆元运算.

以下是关于抽象群的基本的经典的结果.

定理. Cayley. 每个群都同构于一个置换群.
证明.
  1. 首先, 对于群G, 定义其Cayley表示G为以下的集合G的一个置换群: 对于每个gG, 我们有置换g:GG, 其定义为hgh.这的确是一个置换, 因为g1是其逆.
  2. 接着, 定义同态i:GGgg, j:GGgg(uG).
  3. 最后, 证明ij=1Gji=1G.

Cayley定理是说任何的抽象群都可以由一个"具体"的置换群表示. 这个定理可以被推广为, 任何"不太大"的范畴都可以被表示为一个"具体"的范畴, 即一个由集合和函数构成的范畴. (第1.8节讨论了一些关于基础的技术细节.)

定理1.6. 每个范畴C都同构于这样的一个范畴, 其对象是集合, 其箭头是函数.
证明. 定义C的Cayley表示C为以下具体范畴:

这向我们表明了集合和函数的"具体"范畴的朴素概念有什么错误: 尽管不是每个范畴都以集合为对象而函数为箭头, 但是每个范畴都同构于一个这样的具体范畴. 因此, 这样的范畴可能具有的什么特殊性质是和范畴论无关的, 例如不以任何方式影响到箭头的对象的那些性质 (就像通过Dedekind分割或者Cauchy序列构造的实数之间的区别). 更好的捕获极其模糊的"具体"范畴的想法的尝试是这样的, 任意的箭头f:CD都完全由其和箭头们x:TC的复合确定, 这里的T是某种"测试对象". 这句话的意思是若对于所有这样的x都有fx=gx, 那么f=g. 之后我们将看到, 这相当于考虑由T确定的范畴的一个具体表示.

第1.6节 范畴上的构造

现在我们有了一些能与之打交道的范畴, 所以我们可以开始考虑一些从旧的范畴产生新的范畴的构造.

  1. 两个范畴CD, 记作C×D其对象具有形式(C,D), 其中CCDD, 并且箭头具有形式(f,g):(C,D)(C,D)其中f:CCCg:DDD. 复合是按分量定义的, 即(f,g)(f,g)=(ff,gg)恒等箭头显然是1(C,D)=(1C,1D)存在两个显然的投影函子Cπ1C×Dπ2D其定义为π1(C,D)=Cπ1(f,g)=f, π2的定义是类似的.
    若是读者熟悉群, 那么对于群GH, 若将它们当成范畴, 则其积范畴G×H不过就是通常的群的直积.
  2. 一个范畴C范畴, 或者说对偶范畴, 其对象和C无异, 但是Cop中的箭头f:CDC中的箭头f:DC. 换言之, Cop其实就是箭头调转方向的C.
    最好能有记号让我们区分CCop中的对象和箭头. 因此, 让我们对于C中的f:CDf:DC这是Cop中的相应箭头. 以此记号, 我们可以基于C中的相应操作来定义Cop中的复合和单位元, 即1C=(1C),fg=(gf)数学的许多"对偶"定理实际上不过表达了这样的事实, 一个范畴是另一个范畴的反范畴 (或者是这个反范畴的一个子范畴). 一个这样的例子是我们将在之后证明的Sets对偶于完备原子布尔代数的范畴.
  3. 一个范畴C箭头范畴CC的箭头为对象, 并且C中从对象f:ABf:AB的一个箭头g是一个"交换正方形"AABBffg1g2其中g1g2C中的箭头. 换句话说, 这样的一个箭头gC中的箭头序对(g1,g2)并且满足g2f=fg1.一个对象f:AB上的恒等箭头是序对(1A,1B). 箭头的复合是按分量计算的:(h1,h2)(g1,g2)=(h1g1,h2g2)读者应该画出合适的交换图以验证这个定义的确合理.
    观察到有两个函子:CdomCcodC
  4. 一个范畴C在对象CC上的切片范畴如下

第1.7节 自由范畴

自由幺半群. 我们从字母表A开始. 一个A上的词是来自于A的字母构成的有限序列. A的Kleene闭包A被定义为所有A上的词构成的集合. A上我们可以定义所谓的连接运算. 这个运算显然是结合的, 并且长度为零的空序列是其单位元. 因此, A形成了一个幺半群, 其被称为集合A上的自由幺半群. 元素aA可以被视为长度为一的词, 即我们有一个函数i:AA,aa虽然说以上的定义算是一种符号滥用 (abuse of notation) 吧. A的元素在某种意义上"生成"了这个自由幺半群, 即每个wA都是A的元素的积. 也就是说, 对于某些a1,a2,,anAw=a1a2an.

到底何谓"自由"呢? 我们称一个幺半群M是由其子集A自由生成的, 如果

  1. 每个mM都可以被写成A的元素之积:m=a1MMan,aiA.
  2. M中不存在"非平凡"的关系, 即如果a1aj=a1ak, 那么这是幺半群的公理所要求的.
第一个条件有时被称为"没有垃圾", 第二个条件有时被称为"没有噪音". 因此, A上的自由幺半群是包含A的没有垃圾也没有噪音的幺半群. (第二个条件在某种意义上已经足够审慎而精当, 然而仍然不容易理解, 甚至并不足够清晰以向不懂的人传达. 笔者也没有这个能力, 自由这个想法, 怎么说呢, 这里的话就是a1MMaj=a1MMak当且仅当j=kai=ai,i=1,,j.)

每个幺半群N都拥有一个作为基础的集合|N|, 而每个幺半群同态f:NM都可以导出一个集合之间的函数|f|:|N||M|. 很容易看出来这是一个函子, 即所谓的"遗忘函子". 集合A上的自由幺半群M(A)是满足以下泛性质的"唯一"的那个幺半群. (本书里将泛性质 (universal property) 称为泛映射性质 (universal mapping property, UMP), 这两者是一回事.)

存在函数i:A|M(A)|, 对于任意的幺半群N和函数f:A|N|, 有唯一的幺半群同态f:M(A)N满足|f|i=f, 这可以画成以下交换图表:Mon之中:M(A)NfSets之中:|M(A)||N|Aif|f|

命题1.9. A具有A上的自由幺半群的泛性质.
证明. 对于函数f:A|N|, 我们通过f(-)=uN其中-是空字符串而uN是幺半群N的单位元, 以及f(a1ai)=f(a1)NNf(ai)来定义f:AN, 其显然是一个同态, 并且满足对于每个aAf(a)=f(a).这仍然是符号滥用, 更准确地说, 左边的a实际上是i(a). 如果同态g:AN也满足对于每个aAg(a)=f(a), 那么对于所有a1aiA:g(a1ai)=g(a1ai)=g(a1)NNg(ai)=f(a1)NNf(ai)=f(a1)NNf(ai)=f(a1ai)=f(a1ai)于是, g=f, 证明就结束了. 怎么说呢, A是自由幺半群的玄机藏在似乎平凡的事实a1ai=a1ai之中. a1ai在某种意义上其实是一种双关, 它暗示了只有唯一一种将其表示为乘积a1ai的方式.

现在我们回头重新以泛性质来检视旧有的定义, 或者说思考泛性质是怎样捕获naive定义的想法的. 这个泛性质的存在性部分捕获了"没有噪音"的概念, 因为任意的生成元的代数组合之间的等式也对于其所映射至的东西成立, 也就是所有地方都成立. 唯一性部分捕获了"没有垃圾"的想法, 因为任何不是生成元的组合的元素, 其所映射至的东西可以是任意的值.

使用泛性质, 很容易表明自由幺半群M(A)在同构意义下是唯一的.

第1.8节 基础问题: 大, 小, 局部小

让我们首先区分以下两种东西:

  1. 数学的范畴论基础;
  2. 范畴论的数学基础.
对于第一点而言, 人们有时会听说范畴论可以用来提供"数学的基础", 作为集合论的替代物. 实际上的确如此, 但是这不是我们这里要做的事情. 在集合论中, 人们经常从存在性公理开始, 例如"存在一个无穷集合", 然后通过某些公理来导出更多的集合, 例如"每个集合都有一个幂集", 由此人们构筑了一个数学对象 (即集合) 的宇宙, 从原则上说它对于"所有的数学"而言应该是足够了. 我们的公理"每个箭头都有一个domain和一个codomain"不应该和集合论公理"每个集合都有一个幂集"以相同的方式理解! 区别在于, 在集合论中 (至少是一般意义上的集合论), 这些公理被认为是指 (或者说确定) 一个单一的由集合构成的宇宙. 而在范畴论中, 与之相对的是, 这些公理是某种东西的定义, 即范畴的定义. 这就像群论或者拓扑学, 其公理是为了定义需要检视的对象的, 而这些对象又被认为是存在于某种"背景"或者"基础"系统之中, 例如集合论 (或者类型论). 而集合论本身又可能使用范畴论确定, 或者以其他某种方式.

这将我们带至第二点: 我们假定我们的范畴是由集合和函数构成的, 以这样或那样的方式, 就和其他绝大多数数学对象一样, 然后开始考虑范畴论 (或者其他什么理论) 作为基础的可能性. 但是, 在范畴论中, 我们经常在通常的实践中遇到集合论的困难. 大多数这些问题是和"大小"有关的; 一些范畴"太大"以至于我们没法按照寻常集合论的方式妥当地进行处理. 在第1.5节里考虑Cayley表示时, 我们就已经遇到了这种问题. 那里我们要求考虑的范畴

第1.9节 练习

第2章 抽象结构

第2.1节 满态射和单态射

给定函数f:AB, 其被称为单射的, 如果对于所有的a,aA, f(a)=f(a)可以推出a=a; 其被称为满射的, 如果对于每个bB, 存在aA使得f(a)=b.

定义2.1. 在任意的范畴C中, 给定箭头f:AB, 其被称为是一个单态射(monomorphism), 如果对于任意的g,h:CA, fg=fh可以推出g=h; 其被称为是一个满态射(epimorphism), 如果对于任意的i,j:BD, if=jf可以推出i=j.

如果f是一个单态射, 那么我们记f:AB. 如果f是一个满态射, 那么我们记f:AB.

命题. 一个集合之间的函数f:AB是单态射恰当其为单射.
证明.f:AB. 令a,aA满足aa, 并令{x}是任意的一个单元素集.

第2.2节 始对象和终对象

现在我们考虑对于范畴Sets中的空集和单元素集的抽象刻画, 而这可以推广至一般范畴中从结构上考虑类似的对象.

定义2.9. 在任何范畴C中, 对象0被称为始对象, 如果对于任意的对象CC, 存在唯一的态射0C; 对象1被称为终对象, 如果对于任意的对象CC, 存在唯一的态射C1.

就像单态射和满态射一样, 我们应该注意到这定义中存在某种"对偶性". 精确地说, C中的终对象恰是Cop中的始对象. 我们在第3章中系统地考虑了对偶性.

首先, 我们应该注意到始对象和终对象的概念显然是泛性质, 这样的对象在同构意义下是唯一的, 就和自由幺半群一样.

命题2.10. 始对象在同构下是唯一的, 终对象也是.

第3章 对偶

第4章 群和范畴

第5章 极限和余极限