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

【ストリング図で学ぶ圏論 #6】モナドの例

393
0

はじめに

前回の記事 では,モナドについて説明しました。ここでは,モナドの具体例として,計算機科学でしばしば登場する「リストモナド」と「状態モナド」について,図式を用いて紹介します。

本連載の目次

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

準備:バインド演算

Haskellなどの関数型プログラミング言語では,>>= のようなバインド演算がよく用いられます。この演算は各a,bCについて実質的にホムセットC(a,Tb)からホムセットC(Ta,Tb)への写像を表しており,この写像は積μを用いて次式のように定まります。

バインド演算による写像!FORMULA[4][-741088030][0] バインド演算による写像fμbTf

この写像を暫定的に持ち上げとよぶことにして,各fC(a,Tb)に対してf#:=μbTfC(Ta,Tb)とおきます。

リストモナド

リストモナドの定義

まず,リストモナドL,μ,η(ただしL:SetSet)の定義を述べるため,関手Lと積μと単位元ηのそれぞれを定めます。

関手L

関手L:SetSetは,各集合XSetを集合LXSetに写すものとします。ただし,LXxii=1n  (nN, x1,,xnX)の形で表されるもの(つまりXの要素からなる有限長のリスト)をすべて集めた集合です。これにより,Lの対象への作用が定まります。以降では,xii=1nをしばしば簡略化してxiiのように書きます。LXの各要素xiiは次式のように表せます。

!FORMULA[25][2035802648][0] xiiLX
(1)

補足:
第1回 の記事で述べたように,図式ではxiiLXを写像{}xiiLXとして表します。式(1)のグレーの点線は,1点集合{}です。

また,Lは各写像fSet(X,Y)を写像LfSet(LX,LY)に写します。この写像Lfを,「各xiiLXf(xi)iLYに写すもの」として定めます。つまり,次の図式を満たすものとします。

式!FORMULA[36][-1478385957][0] Lf(xii)=f(xi)i

これにより,Lの射への作用が定まります。

μ

積(自然変換)μ:LLLの各成分μX (XSet)は,集合(LL)Xから集合LXへの写像です。この写像μX

μX:(LL)Xxi,jijxi,ji,jLX

と定めます。μXは次の図式で表されます。
式!FORMULA[47][-1700737918][0] μX(xi,jij)=xi,j(i,j)
大ざっぱに述べると,各μXは2重のリストを1重のリストに写すような働きをします。

単位元η

単位元(自然変換)η:1SetLの各成分ηX (XSet)は,集合Xから集合LXへの写像です。この写像ηX

ηX:XxxLX

と定めます。ηXは次の図式で表されます。

式!FORMULA[58][-2058486356][0] ηX(x)=x
ηXは,Xの各要素xを1個の要素のみからなるリストxに写します。

リストモナドがモナドであることの確認

リストモナドがモナドである,つまり結合律と単位律を満たすことを確認しておきます。

結合律

結合律を満たすことは,各xi,j,kijk(TTT)Xに対して次式が成り立つことからわかります。

結合律 結合律

単位律

単位律を満たすことは,各xiiTXに対して次式が成り立つことからわかります。
単位律 単位律

持ち上げ

持ち上げSet(X,LY)ff#Set(LX,LY)を考えます。f#に各xiiLXを入力したときの出力は次式で表されます。

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

なお,各f(xi)TYの要素(つまりリスト)です。このため,f(xi)i(TT)Xの要素(つまりリストのリスト)です。

状態モナド

状態モナドの定義

状態モナドT,μ,η(ただしT:SetSet)の定義を述べます。

関手T

以降では,各集合X,YについてSet(X,Y)YXと書くことにします。集合Sを任意に選んで固定して,Sの要素を状態とよぶことにします。このとき,関手T:SetSetは,各集合XSetを集合TX:=(X×S)Sに写すものとします。これにより,Tの対象への作用が定まります。

集合TX=(X×S)Sの各要素aは,SからX×Sへの写像です。つまり,aは各状態sSXの要素x(s)と状態t(s)の組x(s),t(s)X×Sに写します(x,tと書く代わりに,これらがsに依存することを表すためにx(s),t(s)と書きました)。TXを次の図式で表すことにします。

集合!FORMULA[99][1155964][0] 集合TX

左辺と右辺は同じTXを2通りの方法で表したものです。なお,上付き文字Sを表す線Sを下向きの矢印として表しています。また,この矢印とX×Sを表す2本の線XSの間の境界を,念のため濃いグレーにより強調しています。このとき,aTXは次式のように表されます。

補足:
濃いグレーで表された領域を「太い1本の線」と捉えると,集合Xに関手Tを施すことは線Xの右側にこの太い線を描くこととして表されることがわかります。このように,青線Tはグレーの太い線に対応しています。

!FORMULA[111][1081058206][0]の2通りの表記 aTXの2通りの表記

