もう諦めない圏論基礎―モノイドからモナドへ―

# 想定読者と到達目標

[__モノイド__](https://qiita.com/norkron/items/237735106ee6e5333678#モノイド)の定義および
[__集合と写像__](https://qiita.com/norkron/items/237735106ee6e5333678#集合と写像)を知っていて、
モナドに関するパワー・ワードを
どうしても理解したい人へ。

モナドは
「[__自己関手の圏におけるモノイド対象__](#自己関手の圏におけるモノイド対象)」
「[__単位圏から自己関手の圏へのラックス・モノイド関手__](#単位圏から自己関手の圏へのラックスモノイド関手)」
「[__単位圏から圏の圏へのラックス 2-関手__](#単位圏から圏の圏へのラックス-2-関手)」
であることが分かるはず。



# 目次

- [__圏論入門前の準備運動―集合と写像―__](https://qiita.com/norkron/items/237735106ee6e5333678)
- [__もう諦めない圏論入門―対象と射―__](https://qiita.com/norkron/items/f90d851daf05a2efa567)
- [__もう諦めない圏論入門―圏と関手―__](https://qiita.com/norkron/items/f0de364cc980171b1db7)
- [__もう諦めない圏論入門―関手と自然変換―__](https://qiita.com/norkron/items/1cc1b593e04184f0fe98)
- [__もう諦めない圏論付録―ストリング・ダイアグラム―__](https://qiita.com/norkron/items/e55a39c22288955689f9)
- [__もう諦めない圏論基礎―極限からカン拡張へ―__](https://qiita.com/norkron/items/681aed1323ac95431ea3)
- [__もう諦めない圏論基礎―モノイドからモナドへ―__](https://qiita.com/norkron/items/aff3ce925edc6be74923)
    - モノイド圏と 2-圏の概念を受け入れる
    - モナドがモノイドであることを理解した気になる
- [__もう諦めない圏論基礎―高次元圏と変換手―__](https://qiita.com/norkron/items/271b702a907f865aafc5)



# モノイド集合

集合 $S$ に
写像 $\diamond \colon S \times S \longrightarrow S$ と
単位元 $e \in S$ の情報を加える。

次の２つの条件を満たすとき、
組 $(S,\diamond,e)$ はモノイド集合である。

1. （結合律）$(a \diamond b) \diamond c = a \diamond (b \diamond c)$ が成り立つ。

2. （単位律）$e \diamond a = a \diamond e = a$ が成り立つ。

## モノイド則

Haskell では、
集合(すなわち型) `s` に
写像(すなわち関数) `(<>) :: s -> s -> s` と
単位元(すなわち値) `e :: s` の情報を加える。

```haskell:Monoid
import Prelude hiding (Monoid(..))

class Monoid s where
    e    :: s
    (<>) :: s -> s -> s
```

このときモノイド則は以下となる。

1. （結合律）`(a <> b) <> c` $=$ `a <> (b <> c)`

2. （単位律）`e <> a` $=$ `a <> e` $=$ `a`



# モナド

関手 $T \colon \boldsymbol{C} \longrightarrow \boldsymbol{C}$ に
自然変換 $\mu \colon T \cdot T \Longrightarrow T$ と
自然変換 $\eta \colon \mathrm{id}\_{\boldsymbol{C}} \Longrightarrow T$ の情報を加える。

次の２つの条件を満たすとき、
組 $(T,\mu,\eta)$ はモナドである。

1. （結合律）$\mu \cdot T \ggg \mu = T \cdot \mu \ggg \mu$ が成り立つ。
    [__可換図式__](https://qiita.com/norkron/items/f90d851daf05a2efa567#可換図式)と[__ストリング・ダイアグラム__](https://qiita.com/norkron/items/e55a39c22288955689f9#ストリングダイアグラム)でそれぞれ以下のように描ける。
    ![モナドの結合律](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/268212/9d2114a8-e213-4e23-09a4-41fcb4243534.png)
    ![モナドの結合律左辺](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/268212/a13a7383-ff3e-52e3-95d9-28adbc62a07a.png) $=$ ![モナドの結合律右辺](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/268212/2a90ca70-7374-1296-fd39-992bdeae49c3.png)

2. （単位律）$\eta \cdot T \ggg \mu = T \cdot \eta \ggg \mu = \mathrm{id}\_{T}$ が成り立つ。
    [__可換図式__](https://qiita.com/norkron/items/f90d851daf05a2efa567#可換図式)と[__ストリング・ダイアグラム__](https://qiita.com/norkron/items/e55a39c22288955689f9#ストリングダイアグラム)でそれぞれ以下のように描ける。
    ![モナドの単位律](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/268212/706235d5-6a36-a777-121d-326a88ae777b.png)
    ![モナドの単位律左辺](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/268212/fafd07be-57f4-bd07-e97f-1bdef53e2ff3.png) $=$ ![モナドの単位律中辺](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/268212/886df210-9a7f-bb7f-8b55-e05c000b7212.png) $=$ ![モナドの単位律右辺](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/268212/bebbc079-54cd-35ca-c453-e21adc6eb0f0.png)

## モナド則

[__関手の具体例__](https://qiita.com/norkron/items/f0de364cc980171b1db7#関手の具体例)でみたように、Haskell では、
対象(すなわち型)の対応 `t :: * -> *` と
射(すなわち関数)の対応 `fmap :: (a -> b) -> (f a -> f b)`
で関手を定義する。

関手 $t \colon \mathbf{Hask} \longrightarrow \mathbf{Hask}$ に
自然変換(すなわち多相関数) `join   :: t (t a) -> t a` と
自然変換(すなわち多相関数) `return :: a -> t a` の情報を加える。

```haskell:Monad
import Prelude hiding (Monad(..),(=<<))
import Control.Category ((>>>))

class Functor t => Monad t where
    join   :: t (t a) -> t a
    return :: a -> t a

(=<<) :: Monad t => (a -> t b) -> (t a -> t b)
(=<<) f = fmap f >>> join

(>>=) :: Monad t => t a -> (a -> t b) -> t b
(>>=) = flip (=<<)
```

このときモナド則は以下となる。

1. （結合律）`fmap join >>> join` $=$ `join >>> join`

2. （単位律）`fmap return >>> join` $=$ `return >>> join` $=$ `id`

3. （$\mu$ の自然性）`fmap (fmap f) >>> join` $=$ `join >>> fmap f`

4. （$\eta$ の自然性）`f >>> return = return >>> fmap f`

---

[__可換図式__](https://qiita.com/norkron/items/f90d851daf05a2efa567#可換図式)はただの等式なので恐れる必要はない。

自然変換の[__垂直合成__](https://qiita.com/norkron/items/1cc1b593e04184f0fe98#垂直合成)と[__水平合成__](https://qiita.com/norkron/items/1cc1b593e04184f0fe98#水平合成)を理解しないと
$\mu \cdot T, T \cdot \mu, \eta \cdot T, T \cdot \eta$ の意味が分からないのでつらい。

ここではモナド則を `join` で記述しているが、 
<details><summary>`>>=` を用いたよく見る形式を導出できる[^宿題]。</summary>
<div>

$\mu$ が自然変換であることから
$(T \cdot T)\ f \ggg \mu\_{b} = \mu\_{a} \ggg T\ f$ が成り立つ。

Haskell では次のようになる。
`fmap (fmap f) >>> join` $=$ `join >>> fmap f`

[^宿題]: さりげなく関手であることも使っている。

---

自然変換の等式 $\mu \cdot T \ggg \mu = T \cdot \mu \ggg \mu$ は
射の族の等式 $T\ \mu\_{a} \ggg \mu\_{a} = \mu\_{T\ a} \ggg \mu\_{a}$ である。

左辺
`fmap join >>> join :: Monad t => t (t (t a)) -> t a`
$=$ `fmap join >>> join $ fmap (fmap g) (fmap f m)`
$=$ `fmap (fmap g) >>> fmap join >>> join $ fmap f m`
$=$ `fmap f >>> fmap (fmap g) >>> fmap join >>> join $ m`
$=$ `fmap (f >>> fmap g >>> join) >>> join $ m`
$=$ `fmap (\x -> fmap g >>> join $ f x) >>> join $ m`
$=$ `fmap (\x -> f x >>= g) >>> join $ m`
$=$ `m >>= (\x -> f x >>= g)`

右辺
`join >>> join :: Monad t => t (t (t a)) -> t a`
$=$ `join >>> join $ fmap (fmap g) (fmap f m)`
$=$ `fmap (fmap g) >>> join >>> join $ fmap f m`
$=$ `(join >>> fmap g) >>> join $ fmap f m`
$=$ `fmap g >>> join $ join (fmap f m)`
$=$ `join (fmap f m) >>= g`
$=$ `(fmap f >>> join $ m) >>= g`
$=$ `(m >>= f) >>= g`

したがって
`m >>= (\x -> f x >>= g)` $=$ `(m >>= f) >>= g`

---

$\eta$ が自然変換であることから
$f \ggg \eta\_{b} = \eta\_{a} \ggg T\ f$ が成り立つ。

Haskell では次のようになる。
`f >>> return = return >>> fmap f`

---

自然変換の等式 $T \cdot \eta \ggg \mu = \mathrm{id}\_{T}$ は
射の族の等式 $\eta\_{T\ a} \ggg \mu\_{a} = \mathrm{id}\_{T\ a}$ である。

左辺
`return >>> join :: Monad t => t a -> t a`
`return >>> join $ f x`
$=$ `f >>> return >>> join $ x`
$=$ `(return >>> fmap f) >>> join $ x`
$=$ `fmap f >>> join $ return x`
$=$ `return x >>= f`

右辺
`id :: Monad t => t a -> t a`
`id $ f x` $=$ `f x`

したがって
`return x >>= f` $=$ `f x`

---

自然変換の等式 $\eta \cdot T \ggg \mu = \mathrm{id}\_{T}$ は
射の族の等式 $T\ \eta\_{a} \ggg \mu\_{a} = \mathrm{id}\_{T\ a}$ である。

`fmap return >>> join` $=$ `id`

左辺
`fmap return >>> join :: Monad t => t a -> t a`
`fmap return >>> join $ m` $=$ `m >>= return`

右辺
`id :: Monad t => t a -> t a`
`id m` $=$ `m`

したがって
`m >>= return` $=$ `m`

</div>
</details>



# 単対象圏

[__対象１つで射が整数値の圏__](https://qiita.com/norkron/items/f90d851daf05a2efa567#対象１つで射が整数値の圏)でみたように、
単対象圏はモノイドと関係がある。

対象が１つ $\\{\*\\} = \mathrm{Obj}(\boldsymbol{C})$ な圏 $\boldsymbol{C}$ を考える。
射 $f,g,h \colon * \longrightarrow *$ はいくつあっても良い。

![単対象圏](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/268212/d8254a6e-67ef-1c04-9af0-66660ab3c0a4.png)

---

[__Hom 集合__](https://qiita.com/norkron/items/f0de364cc980171b1db7#hom-集合)は[__集合の圏__](https://qiita.com/norkron/items/f0de364cc980171b1db7#集合の圏) $\mathbf{Set}$ の対象(すなわち集合)であるから、
射の合成 $\ggg$ を集合の圏 $\mathbf{Set}$ の射(すなわち写像)
$\ggg \colon \mathrm{Hom}\_{\boldsymbol{C}}(a,b) \times \mathrm{Hom}\_{\boldsymbol{C}}(b,c) \longrightarrow \mathrm{Hom}\_{\boldsymbol{C}}(a,c)$
とみなすことができる。

![射の合成](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/268212/6f1ebbe6-95d0-9e1b-bbbf-baad19d359a2.png)

---

集合 $\mathrm{Hom}\_{\boldsymbol{C}}(\*,\*)$ に
射の合成 $\ggg \colon \mathrm{Hom}\_{\boldsymbol{C}}(\*,\*) \times \mathrm{Hom}\_{\boldsymbol{C}}(\*,\*) \longrightarrow \mathrm{Hom}\_{\boldsymbol{C}}(\*,\*)$ と
恒等射 $\mathrm{id}\_{\displaystyle \*} \in \mathrm{Hom}\_{\boldsymbol{C}}(\*,\*)$ の情報を加える。

[__圏の定義__](https://qiita.com/norkron/items/f90d851daf05a2efa567#圏の定義)より結合律と単位律が成り立つ。

組 $(\mathrm{Hom}\_{\boldsymbol{C}}(\*,\*),\ggg,\mathrm{id}\_{\displaystyle \*})$ はモノイド集合である。

対象ではなく、射の集合がモノイドになっている。

## 圏の圏

同様に、対象が１つな[__圏の圏__](https://qiita.com/norkron/items/f0de364cc980171b1db7#圏の圏) $\mathbf{Cat}$ を考える。

対象は圏 $\boldsymbol{C}$ のみとし、
射(すなわち関手) $F,G,H \colon \boldsymbol{C} \longrightarrow \boldsymbol{C}$ はいくつあっても良い。

![対象が１つな圏の圏](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/268212/e1b19c27-cf7b-25b0-d04d-b58a5f77385f.png)

---

集合 $\mathrm{Hom}\_{\mathbf{Cat}}(\boldsymbol{C},\boldsymbol{C})$ に
関手の合成 $\cdot \colon \mathrm{Hom}\_{\mathbf{Cat}}(\boldsymbol{C},\boldsymbol{C}) \times \mathrm{Hom}\_{\mathbf{Cat}}(\boldsymbol{C},\boldsymbol{C}) \longrightarrow \mathrm{Hom}\_{\mathbf{Cat}}(\boldsymbol{C},\boldsymbol{C})$ と
[__恒等関手__](https://qiita.com/norkron/items/f0de364cc980171b1db7#恒等関手) $\mathrm{id}\_{\boldsymbol{C}} \in \mathrm{Hom}\_{\mathbf{Cat}}(\boldsymbol{C},\boldsymbol{C})$ の情報を加える。

[__圏の圏__](https://qiita.com/norkron/items/f0de364cc980171b1db7#圏の圏)においても結合律と単位律が成り立つ。

組 $(\mathrm{Hom}\_{\mathbf{Cat}}(\boldsymbol{C},\boldsymbol{C}) ,\cdot,\mathrm{id}\_{\boldsymbol{C}})$ はモノイド集合である。

対象ではなく、射(すなわち関手)の集合がモノイドになっている。

---

圏の圏 $\mathbf{Cat}$ は圏であるから、
対象 $\boldsymbol{C},\boldsymbol{D} \in \mathrm{Obj}(\mathbf{Cat})$ に対して集合 $\mathrm{Hom}\_{\mathbf{Cat}}(\boldsymbol{C},\boldsymbol{D})$ が存在し、
関手の合成 $\cdot \colon \mathrm{Hom}\_{\mathbf{Cat}}(\boldsymbol{C},\boldsymbol{D}) \times \mathrm{Hom}\_{\mathbf{Cat}}(\boldsymbol{D},\boldsymbol{E}) \longrightarrow \mathrm{Hom}\_{\mathbf{Cat}}(\boldsymbol{C},\boldsymbol{E})$
によりモノイド集合を構成することができた。

圏の圏 $\mathbf{Cat}$ の場合にはそれに加えて、
対象 $\boldsymbol{C},\boldsymbol{D} \in \mathrm{Obj}(\mathbf{Cat})$ に対して[__関手の圏__](https://qiita.com/norkron/items/1cc1b593e04184f0fe98#関手の圏) $\boldsymbol{D}^\boldsymbol{C}$ が存在する。



# 自己関手の圏

[__関手の圏__](https://qiita.com/norkron/items/1cc1b593e04184f0fe98#関手の圏)にて定義を与えた
対象(すなわち関手)を[__合成関手__](https://qiita.com/norkron/items/f0de364cc980171b1db7#合成関手) $\cdot$ で対応させ
射(すなわち自然変換)を[__水平合成__](https://qiita.com/norkron/items/1cc1b593e04184f0fe98#水平合成) $\cdot$ で対応させる
双関手 $- \cdot - \colon \boldsymbol{D}^\boldsymbol{C} \times \boldsymbol{E}^\boldsymbol{D} \longrightarrow \boldsymbol{E}^\boldsymbol{C}$ を考える。

$\boldsymbol{D}^\boldsymbol{C}$ を $\mathbf{Cat}(\boldsymbol{C},\boldsymbol{D})$ と書くことにして、
双関手 $- \cdot - \colon \mathbf{Cat}(\boldsymbol{C},\boldsymbol{D}) \times \mathbf{Cat}(\boldsymbol{D},\boldsymbol{E}) \longrightarrow \mathbf{Cat}(\boldsymbol{C},\boldsymbol{E})$
と書けば、関手の合成 $\cdot$ の場合とよく似ている。

---

[__自己関手__](https://qiita.com/norkron/items/f0de364cc980171b1db7#自己関手)の圏 $\boldsymbol{C}^{\boldsymbol{C}}$ は、これまでと異なり、
対象が１つの圏とは限らないことに注意しよう。
![自己関手の圏](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/268212/536ebcd4-0e42-3be7-f1f0-6f63297d73a4.png)
対象は関手 $F,G \colon \boldsymbol{C} \longrightarrow \boldsymbol{C}$ で
射は自然変換 $\theta \colon F \Longrightarrow G$ である。

---

関手の合成 $\cdot \colon \mathrm{Hom}\_{\mathbf{Cat}}(\boldsymbol{C},\boldsymbol{C}) \times \mathrm{Hom}\_{\mathbf{Cat}}(\boldsymbol{C},\boldsymbol{C}) \longrightarrow \mathrm{Hom}\_{\mathbf{Cat}}(\boldsymbol{C},\boldsymbol{C})$
は圏の圏 $\mathbf{Cat}$ における射(すなわち関手)に対する演算とみなせる。

双関手 $- \cdot - \colon \boldsymbol{C}^\boldsymbol{C}\times\boldsymbol{C}^\boldsymbol{C}\longrightarrow\boldsymbol{C}^\boldsymbol{C}$
は関手の圏 $\boldsymbol{C}^\boldsymbol{C}$ における対象(すなわち関手)に対する演算とみなせる。

---

圏 $\boldsymbol{C}^\boldsymbol{C}$ に
双関手 $- \cdot - \colon \boldsymbol{C}^\boldsymbol{C}\times\boldsymbol{C}^\boldsymbol{C}\longrightarrow\boldsymbol{C}^\boldsymbol{C}$ と
恒等関手 $\mathrm{id}\_{\boldsymbol{C}} \in \mathrm{Obj}(\boldsymbol{C}^{\boldsymbol{C}})$ の情報を加える。

双関手 $- \cdot -$ に対して[__結合律と単位律__](https://qiita.com/norkron/items/1cc1b593e04184f0fe98#結合律と単位律)が成り立つ。

組 $(\boldsymbol{C}^\boldsymbol{C},\cdot,\mathrm{id}_{\boldsymbol{C}})$ はモノイドっぽいけど集合ではない。

集合ではなく圏がモノイドっぽくなってしまった。
これは[__モノイド集合__](#モノイド集合)ではなくてモノイド圏といえる。



# 厳密モノイド圏

圏 $\boldsymbol{C}$ に
双関手 $- \diamond - \colon \boldsymbol{C}\times\boldsymbol{C}\longrightarrow\boldsymbol{C}$ と
単位対象 $e \in \mathrm{Obj}(\boldsymbol{C})$ の情報を加える。

次の２つの条件を満たすとき、
組 $(\boldsymbol{C},\diamond,e)$ は厳密モノイド圏である。

1. （結合律）$(- \diamond -) \diamond - = - \diamond (- \diamond -)$ が成り立つ。
2. （単位律）$e \diamond - = - \diamond e = \mathrm{id}\_{\boldsymbol{C}}$ が成り立つ。

ここで、関手 $a \diamond - \colon \boldsymbol{C}\longrightarrow\boldsymbol{C}$ は
$b \in \mathrm{Obj}(\boldsymbol{C})$ を $a \diamond b \in \mathrm{Obj}(\boldsymbol{C})$ に対応させ
$g \in \mathrm{Mor}(\boldsymbol{C})$ を $\mathrm{id}\_{a} \diamond g \in \mathrm{Mor}(\boldsymbol{C})$ に対応させる。

同様に、関手 $- \diamond b \colon \boldsymbol{C}\longrightarrow\boldsymbol{C}$ は
$a \in \mathrm{Obj}(\boldsymbol{C})$ を $a \diamond b \in \mathrm{Obj}(\boldsymbol{C})$ に対応させ
$f \in \mathrm{Mor}(\boldsymbol{C})$ を $f \diamond \mathrm{id}\_{b} \in \mathrm{Mor}(\boldsymbol{C})$ に対応させる。

---

自己関手の圏を一般化すると厳密モノイド圏になる。
厳密というのは満たすべき条件(結合律と単位律)が
等号 $=$ により記述されていることを意味する。

[__随伴関手__](https://qiita.com/norkron/items/1cc1b593e04184f0fe98#随伴関手)の[__定義__](https://qiita.com/norkron/items/1cc1b593e04184f0fe98#定義)のように、関手が一致すると言う条件を
等号 $=$ から同型 $\cong$ に変えることで少し緩めよう。



# モノイド圏

圏 $\boldsymbol{C}$ に
双関手 $- \diamond - \colon \boldsymbol{C}\times\boldsymbol{C}\longrightarrow\boldsymbol{C}$ と
単位対象 $e \in \mathrm{Obj}(\boldsymbol{C})$ の情報を加える。

次の３つの条件を満たすとき、
組 $(\boldsymbol{C},\diamond,e)$ はモノイド圏である。

1. （結合律）$(- \diamond -) \diamond - \cong - \diamond (- \diamond -)$ が成り立つ。

2. （単位律）$e \diamond - \cong - \diamond e \cong \mathrm{id}\_{\boldsymbol{C}}$ が成り立つ。

3. （一貫性条件）２つの図式が可換となる。
    ![モノイド圏の条件](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/268212/359b5560-c896-f1c7-9f0c-a5920ee39266.png)
    自然同型 $\alpha \colon (- \diamond -) \diamond - \Longrightarrow - \diamond (- \diamond -)$
    自然同型 $\lambda \colon e \diamond - \Longrightarrow \mathrm{id}\_{\boldsymbol{C}}$
    自然同型 $\rho \colon - \diamond e \Longrightarrow \mathrm{id}\_{\boldsymbol{C}}$

---

４つ以上の引数を持つ関手 $((-\diamond-)\diamond-)\diamond-$ などに
結合律と単位律が成り立つよう一貫性条件が加わるらしい。

[__集合の圏__](https://qiita.com/norkron/items/f0de364cc980171b1db7#集合の圏)を $\mathbf{Set}$ として
組 $(\mathbf{Set},\times,\\{\*\\})$ がモノイド圏であることを確認すれば、
条件を同型 $\cong$ に緩めた気持ちが分かるかもしれない。

[__圏の圏__](https://qiita.com/norkron/items/f0de364cc980171b1db7#圏の圏)を $\mathbf{Cat}$ として、同様に、
組 $(\mathbf{Cat},\times,\mathbf{1})$ がモノイド圏であることを確認できる。

---

圏 $\mathbf{Set}$ に
双関手 $- \diamond - \colon \mathbf{Set}\times\mathbf{Set}\longrightarrow\mathbf{Set}$ と
単位対象 $\\{\*\\} \in \mathrm{Obj}(\mathbf{Set})$ の情報を加える。

集合 $A,B \in \mathrm{Obj}(\mathbf{Set})$ と
写像 $f,g \in \mathrm{Mor}(\mathbf{Set})$ に対して、
対象(すなわち集合)の対応 $A \diamond B = A \times B$ と
射(すなわち写像)の対応 $f \diamond g = f \times g$ のように、
直積 $\times$ を用いて双関手 $- \diamond -$ を定義する。

$\\{\*\\}$ は元が１つの集合すなわち単集合である。

---

1. （結合律）
    ![集合の圏の結合律](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/268212/6df67306-c39b-6fca-18f6-938802bf2688.png)
    写像 $\alpha\_{(A,B,C)} \colon (A \times B) \times C \longrightarrow A \times (B \times C)$ を
    元の対応 $\alpha\_{(A,B,C)} \colon ((a,b),c) \longmapsto (a,(b,c))$
    により定義すれば、$\alpha$ は自然同型となる。

2. （単位律）
    ![集合の圏の単位律](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/268212/e341b7e8-0739-f5e7-99a3-82d1f94f321c.png)
    写像 $\lambda\_{B} \colon \\{\*\\} \times B \longrightarrow B$ を元の対応 $\lambda\_{B} \colon (\*,b) \longmapsto b$
    により定義すれば、$\lambda$ は自然同型となる。
    写像 $\rho\_{A} \colon A \times \\{\*\\} \longrightarrow A$ を元の対応 $\rho\_{A} \colon (a,\*) \longmapsto a$
    により定義すれば、$\rho$ は自然同型となる。

組 $(\mathbf{Set},\times,\\{\*\\})$ はモノイド圏である[^工事中]。

[^工事中]: 一貫性条件に関してはあとでいつかきっとそのうち確認する。

---

等号 $=$ から同型 $\cong$ に緩めたことで
集合の圏におけるモノイド構造をあらわせた。

集合 $A,B,C$ に対して
$(A \times B) \times C \cong A \times (B \times C)$ や
$\\{\*\\} \times A \cong A \times \\{\*\\} \cong A$ が
成り立つことになる。

圏 $\mathbf{Set}$ の対象は集合であるから、
モノイド対象を考えることができれば
通常の意味における[__モノイド集合__](#モノイド集合)が得られる。



# モノイド対象

[__集合の圏__](https://qiita.com/norkron/items/f0de364cc980171b1db7#集合の圏) $\mathbf{Set}$ の対象(すなわち集合)が
[__モノイド集合__](#モノイド集合)となる条件を、集合の要素ではなく、
射(すなわち写像)により表現することができる。

[__モノイド再び__](https://qiita.com/norkron/items/237735106ee6e5333678#モノイド再び)において集合を対象に、写像を射
と読み替えることでモノイド対象を定義できる。

---

モノイド圏 $(\boldsymbol{C},\diamond,e)$ があるとする。

対象 $m \in \mathrm{Obj}(\boldsymbol{C})$に
射 $\mu \colon m \diamond m \longrightarrow m$ と
射 $\eta \colon e \longrightarrow m$ の情報を加える。

次の２つの条件を満たすとき、
組 $(m,\mu,\eta)$ はモノイド対象である。

1. （結合律）図式が可換となる。
    ![モノイド対象の結合律](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/268212/96259e0d-a7a7-35ed-b2c9-776f3caef836.png)

2. （単位律）図式が可換となる。
    ![モノイド対象の単位律](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/268212/902486f7-b34f-6c32-8e7f-9918d77fade3.png)

---

対象 $S \in \mathrm{Obj}(\mathbf{Set})$に
射 $\mu \colon S \times S \longrightarrow S$ と
射 $\eta \colon \\{\*\\} \longrightarrow S$ の情報を加える。

$\eta \colon * \longmapsto e$ により $e \in S$ が単位元となることに注意する。

次の２つの図式が可換となるとき、
組 $(S,\mu,\eta)$ はモノイド対象である。

![集合の圏のモノイド対象](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/268212/a538cbbe-9208-4b84-9bc9-9e6ff1384123.png)

集合の圏におけるモノイド対象は[__モノイド集合__](#モノイド集合)だ。



# 自己関手の圏におけるモノイド対象

対象 $T \in \mathrm{Obj}(\boldsymbol{C}^\boldsymbol{C})$に
射 $\mu \colon T \cdot T \Longrightarrow T$ と
射 $\eta \colon \mathrm{id}\_{\boldsymbol{C}} \Longrightarrow T$ の情報を加える。

$\mathrm{id}\_{T} \cdot \theta = T \cdot \theta$ と $\theta \cdot \mathrm{id}\_{T} = \theta \cdot T$ に注意する。

次の２つの図式が可換となるとき、
組 $(T,\mu,\eta)$ はモノイド対象である。

![自己関手の圏のモノイド対象](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/268212/45c726b0-5310-359a-3f2c-b186973ea187.png)

自己関手の圏におけるモノイド対象は[__モナド__](#モナド)だ。



# ラックス・モノイド関手

モノイド圏を定義したのでモノイド関手も定義しよう。

モノイド圏とは圏に双関手と単位対象
の情報を加えたものであったので、
モノイド関手も関手に情報を加えたものだ。

---

唐突なラックス○○○○に驚きを禁じえないが、
ラックスは条件が緩いことをあらわしている。

色んな言葉遣いがあるみたいだけれど、
ここでは次のように考えてみることにする。

| 条件が等号 $=$ | 条件が同型 $\cong$ | 条件がそれ以外   |
|:--------------:|:------------------:|:----------------:|
| 厳密○○○○   | ○○○○           | ラックス○○○○ |

---

モノイド圏 $(\boldsymbol{C},\diamond,e)$ と
モノイド圏 $(\boldsymbol{D},\diamond,e)$ の対応を考える。

関手 $F \colon \boldsymbol{C} \longrightarrow \boldsymbol{D}$ を考える。

次の３つの条件を満たすとき、
組 $(F,\mu,\eta)$ はラックス・モノイド関手である。

1. （結合律）自然変換 $\mu \colon {F\ -} \diamond {F\ -} \Longrightarrow F\ (- \diamond -)$ が存在する

2. （単位律）射 $\eta \colon e \longrightarrow F\ e$ が存在する。

3. （一貫性条件）３つの図式が可換となる。
    ![モノイド関手の一貫性条件](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/268212/aa5e7b18-f864-b404-832e-271ca84acb3b.png)

## 格上げ

圏 $\boldsymbol{C}$ の対象は、[__格上げ__](https://qiita.com/norkron/items/e55a39c22288955689f9#格上げ)により、
単位圏 $\mathbf{1}$ から圏 $\boldsymbol{C}$ への関手とみなせた。

モノイド圏 $(\boldsymbol{C},\diamond,e)$ の「対象」は
単位圏 $(\mathbf{1},\diamond,*)$ からモノイド圏 $(\boldsymbol{C},\diamond,e)$ への
ラックス・モノイド関手とみなせるだろうか。

ここで、単位圏 $(\mathbf{1},\diamond,*)$ とは
対象が１つ $\\{\*\\} = \mathrm{Obj}(\mathbf{1})$ で
射が１つ $\\{\mathrm{id}\_{\displaystyle \*}\\} = \mathrm{Mor}(\mathbf{1})$ な厳密モノイド圏である。
![終モノイド圏](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/268212/e1cfc7ba-9bf6-ef6c-6774-eead8cded6b2.png)
双関手 $- \diamond - \colon \mathbf{1}\times\mathbf{1}\longrightarrow\mathbf{1}$ は
対象の対応 $\* \diamond \* = \*$ と
射の対応 $\mathrm{id}\_{\displaystyle \*} \diamond \mathrm{id}\_{\displaystyle \*} = \mathrm{id}\_{\displaystyle \*}$ で一意に定まる。

---

単位圏 $(\mathbf{1},\diamond,*)$ から[__モノイド圏__](#モノイド圏) $(\boldsymbol{C},\diamond,e)$ への
[__ラックス・モノイド関手__](#ラックスモノイド関手) $(m,\mu,\eta)$ を考える。

関手 $m \colon \mathbf{1} \longrightarrow \boldsymbol{C}$ すなわち対象 $m\ \* \in \mathrm{Obj}(\boldsymbol{C})$ および
射 $\mu\_{(\*,\*)} \colon {m\ \*} \diamond {m\ \*} \longrightarrow {m\ \*}$ と射 $\eta \colon e \longrightarrow {m\ \*}$ より
[__モノイド対象__](#モノイド対象) $({m\ \*},\mu\_{(\*,\*)},\eta)$ が定まる。

---

単位圏 $(\mathbf{1},\diamond,*)$ から
集合の圏 $(\mathbf{Set},\times,\\{\*\\})$ への
ラックス・モノイド関手を考える。

次の３つの図式が可換となるとき、
組 $(F,\mu,\eta)$ はラックス・モノイド関手である。

![集合の圏からモノイド](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/268212/90c0da3a-1acf-b346-f5e0-d7655a3de4f3.png)

単位圏から集合の圏へのラックス・モノイド関手は[__モノイド集合__](#モノイド集合)だ。



# 単位圏から自己関手の圏へのラックス・モノイド関手

単位圏 $(\mathbf{1},\diamond,*)$ から
自己関手の圏へのラックス・モノイド関手を考える。

$\mathrm{id}\_{T} \cdot \theta = T \cdot \theta$ と $\theta \cdot \mathrm{id}\_{T} = \theta \cdot T$ に注意する。

次の３つの図式が可換となるとき、
組 $(F,\mu,\eta)$ はラックス・モノイド関手である。

![自己関手の圏からモナド](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/268212/cd55e8f0-5fbc-02e1-c75b-091c9721eee7.png)

単位圏から自己関手の圏へのラックス・モノイド関手は[__モナド__](#モナド)だ。

---

対象が１つな圏の圏 $\mathbf{Cat}$ からはじめ、
自己関手の圏を一般化したモノイド圏
およびモノイド関手の概念をみてきた。

対象を１つに制限せず、
圏の圏 $\mathbf{Cat}$ を一般化できないだろうか。



# 厳密 2-圏

対象の集合 $\mathrm{Obj}(\boldsymbol{\mathcal{C}})$ があるとする。

各対象 $a,b \in \mathrm{Obj}(\boldsymbol{\mathcal{C}})$ に対して圏 $\boldsymbol{\mathcal{C}}(a,b)$ が存在し、
対象 $f,g \in \mathrm{Obj}(\boldsymbol{\mathcal{C}}(a,b))$ を 1-射 $f,g \colon a \longrightarrow b$ と呼び
射 $\theta \in \mathrm{Mor}(\boldsymbol{\mathcal{C}}(a,b))$ を 2-射 $\theta \colon f \Longrightarrow g$ と呼ぶ。

また、双関手 $- \cdot - \colon \boldsymbol{\mathcal{C}}(a,b) \times \boldsymbol{\mathcal{C}}(b,c) \longrightarrow \boldsymbol{\mathcal{C}}(a,c)$ と
恒等 1-射 $\mathrm{id}\_{a} \in \mathrm{Obj}(\boldsymbol{\mathcal{C}}(a,a))$ が各対象に存在する。

次の２つの条件を満たすとき、$\boldsymbol{\mathcal{C}}$ は厳密 2-圏である。

1. （結合律）$(- \cdot -) \cdot - = - \cdot (- \cdot -)$ が成り立つ。
    すなわち、恒等変換 $\alpha \colon (- \cdot -) \cdot - \Longrightarrow - \cdot (- \cdot -)$ が存在する。

2. （単位律）$\mathrm{id}\_{a} \cdot - = - \cdot \mathrm{id}\_{b} = \mathrm{id}\_{\boldsymbol{\mathcal{C}}(a,b)}$ が成り立つ。
    すなわち、恒等変換 $\lambda \colon \mathrm{id}\_{a} \cdot - \Longrightarrow \mathrm{id}\_{\boldsymbol{\mathcal{C}}(a,b)}$ と
    恒等変換 $\rho \colon - \cdot \mathrm{id}\_{b} \Longrightarrow \mathrm{id}\_{\boldsymbol{\mathcal{C}}(a,b)}$ が存在する。

ここで、関手 $f \cdot - \colon \boldsymbol{\mathcal{C}}(b,c) \longrightarrow \boldsymbol{\mathcal{C}}(a,c)$ は
$g \in \mathrm{Obj}(\boldsymbol{\mathcal{C}}(b,c))$ を $f \cdot g \in \mathrm{Obj}(\boldsymbol{\mathcal{C}}(a,c))$ に対応させ
$\sigma \in \mathrm{Mor}(\boldsymbol{\mathcal{C}}(b,c))$ を $\mathrm{id}\_{f} \cdot \sigma \in \mathrm{Mor}(\boldsymbol{\mathcal{C}}(a,c))$ に対応させる。

同様に、関手 $- \cdot g \colon \boldsymbol{\mathcal{C}}(a,b) \longrightarrow \boldsymbol{\mathcal{C}}(a,c)$ は
$f \in \mathrm{Obj}(\boldsymbol{\mathcal{C}}(a,b))$ を $f \cdot g \in \mathrm{Obj}(\boldsymbol{\mathcal{C}}(a,c))$ に対応させ
$\theta \in \mathrm{Mor}(\boldsymbol{\mathcal{C}}(a,b))$ を $\theta \cdot \mathrm{id}\_{g} \in \mathrm{Mor}(\boldsymbol{\mathcal{C}}(a,c))$ に対応させる。

---

圏の圏を一般化すると厳密 2-圏になる。
厳密というのは満たすべき条件(結合律と単位律)が
等号 $=$ により記述されていることを意味する。

自己関手の圏すなわち対象が１つな圏の圏
を一般化すると[__厳密モノイド圏__](#厳密モノイド圏)になったが、
厳密 2-圏で対象が１つな場合はどうなるだろう。

---

対象が１つ $\\{\*\\} = \mathrm{Obj}(\boldsymbol{\mathcal{C}})$ な厳密 2-圏を考える。
1-射 $f,g \in \mathrm{Obj}(\boldsymbol{\mathcal{C}}(\*,\*))$ や
2-射 $\theta \in \mathrm{Mor}(\boldsymbol{\mathcal{C}}(\*,\*))$ はいくつあっても良い。

![単対象 2-圏](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/268212/251f1514-46da-e327-fabf-01f25e85ef22.png)

---

圏 $\boldsymbol{\mathcal{C}}(\*,\*)$ に
双関手 $- \cdot - \colon \boldsymbol{\mathcal{C}}(\*,\*) \times \boldsymbol{\mathcal{C}}(\*,\*) \longrightarrow \boldsymbol{\mathcal{C}}(\*,\*)$ と
恒等 1-射 $\mathrm{id}\_{\displaystyle \*} \in \mathrm{Obj}(\boldsymbol{\mathcal{C}}(\*,\*))$ の情報を加える。

厳密 2-圏の定義より結合律と単位律が成り立つ。

組 $(\boldsymbol{\mathcal{C}}(\*,\*),\cdot,\mathrm{id}\_{\displaystyle \*})$ は[__厳密モノイド圏__](#厳密モノイド圏)である。



# ラックス 2-関手

2-圏を定義したので 2-関手を考えよう。

2-圏とは対象と各対象に存在する圏からなるので、
2-関手は対象と各対象に存在する圏をそれぞれ対応させる。

---

2-圏 $\boldsymbol{\mathcal{C}}$ と 2-圏 $\boldsymbol{\mathcal{D}}$ があるとする。

対象の対応 $\mathcal{F} \colon \mathrm{Obj}(\boldsymbol{\mathcal{C}}) \longrightarrow \mathrm{Obj}(\boldsymbol{\mathcal{D}})$ および
関手 $\mathcal{F} \colon \boldsymbol{\mathcal{C}}(a,b) \longrightarrow \boldsymbol{\mathcal{D}}(\mathcal{F}\ a,\mathcal{F}\ b)$ を考える。

次の３つの条件を満たすとき、
組 $(\mathcal{F},\mu,\eta)$ はラックス 2-関手である。

1. （結合律）自然変換 $\mu \colon {\mathcal{F}\ -} \cdot {\mathcal{F}\ -} \Longrightarrow \mathcal{F}\ (- \cdot -)$ が存在する。

2. （単位律）2-射 $\eta \colon \mathrm{id}\_{\mathcal{F}\ a} \Longrightarrow \mathcal{F}\ \mathrm{id}\_{a}$ が存在する。

3. （一貫性条件）３つの図式が可換となる。
    ![2-関手の一貫性条件](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/268212/37ab2aae-4651-7ee9-6788-01cbc811289a.png)

## 格上げ

圏 $\boldsymbol{C}$ の対象は、[__格上げ__](https://qiita.com/norkron/items/e55a39c22288955689f9#格上げ)により、
単位圏 $\mathbf{1}$ から圏 $\boldsymbol{C}$ への関手とみなせた。

2-圏 $\boldsymbol{\mathcal{C}}$ の「対象」 は
単位圏 $\mathbf{1}$ から 2-圏 $\boldsymbol{\mathcal{C}}$ への
ラックス 2-関手とみなせるだろうか。

ここで、単位圏 $\mathbf{1}$ とは
対象が１つ $\\{\*\\} = \mathrm{Obj}(\mathbf{1})$ で
1-射が１つ $\\{\mathrm{id}\_{\displaystyle \*}\\} = \mathrm{Obj}(\mathbf{1}(\*,\*))$ で
2-射が１つ $\\{\mathrm{id}\_{\mathrm{id}\_{\scriptstyle \*}}\\} = \mathrm{Mor}(\mathbf{1}(\*,\*))$ な厳密 2-圏である。
![終-2-圏](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/268212/d0651840-6fc4-0e5f-a6b4-d94e57ecd83b.png)
双関手 $- \cdot - \colon \mathbf{1}(\*,\*) \times \mathbf{1}(\*,\*) \longrightarrow \mathbf{1}(\*,\*)$ は
対象の対応 $\mathrm{id}\_{\displaystyle \*} \cdot \mathrm{id}\_{\displaystyle \*} = \mathrm{id}\_{\displaystyle \*}$ と
射の対応 $\mathrm{id}\_{\mathrm{id}\_{\scriptstyle \*}} \cdot \mathrm{id}\_{\mathrm{id}\_{\scriptstyle \*}} = \mathrm{id}\_{\mathrm{id}\_{\scriptstyle \*}}$ で一意に定まる。

---

単位圏 $\mathbf{1}$ から [__2-圏__](#厳密-2-圏) $\boldsymbol{\mathcal{C}}$ への
[__ラックス 2-関手__](#ラックス-2-関手) $(\mathcal{F},\mu,\eta)$ を考える。

対象の対応 $\mathcal{F} \colon \mathrm{Obj}(\mathbf{1}) \longrightarrow \mathrm{Obj}(\boldsymbol{\mathcal{C}})$ より
対象 $\mathcal{F}\ \* \in \mathrm{Obj}(\boldsymbol{\mathcal{C}})$ すなわち
[__モノイド圏__](#モノイド圏) $(\boldsymbol{\mathcal{C}}(\mathcal{F}\ \*,\mathcal{F}\ \*),\cdot,\mathrm{id}\_{\mathcal{F}\ {\displaystyle \*}})$ が定まる。

関手 $\mathcal{F} \colon \mathbf{1}(\*,\*) \longrightarrow \boldsymbol{\mathcal{C}}(\mathcal{F}\ \*,\mathcal{F}\ \*)$
すなわち 1-射 $\mathcal{F}\ \mathrm{id}\_{\displaystyle \*} \in \mathrm{Obj}(\boldsymbol{\mathcal{C}}(\mathcal{F}\ \*,\mathcal{F}\ \*))$ および
2-射 $\mu\_{(\mathrm{id}\_{\scriptstyle \*},\mathrm{id}\_{\scriptstyle \*})} \colon {\mathcal{F}\ \mathrm{id}\_{\displaystyle \*}} \cdot {\mathcal{F}\ \mathrm{id}\_{\displaystyle \*}} \Longrightarrow \mathcal{F}\ \mathrm{id}\_{\displaystyle \*}$ と
2-射 $\eta \colon \mathrm{id}\_{\mathcal{F}\ {\displaystyle \*}} \Longrightarrow \mathcal{F}\ \mathrm{id}\_{\displaystyle \*}$ より
[__モノイド対象__](#モノイド対象) $(\mathcal{F}\ \mathrm{id}\_{\displaystyle \*},\mu\_{(\mathrm{id}\_{\scriptstyle \*},\mathrm{id}\_{\scriptstyle \*})},\eta)$ が定まる。



# 単位圏から圏の圏へのラックス 2-関手

単位圏 $\mathbf{1}$ から
圏の圏へのラックス 2-関手を考える。

次の３つの図式が可換となるとき、
$(\mathcal{F},\mu,\eta)$ はラックス 2-関手である。

![圏の圏からモナド](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/268212/c868001d-76f8-676c-68b8-357cb6095a27.png)

単位圏から圏の圏へのラックス 2-関手は[__モナド__](#モナド)だ。



# まとめ

モナドは[__自己関手の圏におけるモノイド対象__](#自己関手の圏におけるモノイド対象)だった。

ひたすらに結合律と単位律との戦いだった。

Haskell との関連においては
アプリカティブ関手を理解したい。