リレーショナルパラメトリック性はどのように動機付けられますか?


15

パラメトリック多型の関係セマンティクスの本質を理解する自然な方法はありますか?

ジョン・レイノルズの「タイプ、抽象化、およびパラメトリック多相性」などの関係パラメトリックの概念について読み始めたばかりで、関係セマンティクスがどのように動機付けられているのか理解するのに苦労しています。セットセマンティクスは私にとって完全に理にかなっており、セットセマンティクスはパラメトリック多相性を説明するには不十分ですが、リレーショナルセマンティクスへの飛躍は魔法であり、どこからともなく現れるようです。

「基本型と用語の関係を仮定し、派生用語の解釈は、プログラミング言語の...そのような自然なものの間の自然な関係である」という線に沿ってそれを説明する方法はありますか「?または他の自然な説明はありますか?

回答:


22

リレーショナルパラメトリックは、ジョンレイノルズが紹介する最も重要なアイデアの1つであるため、魔法のように見えることはそれほど驚くべきことではありません。ここに彼がどのようにしてそれを発明したかについてのおとぎ話があります。

特定の関数(同一性、マップ、フォールド、リストの反転)が「多くのタイプで同じように」作用するという考えを形式化しようとしている、つまり、パラメトリック多態性に関するいくつかの直感的な考えがあり、いくつかの規則を策定したとしますそのようなマップ、すなわち、多相λ計算またはその初期の変形を作成するため。素朴な集合論的セマンティクスが機能していないことに気付きます。

例えば、我々は、タイプを凝視

X:Type.XX,
唯一のアイデンティティ・マップが、ナイーブセット論的意味を含むべきかなど、不要な機能でき
λX:Type.λa:X.if (X={0,1}) then 0 else a.
この種のことを排除するには、関数にさらに条件を課す必要があります。例えば、我々はいくつかのドメイン理論を試みることができる:各セットの装備X半順序でXとすべての機能が単調であることが必要です。しかし、上記の不要な関数は、Xに応じて定数または恒等式であり、それらは単調なマップであるため、それはそれを完全にカットしません。

半順序は、反射的、推移的、非対称です。構造の変更を試みることができます。たとえば、厳密な半順序、線形順序、同値関係、または単に対称関係を使用することができます。ただし、それぞれの場合に、いくつかの望ましくない例が忍び込んでいます。たとえば、対称関係は不要な機能を排除しますが、他の不要な機能(運動)は許可します。

そして、次の2つのことに気付きます。

  1. 欲しかったの例では、部分的な注文の代わりに使用どんな関係、排除されることはありません
  2. 探している特定の不要な例ごとに、それを排除する関係を見つけることができますが、それらすべてを排除する単一の関係はありません。

したがって、必要な関数はすべての関係を保持する関数であるという素晴らしい考えがあり、関係モデルが生まれます。


1
Andrejに感謝します。これはさらに疑問を提起します:不要な例をすべて排除する関係の小さなサブクラスはありますか?
トム・エリス

計算可能なマップだけを心配する必要があるので、おそらくリレーションの論理的な複雑さを制限できます。しかし、私は答えるのに十分な専門家ではありません。@UdayReddyを呼び出します。
アンドレイバウアー

2
@TomEllis。はい、特別な場合には、関係のサブクラスで十分です。最も直接的な特殊なケースは、すべての操作が1次である場合、関数(合計、単一値の関係)で十分であるということです。フィールドの場合、部分同型で十分です。レイノルズの代表的な例は複素数の分野であり、ベッセルとデカルトの間の論理的な関係は部分同型であることを思い出してください。
ウダイレディ

4
@AndrejBauer。なおはパラメーター要素が1つだけありますが、アドホック要素が多すぎてセットを形成できません!そのため、やるべきことがたくさんあります。レイノルズがどのようにパラメトリック性を獲得したかについての代替理論は、今後の「レイノルズのエッセンス」に登場します。バツバツバツ
ウダイレディ

型をセットとして解釈すると、不要な関数があることを示します。同じことが関係にも当てはまりませんか?\X:Type. \a:X. if X = {(0,0), (1,0), (0,1), (1,1)} then 0 else a
ジュール14

11

あなたの質問に対する答えは、レイノルズのable話(セクション1)にあります。それをあなたのために試して解釈させてください。

型が抽象化として扱われる言語または形式主義では、型変数はあらゆる抽象概念を表すことができます。型は、型用語の構文、または型演算子の固定コレクションを介して生成されると仮定したり、2つの型の等価性などをテストできるとは想定していません。関数がそのタイプの値に対してできることは、与えられた値をシャッフルすることです。そのタイプの新しい値を発明することはできません。なぜなら、そのタイプが何であるかを「知らない」からです!それはパラメトリック性の直感的な考え方です。

その後、レイノルズはこの直感的なアイデアを数学的に捉える方法について考え、次の原則に気付きました。、我々は型変数をインスタンス化したと言う言う、二つの異なるコンクリートの型に、AおよびAの"別のインスタンスに、そして私たちの心の中でいくつかの対応保つR A A " 2つの具象タイプの間を。その後、我々は一例では、我々は、値を提供する、ことを想像することができ、X Aの他のインスタンス内の関数と、に対応する値X 'A ' (ここで、「対応する」とは、X及びtAARAAバツAバツAバツ Rによって関連付けられます)。次に、関数は、 tに提供する型またはその型の値について何も知らないため、 x x をまったく同じ方法で処理する必要があります。したがって、関数から得られる結果は、心に留めてある関係 Rによって再び対応する必要があります。つまり、要素 xが1つのインスタンスの結果に現れる場合は常に、要素 x 'が他のインスタンスに現れる必要があります。したがって、パラメトリック多相関数は、型変数の可能なインスタンス化の間のすべての可能な関係対応を保持する必要がありますバツRtバツバツRxx

