单子 (范畴论)

数学的分支范畴论中，单子（monad），又称三元组（triple, triad）、标准构造（standard construction）、基本构造（fundamental construction），是一个内函子（即由某范畴映到自身的函子），连同满足特定连贯条件的两个自然变换，三者构成的整体。单子用于研究互为伴随的函子对，并将偏序集上的闭包算子推广到任意范畴。

## 导论与定义

单子是一类内函子（连同其他资讯）。例如，若$F$和$G$为一对伴随函子，$F$为$G$的左伴随，则复合$G \circ F$是单子。若$F$与$G$互为逆函子，则对应的单子是恒等函子。一般而言，伴随关系并不等同范畴的等价，而可以联系不同性质的范畴。为了探讨伴随关系所“保持”的性质，数学家研究单子论。理论的另一半，即藉考虑$F \circ G$，以研究伴随关系，是单子论的对偶理论。该类函子称为余单子（comonad）。

### 严格定义

本条目中，$\mathcal C$皆表示某范畴。$\mathcal C$上的单子是函子$T: \mathcal C \to \mathcal C$，连同两个自然变换，分别是单位$\eta : 1_{\mathcal C} \to T$（其中$1_{\mathcal C}$是$\mathcal C$上的恒等函子）与乘法$\mu : T^{2} \to T$（其中$T^{2}$是复合$T \circ T$，亦是$\mathcal C$到$\mathcal C$的函子），且要满足下列连贯条件：

- $\mu \circ T\mu = \mu \circ \mu T$（左右皆为$T^{3} \to T$的自然变换）。此处$T\mu$与$\mu T$经水平复合而得。
- $\mu \circ T \eta = \mu \circ \eta T = 1_{T}$（两者皆为$T \to T$的自然变换）。此处$1_{T}$表示由函子$T$到自身的恒等自然变换。

以上两式，亦可以下列交换图复述：

<image>

｜ ｜

<image>

记号$T\mu$与$\mu T$的含义，参见自然变换，又或考虑以下更具体的写法，不用水平复合记号，并将各函子作用在任意物件$X$上：

<image>

｜ ｜

<image>

定义中，若将$\mu$当成幺半群的乘法，则第一条公理类似幺半群对象的乘法结合律，而第二条公理类似单位元的存在性（由$\eta$给出）。准确而言，$\mathcal C$上的单子，可以等价地定义为$\mathcal C$的内函子范畴$\mathbf{End}_{\mathcal C}$中的幺半群对象。（该范畴的物件是$C$上的内函子，而态射是内函子间的自然变换，幺半结构来自内函子的复合运算。）如此，单子不仅在形式上具有与幺半群相似的公理，甚而单子就是幺半群的特例。

### 幂集单子

幂集单子$\mathcal{P}$是集合范畴$\mathbf{Set}$上的单子。其定义中，函子$T$取为幂集运算，即$T(A)$为集合$A$的幂集，而对于函数$f : A \to B$，$T(f)$将$A$的子集映至其像集，即$T(f)(A') = f[A']$。对每个集合$A$，有函数$\eta_{A}: A \to T(A)$，对每个元素$a\in A$映至单元子集$\{a\}$，并有函数

$$\mu_{A} \colon T(T(A)) \to T(A),$$

将$A$的若干个子集构成的族，映至该些子集的并集。以上是幂集单子的定义。

两个单子的复合，未必为单子。举例，幂集单子$\mathcal P$的二次迭代$\mathcal{P} \circ \mathcal{P}$，无法配备单子结构。

### 余单子

取上节定义的范畴论对偶，便是余单子（或余三元组）的定义。简单复述，范畴$\mathcal C$上的余单子，是对偶范畴$C^{\mathrm{op}}$上的单子。所以，余单子是由$\mathcal C$到$\mathcal C$的某个函子$U$，连同余单位与余乘法（counit and comultiplication）两个自然变换，组成的整体，而三者所要满足的公理，是将原定义中所有态射反转方向而得。

单子之于幺半群，如同余单子之于余幺半群。每个集合皆是余幺半群，且仅有唯一一种方式，所以抽象代数中，较少考虑余幺半群。然而，在线性代数中，向量空间范畴（配备张量积）的余幺半群较为重要，以余代数之名为人所知。

### 历史

单子的概念最早由罗杰·戈德芒于1958年提出，当时称为“标准构造”（standard construction）。实际上，该书用到的是余单子，用作解决某个层余调问题。

