Edited at

圏論以前の準備運動―関手と自然変換―


目次


自然変換の定義

まずは定義を見てみましょう。

具体例を考えたとき、それが自然変換の定義を満たしているのか、

確認したくなったらここに戻ってくれば良い。

確認を重ねるうちに定義には慣れてくるはずだ。


関手と自然変換

圏 $\boldsymbol{C}, \boldsymbol{D}$とし、関手 $F \colon \boldsymbol{C} \longrightarrow \boldsymbol{D}$ から

関手 $G \colon \boldsymbol{C} \longrightarrow \boldsymbol{D}$ への変換 $\theta \colon F \Longrightarrow G$ を考える。

変換は $\theta_{a} \colon F\ a \longrightarrow G\ a$ により定義される。 $\theta_{a}$ は射の族で、

各対象 $a\in\mathrm{Obj}(\boldsymbol{C})$ に対して射 $\theta_{a}\in\mathrm{Mor}(\boldsymbol{D})$ が存在する。

次の条件を満たすとき、$\theta$ は自然変換である。


  1. (自然性)$F\ f \ggg \theta_{b} = \theta_{a} \ggg G\ f$ が成り立つ。

つまり $\theta$ が自然変換の場合にはこれが可換図式となる。

式だけ見ていると到底覚えられそうに無いけれど、

図を描くと満たして欲しそうな式が何となく分かるだろう。


垂直合成

圏 $\boldsymbol{C}$ から圏 $\boldsymbol{D}$ への関手 $F, G, H$ に対して、

自然変換 $\theta \colon F \Longrightarrow G$ と自然変換 $\sigma \colon G \Longrightarrow H$ の

垂直合成 $\theta \ggg \sigma \colon F \Longrightarrow H$ を考える。

$\theta$ と $\sigma$ が自然変換であることから

は可換図式であり、射の族 $(\theta \ggg \sigma)_{a} = \theta_{a} \ggg \sigma_{a}$

と定義することで垂直合成 $\theta \ggg \sigma$ は自然変換となる。

何か普通の合成っぽいことが感じられるだろう。

垂直と付いていることから分かるように、水平合成もある。


恒等変換

圏 $\boldsymbol{C}$ から圏 $\boldsymbol{D}$ への関手 $F$ に対して、

恒等変換 $\mathrm{id}_{F} \colon F \Longrightarrow F$ を考える。

射の族 $(\mathrm{id}_{F})_{a} = \mathrm{id}_{F\ a}$ と定義することで

は可換図式、すなわち恒等変換 $\mathrm{id}_{F}$ は自然変換となる。


水平合成

圏 $\boldsymbol{C}$ から圏 $\boldsymbol{D}$ への関手 $F, F'$ と

圏 $\boldsymbol{D}$ から圏 $\boldsymbol{E}$ への関手 $G, G'$ に対して、

自然変換 $\theta \colon F \Longrightarrow F'$ と自然変換 $\sigma \colon G \Longrightarrow G'$ の

水平合成 $\theta \cdot \sigma \colon F \cdot G \Longrightarrow F' \cdot G'$ を考える。

$\theta$ と $\sigma$ が自然変換であることから

