プログラムの行列計算 その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
という公式が成立する。これは計算すれば自明だが、ものすごく役に立つ。
ここで出てくる行列は、エンドポイントをインデックスとしてスクリプトコード(プログラム)を係数値とする行列であり、行列計算がプログラムの合成/実行に対応する。
ポートインデックスをどう扱うか?を考えないといけない。