Conor McBrideの作品の一部であるDiff、Dissectは、データ型の導関数を「ワンホールコンテキストの型」に関連付けます。つまり、型の導関数を取得すると、任意の時点で内部からデータ型がどのように見えるかを示すデータ型が残ります。
したがって、たとえば、リストがある場合(Haskellに)
data List a = [] | a : List a
これは
data List a = 1 + a * List a
少し数学的な魔法を通して、導関数は
data ListDeriv a = List a * List a
これは、リスト内の任意の時点で、左側にリストがあり、右側にリストがあることを意味すると解釈されます。派生データ構造を使用して、元のリストを圧縮できます。
今、私はグラフで似たようなことをすることに興味があります。グラフの一般的な表現は、頂点とエッジのセットです。これらは、次のようなデータ型で単純に実装できます。
data Gr a b i = Gr [(i,a)] [(i,i,b)]
私がそれを正しく理解していれば、グラフのインデックスに関するこのデータ型の導関数はi
次のようになります。
data GrDeriv a b i = d/di (Gr a b i)
= d\di ( [a*i] * [b*i^2] )
= (d\di [a*i]) * [b*i^2] ) + [a*i]*(d/di [b*i^2])
= (a* [a*i] * [a*i]) * [b*i^2] )
+ [a*i] * (2*b*i) *[b*i^2]*[b*i^2])
= InNodes { nodesLeft :: [(a,i)]
, nodeLbl :: a
, nodesRight :: [(a,i)]
, edges :: [(b,i,i)] }
| InEdges { nodes :: [(a,i)]
, adjNode :: Either (b,i) (b,i)
, edgesLeft :: [(b,i,i)]
, edgesRight :: [(b,i,i)] }
これは、デリバティブのプロダクトルールとチェーンルールを使用することで得られました。おそらくいくつかのエラーはありますが、一般的なスキームに従っているようです。この構造では、ノード(InNodesコンストラクター)またはエッジ(エッジ内)に焦点を合わせ、関連データが表示される場所を指定します。
しかし、これは私が望んでいたことではありません。Martin Erwigs Functional Graph Libraryのインターフェースにより密接に関連する構成体を期待していました。具体的には、ノードのラベルと、発信用と着信用の2つの隣接リストを表すコンテキストをノードで表示したいと思います。
Node a b = ([(i,b)],a,[(i,b)])
ただし、隣接関係の表現にはa
、各穴の位置での派生物、孤立したラベル、各エッジの隣接関係の表現/解剖と共通の用語があるため、希望があります。
導関数は元のものと同じ関数ではないが、導関数の統合は(kindof)であるため、導関数をノードコンテキストのコレクションに変換するのに役立つ何らかの統合アナログがありますか?元の構造を復元するための直接的な統合ではなく、元の構造と同等ですが、よりアルゴリズムに適した表現の構造です。
存在する場合、リレーションシップタイプ構造が簡単な「頂点とエッジのセット」言語で指定でき、その構造を操作するための効率的なライブラリを導出できることを願っています。このような実装は、「グラフ理論を超えて」構造を研究するために使用できます:ハイパーグラフ、単体の複合体...
そう。このアイデアは実現可能ですか?有用?この種のことについて、私がもっと読むことができる研究はありましたか?
補遺
Curtis Fがコメントしたように、ノードとエッジのセットは正確なグラフではありません。ただし、すべてのグラフはそのように表すことができ、十分に一般的な表現であることがわかります。私は、さまざまな方法で無線ネットワークの最適化にグラフ理論を適用する研究で使用される(非常に粗い仕様)を見てきました。以下は、オープンアクセスの例、DRAND *です。これにより、プレゼンテーションと、研究に基づいてソフトウェアを実装する方法との間のリンクは何かという疑問が生じます。
そうは言っても、入力仕様をから他の何かに変更することに完全に反対するわけではありません。たとえば、インデックスタイプI、ノードラベルV、エッジラベルEを指定します。その場合、グラフは(およそ)インデックスからラベルおよびエッジリストへの関数です。
これは、次のように表現できると確信しています(カテゴリー理論?)
または
私はそれがいくらかの約束を示すと思うが、私はさらに進むために洗練されていない。接続をさらに調査するための作業が必要だと思います。
*リンクが切れた場合、引用:リー、インジョンなど 「DRAND:ワイヤレスアドホックネットワーク用の分散ランダム化TDMAスケジューリング」。IEEE Transactions on Mobile Computing 8.10(2009):1384-1396。