「メイヤー先生からモナド類似構造へ」で、「モナド類似物」という歯切れの悪い言葉を使っていたので、もっとスッキリした呼び名を与えて、ストレージIOの文脈における「モナド類似物」の解釈を与えようと思います。
内容:
- 言葉使い
- メイヤー指標
- メイヤーオートマトンとその解釈
言葉使い
「代数、モノイド、マグマ」において、「代数」と「モノイド」という2つの言葉を区別するのは無理だろう、と言いました。なので、「代数」と「モノイド」を厳密に区別する気はありません。メイヤー先生の原則に従った「Command-Query分離された状態遷移系」から出てくる代数系は、双モノイドとコモノイド(余モノイド)の組で、さらに加群の構造を持ちます。これをメイヤーモノイド、メイヤー双モノイドと呼んでも別に悪くはない気がしますが、より意味が曖昧な「代数」を付けて「メイヤー代数」なら、まーなんとでも解釈(言い訳?)できるので、これがよかろうと思います。
圏Cの自己関手の圏End(C)内のモノイドがモナド、コモノイドがコモナドなんですが、んじゃ、End(C)内の双モノイドや、モノイド上の加群、コモノイド上の余加群とかは何と呼ぼうか? って話があります。一時、「双モナド」か「両モナド」かと悩んでいました(今はどっちでもいい感じ)。「カテゴリカル・モデリングに向けて」では、End(C)内の加群を、苦しまぎれに「モナド加群」と呼んでいます。「モナド的代数系と一般化クライスリ圏」では「モナド的」という形容詞を出してみました。
アルテンキルヒ達(Thorsten Altenkirch, James Chapman, Tarmo Uustalu)が「モナド類似物」(monad-like entities)と言っているのを知って、「インデックス付き圏のフビニ/グロタンディーク同値」あたりから、「類似物」を使い出しました。この流れで、メイヤー・モナド類似物? -- うーん、「類似物」って言葉も語感がよろしくないですね。
形容詞「モナド的」はまーまーだと思うのですが(例:モナド的メイヤー代数)、モナド的(monadic)は「単項の」という意味もあるし、圏論内でもmonadicityなんて概念があります。「かぶっちゃダメ」とか言ってると身動き取れなくなりますが、できれば混乱を避けたい気持ちもあります。
End(C)で考えると、代数系の台対象(underlying object)が関手となるので、関手的(functorial)はどうでしょうか。メイヤー代数を自己関手圏で考えたものは関手的メイヤー代数(functorial Meyer algebra)と。ピッタリだとも思えないけど、他に思いつかない。これでいいや。
メイヤー代数上の加群は素直にメイヤー加群でよかろう、とそう思ったのですが、加群てmoduleだったんですよね。Meyer moduleだと、プログラミングで出てくるモジュールだと思われそう。日本語の「加群」ならいいのですが … 。メイヤー加群は「Command-Query分離された状態遷移系」に対応するので、代数の用語はやめてメイヤーオートマトンにしましょうか。代数的な文脈ではメイヤー加群、状態遷移を考えているときはメイヤーオートマトン、内容的には同じなのでこれらは同義語です。
メイヤー指標
代数や余代数は指標によって定義されることがあります。インスティチューションでは、指標と指標射からなるベース圏の上にモデル圏が森の木のように“生えた”構造を考えます。メイヤー代数もメイヤー指標で定義可能です。
集合圏で考えることにすれば、メイヤー指標は、1つの隠蔽ソート(hidden sort)を持つ隠蔽指標(hidden signature)です。次のものから構成されます。
- Commandを表す記号の集合C
- Queryを表す記号の集合Q、各記号qには値のソートVqが割り当てられている
CもQも無限集合でもかまいません。Vq達は既に知られた集合だとして、可視ソート(visible sort)と呼びます。集合Cから生成された自由モノイドをM、Vq を q∈Q に渡って直積に組んた集合をVとします(M := C*、V := Πq(Vq) )。
MにもVにも、対角写像と単元集合1への自明な写像によりコモノイド構造を導入できます。モノイドMによるVへの作用(スカラー乗法)a:V×M→V を与えれば、指標 (C, Q) から作ったメイヤー代数を構成できます。
以上の構成では、aは自動的に作ったものではありませんが、Vより大きなV'を次のように構成すれば、aもタダで手に入ります。
- V' := V×M とする。
- (v, x)∈V' に対して、a((v, x), y) := (v, x・y) と定義する。・はMのモノイド乗法。
この構成により、M := C*、V' := (Πq(Vq))×C* 上にメイヤー構造が導入されます。これは、与えられたメイヤー指標に対する自由メイヤー代数です。
メイヤー指標Σを持つメイヤー代数は、Σ上の自由メイヤー代数の部分代数や、なんらかの関係を入れた商代数となります。メイヤー代数の場合は、標準的な部分代数と商代数もタダで定義できます。到達可能性と識別可能性という概念を使い、マイヒル/ネロード(Myhill/Nerode)風の定理を導きます -- この話は長くなるのでまた別な機会にしましょう。
メイヤーオートマトンとその解釈
メイヤーオートマトンは、メイヤー代数上の加群です。(M, V)を台とするメイヤー代数自体が、Vを加群の台(状態空間)とする加群となります。これは、スカラー体もベクトル空間とみなせるのと同じです。メイヤーオートマトン(メイヤー加群)は、クライアント・サーバー型のストレージのモデルになるので、対応関係(解釈)を述べます。
(M, e, m, !, Δ) が双モノイド構造、(V, !, Δ) がコモノイド構造、a:V×M→V がメイヤー代数としてのスカラー乗法とします。それとは別に、(S, α, δ) があり、メイヤーオートマトン(メイヤー加群)となっているとします。α:S×M→S は加群としてのスカラー乗法(状態遷移)、δ:S→S×V は余加群としてのスカラー余乗法(観測操作)です。
代数的概念 | ストレージとしての解釈 |
---|---|
双モノイドの台 M | 更新操作の集合 |
単位元 e | なにもしない操作 |
乗法 m | 更新操作の順次結合 |
単位法則 | なにもしない操作はなんの影響もないこと |
結合法則 | 3つ以上の更新操作の順次結合を合理的に定義可能なこと |
余単位 ! | 操作の破棄 |
余乗法 Δ | 操作の複製 |
余単位法則 | 複製した操作を捨ててもなんの影響もないこと |
余結合法則 | 操作の複製は何度でも安全に行えること |
コモノイドの台 V | 観測値(またはキャッシュ値)の集合 |
余単位 ! | 値の破棄 |
余乗法 Δ | 値の複製 |
余単位法則 | 複製した値を捨ててもなんの影響もないこと |
余結合法則 | 値の複製は何度でも安全に行えること |
スカラー乗法 a | 観測値またはキャッシュへの更新操作 |
双代数法則 | 観測値またはキャッシュへの更新結果を予測可能なこと |
加群の台 | ストレージの状態空間 |
スカラー乗法α | ストレージへの更新操作 |
スカラー余乗法δ | ストレージへの問い合わせ |
加群の双代数法則 | ストレージへの更新による“観測値の変化”を予測可能なこと |
メイヤー指標がアプリケーションに対するインターフェースを与え、メイヤー代数がクライアントの実装(リクエスター)、メイヤーオートマトンがクライアントとサーバーを含めたストレージ全体の実装となります。