読者です 読者をやめる 読者になる 読者になる

bitterharvest’s diary

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

関手ー積と余積

6.7 関手ー積と余積

前回の記事で関手のおさらいをした。一段と理解が深まったことと思う。今回は、再び積と余積について論じよう。前々回では、双関手としての積と余積について述べたが、ここは、この話ではない。

もう一度、積と余積の定義に戻って、そこから関手の世界へと入ることにしよう。

デカルト積は圏論では積の圏として定義され、その互換図は下図のようになっていた。
f:id:bitterharvest:20170228140259p:plain

積の圏には対象\(C\)、射\(p,q\)、対象\(A,B\)が存在し、さらに、一意的な関数\(m=(f, g)\)が存在して、その他の対象\(C'\)に対して、\((f,g): C' \rightarrow C\)となる。
即ち、
1) 積と呼ばれる対象が一つ存在する。これを\(C\)とする。
2) \(C\)には投影(Projection)と呼ばれる二つの射\(p,q\)が存在する。これらは\(C\)をそれぞれ\(A,B\)に投射する。
3) \(C\)以外の任意の対象\(C'\)は\(A,B\)へ投影する射\(p',q'\)を持つ。そして、ただ一つの射\( (f, g) \)が存在し、これは\(p'=p \circ f,q'= q \circ g\)を満たす。

\(C\)が上記を満たす時、これは\(A,B\)の積と呼ばれ\(C=A \times B\)と記される。

これをHaskellで表現する。大文字で表されている対象が、小文字で表される型変数に変わることに注意すると次の図のようになる。
f:id:bitterharvest:20170228140336p:plain

ところで、\(B\)を終対象\(T\)で置き換えよう。次のようになる。
f:id:bitterharvest:20170228140410p:plain

ここで、\(unit\)は終対象への射とする。この結果、\(C\)から\(T\)への射は一意に定まる。同様に、\(C'\)から\(T\)への射も一意に定まる。従って、\(g=unit\)となり、一意に定まる。同様に、\(f\)は\(C\)から\(A\)への射として与えられたものであるため、\(f,g\)は一意に定まる、このため、この図は圏の積となっている。

これをHaskellで描いてみよう。
f:id:bitterharvest:20170228140451p:plain

ところで、積といっているので、算術での掛け算と考えて、\(C=A \times T\)と\(C=A' \times T\)にある\(T\)を1に替えてみよう(\(T\)は一つという意味で\(Unit\)と呼ばれることがある。一つを顕在化し1とする)。互換図は次のようになる。
f:id:bitterharvest:20170228140538p:plain

さらに、\(A \times 1\)は\(A\)と考えてよいだろうから次の互換図を得る。ここで、\( (f,unit) \)は\(f\)となることに注意しよう。
f:id:bitterharvest:20170228140711p:plain

それでは、それぞれの対象は別々の圏\(\mathcal{C,D,E}\)に存在しているとしよう。そして、それらは関手\(Identity,Unit\)により結ばれているものとする。
f:id:bitterharvest:20170228140758p:plain

対象間はデータ型\(Identity,Unit\)で、関数間は\(fmap\)で写像されることを考慮に入れて、Haskellで実装すると以下のようになる(なお、\(Identity\)とその\(fmap\)の実装については次回で述べる)。
f:id:bitterharvest:20170228140846p:plain

さて元々あった積の互換図を重ねてみる。
f:id:bitterharvest:20170228140924p:plain

この図から、\( (a,( ) )\)と\(a\)は同型写像であることが分かる(\( (a,( ) )\)と\(a\)の間の写像エピ射でありモノ射であることを証明すればよい)。即ち、同値というわけではないけれど、同型である。圏論では同型という概念は非常に重要である。それは自然な形で変換できることに起因している。そして、圏論では自然変換を重宝に利用する。

また、余積に対しても同様な互換図を得る。
f:id:bitterharvest:20170228141035p:plain

ここで得た積と余積の概念を発展させるとテンソル積(Tensor Product)の世界へと進むことができる。