bitterharvest’s diary

A Bitter Harvestは小説の題名。作者は豪州のPeter Yeldham。苦闘の末に勝ちえた偏見からの解放は命との引換になったという悲しい物語

圏論:ストリング・ダイアグラム ー \( {\rm Hom}\) 関手

1.7 \( {\rm Hom}\) 関手

圏論らしいと思わせてくれる関手の一つが\( {\rm Hom}\) 関手である。これは射を集合として扱えるようにしてくれる素晴らしい機能である。

1)\( {\rm Hom}\)集合

\( {\rm Hom}\) 関手の説明に先立って\( {\rm Hom}\)集合を説明しよう。二つの対象の間の射の集まりが集合となるとき、これを\( {\rm Hom}\)集合と言う。ドメイン側の対象を\(X\)とし、コドメイン側の対象を\(Y\)としたとき、その\( {\rm Hom}\)集合は\( {\rm Hom}(X,Y)\)と記される。

ドメイン側の対象\(A\)を固定し、ここから対象\(X,Y\)への\( {\rm Hom}\)集合を\( {\rm Hom}(A,X)\), \( {\rm Hom}(A,Y)\)とし、対象\(X,Y\)での射の一つを\(f: X \rightarrow Y\)としたとき、\( {\rm Hom}(A,X)\)から\( {\rm Hom}(A,Y)\)への\(f\)に対応する射を\( {\rm Hom}(A,f)\)で表す。この射は、ドメインとコドメインとも集合なので、集合での関数となる。

2)\( {\rm Hom}\)関手のドメインとコドメインを構成する圏

それでは、\( {\rm Hom}\) 関手の入口側と出口側の圏について考えよう。入口側の、すなわちドメイン側の圏はちょっと特殊である。この圏ではドメインとコドメインとを結んでいる射の集まりは集合であるという制限を設けている。このような圏は、局所的に小さい圏と一般的に呼ばれている。

次に、\( {\rm Hom}\) 関手の出口側の圏、すなわちコドメイン側の圏について考えよう。この圏は馴染み深い集合の圏である。集合の圏は、1) 対象のそれぞれは集合であり、対象を集めたものは全体の集合となっていて(ラッセルのパラドックスとはならないような集合)、2) 射は対象間の関数の集合であるものをいう。

もう少し詳しく集合の圏を定義すると、対象を\(A,B,…\)としたとき、\(A\),\(B\),\(C\),…のそれぞれは集合であり、それらを集め全体を構成している\( \{A,B,C,…\} \)も集合である。そして、\(A\)から\(B\)への写像を\( {\rm Hom}(A,B) \)としたとき、\( {\rm Hom}(A,B), {\rm Hom}(A,C), {\rm Hom}(B,C)…. \)のそれぞれは集合である。

3)\( {\rm Hom}\)関手の定義

\( {\rm Hom}\)関手の説明に先立って、この関手の役割について言及しておこう。図32に示すように、圏での対象を\(A,X,Y\)とし、\(A\)からそれぞれの対象への射の集合を\( {\rm Hom}(A,X ) \),\( {\rm Hom}(A,Y ) \)とし、\(X\)から\(Y\)への射の一つを\(g:X \rightarrow Y\)としよう。\( {\rm Hom}(A,X ) \),\( {\rm Hom}(A,Y ) \)は集合なので、その間に関数を定義することができる。これには\(g\)を用いて、\( {\rm Hom}(A,g) \)としよう。

関手の役割は、\( {\rm Hom}(A,X ) \),\( {\rm Hom}(A,X ) \),\( {\rm Hom}(A,g) \)を外に放り出し、これらを\(X,Y,g\)で結ぶことである。

f:id:bitterharvest:20200504085924p:plain:w200
図32:共変\(\rm{Hom}\)関手の役割

今あげた例は、\(A\)から出ていく射の集合について考えたが、図33に示すように、入ってくるものについても考えることができる。考え方は同じだが、\(Y\)から\(A\)への関数は、\(X\)を経由しての関数の合成となるように、\(g\)の向きを逆転させ、\(g^{op}: Y \rightarrow X\)とし、\( {\rm Hom}(Y,A ) \)から\( {\rm Hom}(X,A ) \)への関数は\( {\rm Hom} (g^{op}, A) \)とする。すなわちすべてが反対となっている世界を定義する。前者では関手が共変となるのに対し、後者は反変となる。

f:id:bitterharvest:20200504075534p:plain:w200
図33:反変\(\rm{Hom}\)関手の役割

準備が済んだので、共変関手の方から定義しよう。関手は\( {\rm Hom}_\mathcal{C}(A, - )\)と記される。圏\(\mathcal{C}\)の対象\(X\),\(Y\)と射\(g\)は、この関手によって、圏\(\mathbf{Set}\)の対象\( {\rm Hom}_\mathcal{C} (A,X) \), \( {\rm Hom}_\mathcal{C} (A,Y) \)と射\( {\rm Hom}_\mathcal{C} (A,g) \)に移される。これを図34に示す。

f:id:bitterharvest:20200518094628p:plain:w450
図34:共変\(\rm{Hom}\)関手の定義

反変関手の定義は図35になる。ここでは、圏\(\mathcal{C}\) での射の向きを逆にした圏\(\mathcal{C}^{op}\)が使われていることに注意して欲しい。

f:id:bitterharvest:20200518094807p:plain:w450
図35:反変\(\rm{Hom}\)関手の定義

4)簡単な例

それではストリング・ダイアグラムで表すことを考えよう。段階的に話を進めるために、まず図36を考えよう。対象は\(A,X\)とし、\( {\rm Hom}_\mathcal{C}(A,A ) \)はその要素に\(a\) を有するとする(実際には恒等射\(I_A\)を始めとする\(A\)から\(A\)への射であるが、ここは集合なので、要素という感触をだすために\(a\)を用いる)。

f:id:bitterharvest:20200518095303p:plain
図36:共変\(\rm{Hom}\)関手の簡単な例

例によって圏\(1\)を設け、\(\mathcal{C}\)の対象と射を関手と自然変換するために関手\(A,X\)を張り、さらに\( {\rm Hom}_\mathcal{C}(A,A ) \)の要素\(a\)を表現できるように関手\(*\)を張っておこう。図で示すと37になる。

f:id:bitterharvest:20200518095230p:plain
図37:圏\(1\)を利用して、ストリング・ダイアグラムで表せるようにする。

これをpasting diagramで示すと図38となる。

f:id:bitterharvest:20200518095241p:plain:w300
図38:簡単な例をpasting diagramで表す。

さらにストリング・ダイアグラムで表すと図39となる。

f:id:bitterharvest:20200518101012p:plain:w350
図39:簡単な例をストリング・ダイアグラムで表す。

反変関手についても同じように議論を進めることができる。これについては読者の方で確認して欲しい。

5)一般的な例

それではもう少し一般的な場合について考えることにしよう。単純な例に対象\(Y\)を付け加え、\(g:X \rightarrow Y\)が与えられたとしよう。

まず共変関手\( {\rm Hom}_\mathcal{C}(A, - ) \)の方から考えることにしよう。図で表すとき、\( {\rm Hom}_\mathcal{C}(A, - ) \)という表記はスペースを必要とするので、これからは\(h^A\)で表すこととする。すると\( {\rm Hom}\) 関手は図40になる。

f:id:bitterharvest:20200518101032p:plain
図40:\({\rm Hom}\)関手の概念図

圏\(1\)を利用して関手を張ったものが図41である。

f:id:bitterharvest:20200518101044p:plain
図41:圏\(1\)を利用して、対象と射を関手と自然変換に変える。

これをpasting diagramで表すと図42となる。

f:id:bitterharvest:20200504084613p:plain:w300
図42:\({\rm Hom}\)関手をpasting diagramで表す。

さらにストリング・ダイアグラムで表すと図43となる。

f:id:bitterharvest:20200505084023p:plain
図43:\({\rm Hom}\)関手をストリング・ダイアグラムで表す。


それでは次に反変関手\( {\rm Hom}_\mathcal{C}( - ,A ) \)について考えよう。これも同じように\(h_A\)で表すと、圏\(1\)から関手を張った段階は図44となる。
f:id:bitterharvest:20200518101348p:plain
図44:反変関手に対して圏\(1\)より関手を張る。

これよりストリング・ダイアグラムを作成すると図45となる。途中の過程は省略してあるので、共変関手を参考にして途中経過を追って欲しい。

f:id:bitterharvest:20200504091955p:plain
図45:反変関手でのストリング・ダイアグラム

これで基礎は終わりである。次はいよいよ随伴に進む。

圏論:ストリング・ダイアグラム ー 自然変換

1.6 自然変換

対象の間をつないだものが射、圏の間をつないだものが関手、そして関手の間をつないだものが自然変換である。射での合成は、関手でも保存されたが、自然変換でも同じように保存される。

関手は二つの圏を結ぶものであった。このため一方の圏は関手のドメインとなり、他方の圏は関手のコドメインであるが、本当の意味でドメインになるのは一方の圏の対象であり、コドメインとなるのは他方の圏の対象である。

従って一方の圏から対象\(X\)を任意に選んだとき、関手\(F,G\)のドメインは\(X\)で、コドメインはそれぞれ\(F((X),G(X)\)である。関手\(F,G\)をつなぐ自然変換\(α\)はドメインごとに定義され、ドメインは自然変換\(α\)の成分と呼ばれる。従って成分\(X\)に対しての自然変換は、\(α_X:F(X) \rightarrow G(X) \)で定義される。

圏\(\mathcal{C}\)で任意の射\(f:X \rightarrow Y\)を考える。このとき、対象\(Y\)を成分にして、自然変換\(α_Y:F(Y) \rightarrow G(Y) \)を定義することができる。このとき、それぞれの関係は図28に示すようになる。

f:id:bitterharvest:20200429143253p:plain
図28:自然変換
上記の図で、\(F(X)\)から\(G(Y)\)に行く経路には、最初に\(α_X\)を計算した後で\(G(f)\)を計算してたどり着く場合と、最初に\(F(f)\)を計算した後で\(α_Y\)を計算してたどり着く場合とがある。自然変換は、経路に寄らないというのが定義である。従って、自然変換は、任意の成分\(X\)に対して\(G(f) \circ α_X =α_Y \circ F(f)\)と定義される。

それでは、自然変換をストリング・ダイアグラムで表すこととしよう。例によって、圏\(1\)を用意し、\(\mathcal{C}\)の対象と射を、それぞれ関手と自然変換に変えよう。これは図29になる。

f:id:bitterharvest:20200429143328p:plain
図29:自然変換を圏\(1\)と結びつける

図30はこれのpasting diagramである。

f:id:bitterharvest:20200429143428p:plain:w300
図30:自然変換をpasting diagramで表す。

ストリング・ダイアグラムでは複数の表現方法が可能であるが、その代表的なものが図31である。この図で右側の2つのダイアグラムが、自然変換の定義に相当する。

f:id:bitterharvest:20200429143509p:plain
図31:自然変換をストリング・ダイアグラムで表す。


用語説明:自然同型


自然変換は射の一種である。このため同型射を考えることができる。同型射は、ドメインからコドメインへの射が全単射であることを言う。これと同じように、自然同型とは、任意の成分\(X\)に対しての自然変換\(α_X:F(X) \rightarrow G(X\)が全単射となっていることである。

あるいは次のように定義することもできる。関手\(F\)から関手\(G\)への自然変換\(α_X\)が自然同型であるとは、任意の成分\(X\)に対して、\(β_X \circ α_X = I_F\) かつ\(α_X \circ β_X=I_G\) となるような、関手\(G\)から関手\(F\)への自然変換\(β_X\)が存在するときである。これを図で示したのが付録7である。

f:id:bitterharvest:20200430100249p:plain
付録7:自然同型

自然同型をストリング・ダイアグラムで表すと次のようになる。なお、\(u \in F(X), v \in G(X) \)である。

f:id:bitterharvest:20200430100357p:plain
付録8:自然同型をストリング・ダイアグラムで表す。

圏論:ストリング・ダイアグラム ー 関手

1.5 関手

関手は、未知の圏を既知の圏から観察できるようにしてくれる、圏論の中でも重要な概念の一つである。二つの圏が与えられたとき、これらを関手でつなぐことによって、一方の圏が持つ代数的構造を、他方の圏に持ち込むことが可能になり、他方を観察できるようにしてくれる。関手に要求されているのはとても単純で、射の合成を保存することである。

関手は、射の対応づけの違いによって2種類ある。その一つは共変関手(covariant functor)と呼ばれ、射の向きが変わることはない。他の一つは反変関手(contravariant functor)と呼ばれ、射の向きが逆になる。

共変関手は次のように定義される。二つの圏\(\mathcal{C},\mathcal{D}\)が存在したとき、共変関手\(F\)は
1) \(\mathcal{C}\)のそれぞれの対象\(X\)を\(\mathcal{D}\)の対象\(F(X)\)に対応させる。
2) \(\mathcal{C}\)のそれぞれの射\(f : X \rightarrow Y \)を\(\mathcal{D}\)の射\(F(f): F(X) \rightarrow F(Y) \)に対応させる。
そして以下の条件を満たす(これは恒等射と射の合成を保存するものである)。
3) \(\mathcal{C}\)のそれぞれの対象\(X\)に対して、その恒等射\(I_X\)は写された側でも恒等射となる。すなわち\( F(I_X)=I_{F(X)} \)である。
4) \(\mathcal{C}\)の任意の射\(f : X \rightarrow Y, g : Y \rightarrow Z \)に対して、\(F(g \circ f) = F(g) \circ F(f) \)である。

それでは最初に1)と2)をストリング・ダイアグラムで表すことを考えよう。対象と射の関係を表すと図21になる。

f:id:bitterharvest:20200428132209p:plain:w350
図21:二つの圏を結ぶ関手

例によって圏\(1\)を用いて、\(\mathcal{C}\)の対象と射を、関手と自然変換として表すことで図22を得る。

f:id:bitterharvest:20200428132317p:plain:w380
図22:圏\(1\)と結ぶ

これをpasting diagramで表すと図23となる。

f:id:bitterharvest:20200428132348p:plain:w380
図23:pasting diagramで表す。

これよりストリング・ダイアグラムを得るが、その表し方は図24に示すように複数あり、どれを選ぶかは好き好きでケースバイケースである。

f:id:bitterharvest:20200428132443p:plain
図25:ストリング・ダイアグラムで表す。

3)での恒等射の保存に対するストリング・ダイアグラムは図25となる。

f:id:bitterharvest:20200428132726p:plain:w300
図25:恒等射に関連する条件
また、4)での合成の保存については図26となる。
f:id:bitterharvest:20200428133831p:plain
図26:射の合成に関する条件

