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

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

リファクタリングとPインスティチューション

Fが圏C上のモナドだとして、DがFのKleisli圏だとする。f∈C(A, B)に対して、fにモナド単位εB:B→F(B)を後結合すれば、B-resulticな射f':A→F(B)ができる。これを使えば、CをDに埋め込めるから、C⊆Dと考えてよい。この埋め込みを込めて、DをCのKleisli F-拡張とも呼ぶことにする。

Pインスティチューションでは、圏Progは圏SignのKleisli拡張になっている。Σ、Γを指標として、射p∈Prog(Σ, Γ)は、"uses Γ, provides Σ"なプログラムである。pの“意味”(varianceは反変)は、ModΓ→ModΣ の関手として与えられるはずだから、localには、Prog(Σ, Γ)→Functor(ModΓ, ModΣ)という写像がある。

ところで、Functor(ModΓ, ModΣ)は、関手を対象、自然変換を射として、so-called縦結合の圏になる。とするなら、Prog(Σ, Γ)も圏になっていて、localにProg(Σ, Γ)→Functor(ModΓ, ModΣ)が関手になっているのが望ましい。

で、問題はProg(Σ, Γ)はどんな圏か? 対象はソースコードだから、射は明らかにプログラム変換。ΣとΓでしばられているから、勝手な変換ではない。制約(セオリー)が入ることを考えると、外部仕様を変えないプログラム変換となる。つまり、世間的に言えばリファクタリングだ。

モデルの実体として余代数(オートマトン、トランスデューサなど)を考えると、リファクタリングは振る舞い同値、観測的弁別不可能性を導くから、ツジツマはあっている。Progは、localに圏になっているから、Cat-enriched categoryで、双圏(だから2-圏だか)になる。

Mod側では、

  • 0セル -- モデル圏
  • 1セル -- 関手
  • 2セル -- 自然変換

となる。具体的実体に移って:

  • 0セル -- 入出力領域(境界)
  • 1セル -- 余代数
  • 2セル -- 余代数の準同型

終対象を取れば、1セルは状態空間の点になり、2セルが状態遷移になるのだろう(たぶん、イマイチわからん?)。ただし、代数仕様と余代数仕様を整合させる問題は残っているし、振る舞い関手も定義してない。

終対象はモジュライに似ているし、双圏構造はコボルディズムやホモトピーと似ている。アティヤのTQFT公理にもほぼ合致する -- やっぱり計算現象は物理的・幾何的現象なのかもしれないな。

ウーム、どっから攻める? 嗚呼、物理が分かっていれば手持ち道具がもっとあるだろうに、無念。