トリガーが難しいワケ、力学とのアナロジー
ずっと以前から、ハイパーメディアに関して「トリガー」という言葉と概念を使っている。「ハイパーリンク」とか「アンカー」と言わずに、あえて「トリガー」と呼んでいたのにはワケがあるのだが、どうもそのへんがうまく説明できないでいた。
ハイパーメディア・オブジェクトをレイフィケーションしてみて、事情がかなりハッキリした。トリガーは、ハイパーメディア・オブジェクトに埋め込まれたデータなのだが、実はスキーマでもあった。より具体的に言うと、トリガーは「データ型定義=値の集合」を表現するデータなのだった。HTMLフォームなどを考えれば、まー明らかといえば明らかだが。
対話の状態を表す状態空間をAとして、Xがサービス空間(エントリーポイント全体の集合)のとき、A×V→X という非決定性写像がリクエストを表現するが、トリガーは、(a, W, x) (a∈A、W⊆V、x∈X)の3つ組だったのだ。トリガーのインスタンスにはWという集合が入る。だから、トリガーの集合には「集合の集合」が含まれることになる。つまり、トリガー型はカインドのようなものになる。
意味的には、トリガーインスタンスは型で、トリガー型は高階型だったのだ。だから分かりにくい。メタオブジェクトやレイフィケーションを普通に使えるようにならないと、ここらへんの状況を正確に掴まえるのは難しいだろう。
逆に言えば、ハイパーメディアの機能と構造をちゃんと理解したいなら、メタオブジェクト、レイフィケーション、高階型などに慣れないとダメだ。ハイパーメディアを出力する関数(我々の言葉ではアクション)は、トリガー(の集合)を出力するのだから、型の集合を戻り値としていたわけだ。高階データを戻り値にするような高階関数だったのだ。
アクションの出力は、高階データだが、それは実は、状態遷移系の半遷移を担うチャンクでもある。状態遷移系がファイバー束のような構造を持つので、一点の上のファイバー(の部分空間)を出力していたのだ。ファイバー方向の自由度の記述がトリガーだった。
力学とのアナロジーで言えば、トリガーは一点に付随する接空間(余接空間か?)の部分空間のようなものだ。運動にともなって、運動の可能性である局所空間が登場して、全体としてファイバー構造を定義する。http://en.wikipedia.org/wiki/Distribution_%28differential_geometry%29 と似た感じだ。
1個のトリガーは、基点と遷移ラベルの集合(全ラベルの集合の部分集合)、それとターゲットの組となる。遷移ラベルの集合+ターゲットが、接空間の部分集合に相当する。トリガーが複数なら、複数の部分集合が登場するからそれらの合併を取る。
この接バンドルとのアナロジーはかなり良い。力学的で分かりやすい。接ベクトル空間(の部分集合)は、可能な無限小移動の候補(これがトリガー)となる。実際の無限小移動(リクエスト)を行うと、“次の”接ベクトル空間(レスポンスのハイパーメディア)が登場する。