2
大学数学基礎解説
文献あり

【ストリング図で学ぶ圏論 番外編1】視覚的に理解するクライスリトリプルとモナドの同値性

238
0
$$\newcommand{Ab}[0]{\mathbf{Ab}} \newcommand{b}[0]{\bullet} \newcommand{bM}[0]{\mathbf{M}} \newcommand{braket}[1]{\langle#1\rangle} \newcommand{bV}[0]{\mathbf{V}} \newcommand{bW}[0]{\mathbf{W}} \newcommand{c}[0]{\circ} \newcommand{Cat}[0]{\mathbf{Cat}} \newcommand{cC}[0]{\mathcal{C}} \newcommand{cD}[0]{\mathcal{D}} \newcommand{cE}[0]{\mathcal{E}} \newcommand{cF}[0]{\mathcal{F}} \newcommand{cM}[0]{\mathcal{M}} \newcommand{CMon}[0]{\mathbf{CMon}} \newcommand{cN}[0]{\mathcal{N}} \newcommand{cod}[0]{\operatorname{cod}} \newcommand{Complex}[0]{\mathbb{C}} \newcommand{cOne}[0]{\mathbf{1}} \newcommand{cTwo}[0]{\mathbf{2}} \newcommand{cX}[0]{\mathcal{X}} \newcommand{dom}[0]{\operatorname{dom}} \newcommand{Endash}[0]{\textendash} \newcommand{FinVecK}[0]{\mathbf{FinVec}_\mathbb{K}} \newcommand{Mon}[0]{\mathbf{Mon}} \newcommand{mor}[0]{\operatorname{mor}} \newcommand{Natural}[0]{\mathbb{N}} \newcommand{nto}[0]{\Rightarrow} \newcommand{ob}[0]{\operatorname{ob}} \newcommand{op}[0]{\mathrm{op}} \newcommand{ot}[0]{\otimes} \newcommand{Real}[0]{\mathbb{R}} \newcommand{Set}[0]{\mathbf{Set}} \newcommand{V}[0]{\mathbf{V}} \newcommand{VecK}[0]{\mathbf{Vec}_\mathbb{K}} \newcommand{W}[0]{\mathbf{W}} \newcommand{yoneda}[1]{\square^{#1}} \newcommand{zero}[0]{\mathbb{0}} $$

はじめに

クライスリトリプルは,計算機科学などの分野で(たとえばHaskellなどの関数型プログラミング言語において)しばしば登場する概念です。クライスリトリプルはモナドと密接に関連しており,ストリング図に慣れればこれらの関係を視覚的にわかりやすい形で表すことができます。

この記事では,クライスリトリプルについて説明した後で,モナドとの関係をストリング図により示します。なお,この記事は圏論に不慣れな方でも大まかな雰囲気がつかめることをめざして書いています。

本連載の目次

#1: 圏の定義と具体例
#2: 関手と自然変換
#3: 垂直合成と水平合成
#4: モノイダル圏
#5: モナドとは自己関手の圏におけるモノイド対象のこと
#6: モナドの例
#7: 随伴
#8: 関手を表す線の順序の交換
#9: 普遍射と随伴・極限・カン拡張
#10: ホム関手のストリング図(前編)
#11: ホム関手のストリング図(後編)
#12: 米田の補題
番外編1: 視覚的に理解するクライスリトリプルとモナドの同値性(この記事)
番外編2: 線形代数の圏論的な性質(?)を圏論なしで説明する

クライスリトリプル

クライスリトリプルの定義

まず,クライスリトリプルの定義を示します。以降では,圏の定義は知っているものとします。$a$が圏$\cC$の対象であることを$a \in \cC$と表し,また各$a,b \in \cC$について$\cC$$a$から$b$への射全体からなる集まりを$\cC(a,b)$と表します。$\cC$の対象全体からなる集まりを$\ob \cC$と表します。

クライスリトリプル

$\cC$を圏とし,次の三つ組を考える。
(a) 写像$T \colon \ob \cC \to \ob \cC$
(b) 射の集まり$\eta \coloneqq \{ \eta_a \in \cC(a,Ta) \}_{a \in \cC}$$\eta$単位元とよぶ)
(c) 写像の集まり$\Endash^\# \coloneqq \{\Endash^\#_{a,b} \colon \cC(a,Tb) \to \cC(Ta,Tb)\}_{a,b \in \cC}$$\Endash^\#$$\Endash^\#_{a,b}$持ち上げとよぶ)
$f \in \cC(a,Tb)$に対して,$\Endash^\#_{a,b}(f) \in \cC(Ta,Tb)$$f^\#$と書くことにする($f$持ち上げとよぶ)。任意の$a,b,c \in \cC$$f \in \cC(a,Tb)$$g \in \cC(b,Tc)$に対して次の三つの条件が成り立つとき,この三つ組$\braket{T,\eta,\Endash^\#}$クライスリトリプルとよぶ。
(1) $(g^\# \c f)^\# = g^\# \c f^\#$
(2) $\eta_a^\# = 1_{Ta}$
(3) $f^\# \c \eta_a = f$
なお,$\c$ は射の合成を表す。

補足(プログラミング言語Haskellをご存知の方へ):
Haskellの Monad は,return関数とバインド関数により定められます。この Monad は,クライスリトリプルのことだと考えるとわかりやすいと思います。具体的には,上の定義における単位元$\eta$はreturn関数のことであり,持ち上げ$\Endash^\#$はバインド関数 >>= に対応しています($f^\#(m)$m >>= f で表されます)。上の三つの条件は,次のように書き換えられます。
(1) m >>= (\x -> f x >>= g) == (m >>= f) >>= g
(2) m >>= return == m
(3) (return x) >>= f == f x

補足(圏に不慣れな方へ):
$\cC$が集合の圏$\Set$である場合を考えるとわかりやすいかもしれません。この場合,$a \in \cC$$a$が集合であることを意味しており,$f \in \cC(a,Tb)$$f$が集合$a$から集合$Tb$への写像であることを意味しています。

$T$は関手で$\eta$は自然変換

クライスリトリプルの定義から,$T$$\cC$から$\cC$への関手であり,$\eta$$1_\cC$から$T$への自然変換であることがわかります。念のため,このことを確認しておきます。

補足(関手・自然変換に不慣れな方へ):
先ほどと同様に,圏$\cC$が集合の圏$\Set$である場合を考えます。この場合,関手$T$とは,各集合$a$をある集合($Ta$と書く)に写して,集合$a$から集合$b$への各写像$f \colon a \to b$(集合$a,b$は任意)を集合$Ta$から集合$Tb$へのある写像$Tf \colon Ta \to Tb$に写すようなものです。自然変換$\eta$とは,各集合$a$に対して写像$\eta_a \colon a \to Ta$が定められたものです。$T$が関手であり$\eta$が自然変換であるためには,さらにいくつかの条件を満たす必要があります。

これらを確認する作業はやや退屈かと思いますので,この作業に興味のない方(または関手・自然変換に不慣れな方)は読み飛ばしても構いません。

$T$は関手

$f \in \cC(a,b)$$a,b \in \cC$は任意)に対して