通信の保存というこの考え方は新しいものではありません。数学者はそれについて長い間知っています。最初の例では、多型関数は型のインスタンス化の間で同型を保存する必要があると考えました。同型とは、1対1の対応のアイデアを意味することに注意してください。どうやら、同型はもともと「準同型」と呼ばれていました。そして彼らは、私たちが現在「準同型」と呼んでいるもの、つまり、多対1の通信のいくつかのアイデアも保存されることに気づきました。このような保存は、カテゴリー理論における自然な変換の名前によって行われます。しかし、それについて鋭く考えると、準同型の保存はまったく不満足であることがわかります。タイプおよびA AA言及したのは完全にcompletely意的です。私たちが選択した場合通りA "およびA "としてA、我々は同じプロパティを取得する必要があります。それでは、非対称の概念である「多対1の対応」が対称特性の定式化に役割を果たすのはなぜですか?したがって、レイノルズは準同型から多対多の対応である論理関係に一般化する大きな一歩を踏み出しました。この一般化の完全な影響はまだ完全には理解されていません。しかし、根底にある直感はかなり明確です。AAAA

ここにはもう1つ微妙な点があります。型変数のインスタンス化は任意に変更できますが、定数型は固定したままにしてください。したがって、変数型と定数型の両方を持つ型式の関係対応を定式化する場合、型変数が現れる場所では選択された関係使用し、定数型Kが現れる場所では恒等関係I Kを使用する必要があります。例えば、タイプのための関係式T × I N T I 、N T × TであろうR × I I N TI IRIKKt×IntInt×t。したがって、fがこのタイプの関数である場合、ペアxnと関連 x nをあるペアmxと関連m x )にマッピングする必要がありますR×IIntIInt×Rf(x,n)(x,n)(m,x)(m,x)。2つのケースで定数型に同じ値を設定して関数をテストする必要があり、出力の定数型に同じ値を取得することが保証されていることに注意してください。したがって、型式の関係対応を定式化する際に、ID関係(これらの型が定数になるという考えを表す)をプラグインすることにより、ID関係、つまり。これは重要なID拡張ですF(IA1,,IAn)=IF(A1,,An) プロパティ。

パラメトリック性を直感的に理解するために必要なことは、いくつかのサンプル関数タイプを選択し、それらのタイプでどの関数を表現できるかを考え、タイプ変数の異なるインスタンス化とそれらの異なる値をプラグインした場合のそれらの関数の動作を考えることですインスタンス化タイプ。始めるためにいくつかの関数タイプを提案しましょう: t I n t I n t t t × t t × tt t tttttIntInttt×tt×t(tt)t(tt)(tt)


最後に、私の召喚は働いた!
アンドレイバウアー

2
@AndrejBauer。うーん、私は実際に召喚を受けなかった。@ UdayReddyの呪文は、コメントの先頭でのみ機能する可能性があります。いずれにせよ、召喚は必要ありません。「パラメトリック」は私のフィルターの1つです。
ウダイレディ

「関数がそのタイプの値に対してできることは、与えられた値をシャッフルすることだけです」-実際には、シャッフルとは別に、関数は与えられた値を消去(弱化)し、コピー(収縮)することができます。これらの操作は常に利用できるため、値は見かけほど抽象的ではありません。
ルカシュルー

@ŁukaszLew、あなたは正しい。しかし、それが「抽象化」の損失として特徴付けられるかどうかはわかりません。
Uday Reddy

@UdayReddyこの表彰を削除し、スタンドアロンの質問としてこれ尋ねました
ルカシュルー

3

ω

さらに、同じ拡張動作を持つ関数を特定したいので、等価関係になります。「未定義」の関数、つまり何らかの整形式入力に対して「ループ」する関数を除外すると、関係は部分的です。

PERモデルはこれを一般化したものです。

これらのモデルを見る別の方法は、ホモトピー型理論の単体集合モデルの(非常に)特別な場合です。そのフレームワークでは、型は(の一般化)、関係を持つセット、およびそれらの関係間の関係などとして解釈されます。最低レベルでは、PERモデルのみがあります。

最後に、建設的な数学の分野では、関連する概念の出現が見られました。特に、司教の集合論は、等価である必要のある要素と明示的な等価関係の両方を与えることによって集合を記述することを含みます。建設的な数学のいくつかの原則が型理論に進むことを期待するのは自然です。


1
ああ、しかし、PERモデルはあまり良くなく、無数の多相関数を含むことができます。それらを取り除くためにリレーショナルPERモデルに渡す必要があります。
アンドレイバウアー

それでも、リレーショナルアプローチをやる気にさせると感じています。
コーディ

@cody。同意する。PERは、「セット理論」に関係を構築する方法であり、そもそも含意モデルを得ることができると思います。ホモトピー型理論に言及してくれてありがとう。似たようなアイデアがあることは知りませんでした。
Uday Reddy

@UdayReddy:アイデアは非常に似ています!特に、抽象型を依存関係に関連付ける「互換性のある依存実装」の概念は、一価の等価性のレンズを通して理解できます。
コーディ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.