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

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

ベキ等性のインチキ

プロビジョニングの文脈で言っているベキ等性(idempotence)がインチキくさい。おそらくインチキだろう。僕の感覚では、ベキ等に出来るわけがない。感覚でなくてちゃんと示したい。

状態空間があって、その上の自己射(endomorphism)からなるモノイドを、遷移を引き起こす代数として定式化している。そう意識してなくても、おそらくはそうだ。それで、自己射=作用の結合に対してベキ等性を云々している。

この定式化がそもそも間違いだ。作用(オペレーション)が単一の状態空間に働くと思っているのが違う。僕自身もそういう定式化が単純でいいと思っていた時期もあるが、現実はそうそう単純じゃない。over-simplifyは禁物だ。

状態空間ではなくて、個々の状態を対象にした圏を考える。可逆な変更だけを考えると亜群になる。もちろん非可逆な変更もあるので、全体が亜群になるわけではないが、部分圏として亜群があり、それはundoableな変更を射とするものだ。亜群は同値関係を定義するので、商集合として連結成分を考えることも出来る。

単一状態空間モデルと圏(特に部分亜群に注目する)モデルの違いをシリアスに考えることがポイントだ。圏モデルの射は、外延的に(あるいはdenotationalに)は射だが、その表現においては、域と余域が明確ではない。f:X→Y という射fの表現は、他の対象X'にも適用可能で、g:X'→Y' を定義可能になる。この現象を過剰適用可能性と呼ぶことにする。過剰適用可能性が、意図せぬ適用=トラブルを引き起こす。

射をdenotationalではなくて、その表現と共に内包的に考えると過剰適用可能性が生まれる。そして、作用の代数は「過剰適用可能なオペレーション」の代数なのだ。つまりは、作用の代数は必然的にトラブルを生む構造になっている。

トラブルの温床は、オペレーションの順序依存性だ。つまり、代数の非可換性だが、非可換でない代数=可換代数なんて現実的にはほぼ存在しない。可換状況は、悪い意味でトリビアルか何かの勘違いだ。

「ベキ等なら安全」と言っているのは観察が浅くって、実際には一群のオペレーションがすべて可換でないと安全ではない。特定のオペレーションがベキ等でも、ちっとも安全じゃない。単一オペレーションだけの世界なら安全と言えるが、単一オペレーションで閉じるなてあり得ない。

ある一群のオペレーション達が、それぞれベキ等で互いに可換なら安全と言える。しかし、問題は「ある一群のオペレーション」を制定する(区切る)ことで、これが事実上は不可能。未知のオペレーションが増える可能性は常にあるし、実際に当初は予想しなかったオペレーションが増える。そして可換性が壊れる。可換性が壊れると遅いもの勝ち後出しが勝つ世界となる。

要するに「ベキ等なら安全」というスローガンは屁のツッパリにもならない。むしろ、事前に非可換性=競合を検出して、手動で人間がなんとかするほうが有効そうだ。ただし、非可換性の検出が難しい。コード解析でやるには、前もって形式的にキチンと設計された言語が必要だ。現存の言語ではまず無理。実験で調べるには、サンドボックスされていながら本番と同じ環境が必要だ。

僕が実際に経験した、PATH環境変数の先頭の奪い合いとかは、うまくいきっこないイイ事例だろう。