反変関手では、前述したように、関手によって移される射の向きが逆になる。従って上記で、2)と4)が次のように変わる。
2) \(\mathcal{C}\)のそれぞれの射\(f : X \rightarrow Y \)を\(\mathcal{D}\)の射\(F(f): F(Y) \rightarrow F(X) \)に対応させる。
4) \(\mathcal{C}\)の任意の射\(f : X \rightarrow Y, g : Y \rightarrow Z \)に対して、\(F(g \circ f) = F(f) \circ F(g) \)である。

しかし図27に示すように、\(\mathcal{C}\)の双対圏\(\mathcal{C^{op}}\)を用意することで、\(\mathcal{C}\)と\(\mathcal{D}\)に対してではなく、\(\mathcal{C^{op}} \)と\(\mathcal{D}\)の間で考えればよいことになるので、共変関手の概念だけで取り扱うことが可能になる。

f:id:bitterharvest:20200428135926p:plain
図27:反変関手は、共変関手として扱う

用語説明:モノイドの圏


全ての小さい圏を対象とし、圏の間の関手を射とした圏は、小さい圏の圏\(\mathbf{Cat}\)と呼ばれる。また対象をモノイドに限定したときは、モノイドの圏\(\mathbf{Mon}\)と呼ばれる。先に説明したように、関手は合成を保存\(F(g \circ f) = F(g) \circ F(f)\)するので、モノイドの圏\(\mathbf{Mon}\)では、次のモノイド準同型が成り立つ。

モノイド準同型の定義:モノイドの圏\(\mathbf{Mon}\)に、二つのモノイド\(M,M'\)があり(これらは対象である)、\(M\)での射を\(a,b,c...\)とし、その合成を\(\circ\)とし、\(M'\)での合成を\(\bullet\)とし、\(M\)から\(M'\)への関手を\(F\)とする。このとき、モノイド準同型であるとは、\( F ( a \circ b \circ c ... )=F(a) \bullet F(b) \bullet F(c) ... \)が成り立つというものである。

モノイド準同型は関手の性質\(F(g \circ f) = F(f) \circ F(g) \)から容易に導き出されるが、ここでは例で示すことにとどめておく。
二つのモノイド\(M,M'\)を用意しよう。\(M\)は文字列の接続に関するもの、\(M'\)は前の記事で説明した自然数の加算としよう。これらの関手として文字列の長さを計算する\(length\)が用意されていたとしよう。

二つのモノイドは、モノイドの圏での対象であり、関手はこの圏での射であるので、これは図28になる。

f:id:bitterharvest:20200428153724p:plain
付録6:モノイドの圏でのモノイド準同型

それでは構成要素を見ていこう。まずはモノイドの圏\(\mathbf{Mon}\)の主要な構成要素は、
1) 対象:文字列に関するモノイド、自然数の加算を行うモノイドなどのモノイド
2) 射:文字列の長さを求める\(length\)などの関手

この圏の対象になっている圏は次のような構成である。文字列に関するモノイド\(M\)は
1) 対象:★
2) 射:文字列
3) 恒等射:空の文字列
4) 合成:文字列の接続\(++\)

自然数の加算に関するモノイド\(M'\)は
1) 対象:★
2) 射:自然数
3) 恒等射:\(0\)
4) 合成:加算\(+\)

関手\(length\)は、文字列の接続に関する計算を、自然数の加算に関する計算に持ち込む。
例えば、つぎの文字列の接続が与えられたとする。
\begin{eqnarray}
a &=& "This" ++ "\ " ++ "is” ++ "\ " \\
&& ++ "a" ++ "\ " ++ "pen" ++ "."
\end{eqnarray}
このとき、関手\(length\)は、これを長さの計算に置き換える。このとき、関手の性質から
\begin{eqnarray}
length(a) &=& \\
&& length("This" ++ "\ " ++ is ++ "\ " \\
&& ++ "a" ++ "\ " ++ "pen" ++ ".") \\
&=& length("This") + length("\ ") + length("is") + length("\ ") \\
&& + length("a") + length("\ ") + length("pen") + length(".")
\end{eqnarray}
となり、モノイド準同型となっていることが分かる。
ここでは一つの例を示したが、一般に言えることである。証明はしてください。

圏論:ストリング・ダイアグラム ー 合成・結合律・単位律

1.3 合成

射の合成は、圏を構成するための重要な道具の一つである。圏\(\mathcal{C}\)において、射\(f:A \rightarrow B, g:B \rightarrow C\)が存在したとき、\(f\)を計算し、その結果に対して\(g\)を計算することを、射の合成と言い、これを\( g \circ f\)と書く。いつも\( \circ \)を書くのは煩わしいので、今後はこれを省いて\( g f\)とする。これを\(h:A \rightarrow C\)を用いて、\( h=gf\)としたのが、図15である。

f:id:bitterharvest:20200426112616p:plain:w200
図15:射の合成

それではストリング・ダイアグラムで表すことを考えよう。例によってただ一つの対象からなる圏\(1\)を用意し、各対象に対してこれから関手を張り、それぞれの射はこの関手間での自然変換とすると、図16になる。

f:id:bitterharvest:20200426112645p:plain:w280
図16:射の合成を関手圏で表す。

これをpasting diagramで表すと、図17である。

f:id:bitterharvest:20200426113514p:plain:w280
図17:射の合成をpasting diagramで表す。

そして、ストリング・ダイアグラムは図18となる。

f:id:bitterharvest:20200426112814p:plain:w300
図18:射の合成をストリング・ダイアグラムで表す。

1.4 結合律・単位律

圏が満たさなければならない条件に結合律と単位律があった。結合律は、\(f:A \rightarrow B, g:B \rightarrow C , f:C \rightarrow D \)が存在したとき、これらを合成しての計算結果は、その結合の順番に寄らないというものである。即ち、\(h(gf))=(hg)f\)である。これをストリング・ダイアグラムで表すと図19となる。

f:id:bitterharvest:20200426112917p:plain:w500
図19:結合律をストリング・ダイアグラムで表す。

単位律は、恒等射と合成しても変化はないというもので、\(I_B f = f = f I_A \)である。ここで、\(I_A : A \rightarrow A, I_B : B \rightarrow B\)はそれぞれ恒等射である。これをストリング・ダイアグラムで表すと図20となる。

f:id:bitterharvest:20200426113003p:plain:w500
図20:単位律をストリング・ダイアグラムで表す。


用語説明:モノイド

圏論を勉強し始めて最初に躓いたのが、モノイドである。これは、加算や乗算などの二項演算で単位元を持つものの代数的構造を表す圏である。小学校以来ずっと足し算や掛け算は演算子と習っていて、当然のことこれが射になるものと思っていたら、見事に裏切られた。射になるものは、被加数や加数あるいは被乗数や乗数などの数であって、加算や乗算などの演算はなんと合成であった。

自然数の加算を圏で表現すると下図のようになる。

f:id:bitterharvest:20200427132033p:plain:w200
付録1:自然数の加算を圏で表す。

ここでは、
1) 対象は一つだけで、★で表すことが多い。
2) 射は自然数で、\(a,b,… \in \mathbb{N} \)
3) ドメインとコドメインは★
4) 恒等射は\(0\)
5) 結合は加算( \(+\) )
もちろん、単位律、結合律は満たされている。

集合\(S\)とその上の二項演算\(*: S \times S \rightarrow S\)が与えられ、単位元と結合律を満たすとき、\((S,*)\)の組をモノイド(半群)という。単位元を恒等射、集合を射とすることで、上記のように圏として構成できる。対象が一つの圏(単一対象圏)で、射も集合であることから、これは小さい圏である。また、圏のときは、\(S\)の代わりに、モノイド(Monoid)の頭文字をとってモノイド\((M,*)\)あるいはモノイド\(M\)と記されることが多い。上述の自然数での加算はモノイド\((\mathbb{N},+ )\)となる。

それではモノイド\((\mathbb{N},+ )\)をストリング・ダイアグラムで表すことを考えよう。まずは下図のように関手圏として表す。

f:id:bitterharvest:20200427132111p:plain:w250
付録2:モノイドを関手圏として表す。

つぎに下図のようにpasting diagramにする。

f:id:bitterharvest:20200427132144p:plain:w250
付録3:モノイドをpasting diagramで表す。

そして下図のようにストリング・ダイアグラムで表す。

f:id:bitterharvest:20200427102032p:plain:w150
付録4:モノイドをストリング・ダイアグラムで表す。

最後に、二項演算の場面を下図に示す。

f:id:bitterharvest:20200427102305p:plain:w350
付録4:付録5:モノイドでの合成

圏論:ストリング・ダイアグラム ー 集合の要素

1.2 集合の要素

圏にはいろいろな種類があるが、それらの中で馴染みやすいのは集合の圏だろう。これは\(\mathbf{Set}\)で表すことにしよう。集合の圏\(\mathbf{Set}\)とは、対象のそれぞれが集合であり、集合の間の射はそれぞれが全関数であり、射の合成は関数の合成となるものをいう。

例えば、二つの集合\(A,B\)が存在し、\(A\)から\(B\)へと写像する関数を考えることにしよう。このような関数の全てを集めたものを\(\rm{Hom} (A,B)\)で表すと、集合の圏を次のように定義することができる。

集合の圏\(\mathbf{Set}\)の主要な構成要素
1) 対象:\(A,B\)
2) 射: \(f,g,…\in \rm{Hom} (A,B) \)
3) 合成:\( f \circ g \)

射をストリング・ダイアグラムで表現する方法については前回の記事で学んだので、ここでは対象となっている集合\(A\)の要素\(a \in A\)をどのように表したらよいか考えよう。

集合\(A\)と要素\(a \in A\)の関係を図示すると図6のようになる。

f:id:bitterharvest:20200424124557p:plain:w180
図6:集合の圏での集合とその要素

しかし、圏では対象の中がどのようになっているかを示すことができないので、要素\(a \in A\)を、1要素の集合\(*\)で構成される対象から対象\(A\)への射\(a\)として、図7に示すように表すことにしよう。

f:id:bitterharvest:20200425085041p:plain:w180
図7:要素を射で表す。

このようにすると、要素を射として表すことができるので、これは前回の記事で示した射の表し方を応用することができるようになる。従って、図8を得る。

f:id:bitterharvest:20200424124821p:plain:w280
図8:集合と要素を関手で表す。

これをpasting diagramで表すと図9である。

f:id:bitterharvest:20200424124902p:plain:w300
図9:集合の要素を表したpasting diagram

そして、ストリング・ダイアグラムでは図10となる。

f:id:bitterharvest:20200424125011p:plain:w180
図10:集合の要素をストリング・ダイアグラムで表す。

それでは、先に定義した集合の圏\(\mathbf{Set}\)を考えてみよう。射\(f:A \rightarrow B \)が、\(A\)の要素\(a\)を、\(B\)の要素\(b\)に移したとする。この様子は、図11となる。

f:id:bitterharvest:20200426082402p:plain:w180
図11:集合の圏

例によって、圏\(1\)からの関手によって、集合と要素を関連づけると図12となる。

f:id:bitterharvest:20200424125223p:plain:w280
図12:集合の圏の対象を関手とし、併せて要素も関手とする。

pasting diagramで表すと、図13である。

f:id:bitterharvest:20200424125344p:plain:w300
図13:集合の圏をpasting diagramで表す。

従って、ストリング・ダイアグラムは図14のようになる。

f:id:bitterharvest:20200424125438p:plain:w350
図14:集合の圏をストリング・ダイアグラムで表す。


用語説明:ラッセルのパラドックス

集合の圏がでてきたので、これに関連した話をしよう。集合の世界にはラッセルのパラドックスがあり、(素朴集合論では)集合の集合は必ずしも集合にならないとされている。これを避けるために、(公理的集合論では)集合を集めたものをクラスと呼ぶ。クラスに属するものは、共通の性質によって定義されたものである。クラスが集合となるようなものは小さいクラスと呼ばれ、そうでないクラスは真のクラスと呼ばれる。

圏において、対象の集合と射の集合が共に集合である時は小さい圏と言い、そうでないときは大きい圏という。さらに、任意の対象間の射の集合が集合である時、局所的に小さい圏という。

小さい圏の例を挙げておこう。
(1) 空圏\(0\):対象も射も持たない圏である。
(2) 圏\(1\):ただ一つの対象と唯一つの射(恒等射)を有する圏である。
(3) モノイド\(M\):加算乗算などを行う圏で、対象は\(*\)、射は\(M\)(被加数と加数、あるいは被乗数と乗数)、合成は与えられた演算である。例えば、加算\(a+b\)において、\(a,b\)は射で、\(a,b \in M:* \rightarrow *\)、\(+\)は合成である。

大きい圏の例も挙げておく。
(1) 集合の圏\(\mathbf{Set}\):対象は全ての集合、射は集合間のすべての関数、合成は関数の合成である。
(2) 関手圏\(\mathbf{Func}(\mathcal{C},\mathcal{D}) \):対象は圏\(\mathcal{C}\), \(\mathcal{D}\)間の全ての関手、射は関手間の全ての自然変換、合成は自然変換の垂直合成である。
(3) 小さい圏の圏\(\mathbf{Cat}\):対象は全ての小さい圏、射は全ての関手、合成は関手の合成である。この圏では、空圏\(0\)は始対象、圏\(1\)は終対象となる。

ラッセルのパラドックスの話は少し込み入っているので、ここでは、例でその一端を説明しておくだけにしよう。詳しくは、ウィキペディアなどで調べて欲しい。

よく引き合いに出されるのは床屋さんの話だ。ある村に住んでいる男の人たちの集合\(S\)を考える。この村の男たちは、床屋さんに頼まず自分で髭を剃るか、床屋さんに剃ってもらうかのいずれかであったとしよう。

自分で剃る人の集合を\(A\)とし、床屋さんに髭そってもらう人の集合を\(B\)としたときに、集合\(A\)と集合\(B\)とを集めたもの、すなわちそれらの集合を考えると、男たちの集合\(S\)になりそうだ。

ところがどっこいそうはいかない。床屋さんをどちらに入れても、集合を作る前提が崩れてしまうのだ。床屋さんという単語を使って集合を定めていることが問題なのだが、この点を説明したのがラッセルのパラドックスである。

しかし現在ではこのパラドックスを避ける方法が用意されている。床屋さんのケースでは、1)自分では髭を剃るが他人の髭は剃らない人の集合と、2)他人の髭は剃るが自分の髭を剃らない人の集合と、3)自分の髭だけでなく他人の髭も剃る人の集合とに分ければ、これらを集めた集合は村の男の集合になる。

