Jawaban atas pertanyaan Anda benar-benar ada dalam dongeng Reynolds (Bagian 1). Biarkan saya mencoba dan menafsirkannya untuk Anda.
Dalam bahasa atau formalisme di mana jenis diperlakukan sebagai abstraksi , variabel jenis dapat berdiri untuk konsep abstrak apa pun. Kami tidak berasumsi bahwa tipe dihasilkan melalui beberapa sintaksis istilah tipe, atau kumpulan tetap dari operator tipe, atau bahwa kami dapat menguji dua tipe untuk kesetaraan, dll. Dalam bahasa seperti itu, jika suatu fungsi melibatkan variabel tipe maka satu-satunya hal fungsi yang dapat dilakukan untuk nilai-nilai jenis itu adalah untuk mengacak nilai-nilai yang telah diberikan. Itu tidak dapat menemukan nilai baru dari tipe itu, karena ia tidak "tahu" apa tipe itu! Itu adalah ide intuitif parametrik .
Kemudian Reynolds berpikir tentang cara menangkap ide intuitif ini secara matematis, dan memperhatikan prinsip berikut. Misalkan kita instantiate variabel tipe, katakan , untuk dua tipe konkret yang berbeda, katakanlah A dan A ′ , dalam instantiasi terpisah, dan ingat beberapa korespondensi R : A ↔ A ′ antara dua tipe konkret. Maka kita dapat membayangkan bahwa, dalam satu contoh, kami memberikan nilai x ∈ A ke fungsi dan, dalam contoh lain, nilai yang sesuai x ′ ∈ A ′ (di mana "sesuai" berarti bahwa x dantAA′R:A↔A′x∈Ax′∈A′x terkait dengan R ). Kemudian, karena fungsi tidak tahu apa-apa tentang tipe yang kami berikan untuk t atau nilai dari tipe itu, ia harus memperlakukan x dan x ′ dengan cara yang persis sama. Jadi, hasil yang kita dapatkan dari fungsi harus kembali sesuai dengan hubungan R yang telah kita ingat, yaitu, di mana pun elemen x muncul dalam hasil satu instance, elemen x ′ harus muncul di instance lain. Dengan demikian,fungsi polimorfik parametrik harus menjaga semua korespondensi relasional yang mungkin antara instantiasi variabel tipe yang mungkin.x′Rtxx′Rxx′
Gagasan pelestarian korespondensi ini bukanlah hal baru. Matematikawan telah mengetahui hal itu sejak lama. Dalam contoh pertama, mereka berpikir bahwa fungsi polimorfik harus mempertahankan isomorfisma antara instantiasi tipe. Perhatikan bahwa isomorfisme berarti gagasan korespondensi satu-ke-satu . Rupanya, isomorfisma pada awalnya disebut "homomorfisme". Kemudian mereka menyadari bahwa apa yang sekarang kita sebut "homomorfisme", yaitu, gagasan korespondensi banyak-ke-satu , akan dipertahankan juga. Pelestarian seperti itu disebut transformasi alami dalam teori kategori. Tetapi, jika kita memikirkannya dengan sungguh-sungguh, kita menyadari bahwa pelestarian homomorfisme sama sekali tidak memuaskan. Tipe dan A ′AA′kami sebutkan sepenuhnya arbitrer. Jika kita memilih sebagai A ′ dan A ′ sebagai A , kita harus mendapatkan properti yang sama. Jadi, mengapa "korespondensi banyak-ke-satu", sebuah konsep asimetris, memainkan peran dalam merumuskan sifat simetris? Dengan demikian, Reynolds mengambil langkah besar untuk menggeneralisasi dari homomorfisme ke hubungan logis, yang merupakan korespondensi banyak-ke-banyak . Dampak penuh dari generalisasi ini belum sepenuhnya dipahami. Tetapi intuisi yang mendasarinya cukup jelas.AA′A′A
Ada satu kehalusan lebih lanjut di sini. Sedangkan instantiations variabel tipe dapat bervariasi sewenang-wenang, tipe konstan harus tetap. Jadi, ketika kita merumuskan korespondensi relasional untuk ekspresi tipe dengan kedua tipe variabel dan tipe konstan, kita harus menggunakan relasi yang dipilih mana pun variabel tipe muncul dan relasi identitas I K di mana pun tipe konstan K muncul. Misalnya, hubungan ekspresi untuk jenis t × I n t → Aku n t × t akan R × Saya I n t → I IRIKKt×Int→Int×t. Jadi, jikafadalah fungsi dari tipe ini, ia harus memetakan pasangan(x,n)dan yang terkait( x ′ ,n)ke beberapa pasangan(m,x)dan terkait(m, x ′ )R×IInt→IInt×Rf(x,n)(x′,n)(m,x)(m,x′). Perhatikan bahwa kami berkewajiban untuk menguji fungsi dengan menempatkan nilai yang sama untuk tipe konstan dalam dua kasus, dan kami dijamin untuk mendapatkan nilai yang sama untuk tipe konstan dalam output. Jadi, dalam merumuskan korespondensi relasional untuk ekspresi tipe, kita harus memastikan bahwa, dengan memasukkan hubungan identitas (mewakili gagasan bahwa tipe-tipe itu akan menjadi persetujuan), kita mendapatkan kembali hubungan identitas, yaitu, . Ini adalah perpanjangan identitas pentingF(IA1,…,IAn)=IF(A1,…,An) Properti.
Untuk memahami parametrik secara intuitif, yang perlu Anda lakukan adalah memilih beberapa tipe fungsi samplee, memikirkan fungsi apa yang bisa diekspresikan dari tipe-tipe itu, dan berpikir tentang bagaimana fungsi-fungsi itu berperilaku jika Anda mencolokkan instantiations yang berbeda dari variabel tipe dan nilai yang berbeda dari mereka. jenis instantiation. Izinkan saya menyarankan beberapa jenis fungsi untuk memulai: , 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)