其后，单子又出现于彼得·胡伯（Peter Huber）对范畴同伦的研究中。该论文包含由任意一对伴随函子得出单子的证明。

1965年，海因里希·克莱斯利，及塞缪尔·艾伦伯格、约翰·柯曼·摩尔二人分别独立证明反向的结论，即每个单子皆可由某对伴随函子产生。后一篇论文中，将单子称为“三元组”。

1963年，威廉·洛维尔提出泛代数的范畴论。1966年，弗雷德·林顿（Fred Linton）将该理论用单子的语言表达。单子本身来自拓扑方面的考量，事先似乎比洛维尔的理论更难处理，但已成为用范畴论语言阐述泛代数的方法中，较常见的一个。现今常用的英文名称monad是1971年由桑德斯·麦克兰恩在《现职数学家用的范畴》引入，以其类似单子论中的同名哲学概念，即某种能生出其他所有事物的实体。

1980年代，欧金尼奥·莫吉在理论计算机科学中，利用单子，为计算机程序的若干方面建立模型，包括例外处理、边界情况。此后，有多种函数式编程语言仔细实作此想法，作为一种基本规律，同样称为单子。2001年，若干数学家注意到，用单子研究程式标志语意的方法，与洛维尔的理论，两者之间有关联。此为代数与语义间的联系，是后来活跃的研究课题。

## 例子

### 伴随的复合

若有伴随关系

$$F: \mathcal C \rightleftarrows \mathcal D : G$$

（即$F$为$G$的左伴随，下同），则由此有$\mathcal C$上的单子。此普遍的构造，取内函子为复合

$$T = G \circ F,$$

而单位自然变换来自伴随的单位$\eta: \operatorname{id}_\mathcal C \to G \circ F$，乘法自然变换源自伴随的余单位$\varepsilon$：

$$T^2 = G \circ F \circ G \circ F \xrightarrow{G \circ \varepsilon \circ F} G \circ F = T.$$

反之，给定单子，可以明确找回一对伴随函子，使单子为该对伴随函子的复合。此构造用到下节定义的$T$代数的艾伦伯格－摩尔范畴$C^T$。

#### 两重对偶

给定域$k$，双重对偶单子（double dualisation monad）源自伴随关系

$$(-)^* : \mathbf{Vect}_k \rightleftarrows \mathbf{Vect}_k^{\mathrm{op}} : (-)^*,$$

其中两个函子$(-)^*$皆将$k$向量空间$V$映至对偶空间$V^* := \operatorname{Hom}(V, k)$，所以对应的单子将向量空间$V$映至双对偶$V^{**}$。对此有更广泛的讨论。

#### 偏序集的闭包算子

偏序集$(P, \le)$可以视为特殊的范畴，任意两件物件之间有最多一支态射，且$x$到$y$有态射当且仅当偏序中$x \le y$。于是，偏序集之间的函子，即是保序映射，而伴随函子对，则组成两偏序集间的伽罗瓦连接，相应的单子是伽罗华连接的闭包算子。

#### 自由遗忘伴随

又举例，设$G$为群范畴$\mathbf{Grp}$至集合范畴$\mathbf{Set}$的遗忘函子，将群映至其基集，又设$F$为自由函子，由$\mathbf{Set}$到$\mathbf{Grp}$，则$F$是$G$的左伴随。此时，对应的单子$T = G \circ F$的作用是，输入一个集合$X$，输出自由群$F(X)$的基集，即字母取自$\{x, x^{-1}: x \in X\}$，且无相邻两个字母互为逆元的字串的集合。

该单子的单位变换，由包含映射

$$\eta_X: X \rightarrow T(X)$$

给出，该包含映射将$X$的任意元素，看成仅得一个字元的字串，从而是$T(X)$的元素。最后，单子的乘法

$$\mu_X: T(T(X)) \rightarrow T(X)$$

是串接或“压平”运算，将若干条字串组成的串，映至该串中所有字串前后连接而成的一条字串。至此描述完单子的两个自然变换。

前述例子中，自由群可以推广至其他种类的代数结构，即泛代数意义下的任意一簇 (泛代数)代数。如此，每类代数定义了集合范畴上的一个单子。更重要的是，该类代数的范畴，可从单子找回，即单子的艾伦伯格－摩尔代数范畴，故单子可视为泛代数之簇的推广。

另外，尚有一个单子源自伴随关系。在向量空间范畴$\mathbf{Vect}$上，若$T$表示将向量空间$V$映至其张量代数$T(V)$的内函子，则相应有单位自然变换将$V$嵌入到其张量代数，并有乘法自然变换，在$V$处的分量是态射$T(T(V))\to T(V)$，将张量积之张量积展开化简。

