昨日の記事「交替律の色付き絵」にて:
最近、分合律だけではうまくいかない状況があったのですが、交替律(interchange law)は成立している模様でした。
- A*B + C*D → (A # C)*(B + D)
トランザクションと例外を混ぜた計算のとき、この法則が使えます。
興味を持つ人がいるとは思えないけど、備忘メモを自分のために書いておこうかな、と。
掛け算の記号に×、足し算の記号に+を使いますが、必ずしも直積と直和とは限りません。圏C上に2つのモノイド積×, +があるか、あるいは (C, +) がモノイド圏で、別のモノイド圏 (A, +) がCに作用している(A→End(C) がある)状況を考えます。
赤を×、青を+として、上から下に絵を見ていけば:
- (A×B) + (C×D) → (A + C)×(B + D)
逆方向に下から上なら:
- (A + C)×(B + D) → (A×B) + (C×D)
とりあえず、上から下に見ることにして、(C×)をD側にくっつけて、(+C)をA側にくっつけます。
“極限”として、Cの存在が消えてしまうようにします。つまり、C×D = D、A + C = A です。これが成立するためには、Cが、「×の単位」でもあり「+の単位」でもあればよいでしょう。Cがそうゆう、2つのモノイド積(またはモノイド積と作用)の共通の単位とすれば、次が成立します。
- (A×B) + D → A×(B + D)
逆方向(下から上)の議論をするなら:
- A×(B + D) → (A×B) + D
すぐ上の式は分合律(dissociative law, linearly distributive law)です。
2つのモノイド積(またはモノイド積と作用)に共通の単位対象があるような状況だと、交替律の特殊ケースとして分合律またはその逆向きが出てきます。この分合律(テンソル強度の一種)は、環境(コンテキスト)を持つ計算と例外処理を組み合わせるときに出てくるものです。
分合律が交替律の特殊ケース(退化形)であるならば、イミュータブルな環境をミュータブルな環境の特殊ケースとして捉えられるのではないかと予想できます。ちゃんと確認してないので、勘違いの可能性もありますけどね。
もし予想のとおりなら、ミュータブルな環境における計算もイミュータブルな場合の拡張として似た扱いができます。特に、ストレージIOを含む例外付き計算の一般化クライスリ圏が、イミュータブルな場合の自然な拡張として作れるはずです。作れたらいいな … 。