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

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

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

参照用 記事

モナド的代数系と一般化クライスリ圏

1年半ほど前の「両代数と両クライスリ圏」において、「FがC上のコモナド、Gがモナドのとき、F(X)→G(Y) というCの射を X→Y という射だと思って、両クライスリ圏を構成したい」*1と言って、次のような定義をしてます。

F = (F, δ, ε), G = (G, μ, η) だとする。ほかに、τ::FG⇒GF があるとする。τはスワッパーと呼ぶ。f:F(X)→G(Y), g:F(Y)→G(Z) に対して、

  • δX;F(f);τY;G(g);μZ

として両クライスリ結合が定義できそうだが、τに条件を付けないと両クライスリ圏の構成はできない。

結局、この構成はうまくいきました。「両クライスリ圏が構成できた」にまとめて(?)あります。

ごく最近(昨日、今日)、また同じような事をしてました。なんか同じことを繰り返しているような、、、。正確に定義はできないのですが、「同じことを繰り返している状況」はおおよそ次のようなことです。

  • モナドと類似してるが、モナドとは違う関手ベースの構造がある。
  • この構造から、クライスリ圏と類似しているが、クライスリ圏とは違う拡張圏を構成する。

モナドと余クライスリ圏は、モナドとクライスリ圏の双対です。冒頭に挙げた両モナドと両クライスリ圏(双モナドと双クライスリ圏と呼ぶこともあるようです)は、これら2つの組み合わせです。

「カテゴリカル・モデリングに向けて」では「モナド加群」という言葉を出しています。

モナド概念を少し拡張すると、バッファフラッシュとかコミットまで取り込むことができます。拡張されたモナド概念をなんと呼ぶか僕は知らないのですが、線形代数加群に対応します(モナド多元環に対応します)。しょうがないのでモナド加群とでも呼ぶことにして; このモナド加群を使うと、モナドが状態空間に作用して、最終的に状態遷移を引き起こすところまで細かく制御できます。

「Caty: C4エンジン」では次のように書いています。

モナド類は、普通のモナド以外に、余モナド、両モナドモナド上の加群なども含みます。それに伴ない、クライスリ拡張も一般化されています。

普通のモナド以外のモナド類で、クライスリ拡張(クライスリ構成、クライスリ圏)を一般化するモノが必要なんです。


ハッキリとした定義は与えられなくても、名前だけは付けてしまいましょう。名前がないと指示も言及もできませんから。

まず、「モナドみたいな/モナドに類似した」という意味でモナド的(monadic)という形容詞を使います。monadicはmono-adicで「単項の」という意味もありますが、モナドに関連する形容詞にも使われます。で、モナドみたいな/モナドに類似した代数系/代数構造は monadic algebraic-system と。単に「代数」という言葉で代数系/代数構造を意味することが多いですが、僕はその用法が好きじゃないので「系」「構造」を付けることにします。

モナド代数系の事例はどんなものかというと、集合圏やベクトル空間の圏のなかで考えられる代数系を、圏Cの自己関手と自然変換の圏End(C) = CC 内で定義したものです。典型的で分かりやすい例は、モナド、コモナド、双モナドです。

集合圏 ベクトル空間の圏 自己関手の圏
モノイド 多元環(代数) モナド
コモノイド 多元環(余代数) モナド
双モノイド*2 多元環(双代数) モナド

多元環上の加群を考えることができるのと同様に、モナド上の加群相当の概念も定義できます。フロベニウス代数やホップ代数の類似物である代数系も考えられます。これらもモナド代数系と言っていいでしょう。

なんで/どこでモナド代数系が出現するかと言うと、大域環境、例外、破壊的代入、ストレージIO、状態、トランザクションなどを整合的に考えようとすると、上記のような加群(ストレージ更新)やフロベニウス代数(破壊的代入と参照)が出てきます。

これらのモナド代数系には、それに伴う拡張圏の構成法が存在します。いつでも存在するかどうかはわかりませんし、一般的な処方箋もハッキリしません。しかし、知られている例ではクライスリ構成に類似の方法があります。この構成法と結果は、一般化クライスリ構成/一般化クライスリ圏とでも呼びましょう。

もう一度「同じことを繰り返している状況」を述べてみると:

  1. ベースとなる圏Cがある。
  2. End(C) 内になんらかの代数系Fが定義できる。
  3. F-クライスリ射、F-クライスリ結合のような概念が定義できる。
  4. F-クライスリ射とF-クライスリ結合から、一般化クライスリ圏 K = Kl(C, F) が定義できる。
  5. 一般化クライスリ圏Kは、もとの圏Cの拡張になっていて、埋め込み CK がある。

はなはだ曖昧な話ですが、現状では、こんな感じの状況証拠があるだけです。