$$ Tf \coloneqq (\eta_b \c f)^\# $$ $$\tag{1}\label{eq:T}$$

と定めます。このとき,$T$が関手であることを示すためには,合成を保存して,恒等射を恒等射に写すことを示せば十分です。合成を保存することは,各$f \in \cC(a,b),~g \in \cC(b,c)$に対して

$$ T(g \c f) \overset{\text{式\eqref{eq:T}}}{=} (\eta_c \c g \c f)^\# \overset{\text{条件(3)}}{=} ((\eta_c \c g)^\# \c \eta_b \c f)^\# \overset{\text{条件(1)}}{=} (\eta_c \c g)^\# \c (\eta_b \c f)^\# \overset{\text{式\eqref{eq:T}}}{=} Tg \c Tf $$

が成り立つことからわかります。恒等射を恒等射に写すことは,各$a \in \cC$に対して

$$ T(1_a) \overset{\text{式\eqref{eq:T}}}{=} (\eta_a \c 1_a)^\# = \eta_a^\# \overset{\text{条件(2)}}{=} 1_{Ta} $$

が成り立つことからわかります。

$\eta$は自然変換

$f \in \cC(a,b)$に対して

$$ Tf \c \eta_a \overset{\text{式\eqref{eq:T}}}{=} (\eta_b \c f)^\# \c \eta_a \overset{\text{条件(3)}}{=} \eta_b \c f $$

が成り立ちます。つまり,$\eta$は自然性を満たします。したがって,$\eta$は($1_\cC$から$T$への)自然変換です。

クライスリトリプルを表す図式

リストモナドの例