位相空間での開集合の定義も同じように矛盾をきたすことを避けている。その定義は次のようになっている。
1)全体集合と空集合閉集合に属す。
2)閉集合に属す集合の任意の合併は閉集合に属す。
3)閉集合に属す集合の有限個の交わりは閉集合に属す。

上記の定義で、合併の場合には任意個寄せ集めてもよいが、交わりの場合には有限個に限定している。無限にすると閉集合でないものが生じるので、これを避けるためである。
例えば次を考えてみよう。縁なし円の閉集合\(d_n\)を、半径\(r < 1/n \)の中に含まれる点の集まりだとしよう。これは外周を含まない縁のない円である。そして、\(n=1,2,3...\)としよう。
このとき、無限個の閉集合を集めることを考えよう。すなわち\(\cap_{n=1}^{\infty} d_n\)を考えると、これは縁なし円ではなく、ただの点となってしまい、閉集合ではなくなる。

同じように、圏論では グロタンディーク宇宙を用意しているが、ここではその説明は省略させてもらう。


圏論:ストリング・ダイアグラム ー 射

テレビでは、連日、それもかなり頻繁に、コロナウイルスが話題に上っている。感染症の一つなので、その数理的なモデルはパーコレーションである(複雑系という学問の中で、20世紀末から21世紀初頭にかけて多くの研究成果が発表された)。そしてこれを終息させる方策は、ウイルスを壊滅するか、全ての人が免疫を持つかの2通りの選択しかない。また進行を抑えるには、感染させる力が強い場所や人(これはハブと呼ばれる)を潰すのが効果的だ。しかし世界中に広く感染している現状では、ウイルスを壊滅することはほぼ不可能に近いので、全ての人とは言わないまでもほとんどの人が免疫を持たない限り解決には至らない。免疫を持つ方法には、罹患以外にワクチン投与がある。病状は呼吸器に現れて最悪の場合には呼吸困難となるので、生易しくはなく、絶対にかかりたくはない。早くワクチンが開発されることを期待しているが、1年程度はかかりそうだということなので、コロナウイルスとの戦いは辛い長期戦になりそうだ。

今では、人が集まる場所はほとんど閉鎖されている。4月からは2か所の歴史博物館でボランティアガイドを予定していたが、ここも状況は同じである。明治期の横浜開港や武士政権時の鎌倉の展示に優れている博物館が新たに加わり、活きた知識が増えることを楽しみにしていたのでが、しばらくは叶うことのない夢となってしまった。本来ならば、たくさんの行事が入っていたはずの予定表も、定期的に通わなければならない病院だけとなってしまい、思いもかけずたくさんの時間を自由に使うことができるようになった。

そこで、長い時間をかけなければ纏まりそうもない課題をということで、圏論をビジュアルに表現する方法について取り組むことにした。圏論には二つの側面がある。一つは計算で、もう一つは証明だ。計算はHaskellのような関数型のプログラミング言語を用いると、胸が湧きたつような実感を味わいながら、その過程を追うことができる。証明は、ストリング・ダイアグラムを用いることで、とても分かりやすく説明することができる。数学の分野のなかで、このように便利な道具を有しているものは圏論以外にはないので、とても気に入っている分野の一つだ。

ストリング・ダイアグラムについては、前のブログで最も面白い部分を紹介したが、今回は、基礎的なところから始めて米田の補題まで、通して説明することにしよう。

1.基礎

圏論(category theory)は、圏(category)と呼ばれるものが中心の概念になっている。圏は、対象(object)、射(morphism)、ドメイン(domain)とコドメイン(codomain)、恒等射(identity morphism)、射の合成(composition)で構成され、また単位律(identity)と結合律(associativity)が成り立つものである。

射は、ある対象からある対象への方向性のある関係を表す。出発点となっている対象の方をドメインと呼び、到着点となっている対象をコドメインと呼ぶ。自分自身への射を特別に恒等射と呼ぶ。さらに二つの射はつなぎ合わせる、すなわち合成すると、これは一つの射となる。ある射と恒等射の間で合成を行ったときは、恒等射はなかったかのように振る舞うのが単位律である。また複数個の射を結合し、それを計算しようとするときは、どこから始めてもよいというのが結合律である。圏は、とても簡潔な構成要素から成り立っているが、その簡潔さにもかかわらず、計算という概念を的確に表現してくれる。

二つの圏があったとき、これを対象と見なすと、これらの圏の間に射を定義することができる。このときの射は、特別な用語を用いて、関手(functor)と呼ばれる。このとき送り側で計算する場合と、受け側で計算する場合の2通りの計算経路が存在するが、関手は、どちらでも同じであるという性質を有している。二つの圏とその間の関手により構成された圏は関手圏と呼ばれる。

関手は一つとは限らず複数個用意することも可能である。このようなとき、関手と関手とを結ぶ射を考えることができる。関手の場合と同じように、異なる計算経路が現れるが、経路に寄らず計算結果が同じとなる射を、特別に自然変換(natural transformation)と呼ぶ。

すごい勢いで自然変換まで説明したが、これはストリング・ダイアグラムを説明するときに自然変換を必要とするためである。必要になったときに改めて数学的に厳密な定義を与えるが、これまではとりあえず感覚的に把握して欲しい。

関手圏を図的に(例えばpasting diagram)表すときは、これまでは、その対象すなわち対象と見なした圏を0次元の点で、その射すなわち関手を1次元の矢印で、自然変換を太めの矢印で示していたが、ストリング・ダイアグラムでは、自然変換を0次元の点で、関手を1次元の線分で、そして対象となった圏を2次元の平面で表す。

1.1 射

ここでは、圏の中で最も重要な概念である射をストリング・ダイアグラムで表すことを考えよう。

圏\(\mathcal{C}\)は、図1に示すように、射\(f\)、ドメインとなる対象\(X\)とコドメインとなる対象\(Y\)とで構成されているとしよう。このほかに、対象\(X,Y\)自身に移す恒等射\(I_X,I_Y\)が存在するが、図には取り敢えず含めないことにし、結合についても同じことにしてて、ストリング・ダイアグラムを書くことに専念する。

f:id:bitterharvest:20200426083214p:plain:w200
図1:二つの対象と一つの射を有する単純な圏

\(\mathcal{C}\)の他にもう一つ圏\(\mathcal{1}\)を考えることにしよう。これはとても単純な圏で、一つの対象(1要素の集合)で成り立っているとしよう。圏\(\mathcal{1}\)と圏\(\mathcal{C}\)を関手で結んだ関手圏、これは図2に示す、を考えることにしよう。関手には、圏\(\mathcal{1}\)と\(\mathcal{C}\)の対象\(X\)とを結んだ関手\(X\)と対象\(Y\)とを結んだ関手\(Y\)とを考えることにしよう。

二つの関手の間は、自然変換\(f\)で結ぶことができる。関手圏では対象は関手であり、射は自然変換である。この関手圏は、構造が複雑ではないので、関手も自然変換も、計算の経路は一つだけで、自然変換\(f\)は、従来の考え方での関数\(f:X \rightarrow Y\)と同じふるまいをする。

f:id:bitterharvest:20200424181414p:plain:w350
図2:簡単な圏を関手と自然変換で表す。

そこで、関手圏を通常広く利用されているpasting diagramで表すと図3となる。

f:id:bitterharvest:20200422110843p:plain:w250
図3:簡単な圏をpasting diagramで表現する。

そこでそれぞれを表す次元を逆にして、関手のドメインとコドメインになっている圏\(\mathcal{C}\)と圏\(\mathcal{1}\)を2次元の平面で、関手である\(X,Y\)を1次元の線分で、自然変換\(f\)を0次元の点で表すと図4となる。この図の見方は、左から右へ、下から上へである(向きは研究者によって異なる)。この図を左側から右側へと見たときに、図の下部では、圏\(\mathcal{C}\)から関手\(X\)を経て圏\(\mathcal{C}\)に移っていることが示されている。また、上部では関手\(Y\)を介してである。また、下から上へと見たときは、関手\(X\)から自然変換\(f\)を経て、関手\(Y\)に至ることが分かる。

f:id:bitterharvest:20200422111041p:plain:w150
図4:簡単な圏をストリング・ダイアグラムで表現する。

しかし今後はもう少し簡略化して図5に示すように、0次元の点のところは自然変換に付けられた名前で表すことにする。また上方向に、射が向かっていることを明示するために矢印もつけることにした。

f:id:bitterharvest:20200422111134p:plain:w150
図5:簡略化したストリング・ダイアグラムで表現する。

今日の説明はここまで、次回は集合の要素の表し方についてみていこう。


用語説明:関数とは

圏論での対象と射という用語は、高校で学んだときの集合と関数に対応し、これらを抽象化した概念である。そこで、手始めに関数について説明しよう。

今から思うとかつての中学校はとても素朴であったと感じるのだが、あるとき、担任の先生が「君たちのことをもっとよく知って今後の教育に役立てたい。そこで紙を配るので、男子は好きな女子の名前を、女子は好きな男子の名前を、一人だけ書いて提出しなさい」と言われた。教室は、ざわざわとしたあと、皆が考え始めたのか静寂となり、そうこうするうちに鉛筆を走らせる音があちらこちらから聞こえてきた。いまでも強く印象に残っている光景なのだが、誰の名前を書いたかを今となっては思い出すことはできないし、先生がどのように利用したのかも分からない。

ところでこれは関数のいい例だ。関数は、集合と集合の間を関係づけるものと考えることができる。男子の集合を\(B\)、女子の集合を\(G\)としたとき、「好きな女子の名を書く」という関数\(f\)は\(f:B \rightarrow G\)となる。逆に好きな男子という関数\(g\)は\(g:G \rightarrow B\)となる。

関数の出発点となっている集合をドメイン、到着点となっている集合をコドメインという。\(f\)の場合、ドメインは\(B\)、コドメインは\(G\)である。関数は通常はドメインの集合の全ての要素について定義されている必要がある(このような関数を全関数という。そうでない関数を部分関数という)。従って、先の中学校の例では、全ての生徒が誰かの名前を書いて提出することが関数となる必要な条件となる。白紙で出されると先生の意図は満足されず、関数としての要件も満たさないことになる。一方、複数の男子が同じ女子を好きで競合することは構わない。逆もそうだ。冷酷な現実だが、名前が記されない生徒が出るということは許されている。

さて、男子が\(m\)人、女子が\(n\)人いたときに、\(f\)と\(g\)はそれぞれどれだけ異なるものが存在するのだろうか。それほど難しい問題ではない。\(f\)に対しては、それぞれの男子に対して\(n\)通りの選択があり、男子の数は\(m\)なので、\(n^m\)となる。\(g\)に対しては\(m^n\)となる(先の関手圏では、ドメインの方が1要素、コドメインの方が2要素なので、射である関手は2通り存在することとなる)。ドメインの全ての要素が、コドメイン側の異なる要素に対して関係づけられているとき、単射という。例えば、男子の間で、好きな女子を巡って重なり合うことはないというのは単射である。また、全てのコドメインの要素に対して、それに関連付けられたドメインの要素があるとき、全射という。例えば、全ての女子に対して、好きだと思っている男子が必ずいるというのは全射である。

