Sayangnya "polaritas" adalah konsep yang agak kelebihan dalam teori tipe. "Posisi positif" dan "posisi negatif" merujuk pada gagasan polaritas yang berbeda dari yang dibicarakan Bob dengan fokus / polarisasi.
Makna Anda
Saat Anda mendefinisikan jenis induktif Anda memberikan serangkaian aturan yang sesuai dengan operasi untuk jenis yang Anda tetapkan. Misalnya Anda mungkin mengatakan Nat
sesuatu dengan
- sebuah nilai
zero : Nat
- sebuah fungsi
suc : Nat -> Nat
Dan kemudian berharap itu Nat
berisi semua nilai yang dapat dihasilkan dari penerapan berulang kali suc
ke yang lain Nat
dan termasuk zero
. Sejalan dengan konstruksi induktif ini kita mendapatkan prinsip rekursi Nat
yang bekerja berdasarkan fakta bahwa ada Nat
yang dihasilkan oleh konstruktor tersebut.
rec : A -> (A -> A) -> Nat -> A
maka
rec Z S zero = zero
rec Z S (suc n) = S (rec Z S n)
Namun, ada beberapa batasan pada apa yang bisa kita tulis sebagai aturan. Kalau tidak, kita bisa menulis serangkaian aturan yang prinsip rekursi tidak bisa dibenarkan. Pertimbangkan "tipe induktif" D
dengan satu konstruktor
Di sini tidak ada prinsip rekursi yang waras di sini. dan untuk alasan yang bagus! Jika kita memiliki beberapa prinsip rekursi, kita dapat menggunakannya untuk menyandikan versi aplikasi diri dan dengannya, nonterminasi. Ini berarti D
tidak dapat disebut "induktif" karena tipe induktif adalah konstruksi terbatas yang dihasilkan dari penerapan konstruktor berulang kali!
Untuk mengatasi ini, kami membatasi bagaimana tipe induktif dapat bersifat rekursif dalam teori tipe. Secara khusus, kami menghentikan mereka agar tidak muncul di "tempat negatif". Ini adalah gagasan tentang polaritas yang sedang Anda bicarakan. Polaritas suatu posisi ditentukan dengan demikian,
- Argumen dimulai pada posisi positif
- Setiap kali kita pergi ke kiri panah, polaritasnya terbalik
Jadi X
positif di dua yang pertama dan negatif di dua yang kedua
X
Int -> X
X -> Int
(Unit -> X) -> Int
Gagasan ini dibenarkan dengan bantuan teori kategori di mana tipe induktif dengan satu-satunya rekurensi yang positif menimbulkan fungsi kovarian. Rincian cara kerjanya dan mengapa ini menarik agak lama.
Arti Bob Harper
Di blogpost-nya Harper berbicara tentang arti polaritas yang berbeda. Polaritas ini merujuk pada bagaimana berbagai penghubung dalam logika diberi makna. Secara khusus, kita dapat mengklasifikasikan konektivitas dalam dua cara
- Penghubung positif dapat didefinisikan dengan mendefinisikan cara memperkenalkan mereka (aturan pengenalan mereka)
- Konektif negatif dapat didefinisikan dengan mendefinisikan cara menggunakannya (aturan eliminasi mereka)
Dalam istilah bahasa pemrograman, ini dengan baik menangkap perbedaan antara tipe malas dan ketat. Tipe ketat ditentukan oleh nilainya. Yang malas didefinisikan oleh bagaimana pola dapat cocok dengan mereka. Untuk menangani ini dengan benar, kami mendefinisikan bahasa dengan 2 konstruksi utama, cara untuk membangun tipe positif dan "duri" untuk menguraikan jenis negatif. Kita dapat menggunakan ini untuk memasukkan perhitungan yang ketat dan malas ke dalam satu bahasa.
Untuk memahami ini lebih baik, saya merujuk Anda ke bab 38 dari buku Bob Harper .