また,Tは各写像fSet(X,Y)を写像TfSet(TX,TY)=Set((X×S)S,(Y×S)S)に写します。この写像Tfを,「各写像h:SX×Sを写像f,1Sh:SY×Sに写すもの」として定めます。これにより,Tの射への作用が定まります。写像hTf(h)は次の図式で表されます。

写像!FORMULA[120][-1086529538][0] 写像hTf(h):=f,1Sh

このため,Tfは次式のように表されます。
!FORMULA[122][1156398][0]の2通りの表記 Tfの2通りの表記
左辺と右辺は同じfを2通りの方法で表したものです。

μ

積(自然変換)μ:TTTの各成分μX (XSet)は,集合(TT)Xから集合TXへの写像です。写像μX(TT)X=((X×S)S×S)Sの各要素,つまりSsξ(s),t(s)(X×S)S×Sの形の写像をTX=(X×S)Sの要素である写像Ssξ(s)(t(s))X×Sに写すものとして定めます。大ざっぱに述べると,μXは写像ξ(s):SX×Sに状態t(s)Sを入力するような働きをします。

写像
εX:XS×Sh,sh(s)X
を次の図式で表すことにします。

写像!FORMULA[139][1362515056][0] 写像εX

このとき,εX(h,s)=h(s)は次式のように表せます。

式!FORMULA[141][1217332377][0] εX(h,s)=h(s)

直観的には,この左辺は写像hsを入力することを表しているとみなせます。ξ(s)(t(s))=εX×S(ξ(s),t(s))を用いると,写像μXは次の図式で表されることがわかります。

!FORMULA[146][328519435][0]の2通りの表記 μXの2通りの表記

この右辺が,上で述べたμXの具体的な定義を図式で表したものです。

補足:
μは2本の青線TTを1本の青線Tに変換するような働きをするとみなせます。上の式の右辺では,これを「2本のグレーの太い線を1本のグレーの太い線に変換するようなもの」として表しているとみなせます。

高度な話題:
半円状の線はε:={εX}XSetを表しており,これは随伴×SSの余単位です。

単位元η

単位元(自然変換)η:1SetTの各成分ηX (XSet)は,集合Xから集合TXへの写像です。この写像ηXは,各xXTX=(X×S)Sの要素である写像Ssx,sX×Sに写すものとします。ηXを次の図式で表すことにします。

!FORMULA[165][-35992546][0]の2通りの表記 ηX(x)の2通りの表記

ηXは,集合Xと集合Sに対してともに「何もしない」(つまり恒等写像を施す)ような写像です。右辺では,恒等写像1Sを表す線Sを180度曲げたかのような表記をしています。

補足:
ηは1本の青Tを生成するような働きをするとみなせます。上の式の右辺では,これを「1本のグレーの太い線を生成するようなもの」として表しているとみなせます。

高度な話題:
η:={ηX}XSetは随伴×SSの単位です。

状態モナドがモナドであることの確認

状態モナドがモナドである,つまり結合律と単位律を満たすことを確認しておきます。ここでは概要のみを説明します。

結合律

各集合Xに対して次式が成り立ちます(このことは,{εX}XSetが自然変換であることがわかれば,すぐにわかります)。

結合律 結合律

これは,(μ(1Tμ))X=(μ(μ1T))Xを表しています。このため,結合律μ(1Tμ)=μ(μ1T)が成り立ちます。

単位律

各集合Xに対して次式が成り立ちます。

単位律 単位律

このことは,直観的には「くねくねと曲がった線Sをまっすぐに伸ばしても値は変わらない」と考えると,何となく納得できるかもしれません(随伴の知識があるとすぐに理解できるようになります)。この式は,(μ(1Tη))X=(1T)X=(μ(η1T))Xを表しています。このため,単位律μ(1Tη)=1T=μ(η1T)が成り立ちます。

持ち上げ

持ち上げSet(X,TY)ff#Set(TX,TY)を考えます。f#は次式で表されます。

!FORMULA[185][1127738465][0] f#

まとめ

リストモナドと状態モナドを,図式を用いて説明しました。詳しい説明は省略しましたが,図式に慣れればきっとこれらのモナドを視覚的にわかりやすく理解できることと思います。

補足:
これらのモナドは随伴が導くモナドという観点からも整理できます。詳しくは文献Nak-2025をご参照ください。

参考文献

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

この記事を高評価した人

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

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

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

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

投稿者

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

コメント

他の人のコメント

コメントはありません。
読み込み中...
読み込み中
  1. はじめに
  2. 本連載の目次
  3. 準備:バインド演算
  4. リストモナド
  5. リストモナドの定義
  6. リストモナドがモナドであることの確認
  7. 持ち上げ
  8. 状態モナド
  9. 状態モナドの定義
  10. 状態モナドがモナドであることの確認
  11. 持ち上げ
  12. まとめ
  13. 参考文献