一般的な場合について述べる前に,具体例として 第6回の記事 で述べたリストモナド$L$を考えることにします(Haskellをご存知の方は,お馴染みのリストモナドをイメージしてください)。各集合$X$に対して,$LX$は「$X$の要素からなる有限長のリスト」の集合を表します。$LX$の各要素は$\braket{x_i}_i \coloneqq \braket{x_1,x_2,\dots}$(ただし$x_1,x_2,\dots \in X$)の形で表され,この要素は次の図式で表されます。

!FORMULA[89][-1011194683][0] $\braket{x_i}_i$

四角いブロックが$\braket{x_i}_i$を表しています。また,このブロックの上側に2本の線$L$$X$を描くことで,$\braket{x_i}_i$$LX$の要素であることを表しています。

各集合$X$に対し,$\eta_X$は集合$X$の各要素$x$を長さ1のリスト$\braket{x} \in LX$に写す写像です。$\eta_X(x) = \braket{x}$は次式で表されます。

!FORMULA[101][-2058486356][0] $\eta_X(x) = \braket{x}$

青丸が$\eta$を表しており,左辺の補助線(破線)で囲まれた箇所が$\eta_X$を表しています。左辺では,$\eta_X$$x$を縦方向につなげることで$\eta_X(x)$を表しています。

補足(図式に不慣れな方へ):
要素$x \in X$を写像$f \colon X \to LY$で写して得られる$f(x) \in LY$は,次の図式で表されます。
!FORMULA[110][1126156845][0] $f(x)$
このように,ブロック$f$の下側に線$X$をつなげて上側に2本の線$L$$Y$をつなげることで,$f$$X$から$LY$への写像であることを表します。また,2個のブロック$f$$x$を縦方向につなげることで,$f(x)$を表します。この$f$$\eta_X$を代入すると,先ほど示した$\eta_X(x)$の図式が得られます。

$f$の持ち上げ$f^\#$を次の図式で表すことにします。

!FORMULA[126][37794][0]の持ち上げ!FORMULA[127][1127738465][0] $f$の持ち上げ$f^\#$

この図式にある青丸は,$\eta$を表す青丸とは似て非なるものだと考えてください。実際,こちらの青丸では,その下側から2本の青線が伸びています(上側からは1本の青線が伸びていますので,青丸から計3本の線が伸びています)。線はすべて関手$L$を表しています(線のラベル「$L$」は適宜省略しています)。

$f^\#$に要素$\braket{x_i}_i \in LX$を入力して得られる値$f^\#(\braket{x_i}_i) \in LY$は,次式で表されます。

!FORMULA[134][-1131184421][0] $f^\#(\braket{x_i}_i)$

$f(x)$の場合と同様に,2個のブロック$f^\#$$\braket{x_i}_i$を縦方向につなげることで$f^\#(\braket{x_i}_i)$を表しています。

単位元と持ち上げの図式

上で述べたリストモナドの図式を一般化して,単位元と持ち上げの図式を導入します。各$a \in \cC$に対し,$\eta_a$を次式で表すことにします。

!FORMULA[141][1364279400][0] $\eta_a$

図式では,関手$T$を青線で描きます。また,青丸は自然変換$\eta$を表しており,青丸の右側に線$a$を描くことで$\eta_a$を表します。

$a,b \in \cC$に対し,持ち上げ$\Endash_{a,b}^\#$(つまり写像$\cC(a,Tb) \ni f \mapsto f^\# \in \cC(Ta,Tb)$)を次の図式で表すことにします。

持ち上げ!FORMULA[149][-1670043148][0] 持ち上げ$\Endash_{a,b}^\#$

矢印$\mapsto$の左側および右側の図式が,それぞれ$f$および$f^\#$を表しています。なお,リストモナドの場合と同様に,この図式にある青丸は$\eta$を表す青丸とは似て非なるものだと考えてください。線はすべて関手$T$を表しています。

なお,持ち上げ$\Endash_{a,b}^\#$は次式のようにも表せます。

持ち上げ!FORMULA[156][-1670043148][0]の別表現 持ち上げ$\Endash_{a,b}^\#$の別表現

この図式では,点線の枠の中に$f$を入力すると$f^\#$を表す図式が得られますので,写像$f \mapsto f^\#$を表しているものと解釈します。この解釈により,この写像は持ち上げ$\Endash_{a,b}^\#$を表していることがわかります。

