あなたの質問に対する答えは、レイノルズのable話(セクション1)にあります。それをあなたのために試して解釈させてください。
型が抽象化として扱われる言語または形式主義では、型変数はあらゆる抽象概念を表すことができます。型は、型用語の構文、または型演算子の固定コレクションを介して生成されると仮定したり、2つの型の等価性などをテストできるとは想定していません。関数がそのタイプの値に対してできることは、与えられた値をシャッフルすることです。そのタイプの新しい値を発明することはできません。なぜなら、そのタイプが何であるかを「知らない」からです!それはパラメトリック性の直感的な考え方です。
その後、レイノルズはこの直感的なアイデアを数学的に捉える方法について考え、次の原則に気付きました。、我々は型変数をインスタンス化したと言う言う、二つの異なるコンクリートの型に、AおよびAの"別のインスタンスに、そして私たちの心の中でいくつかの対応保つR :A ↔ A " 2つの具象タイプの間を。その後、我々は一例では、我々は、値を提供する、ことを想像することができ、X ∈ Aの他のインスタンス内の関数と、に対応する値X ' ∈ A ' (ここで、「対応する」とは、X及びtAA′R :A ↔ A′X ∈ Aバツ′∈ A′バツは Rによって関連付けられます)。次に、関数は、 tに提供する型またはその型の値について何も知らないため、 xと x ′をまったく同じ方法で処理する必要があります。したがって、関数から得られる結果は、心に留めてある関係 Rによって再び対応する必要があります。つまり、要素 xが1つのインスタンスの結果に現れる場合は常に、要素 x 'が他のインスタンスに現れる必要があります。したがって、パラメトリック多相関数は、型変数の可能なインスタンス化の間のすべての可能な関係対応を保持する必要があります。バツ′Rtバツバツ′Rxx′
通信の保存というこの考え方は新しいものではありません。数学者はそれについて長い間知っています。最初の例では、多型関数は型のインスタンス化の間で同型を保存する必要があると考えました。同型とは、1対1の対応のアイデアを意味することに注意してください。どうやら、同型はもともと「準同型」と呼ばれていました。そして彼らは、私たちが現在「準同型」と呼んでいるもの、つまり、多対1の通信のいくつかのアイデアも保存されることに気づきました。このような保存は、カテゴリー理論における自然な変換の名前によって行われます。しかし、それについて鋭く考えると、準同型の保存はまったく不満足であることがわかります。タイプおよびA ′AA′言及したのは完全にcompletely意的です。私たちが選択した場合通りA "およびA "としてA、我々は同じプロパティを取得する必要があります。それでは、非対称の概念である「多対1の対応」が対称特性の定式化に役割を果たすのはなぜですか?したがって、レイノルズは準同型から多対多の対応である論理関係に一般化する大きな一歩を踏み出しました。この一般化の完全な影響はまだ完全には理解されていません。しかし、根底にある直感はかなり明確です。AA′A′A
ここにはもう1つ微妙な点があります。型変数のインスタンス化は任意に変更できますが、定数型は固定したままにしてください。したがって、変数型と定数型の両方を持つ型式の関係対応を定式化する場合、型変数が現れる場所では選択された関係使用し、定数型Kが現れる場所では恒等関係I Kを使用する必要があります。例えば、タイプのための関係式T × I N T → I 、N T × TであろうR × I I N T → I IRIKKt×Int→Int×t。したがって、fがこのタイプの関数である場合、ペア(x、n)と関連( x ′、n)をあるペア(m、x)と関連(m、 x ′)にマッピングする必要がありますR×IInt→IInt×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 × t、(t → t )→ t、(tt→tt→IntInt→tt×t→t×t(t→t)→t。(t→t)→(t→t)