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

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

プロトキン/パワー風の状態とRDBとポインター

プロトキン/パワーの定式化自体は分かんなかったが、背景の一般概念のほうは利用価値がある。スピヴァックスキーマ理論とも関係する。

アドレスとは区別してロケーションというものを考える。アドレスがアドレス空間の“点”であるのに対して、ロケーションはアドレス空間の領域を指す。現実的には区間状の連続領域だが、それに制限することはない。ロケーションの全体をLocとする。例えば、Loc ⊆ Addr×N+ のように定義する。

型とスキーマを同一して、スキーマは図式=有向グラフとして定義して、頂点ラベルをソート記号、辺ラベルをカラムとかフィールドと呼ぶ。頂点を一個指定して、それを主ノードと呼ぶ。主ノードのラベルが他と重複はないとして、主ノードとそのラベルを同一視する。つまり、主ノードと主ソートは同じこと。

主キーまたは主ロケーションとは、Locを値にするフィールドで、単射であることを要求する。さらに、異なるロケーションはオーバーラップしてないとする。これは分離条件と呼ぶことにする。主ロケーションとは自分のロケーションと解釈する。主ロケーション=自ロケーション。

主ロケーション=自ロケーションを持つスキーマをテーブルスキーマまたはオブジェクトスキーマと呼ぶ。

主ロケーション以外にLoc値をとるフィールドは外部ロケーションと呼ぶ。外部ロケーションには分離条件を課さないが、オーバーラップがあるとろくな事がないのは事実。

アドレス空間を固定するとロケーションも固定される。そのロケーションに値を取るような複数のオブジェクトスキーマと関連する値スキーマを一緒にするとシステムスキーマができる。このスキーマの極限がシステムの合成イメージになるのだろう。

状態の更新

CRUD操作とはよく言ったものだ。「状態=主ノードの有限集合への割り当て」とする。有限集合の要素をレコードとかインスタンスと呼ぶ。状態の更新は次の基本操作の組み合わせで表現される。

  • creation : 余域側の有限集合に新しい要素が追加される。
  • read : 余加群の観測演算を実行する。
  • update : 加群の作用を実行する。
  • delete : 余域側の有限集合に以前の要素がなくなる。

値の集合Vはフロベニウス半群であり、次の演算を持つ。

  1. 定数の生成: 1→V
  2. 右自明半群演算: V×V→V
  3. 複製、対角: V→V×V
  4. 消去、破棄: V→1

対角(余乗法)と破棄(余単位)でコモノイドになるが、単位は要求してなくて、右自明演算は結合的なだけ。ステパノフが言っている正則型とは、フロベニウス半群だと思う。また、ステパノフの正則関数とは、フロベニウス半群の準同型と考えるべきだろう。

ロケーションモナド

アドレス空間には、セルの隣接関係が定義されているとする。隣接するセルの有限並びをロケーションと定義すると、Loc(A: Addr) はアドレス空間の圏のモナドになる。このモナドのクライスリ射をアドレス空間の射にすればよい。