それでは、男女が同数であったとしよう。すなわち\(m=n\)としよう。そして私が好きと思っている人は、その人も私を好きと思ってくれている類まれなケースを考えてみよう。これを式で表すと、男子生徒\(a\)が好きな女性\(b\)は、この男子生徒を好きなので、\(g \circ f (a) = a\)となる(ここで\(b=f(a)\))。そして同じ人を好きになることはないので、任意の男子生徒\(a,a'\)に対してそれぞれが好きな女子生徒を\(b,b'\)とすると、\(b \neq b'\)である。女子側から見ると\(f \circ g (b) = b\) となる。自分自身に移す恒等関数を\(i\)とすると、それぞれ\(g \circ f = i\),\(f \circ g = i\)となる。このような写像\(f,g\)は同型写像(isomorphism)と呼ばれ、\(g = f^{-1}\)と記される。同型写像は、全単射となっていることに注意しておこう。なお同型写像であるとき、ドメインとコドメインは同型(isomorphic) であるという。構造的な差異がないということである。

最後に問題です。男子と女子の生徒数が同じであったとし、男子の方も女子の方も、全員が別々の名前を書いたとする。このとき、関数\(f,g\)を何回行ったり来たりすると元に戻るでしょうか?例えば男子\(a\)は女子\(b\)を、女子\(b\)は男子\(c\)を、男子\(c\)は女子\(d\)を、女子\(d\)は男子\(a\)を書いたとすると、\(a \rightarrow b \rightarrow c \rightarrow d \rightarrow a \)となり、2往復で戻ってくる。これは巡回群へと導くがそれについてはまた後で。


圏論をビジュアルに表現する(4)-随伴とモナドの関係

6.5 随伴とモナド

ストリング・ダイアグラムを用いて、随伴からモナドが導き出されることを示そう。

前述したように随伴は、二つの圏\(\mathcal{C,D}\)と関手\(L:\mathcal{D} \rightarrow \mathcal{C}, R:\mathcal{C} \rightarrow \mathcal{D}\)で構成され、自然変換\(ε:LR \rightarrow I_\mathcal{C},η:I_\mathcal{D} \rightarrow RL\)を有し、counit-unit恒等式を\(I_L=εL \circ Lη, I_R=Rε \circ ηR\)を満たすというものであった。これらは図26のようになる。

f:id:bitterharvest:20200312140915p:plain
図26:随伴を表すストリング・ダイアグラム

同様にモナドは、圏\(\mathcal{D}\)と自己関手\(T:\mathcal{D} \rightarrow \mathcal{D}\)で構成され、自然変換\(μ:T^2 \rightarrow T,η:I_\mathcal{D} \rightarrow T\)を有し、\(μ\circ Tη=μ\circ ηT=I_T, μ\circ Tμ=μ\circμT \)を満たすであった(前の節では圏を\(\mathcal{M}\)としたが、ここでは証明の都合を考えて\(\mathcal{D}\)とする)。これらは図27のようになる。

f:id:bitterharvest:20200312124104p:plain
図27:モナドを表すストリング・ダイアグラム


それでは証明に移ろう。

随伴とモナドには、同じ名前の自然変換\(η\)がある。ドメインは同じだが、コドメインは、前者の方は\(RL\)であるのに対し、後者の方は\(T\)である。そこで、両者は一緒と見なすことにしよう。すなわち\(RL=T\)とする。

この関係を用いて、随伴であると仮定したときに、モナドの各条件が満たされることを示せばよい。すなわち、\(T\)を\(RL\)で置き換えることで示せばよい。

最初に、モナドの自然変換\(μ,η\)を置き換えると図28のようになる。

f:id:bitterharvest:20200312124203p:plain
図28:モナドの関手\(T\)を随伴の関手\(RL\)で置き換えて、モナドの自然変換を表す。

それではモナドの条件が満たされることを示そう。

最初に\(μ\circ Tη=I_T \)が成り立つことを示す。これは図29に示すように、随伴でのcounit-unit恒等式のストリング・ダイアグラムを用いることで、証明できる。\(μ\circ ηT=I_T \)も同様である。

f:id:bitterharvest:20200312125953p:plain
図29:\(μ\circ Tη=I_T \)の証明

最後に、\(μ\circ Tμ=μ\circμT \)が成り立つことを示す。これは図30に示すように、図の中ほどの下に、緑の山が二つほど描かれている。山の高さは計算の順序を示すが、圏の結合律から、どちらを先に計算してもよい。このため高さを入れ替えても構わないので、この性質を用いて図に示すように証明できる。
f:id:bitterharvest:20200312130043p:plain
図30:\(μ\circ Tμ=μ\circμT \)の証明

ストリング・ダイアグラムを用いることで、「随伴からモナドが導き出される」という命題をすっきりと証明することができた。

モナドの対にコモナドがあるが、これについても同様に証明することができる。

圏論をビジュアルに表現する(3)-モナド

6.4 モナド

Haskellを学んだときに、多くの人がこれは何だろうと思ったのが、モナドだと思う。恐らくは入出力のところで出会ったことと思うが、なんでそのまま出力されないのと思ったことだろう。

話はそれるが、昨年は、九州、東北、北海道にある縄文時代弥生時代の遺跡を訪ね、その時代の文化に浸って楽しく過ごした。この時代の人々は、文字を有していなかったので、彼らがどのように考えていたのかを伝えてくれない。しかし、縄文時代の人々と同じように、狩猟採集生活を過ごした人々は、少し前まで、アフリカのカラハリ砂漠、南太平洋のニューギニア、南米のアマゾン奥地、そしてオーストラリアで生活をしていた。人類学者の人たちが、これらの人々のことを調べているので、縄文時代の人々の考え方を知る助けになるのではと思い、最近出版された2冊の本を読んでみた。

ジェイムス・スーズマン著『本当の豊かさはブッシュマンが知っている』と奥野克己著『ありがとうもごめんなさいもいらない森の民と暮らして人類学者が考えたこと』が、それである。こんなにも考え方が違うのかと驚かされるのだが、その中で時間に対する捉え方が全く異なる。我々は、過去、現在、未来という時を意識しているが、彼らには現在しかない。過去や未来があるから生き方が難しくなるので、現在だけしかないとするととても単純になる。

モナドの世界はまさに、現代人の世界である。入出力は、時間軸の中での前と後の関係を伴っている。これに対して、モナドがないHaskellの世界には時間的な前後の関係はない。そこではどの関数も、同じ入力に対して同じ出力を与える。時間によって出力が変わることはない。しかしモナドの世界では、過去に何があったかによって同じ入力であったとしても、異なる出力を与えることがある。狩猟採集民の人々と現代人の間の橋渡しをしてくれるのがモナドと考えると、時空間を越えてコミュニケーションをしているようで楽しくなる。今回は、そのようなモナドをストリング・ダイアグラムによりビジュアルに表現しよう。

モナドは、圏\(\mathcal{M}\)において、自己関手\(T: \mathcal{M} \rightarrow \mathcal{M}\)と自然変換
\begin{eqnarray}
η: I_\mathcal{M} \rightarrow T \\
μ: T \circ T \rightarrow T
\end{eqnarray}
を有し、以下の条件を満たすものである。
\begin{eqnarray}
μ\circ Tη &=& μ\circ ηT = I_T \\
μ\circ Tμ &=& μ\circ μT
\end{eqnarray}

条件を可換図式で表すと図18のようになる。

f:id:bitterharvest:20200227100849p:plain
図18:モナドの条件を可換図式で表す

自然変換\(η,μ\)はpasting diagramで表すと図19となる。

f:id:bitterharvest:20200227100958p:plain
図19:モナドの自然変換をpasting diagramで表す

これをストリング・ダイアグラムに変えると図20を得る。ビジュアルにすると天井からぶらさっがっている線に傘が接続されているものと、何も接続されていないものとなり、覚えやす。
f:id:bitterharvest:20200227101113p:plain
図20:モナドの自然変換をストリング・ダイアグラムで表す

次は可換図式だ。例によってpasting diagramを描いてみよう。図21に示すように二つに分かれ、上の図は可換図式の左側を、下の図は可換図式の右側の部分を表している。また、可換図式の左側で、\(Tη:T \rightarrow T^2\)の部分は\(Tη:T I_\mathcal{M} \rightarrow T^2\)としたあと、pasting diagramとした。右側の\(ηT:T \rightarrow T^2\)も同じである。

f:id:bitterharvest:20200227101209p:plain
図21:モナドの前半の条件をpasting diagramで表す

それではストリング・ダイアグラムで表してみよう。まずは上の部分で、図22になる。Pasting diagramは複雑だったが、ストリングスはすっきりしている。
f:id:bitterharvest:20200227101321p:plain
図22:モナドの前半の条件をストリング・ダイアグラムで表す

下の図をストリングで表すと図23となる。前の図とは左右対称なのが分かる。

f:id:bitterharvest:20200227101400p:plain
図23:モナドの前半の条件をさらにストリング・ダイアグラムで表す

もう一つの可換図式をpasting diagramで表すと図24である。

f:id:bitterharvest:20200227101451p:plain
図24:モナドの後半の条件をpasting diagramで表す

これをストリング・ダイアグラムで表すと図25のようにかなりすっきりし、左右を入れ替えても同じということがビジュアルにはっきりする。
f:id:bitterharvest:20200227101548p:plain
図25:モナドの後半の条件をストリング・ダイアグラムで表す

これで、随伴とモナドをストリング・ダイアグラムでビジュアルに表したので、次はモナドと随伴の関係について説明しよう。

圏論をビジュアルに表現する(2)-随伴

6.3 随伴

随伴は、圏論を代表する概念である。これは、「二つの圏が全く同じとは言わないまでもとても似ている」という考え方を与える。二つの圏\( \mathcal{C,D} \)が与えられた時に、\(LR=I_\mathcal{C}\)と\(RL=I_\mathcal{D}\)を満たすような関手\(L: \mathcal{D} \rightarrow \mathcal{C} \)と関手\(R: \mathcal{C} \rightarrow \mathcal{D} \)が存在するならば、二つの圏は同値、すなわち全く同じである。しかし、二つの圏が同値という考え方は、膠着しすぎていて、あまり面白くない。そこで、少し緩めて、図10に示すように、自然変換
\begin{eqnarray}
ε: LR \rightarrow I_\mathcal{C} \\
η: I_\mathcal{D} \rightarrow RL
\end{eqnarray}
が成り立つならば、同じと考えようというのが随伴である(一般には\(L,R\)は\(F,G\)を用いて記述されるが、どちらを向いている関手であったかが分かりにくくなるので、ここでは矢印の向きを明示してくれる\(L,R\)を用いる)。また随伴は図10の下半分に示してあるcounit-unit恒等式を満たさなければならない。

f:id:bitterharvest:20200312141731p:plain
図10:随伴の定義
最初の\(ε\)はcounitと呼ばれる自然変換である。これは図11に示すように、\( \mathcal{C} \)の任意の対象\(A\)を、\(R\)で\( \mathcal{D} \)に移し、さらにそれを\(L\)で\( \mathcal{C} \)に移す。少し飛躍的な表現で説明するならば、\(\forall A \)に対して\( ε_A: LR(A) \rightarrow I_\mathcal{C}(A) \)によって、「本当の自分に戻れる」ということを表している。
f:id:bitterharvest:20200218094034p:plain
図11:随伴を構成する自然変換counit
二番目の自然変換\(η\)はunitと呼ばれる自然変換である。これは図12に示すように、\( \mathcal{D} \)の任意の対象\(B\)を、\(L\)で\( \mathcal{C} \)に移し、さらにそれを\(R\)で\( \mathcal{D} \)に移す。同じように飛躍的な表現を用いれば、\(\forall A \)に対して\( η_A: I_\mathcal{D} (A) \rightarrow RL (A)\)によって、「自分を別のかたちで表現できる」ということを表している。
f:id:bitterharvest:20200218111120p:plain
図12:随伴を構成する自然変換unit
世の中には「別のかたちで表現するもの」は沢山ある。戦国時代の「かぶく」というのもその一つの例だろうが、身近なところでは、感情と表情の関係だ。人間には、嬉しいとか悲しいとか怒っているとかいう感情があるが、そのときどきに抱いている感情は、表情として顔に現れる。このため、顔に現れる表情は、内面にある感情を「別のかたちで表現している」と見なすことができ、自然変換のunitと考えていいだろう。逆に、顔の表情から内面の感情を知ろうとするのが、「本当の自分に戻る」ということになる。これはcounitである。圏論を定義する自然変換は、このように重要な概念を与えてくれるので、自然科学だけではなく、人文科学や社会科学にも、その応用分野を広げてくれ、とても有用である。

\(ε,η\)をpasting diagramで示すと図13になる。

f:id:bitterharvest:20200218105538p:plain
図13:自然変換\(ε,η\)をpasting diagramで表す

それでは随伴をストリング・ダイアグラムで表すことにしよう。

自然変換\(ε,η\)は、pasting diagramをストリング・ダイアグラムに変換する方法を用いれば簡単に求めることができ、図14のようになる。

f:id:bitterharvest:20200215112635p:plain
図14:随伴を定義する自然変換をPsting diagramで表現する

それでは、counit-unit恒等式について考えよう。これをpasting diagramで表すと図15のようになる。

f:id:bitterharvest:20200222091404p:plain
図15:counit-utit恒等式をpasting diagramで表す
それでは、図15の右上のpasting diagramをストリング・ダイアグラムに変換すると図16のようになる。
f:id:bitterharvest:20200222091427p:plain
図16:counit-utit恒等式をストリング・ダイアグラムで表す―その1
そして、図15の右下のpasting diagramをストリング・ダイアグラムに変換すると図17のようになる。
f:id:bitterharvest:20200222091452p:plain
図17:counit-utit恒等式をストリング・ダイアグラムで表す―その2
Counit-unit恒等式は、ストリング・ダイアグラムで表すとジグザクな線になるので、ジグザグ恒等式(zig-zag equations)と呼ばれる。

随伴をストリング・ダイアグラムで表すことができたので、つぎはモナドに挑戦しよう。

圏論をビジュアルに表現する(1)-ストリング・ダイアグラム

6.1 圏の圏

中学に入学すると、算数に代わって数学という教科が登場する。計算問題が嫌いだった私は、嫌なことから解放してくれるような、楽しいパラダイムがきっと待ち受けているのだろうと、過剰に期待した。しかし、真っ先に学んだのは、三角形の合同や相似だった。中間試験や期末試験では、図形内の二つの三角形が合同であることを証明しなさいというような問題が出題された。なんと嫌なことに補助線を見つけられるかどうかが勝敗を分けた。博打的な要素があり、あまり好きになれず、期待は裏切られた。

今回の記事は、その幾何学を用いて、圏を表してみようという話である。圏論は、「数学の数学」と言われるほどに抽象的な概念で説明しにくいのだが、それが目に見えるような形で表わせれば、とても理解しやすいものになるだろうし、面白いことにもなりそうだ。そして中学生の時に味わった憂鬱な気分を払拭してくれるかもしれない。それにもましたこのビジュアルな表現を用いて、定理の証明がいとも簡単に行えることが示せれば、感動さえ覚えそうに思える。このような期待を込めて、ビジュアルな表現を紹介しよう。

ここでは、1) (小さな)圏を対象とし、2) 関手を射とし、3) 関手間の射を自然変換とした、圏\(\rm{Cat}\)(圏の圏と呼ばれる)を考えることにしよう(このようにすると、自然変換の立ち位置が何とも定まりが悪いので、関手を対象とし、自然変換を射とした圏を考える方が本当は自然である。実際、このように定義したものをStrict 2-categoryと呼ばれる。ここでは前からのつながりもあるので、\(\rm{Cat}\)を用いて説明する)。

圏に関する用語と例

簡単に圏論の中で使われる用語を説明しておこう。
1)圏は、どのように計算したらよいかを示してくれる構造である。
2)関手は、ある圏の計算の構造を、他の圏に移すものだ(他の圏は元のある圏であっても構わない。このときは、自身に計算の構造をもちこむこととなる)。
3)自然変換は、ある圏から他の圏への二つの関手の間での関係を示すものだ。

具体的なイメージがつかめるように、それぞれの用語な例を挙げておこう。

1)圏の例:圏は対象、射、ドメインとコドメイン、恒等射、合成で構成され、単位律、結合律を満たす。
例1:加算を有する正数(0以上の整数):これを圏\(\mathcal{C}\)とする。\(\mathcal{C}\)は次のように構成される。射は整数の一つ一つ、即ち、0,1,2,...である。恒等射は0。合成は加算\(+\)。射は写像と考えてよいので、入力(これはドメインと呼ばれる)と出力(これはコドメインと呼ばれる)を有する。ドメインやコドメインになるものが対象である。この場合、射は整数なので、ドメインとコドメインを考えにくいが、定義上必要とするので、通常は一要素を対象とし、★で表わす。
例2:正数が並んだリスト(例えば\([2,4,5]\) ):これを圏\(\mathcal{D}\)とする。\(\mathcal{D}\)は次のように構成される。射はそれぞれのリスト。恒等射は空のリスト[ ]。合成はリストの接続\(++\)。対象、ドメイン、コドメインは★。

2) 関手の例:
例1:リストに加法をもちこむ:任意のリストを\([b_0,b_1,b_2,....]\)としたとき、これに任意の正数\(a\)を加えるという関手\(F\)は、\([b_0+a,b_1+a,b_2+a,....]\)の計算をすることである。
例2:リストに剰余類による加算をもちこむ:同じように任意のリストを\([b_0,b_1,b_2,....]\)としたとき、これに任意の正数\(a\)を加えてその剰余\(m\)を求めるという関手\(G\)は、\([Mod_m(b_0+a),Mod_m(b_1+a),Mod_m(b_2+a,....])\)の計算をすることである。

3)自然変換の例
例1:\(F\)から\(G\)への自然変換\(α\)は、\([b_0+a,b_1+a,b_2+a,....]\)から\([Mod_m(b_0+a),Mod_m(b_1+a),Mod_m(b_2+a,....])\)への変換をすることである。即ち、リストの要素ごとに剰余を求める計算を行うことになる。

