起因
写这个系列起源于自己学习编程语言时遇到的问题,研究编程语言不可避免要与数学打交道,自己大学只学过数学分析 和高等代数 等数学系一年级课程,PLT (Programming Language Theroy) 需要的数学基础大致为:抽象代数(Abstract Algebra) 、拓扑(Topology) 、范畴(Category Theory) 等代数知识,在阅读相关 PL 书籍时,深感自己的无力。我又是一个 " 死磕 " 的人,万事都要问个为什么,遇到不懂之处模糊跳过总觉得 " 不舒服 ",于是乎,数学基础的补足是 " 迫在眉睫 "。有人可能会 " 杠精 " 一下:你说得这些我也不懂啊,代码照样写得好好地,不妨碍我升职加薪😊。关于程序员编程语言理论学习的重要性,我是这么理解得:编程语言发展这么多年,从大家熟悉的汇编,到 C 语言、C#、C++、JAVA、GO、Dart、Javascript、Python、Dart、Rust…(大家以为我在报菜名😆)几乎每过个几年,就会有一次编程语言的 " 大浪潮 "。如果你无法快速学习,可能就会被无情 " 内卷 " 到死。为了生存下去,掌握一套编程语言方法论至关重要:任何具体的编程语言知识都要内化到自己建立的抽象框架之内,我所找到的就是数学。这有点类似于编译器里中间语言的概念,数学是中间语言,PLT 是编译器前端,具体的编程语言就是我们需要理解的对象。OK,言归正传,让我们开始范畴论的学习之旅吧!
学习参考资源
国内关于范畴论的中文视频我只在 B 站上找到清华大学关于范畴论的讨论班,英文视频比较丰富,大家可以自行搜寻。这里主要说下参考书籍:
Abstract and concrete category:The Joy of Cats
Saunders Mac Lane - Categories for the Working Mathematician-Springer (2010)
(Sigma Series in Pure Mathematics) Horst Herrlich, George Strecker - Category Theory. 1-Helderman Verlag (2007)
Horst Herrlich, George Strecker - Category Theory. 1-Helderman Verlag (2007)
Emily Riehl - Category Theory in Context-Dover Publications (2017)
Category Theory for Programmers -- Bartosz Milewski (2019)
这些书籍里程序员好上手的是 Category Theory for Programmers 这本,里面所有概念都会用 Haskell、Scala、C++ 讲解。Emily Riehl 这本个人认为写得不错,不过数学概念很多,里面的例子都是群、环、域、线性空间、拓扑空间等,非数学系人士会很艰难。本系列可以看作是 The Joy of Cats 部分章节的读书笔记,只介绍范畴论的基础知识。
公理集合论
关于公理集合论的介绍,其实我很纠结,一方面是内容繁多,涉及数理逻辑证明,寥寥几句解释不清楚。另一方面范畴论研究的数学对象往往比集合大得多,为了避免悖论,大家会从 Russell Paradox 切入,引入 Class 的概念;或者使用 Grothendieck Universe 来允许我们在朴素集合论的框架内表达范畴论的一些基本概念,而不引入类的概念。为了叙述的连贯性考虑,这里简单介绍一些集合论的知识,读者不必担心,很好理解 😊。
集合
集合是一个数学对象,下面给出集合的构造方法:
特定性原理: 假设 A 是一个集合,P 是 A 满足的某个性质,则 a ∈ A ∣ P ( a ) {a \in A \mid P(a)} a ∈ A ∣ P ( a ) 是一个集合。
幂集: 假设 A 是一个集合,则 A ′ ∣ A ′ ⊆ A {A' \mid A' \subseteq A} A ′ ∣ A ′ ⊆ A 是一个集合,称为 A 的幂集。
其他集合的构造: 对于集合 A 和 B,我们能构造如下集合:
(a) 两个元素的集合:{A, B},表示集合包含元素 A 和 B 的集合。
(b) 有序对 (A, B),表示按照顺序排列的元素对,即元素 A 在前,元素 B 在后。
(c) 集合的交:A ∩ B A \cap B A ∩ B ,表示同时属于集合 A 和 B 的元素组成的集合。
(d) 集合的并:A ∪ B A \cup B A ∪ B ,表示属于集合 A 或者属于集合 B 的元素组成的集合。
(e) 集合的相对补(差):A ∖ B A \setminus B A ∖ B 或 A − B A - B A − B ,表示属于集合 A 但不属于集合 B 的元素组成的集合。
(f) 笛卡尔乘积:A × B A \times B A × B ,表示由所有形式为 ( a , b ) (a, b) ( a , b ) 的有序对组成的集合,其中 a ∈ A a \in A a ∈ A 且 b ∈ B b \in B b ∈ B 。
这些构造方法在集合论中是常见且基础的。很容易地,我们可以推广到针对 " 任意多个 " (指定一个指标函数 f : I → ⊎ i ∈ I A i f:I\to \uplus_{i\in I} A_i f : I → ⊎ i ∈ I A i ,I 为指标集) 集合的相关构造,这里不再赘述。
一个小思考:
所有集合的集合符合集合的定义吗?
参考思路:一个集合的幂集总是大于该集合
类
类是一个数学对象,拓展了集合的概念,集合是一个特殊的类,不是集合的类称之为真类 (Proper Class),前面关于集合的构造描述都可以扩展到类。关于真类,下面是具体的例子:
全体集合: 可以定义全体集合,即所有集合的集合。通常表示为 V \mathbf{V} V 或 S \mathbf{S} S 。
V = { x ∣ x = x } \mathbf{V} = \{ x \mid x = x \} V = { x ∣ x = x }
这个集合包含所有的数学对象,是一个真类。
所有 Ordinal 数的集合: 可以定义所有 Ordinal 数的集合。
O n = { α ∣ α 是一个 Ordinal 数 } \mathbf{On} = \{ \alpha \mid \alpha \text{ 是一个 Ordinal 数} \} On = { α ∣ α 是一个 Ordinal 数 }
* Ordinal 数
在 Zermelo-Fraenkel 集合论中,Ordinal 数是一种数学对象,用于表示集合的排列顺序。Ordinal 数的定义基于集合论的递归构造。
定义
零(0)是一个 Ordinal 数:
后继 Ordinal 数 ( α + 1 ) (\alpha + 1) ( α + 1 ) 是一个 Ordinal 数:
如果 α \alpha α 是一个 Ordinal 数,那么 ( α + 1 ) (\alpha + 1) ( α + 1 ) 表示在 α \alpha α 的基础上添加一个元素的排列顺序。
极限 Ordinal 数是一个 Ordinal 数:
如果 S S S 是一个非空的集合,且对于每个 β ∈ S \beta \in S β ∈ S ,都有 β \beta β 是一个 Ordinal 数,那么 sup ( S ) \sup(S) sup ( S ) (即 S S S 的上确界)也是一个 Ordinal 数。
性质
整体性质:
如果 α \alpha α 是一个 Ordinal 数,则 x ∈ α x \in \alpha x ∈ α 当且仅当 x x x 是排在 α \alpha α 之前的某个元素。
递归性质:
对于任意 Ordinal 数 α \alpha α ,集合 α \alpha α 是由排在 α \alpha α 之前的所有 Ordinal 数构成的。
良序性质:
集合 α \alpha α 被良序,即对于 β , γ ∈ α \beta, \gamma \in \alpha β , γ ∈ α ,要么 β ∈ γ \beta \in \gamma β ∈ γ ,要么 β = γ \beta = \gamma β = γ ,要么 γ ∈ β \gamma \in \beta γ ∈ β 。
例子
0 , 1 , 2 , 3 , … 0, 1, 2, 3, \ldots 0 , 1 , 2 , 3 , … 是自然数构成的 Ordinal 数序列。
ω \omega ω 表示所有自然数的集合,是第一个无穷的 Ordinal 数。
ω + 1 , ω + 2 , … \omega + 1, \omega + 2, \ldots ω + 1 , ω + 2 , … 是无穷序列中的后继 Ordinal 数。
ω ⋅ 2 , ω ⋅ 3 , … \omega \cdot 2, \omega \cdot 3, \ldots ω ⋅ 2 , ω ⋅ 3 , … 表示 ω \omega ω 的倍数,是无穷序列中的极限 Ordinal 数。
Ordinal 数在集合论中用于描述集合的次序结构,特别是在处理序数性质和集合的良序性时起到关键作用。
范畴
范畴的定义
一个范畴是由四元组 A = ( O , hom , id , ∘ ) \mathbf{A}= (O, \text{hom}, \text{id}, \circ) A = ( O , hom , id , ∘ ) 组成的数学结构,其中:
类 (O): 它的成员被称为 A \mathbf{A} A - 对象(A-objects)。
对于每一对 A \mathbf{A} A - 对象 (A, B): 存在一个集合 hom ( A , B ) \text{hom}(A, B) hom ( A , B ) ,其成员被称为 A \mathbf{A} A - 态射(A-morphisms),通常用箭头表示,例如 f : A → B f: A \to B f : A → B 表示 f 是从 A 到 B 的态射。
每个 A \mathbf{A} A - 对象 (A \mathbf{A} A ): 存在一个态射 id A : A → A \text{id}_A: A \to A id A : A → A ,称为 A \mathbf{A} A - 恒等态射。
一个与每一对 A \mathbf{A} A - 态射 f : A → B f: A \to B f : A → B 和 g : B → C g: B \to C g : B → C 相关的合成法则: 存在一个态射 g ∘ f : A → C g \circ f: A \to C g ∘ f : A → C ,称为 f 和 g 的复合,满足以下条件:
(a) 复合是结合的,即对于任意态射 f : A → B , g : B → C , h : C → D f: A \to B, g: B \to C, h: C \to D f : A → B , g : B → C , h : C → D ,等式 h ∘ ( g ∘ f ) = ( h ∘ g ) ∘ f h \circ (g \circ f) = (h \circ g) \circ f h ∘ ( g ∘ f ) = ( h ∘ g ) ∘ f 成立。
(b) 恒等态射作为复合的单位元,即对于任意态射 f : A → B f: A \to B f : A → B ,有 id B ∘ f = f \text{id}_B \circ f = f id B ∘ f = f 和 f ∘ id A = f f \circ \text{id}_A = f f ∘ id A = f 。
(c) 任意两个态射集合 hom ( A , B ) \text{hom}(A, B) hom ( A , B ) 和 hom ( C , D ) \text{hom}(C, D) hom ( C , D ) 是两两不相交的。
为了表示的方便,范畴 A 中所有的对象用 Obj (A \mathbf{A} A ) 表示,所有的态射用 Mor (A \mathbf{A} A ) 表示,有时为了特指某个范畴的态射集,明确指出态射集的下标:h o m A ( A , B ) hom_\mathbf{A}(A,B) h o m A ( A , B ) 。如果 Obj (A \mathbf{A} A ) 是一个集合,Mor (A \mathbf{A} A ) 也是一个集合,我们称范畴 A \mathbf{A} A 是小 (small) 的;如果只满足 Mor (A \mathbf{A} A ) 是集合,那么这个范畴是局部小的 (local-small)。
范畴的例子
1. Category Set (集合范畴)
对象类 O O O : 所有集合的类。
态射集合 h o m ( A , B ) hom(A, B) h o m ( A , B ) : 所有从集合 A A A 到 B B B 的函数的集合。
恒等态射 i d A id_A i d A : 在集合 A A A 上的恒等函数。
复合 ∘ \circ ∘ : 常规的函数复合。
2. 结构化集合与结构保持映射的范畴
(a) Vec(向量空间范畴)
对象类 O O O : 所有实数向量空间。
态射集合 h o m ( V , W ) hom(V, W) h o m ( V , W ) : 所有线性变换从向量空间 V V V 到 W W W 。
恒等态射 i d V id_V i d V : 向量空间 V V V 上的恒等线性变换。
(b) Grp(群范畴)
对象类 O O O : 所有群。
态射集合 h o m ( G , H ) hom(G, H) h o m ( G , H ) : 所有群同态从群 G G G 到 H H H 。
恒等态射 i d G id_G i d G : 群 G G G 上的恒等群同态。
(c) Top(拓扑空间范畴)
对象类 O O O : 所有拓扑空间。
态射集合 h o m ( X , Y ) hom(X, Y) h o m ( X , Y ) : 所有连续函数从拓扑空间 X X X 到 Y Y Y 。
恒等态射 i d X id_X i d X : 拓扑空间 X X X 上的恒等连续函数。
(d) Rel(关系范畴)
对象类 O O O : 所有二元关系 ( X , ρ ) (X, \rho) ( X , ρ ) ,其中 X X X 是一个集合,ρ \rho ρ 是 X X X 上的二元关系。
态射 f : ( X , ρ ) → ( Y , σ ) f: (X, \rho) \to (Y, \sigma) f : ( X , ρ ) → ( Y , σ ) : 关系保持映射,即 f : X → Y f: X \to Y f : X → Y ,使得对于任意 x , x ′ ∈ X x, x' \in X x , x ′ ∈ X ,若 x ρ x ′ x \rho x' x ρ x ′ ,则 f ( x ) σ f ( x ′ ) f(x) \sigma f(x') f ( x ) σ f ( x ′ ) 。
恒等态射 i d ( X , ρ ) id_{(X, \rho)} i d ( X , ρ ) : 即集合 X X X 上的恒等关系保持映射。
(e) Σ-Seq (状态机范畴)
在Σ-Seq 范畴中,对象是所有(确定性、顺序)Σ-acceptors,其中Σ是输入符号的有限集。对象是四元组 ( Q , δ , q 0 , F ) (Q, \delta, q_0, F) ( Q , δ , q 0 , F ) ,其中 Q Q Q 是状态的有限集,δ : Σ × Q → Q \delta: \Sigma \times Q \to Q δ : Σ × Q → Q 是状态转移映射,q 0 ∈ Q q_0 \in Q q 0 ∈ Q 是初始状态,F ⊆ Q F \subseteq Q F ⊆ Q 是终态的集合。
一个态射(称为模拟)f : ( Q , δ , q 0 , F ) → ( Q ′ , δ ′ , q 0 ′ , F ′ ) f: (Q, \delta, q_0, F) \to (Q', \delta', q'_0, F') f : ( Q , δ , q 0 , F ) → ( Q ′ , δ ′ , q 0 ′ , F ′ ) 是一个函数 f : Q → Q ′ f: Q \to Q' f : Q → Q ′ ,它保持以下条件:
(i) 状态转移关系:对于任意 σ ∈ Σ \sigma \in \Sigma σ ∈ Σ 和 q ∈ Q q \in Q q ∈ Q ,都有 δ ′ ( σ , f ( q ) ) = f ( δ ( σ , q ) ) \delta'(\sigma, f(q)) = f(\delta(\sigma, q)) δ ′ ( σ , f ( q )) = f ( δ ( σ , q )) 。
(ii) 初始状态:f ( q 0 ) = q 0 ′ f(q_0) = q'_0 f ( q 0 ) = q 0 ′ 。
(iii) 终态:f [ F ] ⊆ F ′ f[F]\subseteq F' f [ F ] ⊆ F ′ 。
这样的模拟确保了在Σ-Seq 范畴中每个对象都有一个与之相关的态射,同时保持了复合法则。
3. 对象构造
在构造中,一旦对象被定义,往往就清楚了态射应该是什么。然而,并非总是如此。例如:
(a) Metric Spaces
M e t Met M e t (度量空间范畴): 所有度量空间为对象,态射为所有非扩张映射(即收缩映射)。
M e t u Met_u M e t u (度量空间范畴): 所有度量空间为对象,态射为所有一致连续映射。
M e t c Met_c M e t c (度量空间范畴): 所有度量空间为对象,态射为所有连续映射。
(b) Banach Spaces
B a n Ban B an (巴拿赫空间范畴): 所有巴拿赫空间为对象,态射为所有线性收缩映射。
B a n b Ban_b B a n b (巴拿赫空间范畴): 所有巴拿赫空间为对象,态射为所有有界线性映射(即连续线性映射、一致连续线性映射)。
4. 不同结构的范畴
在下列范畴中,对象和态射不是结构化集合和保结构函数:
(a) Mat 范畴
Mat(矩阵范畴): 所有自然数为对象,而 hom ( m , n ) \text{hom}(m, n) hom ( m , n ) 是所有实数 m × n m \times n m × n 矩阵的集合,id n \text{id}_n id n 是单位对角线 n × n n \times n n × n 矩阵,矩阵的复合定义为 A ∘ B = B A A \circ B = BA A ∘ B = B A ,其中 B A BA B A 表示矩阵的通常乘法。
(b) Aut 范畴
Aut(自动机范畴): 所有(确定性、顺序、Moore)自动机为对象,对象是六元组 ( Q , Σ , Y , δ , q 0 , y ) (Q, \Sigma, Y, \delta, q_0, y) ( Q , Σ , Y , δ , q 0 , y ) ,其中 Q Q Q 是状态的集合,Σ \Sigma Σ 和 Y Y Y 是输入和输出符号的集合,δ : Σ × Q → Q \delta: \Sigma \times Q \to Q δ : Σ × Q → Q 是过渡映射,q 0 ∈ Q q_0 \in Q q 0 ∈ Q 是初始状态,y : Q → Y y: Q \to Y y : Q → Y 是输出映射。从自动机 ( Q , Σ , Y , δ , q 0 , y ) (Q, \Sigma, Y, \delta, q_0, y) ( Q , Σ , Y , δ , q 0 , y ) 到自动机 ( Q ′ , Σ ′ , Y ′ , δ ′ , q 0 ′ , y ′ ) (Q', \Sigma', Y', \delta', q'_0, y') ( Q ′ , Σ ′ , Y ′ , δ ′ , q 0 ′ , y ′ ) 的态射是函数 f Q : Q → Q ′ f_Q: Q \to Q' f Q : Q → Q ′ ,f Σ : Σ → Σ ′ f_\Sigma: \Sigma \to \Sigma' f Σ : Σ → Σ ′ 和 f Y : Y → Y ′ f_Y : Y \to Y' f Y : Y → Y ′ ,满足以下条件:
(i)保持过渡:δ ′ ( f Σ ( σ ) , f Q ( q ) ) = f Q ( δ ( σ , q ) ) \delta'(f_\Sigma(\sigma), f_Q(q)) = f_Q(\delta(\sigma, q)) δ ′ ( f Σ ( σ ) , f Q ( q )) = f Q ( δ ( σ , q )) ,
(ii)保持输出:f Y ( y ( q ) ) = y ′ ( f Q ( q ) ) f_Y(y(q)) = y'(f_Q(q)) f Y ( y ( q )) = y ′ ( f Q ( q )) ,
(iii)保持初始状态:f Q ( q 0 ) = q 0 ′ f_Q(q_0) = q'_0 f Q ( q 0 ) = q 0 ′ 。
(c) 类作为范畴
Classes as Categories(类作为范畴): 每个类 X X X 给出一个范畴 C ( X ) = ( O , hom , id , ∘ ) C(X) = (O, \text{hom}, \text{id}, \circ) C ( X ) = ( O , hom , id , ∘ ) ,其中 O = X O = X O = X ,hom ( x , y ) = ∅ \text{hom}(x, y) = \emptyset hom ( x , y ) = ∅ 如果 x ≠ y x \neq y x = y ,hom ( x , y ) = { x } \text{hom}(x, y) = \{x\} hom ( x , y ) = { x } 如果 x = y x = y x = y ,id x = x \text{id}_x = x id x = x ,且 x ∘ x = x x \circ x = x x ∘ x = x 。C ( ∅ ) C(\emptyset) C ( ∅ ) 被称为空范畴,C ( { 0 } ) C(\{0\}) C ({ 0 }) 被称为终结范畴。
(d) 预序类作为范畴
Preordered Classes as Categories(预序类作为范畴): 每个预序类,即每对 ( X , ≤ ) (X, \leq) ( X , ≤ ) ,其中 X X X 是类,≤ \leq ≤ 是 X X X 上的自反且传递的关系,给出一个范畴 C ( X , ≤ ) = ( O , hom , id , ∘ ) C(X, \leq) = (O, \text{hom}, \text{id}, \circ) C ( X , ≤ ) = ( O , hom , id , ∘ ) ,其中 O = X O = X O = X ,hom ( x , y ) = { ( x , y ) } \text{hom}(x, y) = \{(x, y)\} hom ( x , y ) = {( x , y )} 如果 x ≤ y x \leq y x ≤ y ,否则为 ∅ \emptyset ∅ ,id x = ( x , x ) \text{id}_x = (x, x) id x = ( x , x ) ,且 ( y , z ) ∘ ( x , y ) = ( x , z ) (y, z) \circ (x, y) = (x, z) ( y , z ) ∘ ( x , y ) = ( x , z ) 。
(e) 幺半群作为范畴
Monoids as Categories(幺半群作为范畴): 每个幺半群 ( M , ⋅ , e ) (M, \cdot, e) ( M , ⋅ , e ) ,即每个具有单位 e e e 的半群 ( M , ⋅ ) (M, \cdot) ( M , ⋅ ) ,给出一个范畴 C ( M , ⋅ , e ) = ( O , hom , id , ∘ ) C(M, \cdot, e) = (O, \text{hom}, \text{id}, \circ) C ( M , ⋅ , e ) = ( O , hom , id , ∘ ) ,其中 O = { M } O = \{M\} O = { M } ,hom ( M , M ) = M \text{hom}(M, M) = M hom ( M , M ) = M ,id M = e \text{id}_M = e id M = e ,且 y ∘ x = y ⋅ x y \circ x = y \cdot x y ∘ x = y ⋅ x 。
(f) 乘积范畴
Product Category(乘积范畴): 对于任意两个范畴 A A A 和 B B B ,可以构建 A × B A \times B A × B ,或更一般地,对于有限多个范畴 C 1 , C 2 , … , C n C_1, C_2, \ldots, C_n C 1 , C 2 , … , C n ,可以构建 C 1 × C 2 × … × C n C_1 \times C_2 \times \ldots \times C_n C 1 × C 2 × … × C n 。A × B A \times B A × B 的对象是所有集合对 ( A , B ) (A, B) ( A , B ) ,从 ( A , B ) (A, B) ( A , B ) 到 ( A ′ , B ′ ) (A', B') ( A ′ , B ′ ) 的态射是所有形如 ( f , g ) (f, g) ( f , g ) 的函数对,其中 f : A → A ′ f: A \to A' f : A → A ′ 且 g : B → B ′ g: B \to B' g : B → B ′ 。恒等态射由 ( id A , id B ) (\text{id}_A, \text{id}_B) ( id A , id B ) 给出,而复合由 ( f 2 , g 2 ) ∘ ( f 1 , g 1 ) = ( f 2 ∘ f 1 , g 2 ∘ g 1 ) (f_2, g_2) \circ (f_1, g_1) = (f_2 \circ f_1, g_2 \circ g_1) ( f 2 , g 2 ) ∘ ( f 1 , g 1 ) = ( f 2 ∘ f 1 , g 2 ∘ g 1 ) 定义。
对偶原理
定义 :
对于任何范畴 A = ( O , hom A , id , ∘ ) A = (O, \text{hom}_A, \text{id}, \circ) A = ( O , hom A , id , ∘ ) ,其对偶(或反范畴)记作 A o p = ( O , hom A o p , id , ∘ o p ) A^{op} = (O, \text{hom}_{A^{op}}, \text{id}, \circ^{op}) A o p = ( O , hom A o p , id , ∘ o p ) ,其中 hom A o p ( A , B ) = hom A ( B , A ) \text{hom}_{A^{op}}(A, B) = \text{hom}_A(B, A) hom A o p ( A , B ) = hom A ( B , A ) ,且 f ∘ o p g = g ∘ f f \circ^{op} g = g \circ f f ∘ o p g = g ∘ f 。这意味着 A A A 和 A o p A^{op} A o p 有相同的对象,唯一的不同在于它们的态射的方向。
例子 :
如果 A = ( X , ≤ ) A = (X, \leq) A = ( X , ≤ ) 是一个预序类,被视为一个范畴,那么 A o p = ( X , ≥ ) A^{op} = (X, \geq) A o p = ( X , ≥ ) 。
如果 A = ( M , ⋅ , e ) A = (M, \cdot, e) A = ( M , ⋅ , e ) 是一个幺半群,被视为一个范畴,那么 A o p = ( M , ⋅ ^ , e ) A^{op} = (M, \hat{\cdot}, e) A o p = ( M , ⋅ ^ , e ) ,其中 a ⋅ ^ b = b ⋅ a a \hat{\cdot} b = b \cdot a a ⋅ ^ b = b ⋅ a 。
备注 :
对偶范畴的定义方式使得任何关于 A o p A^{op} A o p 中对象 X X X 的语句 S A o p ( X ) S_{A^{op}}(X) S A o p ( X ) 都可以转化为关于 A A A 中对象 X X X 的逻辑等价语句 S A o p ( X ) S^{op}_A(X) S A o p ( X ) 。这种潜在性允许将有关范畴中对象和态射的每个性质 P P P 关联到一个关于对象和态射的对偶性质,具体解释如下:
考虑 A A A 中对象 X X X 的性质:P A ( X ) ≡ P_A(X) \equiv P A ( X ) ≡ 对于任何 A A A - 对象 A A A ,存在唯一的 A A A - 态射 f : A → X f: A \to X f : A → X (X X X 是一个终对象)。
步骤 1: 在 P A ( X ) P_A(X) P A ( X ) 中,用 A o p A^{op} A o p 替换所有 A A A 的出现,从而获得性质 P A o p ( X ) ≡ P_{A^{op}}(X) \equiv P A o p ( X ) ≡ 对于任何 A o p A^{op} A o p - 对象 A A A ,存在唯一的 A o p A^{op} A o p - 态射 f : A → X f: A \to X f : A → X 。
步骤 2: 将 P A o p ( X ) P_{A^{op}}(X) P A o p ( X ) 转化为逻辑上等价的语句 P A o p ( X ) ≡ P^{op}_A(X) \equiv P A o p ( X ) ≡ 对于任何 A A A - 对象 A A A ,存在唯一的 A A A - 态射 f : X → A f: X \to A f : X → A 。
可以观察到,粗略来说,P A o p ( X ) P^{op}_A(X) P A o p ( X ) 是通过颠倒 P A ( X ) P_A(X) P A ( X ) 中每个箭头的方向和复合态射的顺序得到的。在一般情况下,P A o p ( X ) P^{op}_A(X) P A o p ( X ) 与 P A ( X ) P_A(X) P A ( X ) 不等价。例如,上述性质 P Set ( X ) P_{\text{Set}}(X) P Set ( X ) 当且仅当 X X X 是一个单集时成立,而其对偶性质 P Set o p ( X ) P^{op}_{\text{Set}}(X) P Set o p ( X ) 当且仅当 X X X 是空集时成立。
以类似的方式,关于范畴中态射的任何性质都会导致关于范畴中态射的对偶性质,正如以下示例所演示的:
考虑 A A A 中态射 A → f B A \xrightarrow{f} B A f B 的性质:Q A ( f ) ≡ Q_A(f) \equiv Q A ( f ) ≡ 在 A A A 中存在一个 A A A - 态射 B → g A B \xrightarrow{g} A B g A ,使得 A → f B → g A = A → id A A A \xrightarrow{f} B \xrightarrow{g} A = A \xrightarrow{\text{id}_A}A A f B g A = A id A A (即,g ∘ f = id A g \circ f = \text{id}_A g ∘ f = id A )。
步骤 1: 在 Q A ( f ) Q_A(f) Q A ( f ) 中,用 A o p A^{op} A o p 替换所有 A A A 的出现,从而获得性质 Q A o p ( f ) ≡ Q_{A^{op}}(f) \equiv Q A o p ( f ) ≡ 在 A o p A^{op} A o p 中存在一个 A o p A^{op} A o p - 态射 B → g A B \xrightarrow{g} A B g A ,使得 A → f B → g A = A → id A A A \xrightarrow{f} B \xrightarrow{g} A = A \xrightarrow{\text{id}_A}A A f B g A = A id A A (即,g ∘ f = id A g \circ f = \text{id}_A g ∘ f = id A )。
步骤 2: 将 Q A o p ( f ) Q_{A^{op}}(f) Q A o p ( f ) 转化为逻辑上等价的语句 Q A o p ( f ) ≡ Q^{op}_A(f) \equiv Q A o p ( f ) ≡ 在 A A A 中存在一个 A A A - 态射 A → g B A \xrightarrow{g} B A g B ,使得 A → g B → f A = A → id A A A \xrightarrow{g} B \xrightarrow{f} A = A \xrightarrow{\text{id}_A}A A g B f A = A id A A (即,f ∘ g = id A f \circ g = \text{id}_A f ∘ g = id A )。
例如,上述性质 Q Set ( f ) Q_{\text{Set}}(f) Q Set ( f ) 当且仅当 f f f 是具有非空定义域的单射函数或是空集上的恒等映射时成立,而其对偶性质 Q Set o p ( f ) Q^{op}_{\text{Set}}(f) Q Set o p ( f ) 当且仅当 f f f 是满射函数时成立。涉及范畴中对象和态射 A , B , … , f , g , … A, B, …, f, g, … A , B , … , f , g , … 的更复杂的性质 P A ( A , B , … , f , g , … ) P_A(A, B, …, f, g, …) P A ( A , B , … , f , g , … ) 可以通过类似的方式进行对偶。如果 P = P A ( A , B , … , f , g , … ) P = P_A(A, B, …, f, g, …) P = P A ( A , B , … , f , g , … ) 对于所有 A A A - 对象 A , B , … A, B, … A , B , … 和所有 A A A - 态射 f , g , … f, g, … f , g , … 都成立,则我们说范畴 A A A 具有性质 P P P 或 P ( A ) P(A) P ( A ) 成立。
对偶原理指出:每当某一性质 P P P 对所有范畴都成立时,那么性质 P o p P^{op} P o p 也对所有范畴成立。这一(极为有用的)原理的证明立即可以从以下事实得出,对于所有范畴 A 和性质 P :
( A o p ) o p = A (A^{op})^{op} = A ( A o p ) o p = A
当且仅当 P o p ( A ) P^{op}(A) P o p ( A ) 成立时,P ( A o p ) P(A^{op}) P ( A o p ) 成立。
例如,考虑性质 R = R A ( f ) R = R_A(f) R = R A ( f ) 的定义:如果 P A ( d o m ( f ) ) P_A(dom(f)) P A ( d o m ( f )) 成立,则 Q A ( f ) Q_A(f) Q A ( f ) 成立,其中P 和Q 是上文定义的性质。很容易证明对于所有范畴A ,R ( A ) R(A) R ( A ) 都成立,因此根据对偶原理,R o p ( A ) R^{op}(A) R o p ( A ) 对于所有范畴A 都成立,其中 R A o p ( f ) R^{op}_A(f) R A o p ( f ) 的定义为:如果 P A o p ( c o d ( f ) ) P^{op}_A(cod(f)) P A o p ( co d ( f )) ,则 Q A o p ( f ) Q^{op}_A(f) Q A o p ( f ) 成立。
由于这一原理,范畴论中的每个结果都有两种等价的表述(乍看起来可能非常不同)。然而,只需要证明其中一个,因为根据对偶原理,另一个是自动成立的。
通常,概念 P P P 的对偶概念 P o p P^{op} P o p 被表示为 "co-P "(例如,等值器和余等值器,良构和共良构,积和余积等等)。如果 P P P 等于 P o p P^{op} P o p ,则概念 P P P 被称为自对偶。一个例子是 " 恒等态射 " 的概念。
同构态射
定义 : 在一个范畴中,如果存在一个态射 f : A → B f: A \to B f : A → B ,使得存在一个态射 g : B → A g: B \to A g : B → A ,满足 g ∘ f = id A g \circ f = \text{id}_A g ∘ f = id A 和 f ∘ g = id B f \circ g = \text{id}_B f ∘ g = id B ,则称 f f f 是一个同构态射。这样的态射 g g g 被称为 f f f 的逆。
备注 : 从上述定义可以清楚地看出,"f f f 是同构态射 " 的陈述是自对偶的;即,f f f 在范畴 A A A 中是同构映射,当且仅当 f f f 在 A o p A^{op} A o p 中是同构态射。
命题 : 如果 f : A → B f: A \to B f : A → B ,g : B → A g: B \to A g : B → A ,h : B → A h: B \to A h : B → A 是范畴 A A A 中的态射,且 g ∘ f = id A g \circ f = \text{id}_A g ∘ f = id A 和 f ∘ h = id B f \circ h = \text{id}_B f ∘ h = id B 成立,则 g = h g = h g = h 。
证明: h = id A ∘ h = ( g ∘ f ) ∘ h = g ∘ ( f ∘ h ) = g ∘ id B = g . h = \text{id}_A \circ h = (g \circ f) \circ h = g \circ (f \circ h) = g \circ \text{id}_B = g. h = id A ∘ h = ( g ∘ f ) ∘ h = g ∘ ( f ∘ h ) = g ∘ id B = g .
推论 : 如果 g 1 g_1 g 1 和 g 2 g_2 g 2 是同一个态射 f f f 的逆,则 g 1 = g 2 g_1 = g_2 g 1 = g 2 。
备注 : 根据上述推论,我们可以称同构态射 f f f 的逆为 f − 1 f^{-1} f − 1 。
例子:
每个恒等态射 id A \text{id}_A id A 都是同构态射,且 ( id A ) − 1 = id A (\text{id}_A)^{-1} = \text{id}_A ( id A ) − 1 = id A 。
在集合范畴 Set \text{Set} Set 中,同构态射就是双射;在向量空间范畴 Vect \text{Vect} Vect 中,它们就是线性同构映射;在群范畴 Grp \text{Grp} Grp 中,它们就是群同构映射;在拓扑空间范畴 Top \text{Top} Top 中,它们就是同胚映射;在关系范畴 Rel \text{Rel} Rel 中,它们就是关系同构映射。需要注意的是,在所有这些情况下,每个同构态射都是双射,但反之则只有在集合、向量空间和群的情况下成立,而在关系和拓扑的情况下不成立。
在 Ban b \text{Ban}_b Ban b 中,同构态射就是线性同胚映射;而在 Ban \text{Ban} Ban 中,同构态射就是保范线性双射。
在矩阵范畴 Mat \text{Mat} Mat 中,同构态射就是正定矩阵,即行列式非零的方阵。
在自动机范畴 Aut \text{Aut} Aut 中,一个态射 ( f Q , f Σ , f Y ) (f_Q, f_{\Sigma}, f_Y) ( f Q , f Σ , f Y ) 是同构态射,当且仅当其中的每个映射 f Q , f Σ , f Y f_Q, f_{\Sigma}, f_Y f Q , f Σ , f Y 都是双射。
在单子范畴中,每个态射都是同构态射当且仅当单子是一个群。
命题 :
如果 A → f B A\xrightarrow{f} B A f B 是同构态射,则 B → f − 1 A B \xrightarrow{f^{-1}} A B f − 1 A 也是同构态射,且 ( f − 1 ) − 1 = f (f^{-1})^{-1} = f ( f − 1 ) − 1 = f 。
如果 A → f B A \xrightarrow{f} B A f B 和 B → g C B \xrightarrow{g} C B g C 都是同构态射,则 A → g ∘ f C A \xrightarrow{g \circ f} C A g ∘ f C 也是同构态射,且 ( g ∘ f ) − 1 = f − 1 ∘ g − 1 (g \circ f)^{-1} = f^{-1} \circ g^{-1} ( g ∘ f ) − 1 = f − 1 ∘ g − 1 。
证明:
直接根据逆和同构映射的定义得出。
利用结合律和逆的定义,有:( g ∘ f ) ∘ ( f − 1 ∘ g − 1 ) = g ∘ ( f ∘ f − 1 ) ∘ g − 1 = g ∘ id B ∘ g − 1 = g ∘ g − 1 = id C (g \circ f) \circ (f^{-1} \circ g^{-1}) = g \circ (f \circ f^{-1}) \circ g^{-1} = g \circ \text{id}_B \circ g^{-1} = g \circ g^{-1} = \text{id}_C ( g ∘ f ) ∘ ( f − 1 ∘ g − 1 ) = g ∘ ( f ∘ f − 1 ) ∘ g − 1 = g ∘ id B ∘ g − 1 = g ∘ g − 1 = id C ,以及 ( f − 1 ∘ g − 1 ) ∘ ( g ∘ f ) = f − 1 ∘ ( g − 1 ∘ g ) ∘ f = f − 1 ∘ id B ∘ f = f − 1 ∘ f = id A (f^{-1} \circ g^{-1}) \circ (g \circ f) = f^{-1} \circ (g^{-1} \circ g) \circ f = f^{-1} \circ \text{id}_B \circ f = f^{-1} \circ f = \text{id}_A ( f − 1 ∘ g − 1 ) ∘ ( g ∘ f ) = f − 1 ∘ ( g − 1 ∘ g ) ∘ f = f − 1 ∘ id B ∘ f = f − 1 ∘ f = id A 。
定义 :
在一个范畴中,如果存在同构态射 f : A → B f: A \to B f : A → B ,则称对象 A A A 和 B B B 是同构的。
备注 :
对于任意范畴 A A A ," 与之同构 " 显然构成 Ob ( A ) \text{Ob}(A) Ob ( A ) 上的等价关系(从恒同态射是同构态射的事实可以得出自反性,而对称性和传递性可通过上述命题直接得到),同构的对象通常被认为是 " 本质上相同的 "。