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

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

プログラムの行列計算 その0

とりあえず、クライアント/サーバーのときの事実をメモしておく。

Cはクライアント側エンドポイント(状態、境界オブジェクト)の集合、Sはサーバー側エンドポイント(アクション、コントロールオブジェクト)の集合とする。CとSは排他的になっている。

CとSを頂点集合とする有向二部グラフを考える。有向二部グラフを記述する行列を Q:C→S、P:S→C とする。ちょっと工夫すれば、リダイレクトや(サーバー内の)フォーワードがあっても二部グラフの記述に持ち込める。

行列はラベル付き辺を記述する。ラベル付き辺に対して、ラベル(記号)の連接によって成分(係数)の積を定義する。和は、プログラムコードの多方向分岐か、単なる集合(集合を非決定性プログラムと考える)で入れる。係数に(非可換な)積と和があるので、行列計算はできる。

この行列計算の枠内で、I0はクライアン側の開始状態集合(Cの空でない部分集合)を識別する行列とする。

  • T(n) = I0;(Q;P)n

と定義する。L = P;Q だとすると、

  • T(n+1) = Q0;Ln;P

という公式が成立する。これは計算すれば自明だが、ものすごく役に立つ。

ここで出てくる行列は、エンドポイントをインデックスとしてスクリプトコード(プログラム)を係数値とする行列であり、行列計算がプログラムの合成/実行に対応する。

ポートインデックスをどう扱うか?を考えないといけない。