自然変換の合成

それでは自然変換の合成について若干説明しておこう。これには、水平方向への合成と垂直方向の合成がある。

水平方向の合成は次のようになる(図1参照)。水平に配置された圏を\(\mathcal{C,D,E}\)としよう。\(\mathcal{C,D}\)の間では関手\(F,G : \mathcal{C} \rightarrow \mathcal{D} \)が、\(\mathcal{D,E,}\)の間では関手\(F’,G’ : \mathcal{D} \rightarrow \mathcal{E} \)が、二つの関手間にはそれぞれ自然変換\(α:F \Rightarrow G,\)と\(β:F’ \Rightarrow G’ \)が定義されているとしよう。このとき、この自然変換の合成は\(βα:F’ F \Rightarrow G’ G : \mathcal{C} \rightarrow \mathcal{E}\)となる。

垂直方向の合成は次のようになる(同じく図1参照)。圏を二つ用意して\(\mathcal{C,D}\)としよう。\(\mathcal{C,D,}\)の間では関手\(F,G,H : \mathcal{C} \rightarrow \mathcal{D} \)が、二つの関手間にはそれぞれ自然変換\(α:F \Rightarrow G, γ:G \Rightarrow H \)が定義されているとしよう。このとき、この自然変換の合成は\( γ α : F \Rightarrow H : \mathcal{C} \rightarrow \mathcal{D} \)となる。

次に、水平方向と垂直方向の両方の合成が可能である場合を考えることにしよう。図1のように、圏\(\mathcal{C,D,E}\)が、関手\(F,G,H : \mathcal{C} \rightarrow \mathcal{D}\),\(F’,G’,H’ : \mathcal{D} \rightarrow \mathcal{E}\)が、自然変換\(α:F \Rightarrow G, β:F' \rightarrow G',γ: G \Rightarrow H, δ: G’ \Rightarrow H’ \)が定義されているとしよう。このとき、垂直方向に合成したあと水平方向に合成することも可能であるし、水平方向に合成したあと垂直方向に合成することも可能である。前者の場合には\((δβ)(γα)\)、後者の場合には\((δγ)( βα)\)となる。このとき、\(\rm{Cat}\)では交換律(interchange law:合成の順序に依らない)が成り立つ。すなわち\(δβγα=δγβα\)である。

f:id:bitterharvest:20200213194557p:plain
図1:pasting diagramで表した自然変換での交換律( \(δβγα=δγβα \) )
\(\rm{Cat}\)をさらに一般化した圏にStrict 2-categoryと呼ばれるものがある。そこでは、対象(圏)は0-セル(sell)、射(関手)は1-セル、自然変換は2-セルと呼ばれる。図1のように、0-セル、1-セル、2-セルをそれぞれ0次元の点、1次元の線、2次元の面で表したものをpasting diagramと呼ぶ。

6.2 ストリング・ダイアグラム

これから説明する圏の図的表現は、ストリング・ダイアグラム(String Diagram)と呼べれる。まず簡単な例から見ていこう。

圏\(\mathcal{C,D}\)とその間の関手\(F:\mathcal{C} \rightarrow \mathcal{D}\)で構成される圏の圏\(\rm{Cat}\)をpasting diagramで表したのが図2左である。この図で0-セルは0次元で、1-セルは1次元で表されている。それでは、この関係を反転させて、0-セルは1次元で、1-セルは0次元で表すと図2右となる。これがストリング・ダイアグラムの基本的な考え方である。このとき、右側の圏がドメインで、左側の圏がコドメイン、即ち、関手は右から左に向いていることに注意して欲しい。反対向きに定義している場合もあるが、こちらの方が、関手を合成したとき、並びが同じになり、分かりやすい。

f:id:bitterharvest:20200213153842p:plain
図2:ストリング・ダイアグラムの基本的な考え方

それではもう少し進んで、圏\(\mathcal{C,D}\)とその間の関手\(F,G:\mathcal{C} \rightarrow \mathcal{D}\)、さらに関手の間の自然変換\(α:F \rightarrow G\)について考えよう。pasting diagramは図3左上のようになる。ストリング・ダイアグラムは次元を反転させればよいので、0-セルは2次元で、1-セルは1次元で、2-セルは0次元にする。求め方は意外と簡単で、図3左下に示すように、自然変換を表している真ん中から、それを囲んでいる関手の線分の真ん中をめがけて線を引く。これらの線が関手を表し、それぞれの線に沿った面が圏となる。分かりやすくしたのが、図3右上である。なお、この図の下の部分を表すと、図3右下となる。これはストリング・ダイアグラムの基本的な考え方を示す時に用いたときのものと同一である。なお。自然変換は、下から上に向かっていることに注意して欲しい。

f:id:bitterharvest:20200213160256p:plain
図3:一般的なストリング・ダイアグラム

次に自然変換が恒等射になっている場合を考えてみよう。圏\(\mathcal{C,D}\)とその間の関手\(F:\mathcal{C} \rightarrow \mathcal{D}\)、さらに関手の間の自然変換\(I_F:F \rightarrow F\)について考えよう。pasting diagramにもいくつかの表し方があり、図4左のようになる。これらに対するストリング・ダイアグラムは図4右のようになる。

f:id:bitterharvest:20200213161008p:plain
図4:自然変換が恒等射の場合のストリング・ダイアグラム

それでは、図5左のように関手の一つが恒等射の場合について考えてみよう。このときのストリング・ダイアグラムの表し方は特殊で、恒等射の関手は点線で表すか、またはそれは描かなくてもよいとする。すなわち図5右のようになる。

f:id:bitterharvest:20200213161412p:plain
図5:関手が恒等射の場合のストリング・ダイアグラム

自然変換の合成を表してみよう。まず垂直方向に合成す場合を考えてみよう。図6のようになる。なお、自然変換\(α\)と\(β\)の合成\(\circ\)は、一般的には\(β \circ α\)と書かれるが、ここでは合成の記号を省いて\(βα\)とあらわすことにする。関手に対しても同じように記述する。

f:id:bitterharvest:20200213170706p:plain
図6:垂直方向の合成
続いて水平方向に合成す場合を考えてみよう。図7のようになる。
f:id:bitterharvest:20200213170727p:plain
図7:水平方向の合成
水平方向にも垂直方向にも合成できる場合を考えてみよう。垂直方向の合成を先に行うと図8のようになる。
f:id:bitterharvest:20200213170758p:plain
図8:垂直水平方向の合成
もう少し一般的なものを示してみよう。図9は圏\(\mathcal{C,D}\)の間にいくつかの関手が連なっている場合である。前に述べたとおり、自然変換の中心から関手を表している線の真ん中あたりをめざして、線を引けばよいので、図9のようになる。
f:id:bitterharvest:20200213163252p:plain
図9:ストリングの一般的な例

次は具体的な例として随伴を表すことにしよう。

紅くるりのピクルスとサラダ

散歩がてら、いつものようにJA横浜に立ち寄って、サラダ用の野菜を漁っていると、珍しく店員の方に、「この野菜、昨夜漬けたものですが、美味しいので食べてください」と声をかけられた。見ると外側だけでなく、中まで赤い根菜だ。カブと思って口に運んでみると、みずみずしく柔らかい。お店の人によると「大根」で、「紅くるり」と呼ばれるそうで、サラダにもなるということなので、早速試すことにした。

まずはピクルス。カリフォルニアで学生時代を過ごしているときに、二人の幼児の子育て真最中の夫婦がホームステイ先になってくれた。奥さんのGayeが、その時々の野菜を利用して、自家製のピクルスを作っていたのがとても印象的だった。そのため、お店でピクルスを見るたびに、その光景を思い出す。

ピクルスは、酢のつくり方によって味が異なるので、それぞれの家庭の味がある。しかし伝統を有しない我が家の場合には、出来合いの合わせ酢を利用する方が簡単だ。そこで今回用いた材料はこれだけ(下の写真)。主役の紅くるりは、色も鮮やかで、形も整っているので、シンプルな中にあって高級感を与えてくれた。
f:id:bitterharvest:20200205103932j:plain
全部をピクルスにするには大きすぎるので、半分だけを用いることとし、イチョウ切りにするために、半分にしたものを、縦方向に4等分する。ポリフェノールのおかげで内部まで鮮やかに色づいている。
f:id:bitterharvest:20200205103902j:plain
これを2~3ミリの厚さのイチョウ切りにする。
f:id:bitterharvest:20200205104002j:plain
タッパーに納める。
f:id:bitterharvest:20200205104024j:plain
カンタン酢をひたひたになるところまで注いで、寝かしておく。

夕飯のおかずに出した紅くるりは、レモンが影響しているのだろう、鮮やかな紅色をしていた。
f:id:bitterharvest:20200205104049j:plain
お店で試食したピクルスは、甘酢を用いていたのだろう。甘酸っぱかったが、今回用いた合わせ酢は、レモン入り。このため、さっぱり味で、食材の味が生かされ、我が家にはあっていた。

一晩明けて、残った紅くるりを用いてサラダを作った。同時に使った野菜は、一緒に買った「からし菜」。
f:id:bitterharvest:20200205104113j:plain
ハワイで仕入れた年季の入ったサラダボールに盛り付けた。
f:id:bitterharvest:20200205104139j:plain
くるりを口にすると、サクッという感じで歯に押し切られ、その瞬間に、水分が口の中に広がった。殆ど味はない。しばらくすると、大根の味がほのかに舌に伝わってきた。しかし辛さはないので、美味しく頂けた。見た目にも鮮やかなサラダなので、これからもこの野菜を利用して、食卓にいろどりを添えようと思っている。

小春日和のなか、上野寛永寺ゆかりの建造物を訪ねる

東京の冬は嫌いではない。しかし曇天ときには雨が多い今年の東京にはなじめない。そのような日が続く中、珍しく晴れた月曜日(20日)、新宿での午前中の用事を済ませたあと、トーハク(東京国立博物館)でも訪ねてみようかと山手線に乗り、スマホをくくっていたら、なんと休館という文字が目に入った。家とは反対の方向に進んでいるし、天気も素晴らしく良いので、このまま帰るのは損をしたような気になるので、上野の寛永寺ゆかりの建造物を訪ねてみようと新たな計画を立てた。

寛永寺は、日光東照宮増上寺とともに、徳川家の祈祷所・菩提寺であった。3代将軍家光により1625(寛永2)年に建立され、現在の上野公園を中心に広大な敷地を有していた。公園内には、歌川広重が描いた「東都名所、上野東叡山全図」のレリーフがあり、江戸時代の寛永寺の姿を知ることができる。左側の大きな建物が中堂、中堂を取り巻いている回廊前面の唐門が吉祥閣、中央の連結されている建物が常行堂・法華堂、右端にある建物が文殊楼。中央手前に先端だけが描かれているのが、五重塔である。
f:id:bitterharvest:20200123102207j:plain

ところが、幕末の1868(慶応4)年の彰義隊の戦い(上野戦争)でこの辺りは戦場となり、主要な建物は焼失してしまったが、周辺にあった五重塔、清水観音堂、大仏殿などが残った。

スマホの地図で場所を確認して、帰りの便も考えて、鶯谷駅で降り、上野公園に向かって散策することにした。
f:id:bitterharvest:20200123103123p:plain
鶯谷駅から芸大の方に向かって歩くと、その裏手のあたりに、根本中堂がある。これはレリーフのところで説明した上野戦争で焼失した本堂とは異なり、1879(明治12)年に、川越喜多院の本地堂を移築したものである。
f:id:bitterharvest:20200123102242j:plain
f:id:bitterharvest:20200123102311j:plain
根本中堂内には、重要文化財に指定されている本尊の薬師如来、脇侍として日光菩薩月光菩薩が祀られている。

根本中堂から次の目的地の輪王寺までは、トーハクの壁面に沿って歩く。トーハクの正門に近づくころ、重要文化財に指定されている旧因州池田屋敷表門(黒門)に出くわした。江戸時代末期の大名屋敷の表門を移築したものである。
f:id:bitterharvest:20200123102340j:plain

トーハクの敷地は、寛永寺の本坊あとで、その入り口には本坊の表門があった。この表門は、関東大震災後のトーハクの本館改築に伴い、少し離れた寛永寺輪王殿に移建された。上野戦争での戦火を免れて現在に至っているが、門には多数の弾痕が残されているそうである。残念ながら近づいて確認することはできなかった。
f:id:bitterharvest:20200123102406j:plain

紛らわしいのだが、輪王殿の隣には輪王寺がある。輪王殿は葬儀式場で、輪王寺天台宗のお寺、通称「両太師」として知られている。江戸時代には、輪王寺寛永寺の伽藍の一部で、開山堂または慈眼堂と称せられていた。江戸時代前期より、法親王(皇族)が、寛永寺貫主天台座主、日光山(輪王寺)主の「三山管領宮」なったことから、貫主は「輪王寺宮」または「輪王寺門跡」と呼ばれた。

この寺を開山したのは天海(慈眼太師)で、天海を祀る開山堂が現在の輪王寺の敷地に建立された。また天海が崇拝する良源(慈恵太師)を祀ったことから、「両太師」と呼ばれるようになった。これらがこの寺にまつわる名前の由来である。
f:id:bitterharvest:20200123102433j:plain

なお輪王寺の裏手には趣のある僧院が立ち並んでいる。
f:id:bitterharvest:20200123102459j:plain

輪王寺に別れを告げて、上野公園の中にある上野東照宮へと向かう。東照宮は、藤堂高虎が家康からの遺言を受けて、上野の高虎の敷地に建立された。現在の社殿は、3代将軍の家光により改築されたもので、上野戦争関東大震災第二次世界大戦からの焼失を免れて、現在に至っている。どの観光地も同じだが、ここも御多分に漏れず、見学者のほとんどが外国からの観光客であった。
f:id:bitterharvest:20200123102525j:plain

境内では冬ぼたんが展示されていた。
暖かい小春日和の日を受けて、霜よけのわら囲いに包まれた冬ぼたんも心地よさそうだ。
f:id:bitterharvest:20200123102554j:plain
黄色の冬ぼたんも見事に咲いていた。かすかな香りがあるとの説明があったので、鼻を近づけてみたが期待は裏切られた。
f:id:bitterharvest:20200123102625j:plain
ぼたん苑から見る五重塔も青い空を背景にして落ち着きのあるたたずまいを感じさせてくれた。ぼたん苑の華やかな彩りの傘が、小春日和の陽光を浴びて、まだ来ぬ春を一層待ち遠しくさせてくれた。
f:id:bitterharvest:20200123102652j:plain
苑内には黄梅も咲いていた。こちらの方は、そばを通り抜けたときに、香ばしいかおりを感じた。
f:id:bitterharvest:20200123102723j:plain