補足:
この青丸は,$\mu \coloneqq \{ \mu_a \coloneqq 1_{Ta}^\# \}_{a \in \cC}$を表しています。$\mu_a = 1_{Ta}^\#$$1_{Ta}$の持ち上げですので,$f^\#$の図式に$f = 1_{Ta}$を代入したものとして,次式のように表されます。
!FORMULA[166][-1460886842][0] $1_{Ta}^\#$
念のため,$\mu$$T \b T$から$T$への自然変換である,つまり各$f \in \cC(a,b)$に対して$Tf \c 1_{Ta}^\# = 1_{Tb}^\# \c T(Tf)$を満たすことを確認しておきます(ただし,$\b$は水平合成)。この左辺は
$$ Tf \c 1_{Ta}^\# \overset{\text{条件(1)}}{=} (Tf \c 1_{Ta})^\# = (Tf)^\# $$
であり(最初の等号では,式\eqref{eq:T}より$Tf$$\eta_b \c f$の持ち上げに等しいことを用いた),右辺は
$$ 1_{Tb}^\# \c T(Tf) \overset{\text{式\eqref{eq:T}}}{=} 1_{Tb}^\# \c (\eta_{Tb} \c Tf)^\# \overset{\text{条件(1)}}{=} (1_{Tb}^\# \c \eta_{Tb} \c Tf)^\# \overset{\text{条件(3)}}{=} (1_{Tb} \c Tf)^\# = (Tf)^\# $$
ですので,左辺と右辺は同じです。

クライスリトリプルとモナドの関係

以降では,クライスリトリプルとモナドの関係について述べます。

モナドの定義

まず,モナドの定義を述べておきます( 第5回の記事 で述べたものと同じです)。

モナド

関手$T \colon \cC \to \cC$と自然変換$\eta \colon 1_\cC \nto T$単位元とよぶ)と自然変換$\mu \colon T \b T \nto T$とよぶ)の組$\braket{T,\eta,\mu}$が次の二つの条件を満たすとき,モナドとよぶ。
(1')結合律:$\mu \c (1_T \b \mu) = \mu \c (\mu \b 1_T)$
結合律 結合律 $$\tag{1}\label{eq:association}$$
 ただし,3本の線がつながった青丸は$\mu$を表している。また,$\b$は水平合成を表している。
(2')単位律:$\mu \c (1_T \b \eta) = 1_T = \mu \c (\eta \b 1_T)$
単位律 単位律 $$\tag{2}\label{eq:unit}$$
 ただし,1本の線がつながった青丸は$\eta$を表している。

補足(圏論に不慣れな方へ):
モナドの定義を厳密に理解するためには,関手・自然変換とそれらの合成に関する知識が必要です。これらの知識は,たとえば拙著Nak-2025の第2章までを読めば得られます。これらの知識がなくても,線やブロックなどを縦方向につなげるという演算を$\c$で表していて,横方向につなげるという演算を$\b$で表していると考えれば,大まかには理解できるのではないかと思います。たとえば,条件(1')の結合律を表す図式の左辺$\mu \c (1_T \b \mu)$
!FORMULA[191][218819630][0] $\mu \c (1_T \b \mu)$
のように補助線で区切るとわかりやすいと思います。補助線で区切られた3個の領域が,それぞれ$\mu$(上側),$1_T$(左下側),$\mu$(右下側)を表しています。$1_T$(左下側)と$\mu$(右下側)を横につなげることで$1_T \b \mu$が得られ,これに$\mu$(上側)をつなげることで$\mu \c (1_T \b \mu)$が得られます。

クライスリトリプルとモナドの同値性

任意のクライスリトリプルから対応するモナドを構成できて,逆に任意のモナドから対応するクライスリトリプルを構成できることが知られています。このような意味で,クライスリトリプルとモナドは同一視できます。この記事では,このような関係を同値性とよんでいます。

この同値性は,「クライスリトリプルの定義(Kleisli)で述べた三つの条件」が「モナドの定義(Monad)で述べた二つの条件(つまり結合律と単位律)」に対応していることから示せます。また,この対応は,図式を用いれば素直に理解できると思います。以降では,前者の三つの条件を図式で表すことで,このことを示します。

条件(1):$(g^\# \c f)^\# = g^\# \c f^\#$

条件(1)は次の図式で表せます。

条件(1)(!FORMULA[201][-262603950][0]) 条件(1)($(g^\# \c f)^\# = g^\# \c f^\#$

この左辺では,補助線で囲まれた領域が$g^\# \c f$を表しており,左辺全体でその持ち上げ,つまり$(g^\# \c f)^\#$を表しています。また,右辺では,$g^\#$を表す図式と$f^\#$を表す図式を縦方向につなげています(なお,射の合成$\c$が縦方向につなげることを意味します)。

この右辺を変形して青丸の位置を上のほうに動かすと,次の図式が得られます。なお,先ほどの図式に対し,右辺のみを変形しています(補助線はひとまず無視してください)。

条件(1)(!FORMULA[207][-262603950][0])の別表現 条件(1)($(g^\# \c f)^\# = g^\# \c f^\#$)の別表現 $$\tag{3}\label{eq:cond1b}$$

補足(圏論に不慣れな方へ):
青丸をこのように動かしても値が変わらないことは,自然変換の合成に関する基本的な性質として保証されています。

式\eqref{eq:cond1b}が任意の$f$$g$について成り立つことから,その左辺および右辺の補助線で囲まれた箇所が同じである,つまり

結合律 結合律 $$\tag{4}\label{eq:association2}$$

が成り立つことが容易に想像できます。この式は,式\eqref{eq:association}にほかなりません。このような関係を用いると,この条件(1)はモナドの定義(Monad)における結合律と同値であることが容易にわかります。

補足:
この同値性は,厳密には次のように示せます。式\eqref{eq:association2}に対して$f$$g$を適切に合成すれば式\eqref{eq:cond1b}が得られます。逆に,式\eqref{eq:cond1b}において$f = g = 1_{Ta}$を代入すれば($a$$Ta$を代入して$b$$c$$a$を代入します),式\eqref{eq:association2}の両辺のそれぞれの右側に線$a$を描いた式が得られます。その式が各$a \in \cC$に対して成り立つため,式\eqref{eq:association2}が得られます。

条件(2):$\eta_a^\# = 1_{Ta}$

条件(2)は次の図式で表せます。

条件(2)(!FORMULA[223][1379147559][0]) 条件(2)($\eta_a^\# = 1_{Ta}$

この式が任意の$a \in \cC$について成り立つため,

が成り立ちます。この式は,式\eqref{eq:unit}の左側の等号にほかなりません。

条件(3):$f^\# \c \eta_a = f$

条件(3)は次の図式で表せます。

画像の名前 画像の名前

なお,この左辺では$f^\#$を表す図式と$\eta_a$を表す図式を縦方向につなげています。この左辺を変形して青丸$\eta$の位置を上のほうに動かすと,次の図式が得られます。

画像の名前 画像の名前 $$\tag{5}\label{eq:unit2a}$$

この式が任意の$f$について成り立つことから,その左辺および右辺の補助線で囲まれた箇所が同じである,つまり

画像の名前 画像の名前 $$\tag{6}\label{eq:unit2b}$$

が成り立つことが容易に想像できます。この式は,式\eqref{eq:unit}の右側の等号にほかなりません。

補足:
この同値性は,結合律の場合と同じ方法で示せます。具体的には,式\eqref{eq:unit2b}に対して$f$との合成を考えれば式\eqref{eq:unit2a}が得られます。逆に,式\eqref{eq:unit2a}において$f = 1_{Ta}$を代入すれば($a$$Ta$を代入して$b$$a$を代入します),式\eqref{eq:unit2b}の両辺のそれぞれの右側に線$a$を描いた式が得られます。その式が各$a \in \cC$に対して成り立つため,式\eqref{eq:unit2b}が得られます。

以上により,条件(1)がモナドの定義(Monad)における結合律と同値であり,条件(2)と条件(3)が単位律と同値であることがわかります。

まとめ

ストリング図を用いると,クライスリトリプルとモナドの同値性を視覚的に理解できることを示しました。計算機科学などの分野において現れるモナドに関するほかの多くの性質も,このようなストリング図を用いると素直に表せることがわかります。その基本的なものは拙著Nak-2025の4.4節などで述べていますので,興味のある方はご参照ください。また,同じストリング図によりデータの流れを直観的な形で表せますので,ストリング図が描けるようになると便利かと思います。

参考文献

[1]
中平健治, ストリング図で学ぶ圏論の基礎, 森北出版, 2025
投稿日:27
更新日:329
OptHub AI Competition

この記事を高評価した人

高評価したユーザはいません

この記事に送られたバッジ

バッジはありません。

投稿者

量子論 / 量子情報理論 / 量子測定 の研究者です。

コメント

他の人のコメント

コメントはありません。
読み込み中...
読み込み中