は可換図式であり、射の族 $(\theta \cdot \sigma)_{a} = G\ \theta_{a} \ggg \sigma_{F'\ a} = \sigma_{F\ a} \ggg G'\ \theta_{a}$

と定義することで水平合成 $\theta \cdot \sigma$ は自然変換となる。


圏 $\boldsymbol{C}$ から圏 $\boldsymbol{D}$ への関手 $F, F'$ と

圏 $\boldsymbol{D}$ から圏 $\boldsymbol{E}$ への関手 $G$ に対して、

自然変換 $\theta \colon F \Longrightarrow F'$ と関手 $G \colon \boldsymbol{D} \longrightarrow \boldsymbol{E}$ の

合成 $G\ \theta \colon F\cdot G \Longrightarrow F'\cdot G$ を考える。

同様に

圏 $\boldsymbol{D}$ から圏 $\boldsymbol{E}$ への関手 $G'$ に対して、

自然変換 $\theta \colon F \Longrightarrow F'$ と関手 $G' \colon \boldsymbol{D} \longrightarrow \boldsymbol{E}$ の

合成 $G'\ \theta \colon F\cdot G' \Longrightarrow F'\cdot G'$ を考える。

射の族 $(G\ \theta)_{a} = G\ \theta_{a}$ と定義することで合成 $G\ \theta$ は自然変換となり、

射の族 $(G'\ \theta)_{a} = G'\ \theta_{a}$ と定義することで合成 $G'\ \theta$ は自然変換となる。

関手 $G\ -$ の引数部分 $-$ にはこれまで対象と射を考えていたが、

ここに自然変換もさりげなく仲間入りしているように見える。


圏 $\boldsymbol{C}$ から圏 $\boldsymbol{D}$ への関手 $F$ と

圏 $\boldsymbol{D}$ から圏 $\boldsymbol{E}$ への関手 $G, G'$ に対して、

関手 $F \colon \boldsymbol{C} \longrightarrow \boldsymbol{D}$ と自然変換 $\sigma \colon G \Longrightarrow G'$ の

合成 $\sigma_{F} \colon F\cdot G \Longrightarrow F\cdot G'$ を考える。

同様に

圏 $\boldsymbol{C}$ から圏 $\boldsymbol{D}$ への関手 $F'$ に対して、

関手 $F' \colon \boldsymbol{C} \longrightarrow \boldsymbol{D}$ と自然変換 $\sigma \colon G \Longrightarrow G'$ の

合成 $\sigma_{F'} \colon F'\cdot G \Longrightarrow F'\cdot G'$ を考える。

射の族 $(\sigma_{F})_{a} = \sigma_{F\ a}$ と定義することで合成 $\sigma_{F}$ は自然変換となり、

射の族 $(\sigma_{F'})_{a} = \sigma_{F'\ a}$ と定義することで合成 $\sigma_{F'}$ は自然変換となる。

自然変換 $\sigma_{-}$ の引数部分 $-$ にはこれまで対象を考えていたが、

ここに関手もさりげなく仲間入りしているように見える。


これら関手と自然変換の合成を用いることで、

$\theta \cdot \sigma = G\ \theta \ggg \sigma_{F'} = \sigma_{F} \ggg G'\ \theta$ と

水平合成 $\theta \cdot \sigma$ を定義すこともできる。

いろんな合成があるので慣れるまでは複雑に感じる。

図が多くなってしまったがこの部分の理解はきっと重要。


関手の圏

自然変換を関手から関手への射とみなすこともできる。

つまり、関手が対象で自然変換が射な圏 $\boldsymbol{D}^\boldsymbol{C}$ を構成可能である。

圏 $\boldsymbol{C}$ から圏 $\boldsymbol{D}$ への関手 $F \colon \boldsymbol{C} \longrightarrow \boldsymbol{D}$ を対象、

$F,G\in\mathrm{Obj}(\boldsymbol{D}^\boldsymbol{C})$ に対して自然変換 $\theta \colon F \Longrightarrow G$ を射とする。

合成射を垂直合成で恒等射を恒等変換で定義すれば

$\boldsymbol{D}^\boldsymbol{C}$ は圏の定義を満たすことが以下のように確認できる。


  1. (結合律)

    射(すなわち自然変換) $\theta,\sigma,\tau\in\mathrm{Mor}(\boldsymbol{D}^\boldsymbol{C})$ に対して

    $(\theta \ggg (\sigma \ggg \tau))_{a} = \theta_{a} \ggg (\sigma \ggg \tau)_{a} = \theta_{a} \ggg \sigma_{a} \ggg \tau_{a}$ と

    $((\theta \ggg \sigma) \ggg \tau)_{a} = (\theta \ggg \sigma)_{a} \ggg \tau_{a} = \theta_{a} \ggg \sigma_{a} \ggg \tau_{a}$ から

    $\theta \ggg (\sigma \ggg \tau) = (\theta \ggg \sigma) \ggg \tau$ が成り立つ。


  2. (単位律)

    射(すなわち自然変換) $\mathrm{id}_{F},\theta,\mathrm{id}_{G}\in\mathrm{Mor}(\boldsymbol{D}^\boldsymbol{C})$ に対して

    $(\mathrm{id}_{F} \ggg \theta)_{a} = (\mathrm{id}_{F})_{a} \ggg \theta_{a} = \mathrm{id}_{F\ a} \ggg \theta_{a} = \theta_{a}$ と

    $(\theta \ggg \mathrm{id}_{G})_{a} = \theta_{a} \ggg (\mathrm{id}_{G})_{a} = \theta_{a} \ggg \mathrm{id}_{G\ a} = \theta_{a}$ から

    $\mathrm{id}_{F} \ggg \theta = \theta \ggg \mathrm{id}_{G} = \theta$ が成り立つ。


圏の圏 $\mathbf{Cat}$ では射(すなわち関手)に対してさらに射(すなわち自然変換)

を考えることができる。こうした射の射という概念が重要な気がする。

ちなみに、水平合成に関しても結合律と単位律は成り立つ。


  1. (結合律)

    $\theta\in\mathrm{Mor}(\boldsymbol{D}^\boldsymbol{C}), \sigma\in\mathrm{Mor}(\boldsymbol{E}^\boldsymbol{D}), \tau\in\mathrm{Mor}(\boldsymbol{F}^\boldsymbol{E})$ に対して

    $(\theta \cdot (\sigma \cdot \tau))_{a}= (G \cdot H)\ \theta_{a} \ggg (\sigma \cdot \tau)_{F'\ a}$

    $ = H\ (G\ \theta_{a}) \ggg H\ \sigma_{F'\ a} \ggg \tau_{G'\ (F'\ a)}$ と

    $((\theta \cdot \sigma) \cdot \tau)_{a} = H\ (\theta \cdot \sigma)_{a} \ggg \tau_{(F' \cdot G')\ a}$

    $ = H\ (G\ \theta_{a} \ggg \sigma_{F'\ a}) \ggg \tau_{G'\ (F'\ a)}$ から

    $\theta \cdot (\sigma \cdot \tau) = (\theta \cdot \sigma) \cdot \tau$ が成り立つ。


  2. (単位律)

    $\mathrm{id}_{\mathrm{id}_{\boldsymbol{C}}}\in\mathrm{Mor}(\boldsymbol{C}^\boldsymbol{C}),\theta\in\mathrm{Mor}(\boldsymbol{D}^\boldsymbol{C}), \mathrm{id}_{\mathrm{id}_{\boldsymbol{D}}}\in\mathrm{Mor}(\boldsymbol{D}^\boldsymbol{D})$ に対して

    $(\mathrm{id}_{\mathrm{id}_{\boldsymbol{C}}} \cdot \theta)_{a} = F\ (\mathrm{id}_{\mathrm{id}_{\boldsymbol{C}}})_{a} \ggg \theta_{\mathrm{id}_{\boldsymbol{C}}\ a} = F\ \mathrm{id}_{\mathrm{id}_{\boldsymbol{C}}\ a} \ggg \theta_{a}$

    $ = F\ \mathrm{id}_{a} \ggg \theta_{a} = \mathrm{id}_{F\ a} \ggg \theta_{a} = \theta_{a}$ と

    $(\theta \cdot \mathrm{id}_{\mathrm{id}_{\boldsymbol{D}}})_{a} = \mathrm{id}_{\boldsymbol{D}}\ \theta_{a} \ggg (\mathrm{id}_{\mathrm{id}_{\boldsymbol{D}}})_{F'\ a} = \theta_{a} \ggg \mathrm{id}_{\mathrm{id}_{\boldsymbol{D}}\ (F'\ a)}$

    $ = \theta_{a} \ggg \mathrm{id}_{F'\ a} = \theta_{a}$ から

    $\mathrm{id}_{\mathrm{id}_{\boldsymbol{C}}} \cdot \theta = \theta \cdot \mathrm{id}_{\mathrm{id}_{\boldsymbol{D}}} = \theta$ が成り立つ。




関手の圏 $\boldsymbol{D}^{\boldsymbol{C}}, \boldsymbol{E}^{\boldsymbol{D}}, \boldsymbol{E}^{\boldsymbol{C}}$ とし、

双関手 $- \cdot - \colon \boldsymbol{D}^\boldsymbol{C} \times \boldsymbol{E}^\boldsymbol{D} \longrightarrow \boldsymbol{E}^\boldsymbol{C}$ を考える。

$(F,G) \in \mathrm{Obj}(\boldsymbol{D}^\boldsymbol{C} \times \boldsymbol{E}^\boldsymbol{D})$ を $F \cdot G \in \mathrm{Obj}(\boldsymbol{E}^\boldsymbol{C})$ に対応させ、

$(\theta,\sigma) \in \mathrm{Mor}(\boldsymbol{D}^\boldsymbol{C} \times \boldsymbol{E}^\boldsymbol{D})$ を $\theta \cdot \sigma \in \mathrm{Mor}(\boldsymbol{E}^\boldsymbol{C})$ に対応させる。

このとき $- \cdot -$ が関手であることを確認できる。


  1. (恒等射の保存)

    $(\mathrm{id}_{F} \cdot \mathrm{id}_{G})_{a} = (G\ \mathrm{id}_{F} \ggg (\mathrm{id}_{G})_{F})_{a} = (G\ \mathrm{id}_{F})_{a} \ggg ((\mathrm{id}_{G})_{F})_{a}$

    $ = G\ (\mathrm{id}_{F})_{a} \ggg (\mathrm{id}_{G})_{F\,a} = G\ \mathrm{id}_{F\ a} \ggg \mathrm{id}_{G\ (F\,a)} = \mathrm{id}_{G\,(F\,a)} \ggg \mathrm{id}_{(F \ggg G)\,a}$

    すなわち $\mathrm{id}_{F} \cdot \mathrm{id}_{G} = \mathrm{id}_{F \cdot G} \ggg \mathrm{id}_{F \cdot G} = \mathrm{id}_{F \cdot G}$ が成り立つ。


  2. (合成の保存)

    $((\theta \ggg \theta') \cdot (\sigma \ggg \sigma'))_{a} = (G\ (\theta \ggg \theta') \ggg (\sigma \ggg \sigma')_{F''})_{a}$

    $ = G\ (\theta \ggg \theta')_{a} \ggg (\sigma \ggg \sigma')_{F''\,a} = G\ (\theta_{a} \ggg \theta'_{a}) \ggg (\sigma_{F''\,a} \ggg \sigma'_{F''\,a})$

    $= G\ \theta_{a} \ggg G\ \theta'_{a} \ggg \sigma_{F''\,a} \ggg \sigma'_{F''\,a} = G\ \theta_{a} \ggg (\sigma_{F'\,a} \ggg G'\ \theta'_{a}) \ggg \sigma'_{F''\,a}$

    $= (G\ \theta_{a} \ggg \sigma_{F'\,a}) \ggg (G'\ \theta'_{a} \ggg \sigma'_{F''\,a}) = (\theta \cdot \sigma)_{a} \ggg (\theta' \cdot \sigma')_{a}$

    すなわち $(\theta \ggg \theta') \cdot (\sigma \ggg \sigma') = (\theta \cdot \sigma) \ggg (\theta' \cdot \sigma')$ が成り立つ。




関手の圏 $\boldsymbol{D}^{\boldsymbol{C}}, \boldsymbol{E}^{\boldsymbol{D}}, \boldsymbol{E}^{\boldsymbol{C}}$ とし、$G, G' \in \mathrm{Obj}(\boldsymbol{E}^{\boldsymbol{D}})$ から定まる

関手 $- \cdot G \colon \boldsymbol{D}^{\boldsymbol{C}} \longrightarrow \boldsymbol{E}^{\boldsymbol{C}}$ と関手 $- \cdot G' \colon \boldsymbol{D}^{\boldsymbol{C}} \longrightarrow \boldsymbol{E}^{\boldsymbol{C}}$ および

$\sigma \colon G \Longrightarrow G'$ から定まる自然変換 $\widetilde{\sigma} \colon - \cdot G \Longrightarrow - \cdot G'$ を考える。

$F \in \mathrm{Obj}(\boldsymbol{D}^{\boldsymbol{C}})$ を $F \cdot G \in \mathrm{Obj}(\boldsymbol{E}^{\boldsymbol{C}})$ に対応させ、

$\theta \in \mathrm{Mor}(\boldsymbol{D}^{\boldsymbol{C}})$ を $\theta \cdot G = \theta \cdot \mathrm{id}_{G} = G\ \theta \in \mathrm{Mor}(\boldsymbol{E}^{\boldsymbol{C}})$ に対応させる

このとき $- \cdot G$ が関手であること確認できる。

任意の双関手 $B \colon \boldsymbol{C}\times\boldsymbol{D} \longrightarrow \boldsymbol{E}$ に対して

対象の対応 $F(d)\ c = B\ (c,d)$ と

射の対応 $F(d)\ f = B\ (f,\mathrm{id}_{d})$ で

関手 $F(d) \colon \boldsymbol{C} \longrightarrow \boldsymbol{E}$ を定義できる。


  1. (恒等射の保存)

    $F(d)\ \mathrm{id}_{c} = B\ (\mathrm{id}_{c},\mathrm{id}_{d}) = \mathrm{id}_{B\,(c,d)}$

    すなわち $F(d)\ \mathrm{id}_{c} = \mathrm{id}_{F(d)\,c}$ が成り立つ。


  2. (合成の保存)

    $F(d)\ (f \ggg g) = B\ (f \ggg g,\mathrm{id}_{d}) = B\ (f,\mathrm{id}_{d}) \ggg B\ (g,\mathrm{id}_{d})$

    すなわち $F(d)\ (f \ggg g) = F(d)\ f \ggg F(d)\ g$ が成り立つ。



変換 $\widetilde{\sigma} \colon - \cdot G \Longrightarrow - \cdot G' $ を射の族 $\widetilde{\sigma}_{F} = \sigma_{F}$ で定義する。

水平合成の定義で見たように

$G\ \theta \ggg \sigma_{F'} = \sigma_{F} \ggg G'\ \theta$

が成り立つため $\widetilde{\sigma}$ は自然変換である。

ここでは型が異なる $\sigma$ と $\widetilde{\sigma}$ を別の名前で区別したが、

オーバーロードだと思えば同じ名前にして良さそう。


関手の圏 $\boldsymbol{E}^{\boldsymbol{C}}, \boldsymbol{D}^{\boldsymbol{C}}, \boldsymbol{E}^{\boldsymbol{D}}$ とし、$F, F' \in \mathrm{Obj}(\boldsymbol{D}^{\boldsymbol{C}})$ から定まる

関手 $F \cdot - \colon \boldsymbol{E}^{\boldsymbol{D}} \longrightarrow \boldsymbol{E}^{\boldsymbol{C}}$ と関手 $F' \cdot - \colon \boldsymbol{E}^{\boldsymbol{D}} \longrightarrow \boldsymbol{E}^{\boldsymbol{C}}$ および

$\theta \colon F \Longrightarrow F'$ から定まる自然変換 $\widetilde{\theta} \colon F \cdot - \Longrightarrow F' \cdot -$ を考える。

$G \in \mathrm{Obj}(\boldsymbol{E}^{\boldsymbol{D}})$ を $F \cdot G \in \mathrm{Obj}(\boldsymbol{E}^{\boldsymbol{C}})$ に対応させ、

$\sigma \in \mathrm{Mor}(\boldsymbol{E}^{\boldsymbol{D}})$ を $F \cdot \sigma = \mathrm{id}_{F} \cdot \sigma = \sigma_{F} \in \mathrm{Mor}(\boldsymbol{E}^{\boldsymbol{C}})$ に対応させる。

このとき $F \cdot -$ が関手であることを確認できる。

任意の双関手 $B \colon \boldsymbol{C}\times\boldsymbol{D} \longrightarrow \boldsymbol{E}$ に対して

対象の対応 $F(c)\ d = B\ (c,d)$ と

射の対応 $F(c)\ f = B\ (\mathrm{id}_{c},f)$ で

関手 $F(c) \colon \boldsymbol{D} \longrightarrow \boldsymbol{E}$ を定義できる。


  1. (恒等射の保存)

    $F(c)\ \mathrm{id}_{d} = B\ (\mathrm{id}_{c},\mathrm{id}_{d}) = \mathrm{id}_{B\,(c,d)}$

    すなわち $F(c)\ \mathrm{id}_{d} = \mathrm{id}_{F(c)\,d}$ が成り立つ。


  2. (合成の保存)

    $F(c)\ (f \ggg g) = B\ (\mathrm{id}_{c},f \ggg g) = B\ (\mathrm{id}_{c},f) \ggg B\ (\mathrm{id}_{c},g)$

    すなわち $F(c)\ (f \ggg g) = F(c)\ f \ggg F(c)\ g$ が成り立つ。



変換 $\widetilde{\theta} \colon F \cdot - \Longrightarrow F’ \cdot - $ を射の族 $\widetilde{\theta}_{G} = G\ \theta$ で定義する。

水平合成の定義で見たように

$G\ \theta \ggg \sigma_{F'} = \sigma_{F} \ggg G'\ \theta$

が成り立つため $\widetilde{\theta}$ は自然変換である。


自然変換の具体例

定義ばかりじゃ何も見えてこないので、

具体例を通して定義の理解を深める。

自然変換が定義できると何が嬉しいのかは置いておいて、

以下の例が自然変換なことを定義と照らし合わせ考えよう。


恒等関手から List 関手への自然変換

恒等関手 $\mathrm{id}_{\mathbf{Hask}} \colon \mathbf{Hask} \longrightarrow \mathbf{Hask}$ と

List 関手 $\mathrm{List} \colon \mathbf{Hask} \longrightarrow \mathbf{Hask}$ に対して

自然変換 $\mathrm{unit} \colon \mathrm{id}_{\mathbf{Hask}} \Longrightarrow \mathrm{List}$ を考える。


自然変換を射の族 $\mathrm{unit}_{a}$ により定義する。


unit

{-# LANGUAGE ExplicitForAll #-}

unit :: forall a. a -> [a]
unit a = [a]


パラメタ多相すなわち型変数 a

各対象(すなわち型)に対して定義を行う。

暗黙的に forall となるのであえて書く意味は無い。


絵で描くとこんな感じになる。


例によって、丸で囲まれた対象内部の構造を潰して点 $\bullet$ とみなすと


さらに、四角で囲まれた圏内部の構造を潰して点 $\scriptscriptstyle\blacksquare$ とみなすと

圏の圏になる。


関手を対象とみなし、自然変換を射とみなすと

関手の圏になる。

自分自身に戻ってくるような関手なので自己関手の圏だ。


List 関手から Maybe 関手への自然変換

List 関手 $\mathrm{List} \colon \mathbf{Hask} \longrightarrow \mathbf{Hask}$ と

Maybe 関手 $\mathrm{Maybe} \colon \mathbf{Hask} \longrightarrow \mathbf{Hask}$ に対して

自然変換 $\mathrm{head} \colon \mathrm{List} \Longrightarrow \mathrm{Maybe}$ を考える。


自然変換を射の族 $\mathrm{head}_{a}$ により定義する。


head

{-# LANGUAGE ExplicitForAll #-}

import Prelude hiding (head)

head :: forall a. [a] -> Maybe a
head [] = Nothing
head (x:_) = Just x


パラメタ多相すなわち型変数 a

各対象(すなわち型)に対して定義を行う。

暗黙的に forall となるのであえて書く意味は無い。


絵で描くとこんな感じになる。


例によって、丸で囲まれた対象内部の構造を潰して点 $\bullet$ とみなすと


さらに、四角で囲まれた圏内部の構造を潰して点 $\scriptscriptstyle\blacksquare$ とみなすと

圏の圏になる。


関手を対象とみなし、自然変換を射とみなすと

関手の圏になる。

自分自身に戻ってくるような関手なので自己関手の圏だ。


Hom 関手から Hom 関手への自然変換

Hom 関手の間に何か対応があるように見えていたが、

Hom 関手から Hom 関手への自然変換が存在する。

関手 $\mathrm{Hom}_{\boldsymbol{C}}(a,-) \colon \boldsymbol{C}\longrightarrow\mathbf{Set}$ を関手の圏における対象とし、

関手 $G \colon \boldsymbol{C}^{\mathrm{op}} \longrightarrow \mathbf{Set}^{\boldsymbol{C}}$ を考える。

対象の対応 $G\ a^{\mathrm{op}} = \mathrm{Hom}_{\boldsymbol{C}}(a,-)$ と

射の対応 $G\ f^{\mathrm{op}} = f \ggg -$ により関手を定義することができ、

関手の圏 $\mathbf{Set}^{\boldsymbol{C}}$ における射 $G\ f^{\mathrm{op}}$ が自然変換となっている。


関手 $\mathrm{Hom}_{\boldsymbol{C}}(-,b) \colon \boldsymbol{C}^{\mathrm{op}} \longrightarrow\mathbf{Set}$ を関手の圏における対象とし、

関手 $Y \colon \boldsymbol{C} \longrightarrow \mathbf{Set}^{\boldsymbol{C}^{\mathrm{op}}}$ を考える。

対象の対応 $Y\ b = \mathrm{Hom}_{\boldsymbol{C}}(-,b)$ と

射の対応 $Y\ g = - \ggg g$ により関手を定義することができ、

関手の圏 $\mathbf{Set}^{\boldsymbol{C}^{\mathrm{op}}}$ における射 $Y\ g$ が自然変換となっている。

この関手 $Y$ を米田埋め込みと言うらしい。


随伴関手

自然変換の定義をある程度は理解したところで、

もう少し難しげな例として随伴関手を考えてみたい。

Kan 拡張1と関係があるらしいのできっと興味深い。

随伴関手は2つの圏の間の関係を記述する関手らしい。


同型射

射 $f \colon a \longrightarrow b$ に対してある射 $g \colon b \longrightarrow a$ が存在して

$\mathrm{id}_{a} = f \ggg g$ と $g \ggg f = \mathrm{id}_{b}$ が成り立つとき

$a$ と $b$ が同型であると言い、$a \cong b$ とあらわす。

この $f$ を同型射と言い、射が対象間の関係を記述する。

集合の圏 $\mathbf{Set}$ における同型射は全単射であり、

射が対象間の関係をあらわす感じが分かると思う。


同型関手

圏の圏における同型射を考える。

関手 $F \colon \boldsymbol{C} \longrightarrow \boldsymbol{D}$ に対してある関手 $G \colon \boldsymbol{D} \longrightarrow \boldsymbol{C}$ が存在して

$\mathrm{id}_{\boldsymbol{C}} = F \cdot G$ と $G \cdot F = \mathrm{id}_{\boldsymbol{D}}$ が成り立つとき

$\boldsymbol{C}$ と $\boldsymbol{D}$ が圏同型であると言い、 $\boldsymbol{C} \cong \boldsymbol{D}$ とあらわす。

この $F$ を同型関手と言い、関手が圏間の関係を記述する。


自然同型

関手の圏における同型射を考える。

自然変換 $\theta \colon F \longrightarrow G$ に対してある自然変換 $\sigma \colon G \longrightarrow F$ が存在して

$\mathrm{id}_{F} = \theta \ggg \sigma$ と $\sigma \ggg \theta = \mathrm{id}_{G}$ が成り立つとき

$F$ と $G$ が自然同型であると言い、 $F \cong G$ とあらわす。

この $\theta$ を自然同型と言い、自然変換が関手間の関係を記述する。


圏同値

圏の圏 $\mathbf{Cat}$ では射の射を考えられるため、

圏間の関係を記述する別の関手を定義することができる。

関手 $F \colon \boldsymbol{C} \longrightarrow \boldsymbol{D}$ に対してある関手 $G \colon \boldsymbol{D} \longrightarrow \boldsymbol{C}$ が存在して

$\mathrm{id}_{\boldsymbol{C}} \cong F \cdot G$ と $G \cdot F \cong \mathrm{id}_{\boldsymbol{D}}$ が成り立つとき

$\boldsymbol{C}$ と $\boldsymbol{D}$ が圏同値であると言い、 $\boldsymbol{C} \simeq \boldsymbol{D}$ とあらわす。

等号 $=$ が同型 $\cong$ に変わっただけなことが分かる。

関手が一致すると言う厳しすぎる条件を緩めているらしい。


随伴

関手間の等号 $=$ や自然同型 $\cong$ を定めているのは

自然変換であることに注意し、圏同型と圏同値の定義

を見直すと以下のようになる。

関手 $F \colon \boldsymbol{C} \longrightarrow \boldsymbol{D}$ と関手 $G \colon \boldsymbol{D} \longrightarrow \boldsymbol{C}$ に対して

$\eta \colon \mathrm{id}_{\boldsymbol{C}} \Longrightarrow F \cdot G$ と $\varepsilon \colon G \cdot F \Longrightarrow \mathrm{id}_{\boldsymbol{D}}$ を恒等変換とする。

このとき $\boldsymbol{C}$ と $\boldsymbol{D}$ が圏同型すなわち $\boldsymbol{C} \cong \boldsymbol{D}$。

関手 $F \colon \boldsymbol{C} \longrightarrow \boldsymbol{D}$ と関手 $G \colon \boldsymbol{D} \longrightarrow \boldsymbol{C}$ に対して

$\eta \colon \mathrm{id}_{\boldsymbol{C}} \Longrightarrow F \cdot G$ と $\varepsilon \colon G \cdot F \Longrightarrow \mathrm{id}_{\boldsymbol{D}}$ を自然同型とする。

このとき $\boldsymbol{C}$ と $\boldsymbol{D}$ が圏同値すなわち $\boldsymbol{C} \simeq \boldsymbol{D}$。


関手 $F \colon \boldsymbol{C} \longrightarrow \boldsymbol{D}$ と関手 $G \colon \boldsymbol{D} \longrightarrow \boldsymbol{C}$ に対して

$\eta \colon \mathrm{id}_{\boldsymbol{C}} \Longrightarrow F \cdot G$ と $\varepsilon \colon G \cdot F \Longrightarrow \mathrm{id}_{\boldsymbol{D}}$ を自然変換とする。

次の条件を満たすとき、随伴と言い $F \dashv G$ とあらわす。


  1. $F\ \eta \ggg \varepsilon_{F} = \mathrm{id}_{F}$ と $\eta_{G} \ggg G\ \varepsilon = \mathrm{id}_{G}$ が成り立つ。

1つめの等式は上図の三角形が可換図式となることをあらわし、

2つめの等式は上図の三角形が可換図式となることをあらわす。


自然変換 $\eta$ と自然変換 $\varepsilon$ より下図の四角形が可換図式となる。

$\eta_{c'} \ggg G\ (F\ p)=p \ggg \eta_{c}$ と $F\ (G\ q) \ggg \varepsilon_{d'}=\varepsilon_{d} \ggg q$ を

後に見る変換が自然変換であることを示すために用い、

$F\ (G\ f) \ggg \varepsilon_{d} = \varepsilon_{F\ c} \ggg f $ と $\eta_{c} \ggg G\ (F\ g) = g \ggg \eta_{G\ d}$ を

後に見る変換が自然同型であることを示すために用いる。


随伴の定義を書けはしたけれどまだよく分からないので、

他の方法で定義を書いてみることで理解を深めてみたい。

まずは、おもむろに以下のような双関手を考える。

対象 $(c^{\mathrm{op}},d)$ を $\mathrm{Hom}_{\boldsymbol{D}}(F\ c,d) \in \mathrm{Obj}(\mathrm{Set})$ に対応させ

射 $(p^{\mathrm{op}},q)$ を $\mathrm{Hom}_{\boldsymbol{D}}(F\ p,q) = F\ p \ggg - \ggg q \in \mathrm{Mor}(\mathrm{Set})$

に対応させる双関手 $\mathrm{Hom}_{\boldsymbol{D}}(F\ -,-) \colon \boldsymbol{C}^{\mathrm{op}}\times\boldsymbol{D} \longrightarrow \mathbf{Set}$。

対象 $(c^{\mathrm{op}},d)$ を $\mathrm{Hom}_{\boldsymbol{C}}(c,G\ d) \in \mathrm{Obj}(\mathrm{Set})$ に対応させ

射 $(p^{\mathrm{op}},q)$ を $\mathrm{Hom}_{\boldsymbol{C}}(p,G\ q) = p \ggg - \ggg G\ q \in \mathrm{Mor}(\mathrm{Set})$

に対応させる双関手 $\mathrm{Hom}_{\boldsymbol{C}}(-,G\ -) \colon \boldsymbol{C}^{\mathrm{op}}\times\boldsymbol{D} \longrightarrow \mathbf{Set}$。

さらに、これら双関手間の変換を考える。

変換 $\varphi \colon \mathrm{Hom}_{\boldsymbol{D}}(F\ -,-) \longrightarrow \mathrm{Hom}_{\boldsymbol{C}}(-,G\ -)$ を

射の族 $\varphi_{(c,d)} = \eta_{c} \ggg G\ -$ で定義し、

変換 $\psi \colon \mathrm{Hom}_{\boldsymbol{C}}(-,G\ -) \longrightarrow \mathrm{Hom}_{\boldsymbol{D}}(F\ -,-)$ を

射の族 $\psi_{(c,d)} = F\ - \ggg \varepsilon_{d}$ で定義する。

このとき $\varphi$ と $\psi$ は自然変換であることを示せる。

\begin{align}

(\mathrm{Hom}_{\boldsymbol{D}}(F\ p,q) \ggg \varphi_{(c',d')})(f)
&= \eta_{c'} \ggg G\ (F\ p \ggg f \ggg q)
\\
&=\eta_{c'} \ggg G\ (F\ p) \ggg G\ f \ggg G\ q
\\
&=(p \ggg \eta_{c}) \ggg G\ f \ggg G\ q,
\\[2mm]
(\varphi_{(c,d)} \ggg \mathrm{Hom}_{\boldsymbol{C}}(p,G\ q))(f)
&= p \ggg (\eta_{c} \ggg G\ f) \ggg G\ q,
\end{align}

すなわち

$\mathrm{Hom}_{\boldsymbol{D}}(F\ p,q) \ggg \varphi_{(c',d')} = \varphi_{(c,d)} \ggg \mathrm{Hom}_{\boldsymbol{C}}(p,G\ q)$

が成り立つから $\varphi$ は自然変換である。

\begin{align}

(\mathrm{Hom}_{\boldsymbol{C}}(p,G\ q) \ggg \psi_{(c',d')})(g)
&= F\ (p \ggg g \ggg G\ q) \ggg \varepsilon_{d'}
\\
&= F\ p \ggg F\ g \ggg F\ (G\ q) \ggg \varepsilon_{d'}
\\
&= F\ p \ggg F\ g \ggg (\varepsilon_{d} \ggg q),
\\[2mm]
(\psi_{(c,d)} \ggg \mathrm{Hom}_{\boldsymbol{D}}(F\ p,q))(g)
&= F\ p \ggg (F\ g \ggg \varepsilon_{d}) \ggg q,
\end{align}

すなわち

$\mathrm{Hom}_{\boldsymbol{C}}(p,G\ q) \ggg \psi_{(c',d')} = \psi_{(c,d)} \ggg \mathrm{Hom}_{\boldsymbol{D}}(F\ p,q)$

が成り立つから $\psi$ は自然変換である。


さらにこの $\varphi$ は自然同型であることを示せる。

\begin{align}

(\varphi_{(c,d)} \ggg \psi_{(c,d)})(f)
&=
F\ (\eta_{c} \ggg G\ f) \ggg \varepsilon_{d}
\\
&=
F\ \eta_{c} \ggg F\ (G\ f) \ggg \varepsilon_{d}
\\
&=
F\ \eta_{c} \ggg (\varepsilon_{F\ c} \ggg f)
\\
&=
(F\ \eta)_{c} \ggg (\varepsilon_{F})_{c} \ggg f
\\
&=
(F\ \eta \ggg \varepsilon_{F})_{c} \ggg f
\\
&=
(\mathrm{id}_{F})_{c} \ggg f
=
\mathrm{id}_{F\ c} \ggg f
=
f,
\\[2mm]
(\psi_{(c,d)} \ggg \varphi_{(c,d)})(g)
&=
\eta_{c} \ggg G\ (F\ g \ggg \varepsilon_{d})
\\
&=
\eta_{c} \ggg G\ (F\ g) \ggg G\ \varepsilon_{d}
\\
&=
(g \ggg \eta_{G\ d}) \ggg G\ \varepsilon_{d}
\\
&=
g \ggg (\eta_{G})_{d} \ggg (G\ \varepsilon)_{d}
\\
&=
g \ggg (\eta_{G} \ggg G\ \varepsilon)_{d}
\\
&=
g \ggg (\mathrm{id}_{G})_{d}
=
g \ggg \mathrm{id}_{G\ d}
=
g,
\end{align}

すなわち

$\varphi_{(c,d)} \ggg \psi_{(c,d)}=\mathrm{id}_{\mathrm{Hom}_{\boldsymbol{D}}(F\ c,d)}$ と

$\psi_{(c,d)} \ggg \varphi_{(c,d)}=\mathrm{id}_{\mathrm{Hom}_{\boldsymbol{C}}(c, G\ d)}$ が成り立つ。

したがって

$(\varphi \ggg \psi)_{(c,d)}=\varphi_{(c,d)} \ggg \psi_{(c,d)} = \mathrm{id}_{\mathrm{Hom}_{\boldsymbol{D}}(F\ c,d)} = (\mathrm{id}_{\mathrm{Hom}_{\boldsymbol{D}}(F\ -,-)})_{(c,d)}$

$(\psi \ggg \varphi)_{(c,d)}=\psi_{(c,d)} \ggg \varphi_{(c,d)} = \mathrm{id}_{\mathrm{Hom}_{\boldsymbol{C}}(c, G\ d)} = (\mathrm{id}_{\mathrm{Hom}_{\boldsymbol{C}}(-, G\ -)})_{(c,d)}$

であり

$\mathrm{id}_{\mathrm{Hom}_{\boldsymbol{D}}(F\ -,-)}=\varphi \ggg \psi$ と $\psi \ggg \varphi=\mathrm{id}_{\mathrm{Hom}_{\boldsymbol{C}}(-, G\ -)}$

が成り立つから $\varphi$ は自然同型である。



関手 $F \colon \boldsymbol{C} \longrightarrow \boldsymbol{D}$ と関手 $G \colon \boldsymbol{D} \longrightarrow \boldsymbol{C}$ に対して

$\mathrm{Hom}_{\boldsymbol{D}}(F\ -,-) \cong \mathrm{Hom}_{\boldsymbol{C}}(-,G\ -)$ が成り立つ。

このとき、随伴と言い $F \dashv G$ とあらわす。

随伴の意味するところは未だ理解できていないが、

とりあえず定義を2つの方法で書くことはできた。


自然変換の具体例で見たように、

Haskell ではパラメタ多相すなわち型変数により

自然変換を定義する射の族を表現していた。

自然同型を定める自然変換は

射の族 $\varphi_{(c,d)} \colon \mathrm{Hom}_{\boldsymbol{D}}(F\ c,d) \longrightarrow \mathrm{Hom}_{\boldsymbol{C}}(c,G\ d)$ と

射の族 $\psi_{(c,d)} \colon \mathrm{Hom}_{\boldsymbol{C}}(c,G\ d) \longrightarrow \mathrm{Hom}_{\boldsymbol{D}}(F\ c,d)$ であり


Adjunction

{-# LANGUAGE MultiParamTypeClasses #-}

class (Functor f, Functor g) => Adjunction f g where
unit :: c -> g (f c)
counit :: f (g d) -> d
leftAdjunct :: (f c -> d) -> (c -> g d)
rightAdjunct :: (c -> g d) -> (f c -> d)

unit = leftAdjunct id
counit = rightAdjunct id
leftAdjunct f = fmap f . unit
rightAdjunct f = counit . fmap f


$\varphi_{(c,d)}$ と leftAdjunct、$\psi_{(c,d)}$ と rightAdjunct

それぞれ対応していることが分かる。

id = leftAdjunct . rightAdjunct

rightAdjunct . leftAdjunct = id

成り立つとき、随伴と言い f $\dashv$ g とあらわす。

また、$\eta_{c}$ と unit、$\varepsilon_{d}$ と counit

それぞれ対応していることも分かるだろう。


まとめ

自然変換の合成がとても複雑に見えて

最初はどうしても抵抗を感じてしまう。

随伴からモナドを構成できるらしいので2

instance を作ってみると楽しいかもしれない。

これでひとまず基本は把握できたと思うので、

そろそろ圏論に入門できるのではないだろうか。