次に上野の大仏を訪れる。地図を見たときに上野に大仏などあったかと不思議に思って立ち寄ってみたのだが、なんと顔の表面だけであった。
f:id:bitterharvest:20200123102901j:plain
この大仏は、1631(寛永8)年に、越後村上城主の堀丹後守直寄によって、戦国時代の戦乱によって倒れた敵味方の供養のためにこの高台に建立されたが、それ以降の地震や火災によって災難に遭い、関東大震災ではついに顔が落ちてしまい、そのあと復元されることなく現在に至っているとのことであった。余談だが、「これ以上落ちない合格大仏」として広く信仰を集めているとのことだった。

大仏のあった高台から降りて、トーハクの方を見渡してみる。
f:id:bitterharvest:20200123102937j:plain

寛永寺の敷地がいかに広かったが分かる。写真の後ろの方には清水観音堂が、また不忍池の中ほどには不忍池辨天堂がある。これらも戦火を免れた建造物である。お腹が空いてきたので、昼食をとるために、今日の散策はここまでとして、上野公園をあとにした。

なお国会図書館のデジタルコレクションには、江戸名所図会があり、26コマ以降の寛永寺の本文と挿絵を見ると、当時の様子を知ることができる。

思いがけずの観音寺周辺の散策となったが、タイミングよくぼたん苑を訪れ、咲きそろった冬ぼたんを鑑賞することができ、黒木華主演の映画「日日是好日」でのお茶の域には及びもしないが、似たような体験を味わうことができ、得をした気分になっての家路であった。

ローマ風、ロマネスコと生ハムのマリネ

新しい年になったことでもあり、面白い野菜が出ていることを期待して、散歩しがてら、馴染みの農協の売り場に立ち寄ってみた。入った瞬間、何ともフラクタルな野菜が目に留まり、びっくり仰天した。フラクタルは、数学的な概念で、日本語では自己相似形ともいう。全体を見ても、部分を見ても、あるいはどこを観察しても、同じ形になっているものをフラクタルという。

フラクタル図形の簡単な例を示そう。

直線の線分が与えられた時、それを三等分し、その中の真ん中の線分を底にして正三角形を描き、底となっていた線分を取り除く。この操作によって、すそ野の広い富士山のような線画が出来る。次にそれぞれの線分に対して(このときは4つの線分がある)、同じ操作を繰り返す。真ん中に大きな塔が建ち、その両横には小山がある図形が現れる。さらにそれぞれの線分に対して(このときは16線分)に対して、同じ操作を繰り返す。雪の結晶模様のような、あるいは、クリスマスツリーのような、きれいな図形が得られる。
f:id:bitterharvest:20200110142046p:plain
農協の売り場で発見した野菜は、今説明した図形を3次元にして表したような形をしていた。
f:id:bitterharvest:20200110111324j:plain
大きくすると、同じような構造が繰り返えされていることが確認できる。
f:id:bitterharvest:20200110120135p:plain
店頭には、ロマネスコと紹介され、サラダにするとおいしいと説明があった。このように綺麗なフラクタルを自然界で見るのは初めてだ。大学の講義でフラクタル図形について説明をしたことがあるが、ロマネスコを見せれば学生たちはさぞかし感動したことだろうと思うと、これまで巡り合えなかったことがとても残念に感じられた。

先ほど線分で説明したフラクタルな図形は、線分だけで構成されているので、1次元の世界に属するのだが、その構成された図形を考えると、1次元と2次元の中間に位置する。ロマネスコも、表面は2次元だが、複雑に表面が構成されているので、その表面は2次元と3次元の中間に位置する。

なぜフラクタルな形状を必要とするのだろうと考えると面白い。自然界には2次元と3次元とが競合する世界が存在する。人間の体は、内部は3次元だが、皮膚の部分は2次元だ。熱(エネルギー)は3次元の体内に蓄えられているが、その体内と外部との熱の差をコントルールしているのは2次元の皮膚の部分である。

北国に住む人々は、外気が寒いので、なるべく体内の熱を逃がさないようにしたい。そのためには、熱を蓄えられるようにするか、熱を逃がさないようにするのがよい。熱を蓄えられるようにするためには、体を大きくするのがよい。これにより3次元の体が増える割合は、2次元の皮膚のそれよりも、ずっと大きいので、熱を蓄えやすくなる。北欧の人々の身長が高いのはこのためという説明もある。

あるいは、熱を逃がさないようにする。このためには表面を小さくすることだが、これは丸い体にすることで達成される。ポーランドの人々を見ていると、ずんぐりで丸顔の人が多いので、自然淘汰という戦いの中で、この戦略をとったのかと思わずにはいられない。

逆に、暑い国の人は低身長で、やせ型となる。中国の人々を観察すると、北京の人々は高身長の人が多いが、南の広東の人は低身長なのはこのためだろう。

脳の構造も同じだと言われている。脳の重要な機能は、表面の部分が担っているので、表面積を大きくしたい。このために、複雑なしわによって脳の表面積を稼ぎ出していると言われている。すなわち面という2次元の構造なのだが、しわを利用することで3次元の構造に近いものを作り出している。限られた頭部の空間の中に大きな脳を作り出すための工夫の一つである。

フラクタルはこのように、自然界とも深い結びつきを有しているのだが、このように美しい形状のものを、正月早々に見ようとは夢にも思わなかった。

夕飯には、ここで購入したロマネスコを早速使うことにした。我が家では、朝は私が、夜は妻が支度をすることにいつの間にかなってしまったので、妻に頼んでロマネスコのマリネを用意してもらった。

ロマネスコの英語での表記はRomanesco broccoli、イタリア語での表記はBroccolo Romanescoである。分類学上はカリフラワーに属すそうだが、形状がブロッコリーに似ているので、英語でもイタリア語でもブロッコリーになっているのだろう。

ロマネスコのマリネはいたって簡単で、生ハムと温めたロマネスコをマリネするだけでよい。今回は、イタリア製の生ハムを用いたので、ロマネスコの名前にちなんでローマ風マリネだ。

ロマネスコは、一口大に切って、電子レンジで温める。使用した電子レンジには、ゆで葉果菜という設定があったので、これを利用。1個分を温めたのが下の写真。
f:id:bitterharvest:20200110111152j:plain
そして生ハム。
f:id:bitterharvest:20200110111214j:plain
マリネは、サラダ油大さじ2杯、酢大さじ1杯、あらびきマスタード小さじ1杯、塩小さじ1/4杯を混合。
f:id:bitterharvest:20200110111238j:plain

ロマネスコは半分、生ハムは3枚もちいて、2人分のマリネを用意してくれた。
f:id:bitterharvest:20200110111301j:plain

ロマネスコはもう少し歯ごたえのある硬さの方が良いように感じた。電子レンジで茹でているときに電話がかかってきたので、茹ですぎになったというのが妻の弁明であった。

黄金色に輝く東大本郷の銀杏並木を通り抜けてダイヤモンド教授の講演を聞く

ジャレド・ダイアモンド教授の講演が東大の安田講堂で開催されたので、12日(木曜日)聴講に行った。正門から入構すると安田講堂の正面入口に向かう道の両脇の銀杏並木が、見事な黄金色に輝いていた。こんなに綺麗だったかと目を見張ってしまった。学生運動が激しい頃には、道の両側には大きな看板が立ち並んでいて、別の意味で訪れる人を驚かした場所である。時代の流れとともに、学生たちの意識の変化も感じられた。

正門を入ってすぐの左側にある小ぶりの建物が工学部列品館、学生時代にはここで実験をしたこともある懐かしい建物で1920年の完成、右側が法学部3号館で1927年、それに続いて古めかしい荘厳な建物が左右にあるが、法文1号館・2号館で、1935年と38年の完成で、いずれも東大総長を務め、文化勲章を受章した内田祥三(よしかず)教授の設計で、ゴシック様式の建物である。

安田講堂は匿名者からの寄付で建設されたが、財閥の安田善次郎さんからであることが彼の死後に知られ、安田講堂と呼ばれるようになった。建物は1921年の起工だが、1922年の関東大地震による工事の中断を経て、1925年に竣工した。内田祥三教授と弟子の岸田日出刀教授が設計した。

これらの建物は、歴史的な価値が認められ、すべて東京都の登録有形文化財に指定され、大正・昭和初期の荘厳で重厚な建築様式を伝えてくれる。学生の頃は、法文1号館と法文2号館のそれぞれにあるアーケードを抜けて通学するのが大好きだった。世間とは一線を画した薄暗いアーケードを通り抜けるとき、ここが学問の殿堂だと感じたものだった。

安田講堂へと通じる道は、学問の殿堂とは程遠く、観光スポットになっていた。黄金色に輝く銀杏並木が見ごろということもあるのだろう、インスタグラムにでも載せるのであろうか、たくさんの観光客が撮影に興じていた。キャンバスに絵を描いている人々も少なからず見かけた。
f:id:bitterharvest:20191218105803j:plain

足元も落ち葉で埋め尽くされ、空間全体を黄金色にしていた。
f:id:bitterharvest:20191215110628j:plain

法文1号館と法文2号館の間も黄金色に染まっていた。
f:id:bitterharvest:20191215110649j:plain
重厚なレンガ造りの建物が悠久の時間へと誘ってくれるが、不思議な樹木の銀杏もこれに負けることはない。銀杏は広葉樹ではなく、針葉樹に近い。2億7000年という長い年月を生き抜いてきたとされている。日本には、中国から室町時代後期に伝来したとされる。ヨーロッパには、ドイツ人医師のエンゲルベルト・ケンペルが1692年に長崎から銀杏の種を持ち帰り、オランダのユトレヒトやイギリスのキュー植物園で栽培され、広まったとされている。またこのとき、銀杏(ギンコウ)の音訳を誤ってGinkgoとしたため、今日まで修正されずにこのスペルが使われている。

これから講演を聞く安田講堂の前も、同じように観光スポットになっていた。
f:id:bitterharvest:20191215110720j:plain

今回の講演は、今年度のブループラネット賞を受賞したジャレド・ダイアモンド教授とエリック・ランバン教授を招いてのものである。ブループラネット賞は、地球の環境問題の解決のために優れた研究をした人や、熱心に活動をしてきた人をたたえるために設けられた賞で、旭硝子財団が主催している。今年度が28回目で、旭硝子が早い時期から地球の環境問題に取り組んできたことは称賛に値する。

講演は、第一部がランバン教授、第二部がダイアモンド教授と分かれて行われた。それぞれが1時間半で、受賞者が30分ほど講演をしたあと、1時間ほど質疑応答が行われた。高校生や大学生、あるいは留学生からも、活発な質問がたくさん出され、最近の若い人たちが積極的であることに、驚かされるとともに、力強さを感じた。

ダイアモンド教授は、幅広い研究分野で活躍されている方で、「知の巨人」とも言われ、現在82歳。ピュリッツァー賞に輝いた『銃・病原菌・鉄』の著者でもある。彼が若いころにパプア・ニューギニアを学術調査しているとき、手伝いをしてくれた現地の人から「あなたの国は文明が発達したのに、私のところはどうしてそうならなかったのか?」という質問を受けたが、その時は応えられなかった。解答を見出すために長い年月を有したが、現地人の質問に対する答えがこの本である。

彼は、その他にもたくさんの本を出版していて、最近では『危機と人類』という本を出版した。英語のタイトルは刺激的で、”Upheaval(大激変)”である。講演の中で、「どの言葉を一番大切に考えていますか」という質問を受けたときに、「リスク」と答えた。パプア・ニューギニアのような原始社会では、誤って足の骨を折ってしまうと、一生歩行困難になってしまうので、リスクには細心の注意を払う必要があるとのことだった。この講演に、彼は奥さんを伴ってきていたが、仕事のために急ぎ帰国しなければならないということで、彼が話している最中に奥さんは抜け出した。彼はこれを引き合いに出して、「私はぎりぎりで空港に向かうようなことはしない。何が起こるかわからないので、何時間も前から空港で待つので、いつも家族に笑われている」と説明してくれた。

『危機と人類』の中で、彼は国家の危機について論じている。国家という複雑な組織は捉えにくいので、個人が危機をどのように乗り越えるかという視点を通して観察したらどうだろう、と提案している。彼の考え方に対して、Amazonのレビューの中に、個人の危機から国家の危機を捉えるのはどうかという意見があった。この意見は正しいのだろうかと感じたので、数学的な視点から考察を行ってみた。

国家は激変ともいえる大きな転換点を迎えるときがある。日本を例にとるならば、663年の白村江の戦で敗れたときや、1853年の黒船の来航だろう。白村江での敗戦の結果、律令制を導入することとなったし、黒船の来航により明治維新という大きな改革を行った。このような激変をどのように乗り越えたかを理解することは簡単な作業ではない。

一方、個人の危機の乗り越え方についてはどうだろう。東日本大震災があったとき、心に大きなダメージを受けた人に対して、心のケアの必要性が叫ばれた。専門の精神科医などの協力を得ながら、多くの人が危機を乗り越えたことだろう。米国では、個人が大きな心のダメージを受けたときに、その危機を乗り越えられるかどうかについての決め手は分かっているそうだ。そこで国家が危機を乗り越えられるかどうかを、個人の決め手を通して観察してはというのが、ダイアモンド教授の提案だ。

ダイアモンド教授によれば、個人的危機を乗り越えられるかどうかの決め手となる要因は12ほど知られている。それらは、「危機に陥っていることを認める」や「行動を起こすのは自分であるという責任の受容」などである。これらを国家のレベルに移して考えようというのが彼の提案である。例えば、先の二つを個人のレベルから、国家のレベルに移したとき、「国家が危機に陥っていることを認める」や「行動を起こすことへの国家としての責任の受容」などとなる。

12の要因に対して、個人のレベルから国家のレベルに移したときの対応関係を示したのが下図である。ここで青は個人、草色は国家である。この対応関係には、人を国に変えるだけで得られる類似的なものが7要因、一般化すると得られるものが2要因、類推によって得られるメタフォ的なものが3要因ある。もちろん個人にはなくて国家だけに存在する要因も7ほどある。
f:id:bitterharvest:20191219161332p:plain

ダイアモンド教授の手法は、よく知られている世界(空間)の構造から、解明されていない世界(空間)の構造を観察しようというもので、自然科学の分野ではよく利用される方法である。数学の分野で、これを担っているのは圏論なので、早速ダイアモンド教授の提案に応用してみよう。

