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

bitterharvest’s diary

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

Haskellの真髄に迫る - 一般化代数的データ(4)

1.米田の補題

圏論の重要な概念のひとつに米田の補題がある。これは次で表される。

\({\mathcal C}\)を圏とした時、任意の\({\mathcal C}\)の対象\(A\)と関手\(F: {\mathcal C} \rightarrow {\bf Sets}\)に対して
\({\rm Nat}({\rm Hom}(A,-),F) \cong F(A)\)
である。さらに、この同型\(\cong\)は、\(F\)と\(A\)に対して自然である。

2.射の集合

圏論に馴染みのない人にとっては、ちんぷんかんぷんのことと思われる。この中で最も分かりにくいのが、\({\rm Hom}(A,-)\)だろう。これは、共変\({\rm Hom}\)関手と呼ばれる。上の記述には\({\rm Hom}\)の右側が-になっているのでわかりにくいが、ここに、\(X\)を入れると、\({\rm Hom}(A,X)\)となる。これは、対象\(A\)から対象\(Y\)への射の集合である(集合で考えるならば、要素\(a\)から要素\(y\)への写像の集まり)。これを図で表すと次のようになる。
f:id:bitterharvest:20140914091914p:plain
青い矢印の集まりが、\({\rm Hom}(A,X)\)である。

また、-のところに\(f\)を入れると、これは、\(f: X \rightarrow Y\)としたとき、\({\rm Hom}(A,f): {\rm Hom}(A,X) \rightarrow {\rm Hom}(A,Y)\)を表す。図で示す。
f:id:bitterharvest:20140914164032p:plain

3.共変\({\rm Hom}\)関手

一般に、圏は対象の集まり、射の集まり、射の結合、(その他に恒等射id,射のdomain,codomain)で定義される。下図には簡単な圏を示した。
f:id:bitterharvest:20140914150037p:plain
この図で、\(X,Y,Z\)は対象、\(f,g\)は射、\(\cdot\)は結合である。

\({\rm Hom}(A,-)\)の概念図を示す。
f:id:bitterharvest:20140914163259p:plain
共変\({\rm Hom}\)関手は次のことを言っている。\({\mathcal C}\)を圏とし、その対象の一つである\(A\)を固定し、別の対象\(X\)を考える。このとき、\(A\)から\(X\)への写像の集まりは、\({\rm Hom}(A,X)\)で表すことができる。同様に、もう一つの別の対象\(Y\)についても\({\rm Hom}(A,Y)\)で表すことができる。また、圏\({\mathcal C}\)の射を\(f: X \rightarrow Y\)としたとき、\({\rm Hom}(A,f)=(f \circ) : {\rm Hom}(A,X) \rightarrow {\rm Hom}(A,Y)\)で表せる。ここで、\(\circ\)は圏\({\bf Sets}\)の合成とする。

圏の定義を確認したので、\({\rm Hom}(A,-)\)が何をしているか考えてみる。
1) \({\rm Hom}(A,X)\)は圏\({\mathcal C}\)の対象\(X\)を圏\({\bf Sets}\)の対象\({\rm Hom}(A,X)\)に対応させる。
2) \({\rm Hom}(A,f)\)は圏\({\mathcal C}\)の射\(f:X \rightarrow Y\)を圏\({\bf Sets}\)の射\((f \circ):{\rm Hom}(A,X) \rightarrow {\rm Hom}(A,Y)\)に対応させる。

4.関手

\({\rm Hom}(A,-)\)には関手という言葉が使われていたので、関手の定義を確認する。圏\({\mathcal C}\)から圏\({\mathcal D}\)への関手\(F:{\mathcal C} \rightarrow {\mathcal D}\)とは、圏\({\mathcal C}\)の対象\(A\)を圏\({\mathcal D}\)の対象\(F(A)\)に対応付け、圏\({\mathcal C}\)の射\(f:A \rightarrow B\)を圏\({\mathcal D}\)の対象\(F(f)\)に対応付ける関数の組で、次の二つの条件を満たすものである。
1) \({\mathcal C}\)の任意の二つの射\(f:A \rightarrow B, g:B \rightarrow C\)に対して、\(F(f \cdot g) = F(f) \circ F(g) \)である。
2) \({\mathcal C}\)の任意の対象\(A\)に対して、\(F(1_A)=1_{F(A)}\)である。

ここでは、証明は省くが、\({\rm Hom}(A,-)\)は関手の定義を満たしていることがわかる。同じように、\({\rm Hom}(-,A)\)を定義することもできるが、これも関手の定義を満たしていることがわかる。この二つを分けるために、前者を共変といい、後者を反変と呼んでいる。

なお、共変の時の圏\({\mathcal C}\)から圏\({\bf Sets}\)への射の写像を\((f \circ)\)と記したのは、左から\(f\)を合成することを明示的に表すためである。反変の時は左側から合成するので、\((\circ f)\)と記す。