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

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

206
0

はじめに

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

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

本連載の目次

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

クライスリトリプル

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

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

クライスリトリプル

Cを圏とし,次の三つ組を考える。
(a) 写像T:obCobC
(b) 射の集まりη:={ηaC(a,Ta)}aCη単位元とよぶ)
(c) 写像の集まり#:={a,b#:C(a,Tb)C(Ta,Tb)}a,bC#a,b#持ち上げとよぶ)
fC(a,Tb)に対して,a,b#(f)C(Ta,Tb)f#と書くことにする(f持ち上げとよぶ)。任意のa,b,cCfC(a,Tb)gC(b,Tc)に対して次の三つの条件が成り立つとき,この三つ組T,η,#クライスリトリプルとよぶ。
(1) (g#f)#=g#f#
(2) ηa#=1Ta
(3) f#ηa=f
なお, は射の合成を表す。

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

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

Tは関手でηは自然変換

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

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

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

Tは関手

fC(a,b)a,bCは任意)に対して

Tf:=(ηbf)# (1)

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

T(gf)=(1)(ηcgf)#=条件(3)((ηcg)#ηbf)#=条件(1)(ηcg)#(ηbf)#=(1)TgTf

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

T(1a)=(1)(ηa1a)#=ηa#=条件(2)1Ta

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

ηは自然変換

fC(a,b)に対して

Tfηa=(1)(ηbf)#ηa=条件(3)ηbf

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

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

リストモナドの例

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

!FORMULA[89][-1011194683][0] xii

四角いブロックがxiiを表しています。また,このブロックの上側に2本の線LXを描くことで,xiiLXの要素であることを表しています。

各集合Xに対し,ηXは集合Xの各要素xを長さ1のリストxLXに写す写像です。ηX(x)=xは次式で表されます。

!FORMULA[101][-2058486356][0] ηX(x)=x

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

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

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

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

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

f#に要素xiiLXを入力して得られる値f#(xii)LYは,次式で表されます。

!FORMULA[134][-1131184421][0] f#(xii)

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

単位元と持ち上げの図式

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

!FORMULA[141][1364279400][0] ηa

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

a,bCに対し,持ち上げa,b#(つまり写像C(a,Tb)ff#C(Ta,Tb))を次の図式で表すことにします。

持ち上げ!FORMULA[149][-1670043148][0] 持ち上げa,b#

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

なお,持ち上げa,b#は次式のようにも表せます。

持ち上げ!FORMULA[156][-1670043148][0]の別表現 持ち上げa,b#の別表現

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

補足:
この青丸は,μ:={μa:=1Ta#}aCを表しています。μa=1Ta#1Taの持ち上げですので,f#の図式にf=1Taを代入したものとして,次式のように表されます。
!FORMULA[166][-1460886842][0] 1Ta#
念のため,μTTからTへの自然変換である,つまり各fC(a,b)に対してTf1Ta#=1Tb#T(Tf)を満たすことを確認しておきます(ただし,は水平合成)。この左辺は
Tf1Ta#=条件(1)(Tf1Ta)#=(Tf)#
であり(最初の等号では,式(1)よりTfηbfの持ち上げに等しいことを用いた),右辺は
1Tb#T(Tf)=(1)1Tb#(ηTbTf)#=条件(1)(1Tb#ηTbTf)#=条件(3)(1TbTf)#=(Tf)#
ですので,左辺と右辺は同じです。

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

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

モナドの定義

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

モナド

関手T:CCと自然変換η:1CT単位元とよぶ)と自然変換μ:TTTとよぶ)の組T,η,μが次の二つの条件を満たすとき,モナドとよぶ。
(1')結合律:μ(1Tμ)=μ(μ1T)
結合律 結合律 (1)
 ただし,3本の線がつながった青丸はμを表している。また,は水平合成を表している。
(2')単位律:μ(1Tη)=1T=μ(η1T)
単位律 単位律 (2)
 ただし,1本の線がつながった青丸はηを表している。

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

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

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

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

条件(1):(g#f)#=g#f#

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

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

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

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

条件(1)(!FORMULA[207][-262603950][0])の別表現 条件(1)((g#f)#=g#f#)の別表現 (3)

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

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

結合律 結合律 (4)

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

補足:
この同値性は,厳密には次のように示せます。式(4)に対してfgを適切に合成すれば式(3)が得られます。逆に,式(3)においてf=g=1Taを代入すれば(aTaを代入してbcaを代入します),式(4)の両辺のそれぞれの右側に線aを描いた式が得られます。その式が各aCに対して成り立つため,式(4)が得られます。

条件(2):ηa#=1Ta

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

条件(2)(!FORMULA[223][1379147559][0]) 条件(2)(ηa#=1Ta

この式が任意のaCについて成り立つため,

が成り立ちます。この式は,式(2)の左側の等号にほかなりません。

条件(3):f#ηa=f

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

画像の名前 画像の名前

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

画像の名前 画像の名前 (5)

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

画像の名前 画像の名前 (6)

が成り立つことが容易に想像できます。この式は,式(2)の右側の等号にほかなりません。

補足:
この同値性は,結合律の場合と同じ方法で示せます。具体的には,式(6)に対してfとの合成を考えれば式(5)が得られます。逆に,式(5)においてf=1Taを代入すれば(aTaを代入してbaを代入します),式(6)の両辺のそれぞれの右側に線aを描いた式が得られます。その式が各aCに対して成り立つため,式(6)が得られます。

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

まとめ

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

参考文献

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

この記事を高評価した人

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

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

バッジはありません。
バッチを贈って投稿者を応援しよう

バッチを贈ると投稿者に現金やAmazonのギフトカードが還元されます。

投稿者

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

コメント

他の人のコメント

コメントはありません。
読み込み中...
読み込み中
  1. はじめに
  2. 本連載の目次
  3. クライスリトリプル
  4. クライスリトリプルの定義
  5. Tは関手でηは自然変換
  6. クライスリトリプルを表す図式
  7. クライスリトリプルとモナドの関係
  8. モナドの定義
  9. クライスリトリプルとモナドの同値性
  10. まとめ
  11. 参考文献