数学の中で一番重要な概念は、「同じである」ことを数学的に表すことである。中学校に入ってすぐに三角形の合同や相似について学習するが、これがそうである。三角形の合同は、二つの三角形が重なり合えば同じということなので、とても分かりやすい。

数学ではこのような具体的な考え方を、だんだんに抽象化していく。例えば、二つの二次元物体があったとき、一つの光源からそれらに光を当て、それが作り出す影が同じになるならば、「同じもの」と見なすこともできる。これは射影幾何学よばれ、この世界では全ての三角形は同じものとなる。

さらに、近いものは近いところに移すという制限の下で、二つの物体の間で、それぞれの全ての点に対して、1対1の関係を得られれば「同じもの」と見なすこともできる。これはトポロジー(位相幾何学)とよばれ、この世界ではすべての多角形は同じものになる。

抽象化をだんだんに進めていくと、圏論という世界にたどり着く。ここでの「同じもの」は、少し難しい言葉だが、「随伴」と呼ばれる。圏論では、対象、射、結合、恒等射から成り立つ、圏という世界を扱う。

対象はメンバー(あるいは集合)と考えるとよい。例えば、学校のあるクラスを考えることにしよう。クラスを構成する生徒たち全員は対象となる。また女子生徒の集合も対象となり、男子生徒の集合も対象となる。さらにテニス部に属している生徒の集まりを対象にしてもよい。対象の決め方は自由で、圏にどのような性格を持たせるかによって決まる。

射は対象と対象の関係と考えればよい。射には方向性があって、ある対象からある対象へと写像される。写像する側をドメイン写像される側をコドメインと呼ぶが、射はすべてのドメインに対して定義されていなければならない。例えば、バレンタインチョコを送るという関係を考えたとき、全ての女子がある一人の男子にチョコを送らなければならないが、チョコをもらえない男子がいても構わないというのが射である。ドメインとコドメインは対象で、ドメインは対象全体であり、コドメインは対象の一部でも構わない。

ある射を施したあと、その結果に対して、別の射を施すことがある。例えば、バレンタインチョコをもらった男子のそれぞれに対して、所属するクラブを求めるなどがそれである。このようにコドメインの対象とドメインの対象が同じであるとき、二つの対象は結合できるというのが、圏に要求されている機能である。さらに、特殊な射として自分自身に移す恒等射がある。

圏と圏の間でも射が定義されるが、これは関手と呼ばれる。この関手を用いて、二つの圏が同じであるかどうかが定義されている。その定義は次のようになる。二つの圏\(\mathcal{C}\),\(\mathcal{D}\)があるとし(図で描くとき\(\mathcal{C}\)を左側に\(\mathcal{D}\)を右側にする)、\(\mathcal{C}\)から\(\mathcal{D}\)への関手を\(R\)(右に向かう矢ということで)、逆方向の関手を\(L\)とする。

\(\mathcal{C}\)の任意の対象\(A\)と\(\mathcal{D}\)の任意の対象\(B\)に対して、\(L(B)\)から\(A\)への射の集合(\(L(B)\)から\(A\)への射は通常は一つではなく、複数個存在する。このため射の集合と言う言葉を使う)と\(B\)から\(R(A)\)への射の集合とが1対1の関係にある時、\(\mathcal{C}\)と\(\mathcal{D}\)は随伴であるという。二つの圏が随伴であるとき、\(\mathcal{C}\)は\(\mathcal{D}\)よりも複雑な構造を有するが、\(\mathcal{D}\)の構造が全て\(\mathcal{C}\)では保持されているという意味で、同じであると見なしている。
f:id:bitterharvest:20191218103406p:plain

ダイアモンド教授の提案では、危機の対処法に対して、複雑な構造を有する方が国家で、簡単な方が個人である。そして、個人での構造が国家の中でそのまま保持されていると言っている。これを圏論で描いてみよう。

国家を圏\(\mathcal{C}\)とし、個人との対応関係がある要因の集まりを対象\( A=\{N1,N2,N3,N7,N4,N5,N8,N9,N12,N6,N10,N11\} \)とし、対応関係がない要因の集まりを対象\( A’=\{N21,N22,N23,N24,N25,N26,N27\} \)とする。

個人を圏\(\mathcal{D}\)とし、国家との対応関係がある要因の集まりを対象\( B=\{I1,I2,I3,I7,I4,I5,I8,I9,I12,I6,I10,I11\} \)としよう。また、国家との対応関係がない要因の集まりを\( A’=\{N21,N22,N23,N24,N25,N26,N27\} \)とする。また圏\(\mathcal{C}\)の対象\(A’\)の任意の要素\(n’\)は、圏\(\mathcal{C}\)の一つの要素\(Nothing\)から成り立っている対象に写像されるものとしよう。すなわち、\(R(A’)=\{Nothing\}\)である。

圏\(\mathcal{C}\)と圏\(\mathcal{D}\)の関係を表すと図のようになる。
f:id:bitterharvest:20191219161009p:plain

この図から対応関係を詳細に検討してみると、二つの圏が随伴となっていることが分かる。詳しい説明は省くが、\(\mathcal{C}\)には、対象として\(A\)と\(A'\)と\(L(B)\)がある。また\(\mathcal{D}\)には、対象として\(B\)と\(R(A)\)と\(R(A')\)とがある。\(\mathcal{C}\)と\(\mathcal{D}\)からそれぞれ任意に一つの対象を取り出し、これを\(X\)と\(Y\)とする。このとき、\(L(Y)\)から\(X\)への射の集合と\(Y\)から\(R(X)\)への射の集合とが1対1の関係にあることを示せばよい。あるいは、\(L \circ R (X) \rightarrow I_\mathcal{C} (X)\)と \(I_\mathcal{D} (Y) \rightarrow R \circ L (Y) \)が成り立つことを示せばよい。証明は省くが成り立つので、ダイアモンド教授の提案は正しいことが分かり、Amazonでのレビューでの懸念は必要ないこととなる。

ダイアモンド教授は、明治維新をもたらした具体的な対応がどの要因に相当するかを示しているが、それをまとめたのが次である。
f:id:bitterharvest:20191217143205p:plain

ダイアモンド教授が提案されている方法を用いて、白村江での戦いという危機を迎えたときの、天智・天武・持統朝での対応を分析すると面白いと思うが、それについては次の機会ということにしたい。

圏論をデータベースに応用する(2)

5.4 セッターとゲッターの関手を一般化する

前回の記事の中で、説明の中心となっていた\(Store \ a \)という関手は、代数的データ型を用いて、

data Store a s = (a, a -> s)

で定義した。しかしこれはデータベースでのセッターとゲッターを分かりやすくするための便宜的な方法である。すなわち、これらの操作でデータ型が変化しないように、

get :: s -> a
set :: s -> a -> s

としたためである。

しかし、セッターでは、フィールドに書き込むデータが、今までに書き込まれていたデータ型とは異なる可能性もある。その結果、レコードのデータ型も影響を受けるので、セッターとゲッターの型シグネチャは、一般的には

get :: s -> a
set :: s -> b -> t

となる。これに対応させて、代数的データ型を定義すると、

data IStore a b t = (a, b -> t)

となる。データ型の変化を許す\(IStore\)はインデックス付き\(Store\)と呼ばれる。このため、\(Store\)の前に\(I\)がついている。しかし、タプルのかたちでは使いにくいので、\(IStore\)を次のように定義しなおして、以下ではこれを利用することにしよう(とはいっても、証明に入ると元の形で用いるので、ご容赦ください)。

data IStore a b t = IStore a (b -> t)


\(Store\)は関手にして用いたが、同じように\(IStore\)も関手として用いる。そのためには関手の概念を拡張したインデックス付き関手\(IxFunctor\)が必要である。

class IxFunctor w where
  imap :: (s -> t) -> w a b s -> w a b t

f:id:bitterharvest:20191107160340p:plain
図10:インデックス付き関手での\(i map \) (射\(f\)を関手\(W\)で写像\(W(f)\))-図はHaskellでの表現

\(IStore\)は、このインスタンスとなる。

instance IxFunctor IStore where
  imap f (IStore x h) = IStore x (f . x)

インデックス付きのコモナドは、

class IxComonad w where
  iextract :: w a a t -> t
  iduplicate :: w a b t -> w a j (w j b t)

となり、このインスタンスなので、

instance IxComonad IStore where
  iextract (IStore a h) = h a
  iduplicate (IStore a h) = IStore a (\c -> IStore c h) 

となる。

さらに、F-余代数は、圏\(\mathcal{C}\)とその上の自己関手\(F\)に対して、\(\mathcal{C}\)の対象\(A\)と、\(\mathcal{C}\)の射\(β: A \rightarrow F(A) \)との組\( (A,β) \)である。これを考慮すると、F-余代数は

type ICoalg w s t a b = s -> w a b t

となる。

5.5 コモナドとF-余代数

前回の記事で説明したコモナド余代数について復習しておこう。

Haskellではコモナドを次のように定義した。

class Functor w => Comonad w where
  extract :: w a -> a
  duplicate :: w a -> w (w a)

そして満たさなければならない条件は、

extract . duplicate      = id
fmap extract . duplicate = id
duplicate . duplicate    = fmap duplicate . duplicate

である。
また、F-余代数は

type Coalgebra w a = a -> w a

とし、評価射を

coalge :: Coalgebra w a

で定義した。このとき、

extract . coalg = id
fmap (coalg) . colag = duplicate . coalg

を満足するとき、F-余代数を特別にコモナド余代数と呼んだ。可換図式では次のようになった。

f:id:bitterharvest:20191113100113p:plain
図11:コモナド余代数になるための条件

これと同じことを、インデックス付き関手に対して、考えてみよう。

1番目の条件は\(iextract\)に関連し、

icoalg_aa :: ICoalg w s t a a
iextract . icoalg__aa  = id

となる。

2番目の条件は\(iduplicate\)に関連する。F-余代数では下図が成り立つ。

f:id:bitterharvest:20191107165846p:plain
図12:F-余代数の空間-図はHaskellでの表現

図に示すように、

icoalg_ab = s -> w a b t
u = w a b t
v = w a b t'
icoalg_bc = u -> w b c v

とすると、

