Saya punya jawaban untuk pertanyaan ini yang mungkin novel. Bahkan, saya masih memikirkannya selama 6 bulan terakhir, dan itu belum ditulis di surat kabar.
Tesis umum adalah bahwa prinsip-prinsip penalaran relasional seperti "hubungan logis", "simulasi", dan bahkan "invarian" adalah manifestasi dari abstraksi data atau penyembunyian informasi. Di mana pun ada informasi yang disembunyikan, prinsip-prinsip ini akan muncul.
Orang pertama yang menemukannya adalah ahli teori automata. Automata memiliki status tersembunyi. Jadi, Anda perlu alasan relasional untuk berbicara tentang kesetaraan mereka. Ahli teori Automata berjuang dengan homomorfisme untuk sementara waktu, menyerah, dan muncul dengan gagasan yang disebut "penutup relasional", yang merupakan bentuk hubungan simulasi.
Milner mengambil gagasan itu dalam sebuah makalah yang sedikit diketahui tetapi sangat mendasar yang disebut " Gagasan aljabar simulasi antar program " pada tahun 1971. Hoare mengetahuinya dan menggunakannya untuk menghasilkan " Bukti kebenaran representasi data " pada tahun 1972 (tetapi digunakan fungsi abstraksi bukan hubungan karena dia pikir itu "lebih sederhana"). Dia kemudian mencabut klaim kesederhanaan dan kembali menggunakan hubungan dalam " Penyempitan data yang disempurnakan ". Reynolds menggunakan penalaran relasional dalam " Craft of Programming", Bab 5 (1981). Dia pikir hubungan lebih alami dan umum daripada fungsi abstraksi. Jika Anda kembali dan membaca bab ini, Anda akan menemukan ide-ide parametrisitas relasional yang mengintai, menunggu untuk ditemukan. Tentu saja, dua tahun kemudian, Reynolds menerbitkan "Jenis, abstraksi dan polimorfisme parametrik" (1983).
Sepertinya semua ide ini tidak ada hubungannya dengan tipe, tetapi mereka benar-benar melakukannya. Bahasa Stateful dan model telah built-in abstraksi data. Anda tidak perlu mendefinisikan "tipe data abstrak" untuk menyembunyikan informasi. Anda cukup mendeklarasikan variabel lokal dan menyembunyikannya. Kita bisa mengajarkannya kepada siswa tahun pertama di kelas-kelas Jawa dalam beberapa minggu pertama. Tanpa keringat.
Bahasa dan model fungsional, di sisi lain, harus menyembunyikan informasinya melalui tipe . Model fungsional tidak memiliki abstraksi data bawaan. Kita harus menambahkannya secara eksplisit, menggunakan atau . Jadi, jika Anda menerjemahkan bahasa stateful ke bahasa fungsional, Anda akan melihat semua keadaan lokal diterjemahkan ke dalam variabel tipe. Untuk deskripsi eksplisit tentang cara kerjanya, lihat makalah saya " Objek dan kelas dalam bahasa seperti Algol ", tetapi ide-ide itu benar-benar berasal dari Reynolds 1981 ("The Essence of Algol"). Kami hanya memahami ide-ide klasik yang lebih baik sekarang.∃∀∃
Ambil dua mesin dan yang ingin Anda buktikan setara. Milner 1971 mengatakan, mendefinisikan hubungan antara keadaan dan dan menunjukkan bahwa kedua mesin mempertahankan hubungan. Reynolds parametricity mengatakan, anggap keadaan mesin sebagai milik tipe dan . Tentukan hubungan antara mereka. Jika mesin-mesin dari tipe dan , parameter oleh jenis negara mereka, kemudian periksa bahwa dua mesin terkait oleh hubungan . M ′ M M ′ X X ′ R F ( X ) F ( X ′ ) F ( R )M.M.′M.M.′XX′RF( X)F( X′)F( R )
Jadi, simulasi dan parametrisitas relasional pada dasarnya adalah ide yang sama . Ini bukan hanya kemiripan yang dangkal. Yang pertama dibuat untuk bahasa stateful di mana ada abstraksi data bawaan. Yang terakhir dibuat untuk bahasa stateless di mana abstraksi data diperoleh melalui variabel tipe.
Lalu bagaimana dengan hubungan logis? Di permukaan, hubungan logis tampaknya menjadi ide yang lebih umum. Sedangkan parametrikitas berbicara tentang bagaimana menghubungkan variabel tipe dalam model yang sama, hubungan logis tampaknya menghubungkan tipe di berbagai model. (Dave Clarke menulis eksposisi yang brilian tentang ini sebelumnya.) Tetapi perasaan saya (dan masih perlu diperagakan) bahwa ini adalah contoh dari beberapa bentuk parametrikitas tipe yang lebih tinggi yang belum dirumuskan. Tetap disini untuk kemajuan lebih lanjut di bagian depan itu.
[Catatan ditambahkan] Koneksi antara hubungan logis dan simulasi dibahas dalam makalah kami baru-baru ini Hubungan logis dan parametrik: Program Reynolds untuk Teori Kategori dan Bahasa Pemrograman .