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

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

ハイパーリンクの正体を見つけたぞ!

ダーーーッ、やっとわかった。

やっとわかった。やっとわかったよぉ。

ハイパーリンクまともな定式化を探し始めたのはいつだ? 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内にあるのではない。

状態遷移グラフ

次のような状況証拠はあった。

  1. レスポンスはクライアント側状態のように思える。
  2. ハイパーリンクが状態遷移を記述しているように思える。
  3. ハイパーオブジェクト、トリガー、リクエスター、アクションなどの概念はそれなりに有意義。

これらの現象の背景をはっきりさせたい。

Gを有向グラフとして、φ:G→Link(C, Q, S) をグラフ写像とする。この表現は“はしょっている”から、もうちょい正確に言えば:

  1. vがグラフGの頂点のとき、φ(v)∈S 。
  2. eがグラフGの辺のとき、φ(e)∈Link(C, Q, S) 。
  3. 辺の接続関係などは自然に定義する。

この定式化で、ハイパーリンクによるナビゲーションの挙動は説明できる。より詳細な分析をするには、次のような圏を使う。

  1. 今導入したグラフ写像 φ:G→Link(C, Q, S) を対象とする。
  2. φ, ψ:G→Link(C, Q, S) の射は、自然変換のグラフ版で定義する。グラフに自然性の概念はないが、Cに落ちたときの自然性は要求すべきかもしれない(わからん)。
  3. グラフGをインデックスとするindexed圏を作る。
  4. グロタンディーク平坦化をする。

拡張状態遷移グラフ

上の構成では、Link(C, Q, S) を有向グラフと見るとき、頂点集合はSとしてきた。これでは不十分で、Qも頂点集合に加えた有向グラフが必要になる。さらに、φ:G→Link(C, Q, S) の具体的な構成法や、グラフの接着の方法。多圏とGoI構成などの問題がある。

これらを定式化すれば、拡張された状態遷移も記述できるだろう。先は長いが、とりあえず出発点はわかった。