2012-08-20からの週は、一般化クライスリ構成/クライスリ拡張の話をしていたのですが、一般論は(僕には)無理だろうと書いています。
具体例をたくさん作ると、統一的手法が見えてくる可能性が皆無ではないでしょうが、個別の例を詳しく調べるほうが得策かな、と今は思っています。
今僕が知っている具体例には次があります。
モナドとコモナドの例は、両モナドの特殊な場合とみなせるので、最初の3つは統合できます。メイヤー代数を使った一般化クライスリ圏が両モナドの場合とどう関係するかはよくわかりません。しかし、参照モナドと更新モナドはメイヤー代数を使った構成法に吸収することができます。
具体例のあいだに共通性があるので、それらをまとめておきたいと思います。一般論という程の中身はなくて、単に外枠だけですが、共通の外枠をハッキリさせるだけでも考えやすくなります。
クライスリ拡張
「クライスリ構成」と「クライスリ拡張」は同義で使っていたのですが、ここでは「クライスリ拡張」を使うことにします。構成法は無視して、出来上がった拡張構造だけを問題にするからです。
オリジナルのクライスリ拡張を一般化しても、「もとの圏」と「拡張した圏」という概念は残るので、二者の関係をまとめておきます。もとの圏がC、拡張した圏をKとします。
- |C| = |K| 、つまり対象は変わらない。
- 関手 J:C→K があり、A∈|A| に対して J(A) = A、つまり対象上では恒等(identity on objects)
- A, B∈|A| に対して、JA,B:C(A, B)→K(A, B) は、ホムセット間の写像として単射
以上のことは、Jを通して「CはKの広い部分圏({broad, wide} subcategory)」とみなしていいことを主張しています。
フレイド圏の場合は、Cがデカルト圏であることを仮定します。Kのほうにもモノイド積(またはプレモノイド積)を仮定するので、モノイド構造に注目するわけです。今は単なる拡張構造に注目しているので、モノイド構造抜きフレイド圏となります。
「モノイド構造抜き」じゃフレイドじゃねー、と思うので、単にクライスリ拡張と呼んでおきます。本来の(モナドによる)クライスリ拡張よりは抽象化/一般化されています。
クライスリ拡張の圏とインデキシング
Cを固定して、Cのクライスリ拡張の全体を考えることにします。
J:C→K と J':C→K' が2つのクライスリ拡張のとき、関手 Φ:K→K' が、J;Φ = J' を満たすとき、J:C→K から J':C→K' への準同型とみなしましょう。C上のクライスリ拡張の全体を KlEx(C) とすると、この定義で KlEx(C) は圏になります。圏のサイズが気になるなら、出てくる圏は(適当な宇宙の)小圏と仮定してください。
ΦがJ:C→K から J':C→K' への射であるとき、単に Φ:K→K' in KlEx(C) と書きます。KlEx(C) は圏の圏なので、文字通りの同型はあまり意味がなくて、Φ:K→K' と Φ':K'→K があって圏同値を与えるとき、KとK'は“事実上同じ”とみなします。
Bが圏で、反変関手 H:B→Cat が次の条件を満たすとき、をインデックス付きクライスリ拡張(indexed Kleisli extension)と呼びます。インデックス付き圏なので、H(-) ではなくて H[-] と表記します。
- Bは終対象1を持つ。
- H[1] = C
- A∈B に対して、H[!A]:H[1]→H[A] はC(H[1]はC)のクライスリ拡張である。
- f:A→B in B に対して、H[f]:H[B]→H[A] はクライスリ拡張のあいだの射となる。
基礎に据える圏がBとCの2つあるので、「ベースの圏」とか言うとどっちを指すか分かりません。Bをインデックスの圏、またはパラメータの圏、Cのほうは係数圏とでも呼んで区別することにします。
クライスリ拡張の拡張手
両モナドを使ったクライスリ拡張のときは、A→B というクライスリ射は、もとの圏(係数圏)における F(A)→G(B) という射となります。クライスリ射の両端(域と余域)を作る関手の対を拡張手(extender)と呼んでみたのですが、実際には拡張手だけでクライスリ拡張は決まりません。
両モナドの場合は、FとGは単なる台関手で、他にモナド構造(乗法と単位)、コモナド構造(余乗法と余単位)、ベックの分配法則などが必要になります。拡張手は、クライスリ拡張を構成する素材の一部に過ぎません。たくさんの素材からクライスリ圏を組み立てるレシピが必要なのです。
というわけで、拡張手は素材なのですが、どのような素材であるかをハッキリさせておきましょう。F, G:C→D が関手(の対)で、J:C→K がクライスリ拡張であるとき、(F, G) がJの拡張手になっているとは、次が成立していることです。
- A, B∈|C| に対して、K(A, B) = D(F(A), G(B))。
K(A, B) と D(F(A), G(B)) はホントに等しくなくても系統的な同型があればいいのですが、イコールのほうが話が煩雑にならないでしょう。
実際の例ではたいてい、クライスリ拡張は拡張手を持っているので、拡張手を使って考えるのは有効です。
中身がない枠組みだけの話でしたが、この枠組みがあると具体例が説明しやくなります。次はたぶん具体例を。