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

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

トリガーが難しいワケ、力学とのアナロジー

ずっと以前から、ハイパーメディアに関して「トリガー」という言葉と概念を使っている。「ハイパーリンク」とか「アンカー」と言わずに、あえて「トリガー」と呼んでいたのにはワケがあるのだが、どうもそのへんがうまく説明できないでいた。

ハイパーメディア・オブジェクトをレイフィケーションしてみて、事情がかなりハッキリした。トリガーは、ハイパーメディア・オブジェクトに埋め込まれたデータなのだが、実はスキーマでもあった。より具体的に言うと、トリガーは「データ型定義=値の集合」を表現するデータなのだった。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個のトリガーは、基点と遷移ラベルの集合(全ラベルの集合の部分集合)、それとターゲットの組となる。遷移ラベルの集合+ターゲットが、接空間の部分集合に相当する。トリガーが複数なら、複数の部分集合が登場するからそれらの合併を取る。

  • トリガー ⇔ 接空間の部分集合
  • リクエスト ⇔ 接ベクトル
  • リクエストの実行 ⇔ 接ベクトルに沿った移動
  • レスポンス ⇔ 移動後の接空間の部分集合

この接バンドルとのアナロジーはかなり良い。力学的で分かりやすい。接ベクトル空間(の部分集合)は、可能な無限小移動の候補(これがトリガー)となる。実際の無限小移動(リクエスト)を行うと、“次の”接ベクトル空間(レスポンスのハイパーメディア)が登場する。