### 余密度单子

只要满足某些不强的条件，无左伴随的函子也可以产生单子，称为余密度单子。例如，从有限集合范畴$\mathbf{FinSet}$到集合范畴$\mathbf{Set}$的包含函子无法配备左伴随，但其余密度单子定义在$\mathbf{Set}$上，将任意集合$X$映至其上所有超滤子的集合$\beta X$。类似例子见于。

## 单子的代数

给定范畴$\mathcal C$上的单子$(T,\eta,\mu)$，可以考虑$\mathcal C$中的$\boldsymbol T$代数物件。$T$在该些物件上的作用，与单子的单位与乘法相容。具体而言，$\boldsymbol T$代数$(x,h)$是$\mathcal C$中的物件$x$，连同态射$h: Tx\to x$（称为该代数的结构映射），使得图

<image>

｜及｜

<image>

皆可交换。

$T$代数间的态射$f:(x,h)\to(x',h')$是$\mathcal C$中的态射$f:x\to x'$，且要使

<image>

可交换。于是，$T$代数及之间的态射组成范畴，称为艾伦伯格－摩尔范畴（Eilenberg–Moore category），记为$\mathcal C^T$.

### 例子

#### 自由群单子上的代数

若$T$为前述自由群单子，则$T$代数是集合$X$，连同由$X$生成的自由群$F(X)$到$X$的映射（求值，evaluation），且该映射要满足结合律与单位元的公理。换言之，$X$本身就具有群结构，而$F(X)$至$X$的映射，是将字串按$X$的群乘法，计算所得的结果

#### 分布单子上的代数

另一个例子是集合范畴上的分布单子（distribution monad）$\mathcal{D}$，其将集合$X$映至其上所有有限支撑的概率分布的集合。该等分布，是函数$f : X \to [0,1]$，仅于有限多个元素$x \in X$处取值非零，而各元素处取值之和为$1$。以符号表示。

