このブログは、旧・はてなダイアリー「檜山正幸のキマイラ飼育記 メモ編」(http://d.hatena.ne.jp/m-hiyama-memo/)のデータを移行・保存したものであり、今後(2019年1月以降)更新の予定はありません。

今後の更新は、新しいブログ http://m-hiyama-memo.hatenablog.com/ で行います。

ベキのKleisli圏とKleisli圏のベキは違う

過去のエントリーを読み直した。

指標Σの項モナドをTΣ(-)とする(もともとはTIΣと書いてあった)。LΣ(-) := Pow(TΣ(-))と定義する。ここで、Powは共変ベキ・モナドである。一方、圏Cに対する木下ベキ構成をPOW(C)とする。

C上のモナドFのKleisli圏をKl(C, F) = Kl(F) と書くことにする。モナドTΣ(-)とLΣ(-) を十分に大きな圏(アンビエント圏)A上で考える。そのとき、POW(Kl(A, TΣ(-))) と Kl(A, LΣ(-)) が一致する(圏同値)と言ったが、これは間違い

実際は、POW(Kl(A, TΣ(-)))のほうが大きくて、Kl(A, LΣ(-)) からの埋め込み(忠実関手)が存在する。

まず、Kleisli射を{yj ::= ej(x1, ..., xn) } の形の方程式系として表す。Kl(A, LΣ(-)) の射は、{yj ::= Ej(x1, ..., xn) | Ej ∈LΣ(X)} の形に書ける。Ej は、Ej⊆TΣ(X) である(定義より)。jが1からmまで動くとすると、この方程式系は、(Pow(TΣ(X)))m (m個の直積)でエンコードできる。

一方、POW(Kl(A, TΣ(-)))の射は、方程式系 Y→TΣ(X)))の集まりなので、Pow[(TΣ(X))m]でエンコードできる。明らかに、標準的な埋め込み (Pow(TΣ(X)))m→Pow[(TΣ(X))m]が存在する。

テンプレートとコンテキストの用語で言えば:

  • POW(Kl(A, TΣ(-))) -- コンテキストセットの圏
  • Kl(A, LΣ(-)) -- セット値コンテキストの圏

セット値コンテキストから導かれるあらゆるインスタンス・コンテキストの集まりは、コンテキストセットになっている。これが標準的な埋め込み。POW(Kl(A, TΣ(-)))を使うことがホントにあるかどうか? よく分からない。

ほとんど(すべて?)のスキーマ言語は、Kl(A, LΣ(-))しか使わないだろう。別にスキーマ・メタ項のモナドMΣ'があると、Y→MΣ'(X)とKleisli射(セット値コンテキスト) X→LΣ(S) があると、Y→LΣ(S) という新しいセット値コンテキストが作れる。この“代入”を可能とするには、MΣ'(X)に含まれる項を、X→LΣ(S)のコンテキスト(むしろ環境)により評価する意味写像が必要になる。この“メタ項の意味写像”が、2つのモナドを接着することになる。

いま書いたようなことが次にも書いてある。