ハイパーリンクの正体を見つけたぞ!
ダーーーッ、やっとわかった。
やっとわかった。やっとわかったよぉ。
ハイパーリンクのまともな定式化を探し始めたのはいつだ? 1年はたってないかな?過去エントリーは本編の「Webサービスの設計:リンク集+お絵描きWeb設計 - 檜山正幸のキマイラ飼育記」にまとめてある。「Webサービスを設計するための単純明快な方法」は2010年の7月だが、「CSSセレクタによるデータ抽出」とかは2010年3月; 今の言葉で言えばDOMのパートを扱おうとしていたのだよな。去年の3月くらいからとしても、十ヶ月以上。ハァー。
分かってしまえば、分からなかった自分がバカとしか言いようがない。
圏論的なモデル
まず、ベースとなる圏Cから出発する。Cは型を対象として、不純かも知れない計算処理(computational processing)を射とする圏。対象類の2つの部分集合 Q, S⊆|C| を固定する。QはreQuest、SはreSponseのつもり。Q∩R は空だとする(分離している)。このような3つ組 (C, Q, S) が素材となる。
記述の都合により、圏の対象も射も小文字で表す。q∈Q, s∈S に対するCの射 f:q→s をアクションと呼ぶ。アクションの全体はCの部分グラフにはなるけれど部分圏にはならない(これ重要) いちおう部分圏になる、とても使いにくいけど。同様に、q∈Q, s∈S に対するCの射 g:s→q をオパクション(op-action)と呼ぶ。アクションの全体、オパクションの全体を Act(C, Q, S), Opa(C, Q, S) と書く。
アクションはサーバー側処理、オパクションはクライアント側処理を表現する。特に、トリガーデータ+リクエスト生成器はオパクションを定義する。
オパクション g:r→q とアクション f:q→r' の組 (g, f) をリンクと呼ぶ。gとfはCで結合可能だが、結合した射 g;f in C がリンクなのではない。記号的に構成した射の組をリンクと呼ぶ。便宜的に (g, f):r→r' と書く(くどいが、こう書いても射を意味しない)。リンクの全体を Link(C, Q, S) と書く。これはCの部分グラフでさえなくて、頂点集合をSとして作ったグラフになる。下部構造に (C, Q, S) を持つが、LinkがC内にあるのではない。
状態遷移グラフ
次のような状況証拠はあった。
これらの現象の背景をはっきりさせたい。
Gを有向グラフとして、φ:G→Link(C, Q, S) をグラフ写像とする。この表現は“はしょっている”から、もうちょい正確に言えば:
- vがグラフGの頂点のとき、φ(v)∈S 。
- eがグラフGの辺のとき、φ(e)∈Link(C, Q, S) 。
- 辺の接続関係などは自然に定義する。
この定式化で、ハイパーリンクによるナビゲーションの挙動は説明できる。より詳細な分析をするには、次のような圏を使う。
- 今導入したグラフ写像 φ:G→Link(C, Q, S) を対象とする。
- φ, ψ:G→Link(C, Q, S) の射は、自然変換のグラフ版で定義する。グラフに自然性の概念はないが、Cに落ちたときの自然性は要求すべきかもしれない(わからん)。
- グラフGをインデックスとするindexed圏を作る。
- グロタンディーク平坦化をする。
拡張状態遷移グラフ
上の構成では、Link(C, Q, S) を有向グラフと見るとき、頂点集合はSとしてきた。これでは不十分で、Qも頂点集合に加えた有向グラフが必要になる。さらに、φ:G→Link(C, Q, S) の具体的な構成法や、グラフの接着の方法。多圏とGoI構成などの問題がある。
これらを定式化すれば、拡張された状態遷移も記述できるだろう。先は長いが、とりあえず出発点はわかった。