$$\mathcal{D}(X) = \left\{ f: X \to [0,1] : \begin{matrix} \#\text{supp}(f) < +\infty, \\ \sum_{x \in X} f(x) = 1 \end{matrix} \right\}.$$

可由定义证明，分布单子上的代数，等同于凸集，即集合要配备二元运算$+_r$（对每个$r \in [0,1]$），满足的公理比照欧氏空间中，凸组合$(x, y) \mapsto rx + (1-r)y$具备的性质。

#### 对称单子上的代数

另一个有用的单子，是交换环$R$的模范畴$\mathbf{Mod}_R$上的对称代数单子

$$\text{Sym}^\bullet(-): \mathbf{Mod}_R \to \mathbf{Mod}_R$$

将$R$模$M$映到各阶对称张量幂的直和

$$\text{Sym}^\bullet(M) = \bigoplus_{k=0}^\infty \text{Sym}^k(M)$$

其中$\text{Sym}^0(M) = R$。例如，$\text{Sym}^\bullet(R^{\oplus n}) \cong R[x_1,\ldots, x_n]$，左右两边作为$R$模同构。如此，对称代数单子上的代数，是交换$R$代数。类似地，也有反对称张量单子$\text{Alt}^\bullet(-)$与全张量单子$T^\bullet(-)$，相应的代数分别是反对称$R$代数与自由$R$代数，故

$$\begin{align} \text{Alt}^\bullet(R^{\oplus n}) &= R(x_1,\ldots, x_n),\\ \text{T}^\bullet(R^{\oplus n}) &= R\langle x_1,\ldots, x_n \rangle, \end{align}$$

前者是$R$上添加$n$个生成元的自由反对称代数，而后者则是$n$个生成元的自由代数。

#### E∞环谱中的交换代数

对于高度结构的环谱，亦有类似的构造，对于可交换$\mathbb{S}$代数$A$，对应单子上的代数是可交换的$A$代数。若$\mathbf{Mod}_A$表示$A$模的范畴，则可以考虑函子$\mathbb{P}: \mathbf{Mod}_A \to \mathbf{Mod}_A$，定义为

$$\mathbb{P}(M) = \bigvee_{j \geq 0} M^j/\Sigma_j,$$

其中

$$M^j = \underbrace{M\wedge_A \cdots \wedge_A M}_j.$$

此函子是单子，而由该单子上的代数范畴，可以得到可交换$A$代数的范畴$\mathcal{C}_A$。

## 单子与伴随

如前文所述，任何伴随关系皆产生单子。反之，每个单子$T$皆可由某个伴随关系产生，即原范畴与$T$代数的艾伦伯格－摩尔范畴之间的自由－遗忘伴随

$$T(-) : \mathcal C \rightleftarrows \mathcal C^T : F.$$

其中，左伴随$T(-)$将$\mathcal C$的物件$x$映到自由$T$代数$T(x)$，右伴随$F$则将$T$代数$(x, h)$遗忘掉$h$，变回$x$。然而，通常有多组不同的伴随关系产生同样的单子，该些伴随关系组成范畴$\mathbf{Adj}(\mathcal C,T)$：物件是伴随关系$(F,G,\eta,\varepsilon)$使得$(GF, \eta, G\varepsilon F)=(T,\eta,\mu)$，而态射是在$\mathcal C$一侧为恒等函子的伴随关系态射。如此，艾伦伯格－摩尔范畴的自由－遗忘伴随$\mathcal C^T$是$\mathbf{Adj}(\mathcal C,T)$的终物件，而始物件是克莱斯利范畴$\mathcal C_T$，定义为$\mathcal C^T$中的自由$T$代数组成的完全子范畴，即仅包含形如$T(x)$的$T$代数，其中$x$历遍$\mathcal \mathcal C$的物件。

### 单子伴随

设有伴随关系$(F : \mathcal C \to \mathcal D,G : \mathcal D \to \mathcal C,\eta,\varepsilon)$，对应单子为$T$，则函子$G$可分解为

$$\mathcal D \xrightarrow{\tilde G} \mathcal C^T \xrightarrow{F} \mathcal C,$$

其中$F$是遗忘函子。换言之，对$\mathcal D$中任意物件$Y$，都能赋予$G(Y)$自然的$T$代数结构。若分解式中，首个函子$\tilde G$给出$\mathcal D$与$C^T$两范畴间的等价，则形容该伴随关系为单子的（monadic）。后亦引申用作形容函子，若函子$G: \mathcal D\to \mathcal C$有左伴随$F$，且该伴随关系为单子的，则$G$亦称为单子的。例如，群范畴与集合范畴间的自由－遗忘伴随是单子的，因为相应单子$T$上的$T$代数是群（见前文）。一般而言，若有伴随关系$(F : \mathcal C \to \mathcal D,G : \mathcal D \to \mathcal C,\eta,\varepsilon)$为单子的，则单从$\mathcal C$的物件及其上的$T$作用，已足以重组出$\mathcal D$的物件。

### 贝克单子性定理

贝克单子性定理给出伴随关系在何种充要条件下为单子的。定理有以下简化版：

若满足以下三项条件：

- $G$为保守函子，换言之，$G$反映同构（reflects isomorphisms），即对$\mathcal D$中每一支态射，其为同构当且仅当在$G$作用下的像为$\mathcal C$中的同构。
- $\mathcal C$有余等化子。
- $G$保余等化子。

则$G$为单子的。

例如，由紧豪斯多夫空间范畴$\mathbf{CHaus}$到集合范畴$\mathbf{Set}$的遗忘函子是单子的。然而，由任意拓扑空间范畴$\mathbf{Top}$到集合范畴$\mathbf{Set}$的遗忘函子则并非单子的，而定理中，保守函子的条件不成立，因为有非紧或非豪斯多夫空间，之间存在连续双射，但不为同胚。

贝克定理有对偶版本，刻划余单子伴随关系，对拓扑斯论及有关下降 (范畴论)的代数几何课题有用。

余单子的伴随关系，首先有下列例子：

$$- \otimes_A B : \mathbf{Mod}_A \rightleftarrows \mathbf{Mod}_B : F,$$

其中$A, B$皆为交换环，左伴随用到的张量积$\otimes_A$的定义中，选定了环同态$A \to B$，而右伴随$F$是遗忘函子。根据贝克定理，当且仅当$B$为忠实平坦$A$模时，该伴随为余单子的。所以，可将配备下降数据（descent datum，即源自伴随关系的余单子的作用）的$B$模，降成$A$模。所得的忠实平坦下降理论，广泛应用于代数几何。

## 用途

函数式编程中，会使用单子表达某类（有时有副作用的）顺序式计算，见单子 (函数式编程)。

范畴论逻辑中，藉闭包算子、内代数，以及两者与S4模态逻辑、直觉主义逻辑的关系，能以单子馀单子理论类比模态逻辑。

## 推广

亦可定义2-范畴$\mathcal C$中的单子。