icoalg_bc . icoalg_ab = s -> w a b t -> w b c (w a b t')

となる。

即ち、2番目の条件は以下のようになる。

icoalg_ab :: ICoalg w s t a b = s -> w a b t
icoalg_bc :: ICoalg w s t b c = s -> w b c t
icoalg_ac :: ICoalg w s t a c = s -> w a c t
icoalg_bc . icoalg_ab = iduplicate . icoalg_ac

可換図式で示すと下図の通りである。コモナド余代数の場合には、コモナドに与えられた射で計算しても、余代数での評価射を用いて計算してもよいこととなる。

f:id:bitterharvest:20191107164459p:plain
図13:コモナド余代数となるための条件-図はHaskellでの表現

5.6 評価射と代数的データ型\(Lens\)

関手\(Istore\)はコモナドであるので、これをコモナド余代数とするような評価射\(β : s \rightarrow IStore \ a \ b \ t \)を見つけることができれば、これを用いても計算できるようになる。

ここでは、前回の記事で説明した\(Lens\)をとりあげよう。\(Lens\)を最初に定義し、そのあと\(Lens\)が評価射であることを示そう。

\(Lens\)がどのように見出されたのかは不明であるが、これを発見した人はすごいと思う。さらに、\(Lens\)が評価射であることを証明した人も素晴らしいと思う。証明は、Russel O’Connorさんの論文に示されているが、次のような逸話が残っている。実は、Bartosz Milewskiさんも同じころに気がついたそうで、証明が正しいかどうかを確認するために、そのドラフトをRussellさんに送った。そうしたら、Russellさんから同じ趣旨の論文を書いている最中だと言われたそうだ。今回の記事はBartoszさんの説明をベースにまとめたものだ。余談だが、世界は広いので、独創的な研究だと思っているときでも、複数の研究者が取り組んでいることが多い。このため、成果の公表には、戦略が必要だ。

Haskellでは、\(Lens\)は次のように定義している。

type Lens s t a b = forall (f :: * -> *). Functor f => (a -> f b) -> (s -> f t)

\(type\)で定義されているが、これは紛れもなく代数的データ型である。

\(Lens\)の使い方については、前回の記事で説明したが、そのとき用いた関数や変数の型シグネチャを確認しておこう。

車のデータベースに対して次のように定義した。車のレコードは、\(Car\)というデータ型を有し、フィールドには、製造社を示す\(maker\)と仕様を表す\(spec\)がある。仕様はデータ型\(Spec\)で定義し、そのサブフィールドには、車の名前の\(name\)と製造年の\(year\)がある。そして\(makeLenses\)を用いて、これらを\(Lens\)というデータ型にした。

{-# LANGUAGE TemplateHaskell #-}

import Control.Lens

data Car = Car {_maker :: String , _spec :: Spec} deriving Show
data Spec = Spec {_name :: String, _year :: Int} deriving Show 

makeLenses ''Car
makeLenses ''Spec

それでは型シグネチャを調べてみよう。\(Getter\)と\(Setter\)の関数である\( (^.) \) と\( (.~) \)、およびフィールドの名前について求めると次のようになる。

f:id:bitterharvest:20191108082436p:plain
図14:データ型\(Car\)で用いられているフィールド名の型シグネチャ
これから、ゲッターの\( (^.) \) とセッターの\( (.~) \)は、それぞれ引数\(Getting\)と\(ISetter\)を有し、そのデータ型はいずれも\(Lens\)である。従って、この引数によりアクセスすべき場所を得ていることが分かる。この場所を与えているのが、それぞれのフィールドを表している\(maker, spec, name, year\)だ。いずれもデータ型は\(Lens\)となっていることに気がつく。

これからの話は\(Lens\)が評価射であることを示すものだが、\(maker, spec, name, year\)がそのインスタンスであることを念頭に置いて進めよう。まずは\(Lens\)と\(IStore\)の関係をついて考えてみよう。

\(Lens\)のデータ型の定義で、\(a \rightarrow f \ b \)はフィールドの変更、\(s \rightarrow f \ s \)はレコードの変更と見なせばよい。上記の定義は、前回の説明で見慣れた\( Store \)とはだいぶ異なるように見えると思うが、式を変形すると、

forall (f :: * -> *). (a -> f b) -> (s -> f t)

は、

s -> forall (f :: * -> *). (a -> f b) ->f t

となる。

このように書き換えると

forall (f :: * -> *). (a -> f b) ->f t

data IStore a b t = IStore a (b -> t)

すなわち

data IStore a b t = (a, b -> t)

が等しければ、\(Lens \ s \ t \ a \ b = λ s \rightarrow IStore \ a \ b \ t \)となり、\(Lens\)が評価射であることが示される。以下ではこれを示そう。

5.7 米田の補題とグロタンディーク関手

それでは米田の補題を復習しよう。
[米田の補題]
局所的に小さな圏を\(\mathcal{C}\)とする。即ち、任意の対象\(A,B\)に対して、\(A\)から\(B\)への写像の集まりが集合となる圏について考える。このとき、全ての対象\(A\)に対して、\( {\rm Hom}_\mathcal{C} \)関手と呼ばれるものを用意することができ、これは集合の圏\( \mathbf{Set}\)への自然変換を与えるというのが米田の補題である。具体的に表してみよう。

\( {\rm Hom}_\mathcal{C} \)関手は
\begin{eqnarray}
h^A = {\rm Hom}_\mathcal{C} (A,-)
\end{eqnarray}
と表され、これは、任意の対象\(X\)に対して、射\( {\rm Hom}_\mathcal{C}(A,X) \)を与え、任意の写像\(f : X \rightarrow Y\)に対して、射\(f \circ - \)を与える。なお、任意の射\(g \in {\rm Hom}_\mathcal{C}(A,X) \)に対して、\(f \circ g \in {\rm Hom}_\mathcal{C}(A,Y) \)となる。式で表すと、
\begin{eqnarray}
h^A (f) &=& {\rm Hom}_\mathcal{C}(A,f) \\
h^A (f)(g) &=& f \circ g
\end{eqnarray}

f:id:bitterharvest:20191104155402p:plain
図15:\( {\rm Hom}_\mathcal{C} \)関手

\(F\)を\(\mathcal{C}\)から集合の圏\( \mathbf{Set}\)への関手としよう。このとき米田の補題は「\( h^A\)から\(F\)への自然変換は\(F(A)\)と1対1対応(全単射)である」となる。即ち、
\begin{eqnarray}
Nat_{[\mathcal{C},\mathbf{Set}]} (h^A,F) \cong F(A)
\end{eqnarray}
となる。ただし、\( [\mathcal{C},\mathbf{Set}] \)は、圏\(\mathcal{C}\)から、圏\(\mathbf{Set}\)への関手を射とした圏である。

ここで自然変換が出てきたので、若干の説明を加えておこう。圏\(\mathcal{C}\)からは、関手\( {\rm Hom}_\mathcal{C} (A,-) \)と、(集合の圏へと移す)任意の関手\( F \)が存在し、それぞれは集合の圏\( \mathbf{Set}\)に写像する。このとき、\( {\rm Hom}_\mathcal{C}(A,-) \)から\( F \)へ自然変換が存在し、\(A\)について自然であるというのは、図10での\(X,Y\)を\(A,B\)に変え、任意の\(B\)に対して、\(A\)から\(B\)への任意の射\(f : A \rightarrow B \)を考えたとき、\(θ_B \circ h^A(f) = F(f) \circ θ_A \)が成り立つことと同じである。図11にこれを示す。

f:id:bitterharvest:20191105114646p:plain
図16:米田の補題における自然変換

ところで、米田の補題は\( {\rm Hom}_\mathcal{C} (A,f) (id_A) = f \)を利用することで証明できる。証明はここでは省く。

米田の補題で、\(F\)は、集合の圏\(\mathbf{Set}\)への関手であれば、なんでもよかった。\( {\rm Hom}_\mathcal{C} (B,-) \)は、集合の圏\(\mathbf{Set}\)への関手なので、米田の補題での\(F\)を\( {\rm Hom}_\mathcal{C} (B,-) \)で置き換えると、
\begin{eqnarray}
Nat_{[\mathcal{C},\mathbf{Set}]}({\rm Hom}_\mathcal{C}(A,-),{\rm Hom}_\mathcal{C}(B,-)) \cong {\rm Hom}_\mathcal{C}(B,A)
\end{eqnarray}
を得る。そしてここでの自然変換は、グロタンディーク関手(Grothendieck functor)と呼ばれる。図で示すと次のようになる。

f:id:bitterharvest:20191105135520p:plain
図17:グロタンディーク関手

圏\(\mathbf{Set} \)の代わりに圏\( [\mathcal{C},\mathbf{Set}] \)を使って表すと下図のようになる。

f:id:bitterharvest:20191105140027p:plain
図18:グロタンディーク関手(別表現)

これをHasekllで表すと

forall c. (a -> c) -> (b -> c) ≃ (b -> a)

となる。

ここでは、\(A,B\)は局所的に小さな圏\( \mathcal{C} \)の対象であった。それでは、この圏の射を対象とした圏\( [\mathcal{C} , \mathcal{C}]\)を考えてみよう。米田の補題を適用すると
\begin{eqnarray}
Nat_{[ [\mathcal{C} , \mathcal{C}],\mathbf{Set}]} ({\rm Hom}_{[\mathcal{C} , \mathcal{C}]} (g,-), {\rm Hom}_{ [\mathcal{C} , \mathcal{C}]} (h,-)) \cong {\rm Hom}_{ [\mathcal{C} , \mathcal{C}]} (h,g)
\end{eqnarray}
となる。

これはHaskellでは

forall f. (forall c. g c ->  f c) -> (forall c’. h c’ -> f c’) ≃ (forall c. h c -> g c)

となる。

5.8 随伴

随伴の定義は、圏 \( \mathcal{C} \)と\( \mathcal{D} \)、その間の関手\(L:\mathcal{D} \rightarrow \mathcal{C}\)と\(R:\mathcal{C} \rightarrow \mathcal{D}\)において、任意の対象\(A \in \mathcal{C},B \in \mathcal{D} \)に対して\( {\rm Hom}_{\mathcal{C}} (L(B),A) \)と \( {\rm Hom}_{\mathcal{D} } (B,R(A) ) \)とが一対一対応(全単射)であること、すなわち
\begin{eqnarray}
{\rm Hom}_{\mathcal{C}} (L(B),A) \cong {\rm Hom}_{\mathcal{D} } (B,R(A) )
\end{eqnarray}
が成り立つことである。

f:id:bitterharvest:20191106084540p:plain
図19:随伴

Bartoszさんは、圏 \( \mathcal{C} \)と\( \mathcal{D} \)の代わりに、圏 \( \mathcal{C} \)から圏\( \mathcal{C} \)への関手を対象とした圏\( [\mathcal{C} , \mathcal{C}]\)を用いた場合には、随伴が成り立つことを発見した。すなわち下記の式が成り立つことを示した。
\begin{eqnarray}
{\rm Hom}_{ [\mathcal{C},\mathcal{C}]} (L(g),f) \cong {\rm Hom}_{ [\mathcal{C},\mathcal{C}]} (g,R(f) )
\end{eqnarray}
図で表すと、

f:id:bitterharvest:20191105141318p:plain
図20:圏\([\mathcal{C},\mathcal{C} ] \)での随伴

この随伴をHaskellで表すと、

forall f. (forall c. (L g) c ->  f c) ≃ (forall c. g c -> (R f) c

となる。

5.9 証明

ここまでは準備だ。ここからが証明で、グロタンディーク関手から\(Lens\)が評価射であることが導き出される。小さな圏\( \mathcal{C} \)から\( \mathcal{C} \)への関手を対象とした圏\( [\mathcal{C} , \mathcal{C}]\)に対してグロタンディーク関手を求めると次のようになる。

\begin{eqnarray}
Nat_{[ [\mathcal{C} , \mathcal{C}],\mathbf{Set}]} ({\rm Hom}_{ [\mathcal{C} , \mathcal{C}]} (g,-), {\rm Hom}_{ [\mathcal{C} , \mathcal{C}]} (h,-)) \cong {\rm Hom}_{ [\mathcal{C} , \mathcal{C}]} (h,g)
\end{eqnarray}
グロタンディーク関手を圏\( [\mathcal{C} , \mathcal{C}]\)に適応したのがミソで、左辺から\(Lens\)の代数的データ型が、右辺からコモナドの機能を有する\(IStore\)のデータ型が導き出され、\(Lens\)が評価射であることが示される。それでは式を変形してみよう。

上の式で、\(g\)を\(L(g)\)で、\(h\)を\(L'(h)\)で置き換えると、
\begin{eqnarray}
\forall f. Nat_{[ [\mathcal{C} , \mathcal{C}],\mathbf{Set}]} ( {\rm Hom}_{ [\mathcal{C} , \mathcal{C}]} (L(g),f), {\rm Hom}_{ [\mathcal{C} , \mathcal{C}]} (L'(h),f))) \cong {\rm Hom}_{ [\mathcal{C} , \mathcal{C}]} (L'(h),L(g) )
\end{eqnarray}
となる。

随伴を用いて書き換えると、
\begin{eqnarray}
\forall f. Nat_{[ [\mathcal{C} , \mathcal{C}],\mathbf{Set}]} ({\rm Hom}_{ [\mathcal{C} , \mathcal{C}]} (g,R(f)), {\rm Hom}_{ [\mathcal{C} , \mathcal{C}]} (h,R'(f))) \cong {\rm Hom}_{ [\mathcal{C} , \mathcal{C}]} (h,R'(L(g)) )
\end{eqnarray}

Haskellで表すと

forall f. (forall c. g c ->R f c) -> (forall c'. h c' -> R' f c') ≃ (forall c. (h c -> R' (L g) c)

だ。

ここで、\(g\)と\(h\)は\( {\rm Hom}_{ \mathcal{C} } \)関手なので、
\begin{eqnarray}
g &=& g^B &=& {\rm Hom}_{ \mathcal{C} } (B,-) \\
h &=& h^T &=& {\rm Hom}_{ \mathcal{C} } (T,-)
\end{eqnarray}
である。\(R(f)\)と\(R’(f)\)も\( {\rm Hom}_{ \mathcal{C} } \)関手なので、
\begin{eqnarray}
{\rm Hom}_{ [\mathcal{C} , \mathcal{C}]} (g,R(f)) & \rightarrow & Nat_{[\mathcal{C} , \mathcal{C}]} (g^B, R(f)) \\
{\rm Hom}_{ [\mathcal{C} , \mathcal{C}]} (h,R'(f)) & \rightarrow & Nat_{[\mathcal{C} , \mathcal{C}]} (h^T, R’(f)) \\
{\rm Hom}_{ [\mathcal{C} , \mathcal{C}]} (h,R'(L(g)) & \rightarrow & Nat_{[\mathcal{C} , \mathcal{C}]} (h^T,R'(L(g))
\end{eqnarray}
となり、これらに米田の補題を適応すると、
\begin{eqnarray}
\forall f. {\rm Hom}_{[ [\mathcal{C} , \mathcal{C}],\mathbf{Set}]} ( R(f(B)), R'(f(T)) ) \cong R'(L(g(T)))
\end{eqnarray}
となる。

ここで、圏論Haskellの対応関係を示しておこう。ここまでの議論で、左側は、 \( \mathcal{C} \)から \( \mathcal{C} \)への関手を射とした圏\( [\mathcal{C}, \mathcal{C}] \)であり、右側は集合の圏\(\mathbf{Set}\)である。従って、\( (R \ f) \ B \)は出力を\( f(B) \)とする射であることが分かる。いま入力を\(A\)とすると、\( (R^A \ f) \ B \)は\(A\)から\( f(B) \)への射となる。

圏論Haskell
\(g^B \ C = {\rm Hom}_{ \mathcal{C} } (B,C) \)\( g \ c = (b \rightarrow c) \)
\(h^T \ C' = {\rm Hom}_{ \mathcal{C} } (T,C') \)\( h \ c' = (t \rightarrow c') \)
\( (R^A \ f) \ B = {\rm Hom}_{ \mathcal{C} } (A, f(B)) \)\( (Ra \ f) b = (a \rightarrow f \ b) \)
\( (R'^S \ f) \ T = {\rm Hom}_{ \mathcal{C} } (S, f(T)) \)\( (R's \ f) t = (s \rightarrow f \ t) \)

これより、上記の左辺をHaskellで表すと、

forall f. (a -> f b) -> (s -> f t) 

となる。これは\(Lens\)の定義そのものである。

右辺を変換してみよう。\(R'\)の中を変形しよう。
\begin{eqnarray}
&& Nat_{[\mathcal{C} , \mathcal{C}]} ( L (g), f) \ where f : {\rm Hom}_{ \mathcal{C} } (A,-) \\
&=& Nat_{[\mathcal{C} , \mathcal{C}]} (g, R (f))
\end{eqnarray}

\(g \ T={\rm Hom}_{ \mathcal{C} } (B,T)\)であること、任意の\(T\)に対して\(Nat_{[\mathcal{C} , \mathcal{C}]} (g \ T, R (f) \ T) \)であることに注意を払って、上記をHaskellで表すと、

forall t. g t -> a -> f t
= (a, g t) -> f t
= (a, b -> t) -> f t

となる。これより、\( L (g) \ T\)はHaskellでは\( (a, b \rightarrow t) \)となる。

圏論Haskell
\( L (g(T))=(A,{\rm Hom}_{ \mathcal{C}} (B,T)) \)\( L (g) t =(a, b \rightarrow t) \)

これより、右辺は
\begin{eqnarray}
&& R'(L(g))
&=& R' (A,{\rm Hom}_{ \mathcal{C}} (B,-) )
\end{eqnarray}
となる。従ってHaskellで表すと

R (L (g)) t = s -> (a,b->t)

となる。これの右側\( (a, b \rightarrow t) \)は、コモナドとしての機能を有するセッターとゲッターのための代数的データ型として定義したものである。

data IStore a b t = (a, b -> t)

また、左辺の方は、\(Lens\)のための代数的データ型である。

type Lens s t a b = forall (f :: * -> *). Functor f => (a -> f b) -> (s -> f t)


従って、

Lens s t a b  ≃ s -> IStore a b t

となる。

これにより、\(Lens\)が評価射であることが証明され、めでたしめでたしだ。

情報処理の中で、データベースはとても重要な応用分野である。データベースが、計算についての理論的な根拠を与える圏論と、そして理論的な枠組みの中でプログラミングを可能にしてくれるHaskellとつながった意義はとても大きい。\(Lens\)の発見者は素晴らしい方だと思うし、また\(Lens\)が評価射であることを証明した方もすごいと思う。データベースと圏論の関係については、David I. Spivakがその著書"Category Theory for the Sciences"のなかでも、別の観点から説明している。圏論そしてHaskellが、このように重要な応用分野で利用されることはとても良いことだと思う。

追伸:
最後に、得られた結果を図で示そう。ここには、比較しやすくするために、圏論での表記とHaskellでの記述を合わせて載せた。

f:id:bitterharvest:20191208120846p:plain
図21:\(Lens\)が評価射であることを証明したときの結論を示したもの。