このブログの更新は Twitterアカウント @m_hiyama で通知されます。
Follow @m_hiyama

メールでのご連絡は hiyama{at}chimaira{dot}org まで。

はじめてのメールはスパムと判定されることがあります。最初は、信頼されているドメインから差し障りのない文面を送っていただけると、スパムと判定されにくいと思います。

参照用 記事

関数で関手が表現できるって変でしょ、どういう仕掛けかな?

計算(computations)が圏Cでモデル化できるとします。圏Cの対象は型で、圏Cの射は強く型付けされた関数(計算処理)だとしましょう。このモデルのなかで関手 F:CC を関数(=Cの射)で表現できるでしょうか? できないですよ。だって、関手はCの外にあるものですからね。モデルであるCのなかに存在する関数が、Cの外の世界に飛び出ることはできません。

ところが、関数で関手を表現することは普通に行われています。なんか変ですね。カラクリがあるに違いない。探ってみましょう。

F:CC が関手として、その対象部分(object part)をFobjとします。Fobj:|C|→|C| です。A, B∈|C| に対して、FA,B : C(A, B)→C(Fobj(A), Fobj(B)) とすると、FA,B は集合(ホムセット)のあいだの写像です。しかし、ホムセットはCの対象ではない*1ので、FA,BCの射にはなっていません。

単なる圏ではこれ以上話を進めることができないので、Cデカルトだと仮定します。対象AとBの指数を通常は BA と書きますが、これを [A, B] と書くことにします。[A, B] はCの対象となります。Cデカルト閉であることから、C(A×B, C) = C(A, [B, C]) が(同型の意味で)成立します。

/C/(A, B) := [A, B] と定義して、さらにナニヤラカニヤラすると、/C/はC-豊饒圏となります。「ナニヤラカニヤラ」の部分は「モノイド圏、豊饒圏、閉圏と内部ホム」に書いてあります。/C/ とか [A, B] という記号は、「モノイド圏、豊饒圏、閉圏と内部ホム」で使ったものです*2

F:CC という関手をC内で表現するには、Cそのものではなくて、C-豊饒圏/C/を使います。f:[A, B]→[A', B'] というCの射(写像ではありません)があると、「fによる後結合」を使って写像Cの射ではありません) f#:C(1, [A, B])→C(1, [A', B']) in Set ができます。あとは、Cデカルト閉であることを利用して、次のような変形をします。


C(1, [A, B])→C(1, [A', B'])
-------------------------------[左右両側に反カリー化]
C(1×A, B)→C(1×A', B')
-------------------------------[左右両側に直積の単位律]
C(A, B)→C(A', B')

結果的に、C([A, B], [A', B']) と Set(C(A, B), C(A', B')) の対応ができます。任意の関手 F:CC のホムセット成分が、C([A, B], [A', B']) の射で表現可能かどうかわりませんが、C-豊饒圏のC-豊饒関手の文脈なら、F:/C/→/C/ over C は、Cの射の束<たば>で表現できます。

関手Fをホムセットごとに射で表現できても、関手の対象パートFobjはそうもいきません。圏の対象類 |C| = Obj(C) を圏Cの内部で表現する方法がないわけでもありません*3が、ここは素直にCの外にある写像 T:|C|→|C| を仮定します。すると、F:/C/→/C/ は次のような構成要素で表現できます。

  1. 写像 T:|C|→|C| (Fobjに相当)
  2. A, B∈|C| ごとに fA,B:[A, B]→[T(A), T(B)] in C

これらが、C内で定義された“/C/の結合と単位”と協調する条件(関手性)を満たせば、それは /C/→/C/ のC-豊饒関手となります。先ほど述べた対応 C([A, B], [A', B']) → Set(C(A, B), C(A', B')) を利用すれば、CC の関手ともみなせます。

つまり、おおざっぱに言えば: デカルト閉圏であるならば、型構成子Tと総称関数fにより自己関手Fを表現できるのです。

*1:一般的には、そのようなことが保証できない、ということです。

*2:最近書いた「デカルト閉圏を計算するスタックマシン、シーケント計算、カリー/ハワード対応」とは少し記法が違います。[A, B] は B←A と同じ意味です。

*3:普遍対象(万能対象)と呼ばれる特別な対象Uがあれば、C全体を(したがって|C|も当然)C(U, U)に埋め込めます。