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

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

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

参照用 記事

対角コモノイド上の余加群と古典観測

[追記]ニョッ、タイトルも含めてコモノイドとコモナドを書き間違えている。まー、発音も意味も似た語だからしょうがないよね。直しますけど。[/追記]

コモニャドセミナーに行ってきた。 - hiroki_fの日記

量子系と古典系って(計算)と(状態)の関係にあるんじゃないかと夢想してみたり。

物理とどんだけ関係あるんだかわかんないけど、対角(単なるコピー操作)を余乗法(comultiplication)とするモナドコモノイドに対して、加群概念の双対である余加群を考えると、観測操作を定式化できるんですよね。この観測は、「二度続けて観測しても同じ観測値を得られる」という意味で「観測対象に影響を与えない」ので、古典的な観測と言えるでしょう。集合圏の対角モナドコモノイドを、別な圏の別なモナドコモノイドにすれば、たぶん量子的な観測も定式化できるし、アブラムスキー組がやっていたはず。

物理的あるいは哲学的な意味を議論しなければ、全然難しい話じゃないので、絵算で説明しましょう。

モノイドとコモノイド

対角演算、いや余演算*1は、記号でも絵でも白三角(大文字デルタ)Δを使うのが習慣だけど、モノイド演算を黒丸(●)にして、コモノイド余演算は双対らしく白丸(○)にします。絵は上から下に読みます。


モノイド演算
\ /
\ /



コモノイド余演算



/ \
/ \

モノイドは結合律と単位律を満たし、コモノイドは余結合律と余単位律を満たします。とりあえず、コモノイドの例は対角コモノイドで十分。

加群=状態遷移系

加群(の台)SへのモノイドMの作用を▼で表します。


加群へのモノイド作用
M \ |S
\ |

|S

線形代数なら; Mは多元環いわゆる代数)で、Sが線形代数の意味の加群です。そして、▼はスカラー乗法です。

コンピューティングでは; Mがコマンドとかアクションとかのモノイド、オートマトンなら入力アルファベット集合Aからクリーネスターで作ったモノイドA*とかです。Sは状態空間で、▼はアクション実行や入力記号で引き起こされる状態遷移ですね。(用語だけは色々無闇とイッパイありますが、みーんな同じ概念です。)

作用▼が結合的(associative)であることは、次の絵図等式で表現できます。「‖」は縦に書いた等号です。


M\ |S
\ |

\ |S
M \ |

|S



M\ /M |S
● |
\ |
M \ |

|S

結合律のコンピューティングにおける解釈は、

  • コマンド、アクション、インストラクション、入力記号列とかなんとか呼ばれるナニカ(要するにモノイドの要素)による状態遷移を2回別々に行うことは、集約したコマンド(アクション、インストラクション、入力記号列とかなんとか)をまとめて1回作用させるのと同じだ

ということです。これは、キューイング(バッファリング)やリクエストメッセージの最適化を合理化する原理です。

単位律は、今日は使わないから省略。

加群と観測

余代数上の余加群線形代数でも出てきますが、以下の実例はコンピューティングの状態遷移系、または日常的な物理系にします。

なんらかの系の状態空間をSとして、状態を観測して得られる値の集合をVとします。例えば、スタック状態(リストで表現可能)の全体がSで、スタックトップを観測して得られる値の全体がVとか。Vの対角余演算を白丸(○)とします。つまり、v∈V に対して ○(v) = (v, v) です。

白三角(△)で観測を表します。△(s) = (v, s')、sが観測前の状態値、vは観測値、s'は観測後の状態値です。一般的には、観測行為(例えば殴ってみて悲鳴を聞くとか)により観測対象に影響を与えます(例えば全治2週間とか)。よって、sとs'が等しい保証はありません。

さてここで、加群の結合律の絵図を上下ひっくり返しに描いてみます。上下をひっくり返すとは、射の向きを逆にすることで、圏論的な双対を取ることです。


|S

/ |
V / |S

/ |
V / |S



|S

V / |
/ |
○ |
V/ V\ |S

上の絵では、観測△が2回行われています。下では観測△が1回です。その代わり、下の絵では、得られた観測結果を対角余演算○でコピーしています。結合律の双対である余結合律は、これらが等しいことを主張します。

通常の等式で書けば:


上の絵:
△(s0) = (v1, s1) …… 1回目の観測
△(s1) = (v2, s2) …… 2回目の観測

下の絵:
△(s0) = (v1, s1) …… 1回だけの観測
○(v1) = (v1, v1) …… 観測値のコピー

等式:
(v1, v2) = (v1, v1)
つまり
v2 = v1 …… 2回目の観測値は1回目の観測値と等しい

2回観測して2個の観測値を得たものが、1回観測した値をコピーした2個に等しいので、結局、1回目の観測値と2回目の観測値は等しくなります。これは、何度観測しても同じ観測値が得られることを保証するので、観測が状態を壊してないことを意味します。正確に言えば、状態に影響を与えているかもしれませんが、その影響を当該の観測から判断することはできないのです。

「コモノイドと余加群」を、「値のコピーと観測」と解釈したときには、余結合律は「観測が古典的である」という主張になります。あるいは、プロパティ、アトリビュート、フィールドアクセス、変数参照、クエリーとかなんとか呼ばれる「読み出すだけの操作」が状態遷移を引き起こさないことを保証するとも解釈できます。

「もとの概念と双対概念は全然似てない!」と僕は強調してますけど、どうですか? 結合律と余結合律は似てましたか?

*1:日本語だと、演算(普通は二項演算)の双対を余演算といってもいいでしょうけど、operationにcoを付けると cooperation で別な意味の語になっちゃうなー。co-operation ? ダメっぽい。やっぱり co-multiplication ですかね。