Perbedaan antara tipe Dependent, tipe refinement dan Hoare Logic

18

Saya tahu sedikit teori tipe dependen. Dari wikipedia:

Tipe dependen adalah tipe yang definisinya tergantung pada suatu nilai.

Dan dari mata kuliah teori Type saya, saya ingat bahwa tipe dependen adalah:

Keluarga jenis diindeks oleh suatu tipe.

Tetapi saya memiliki kebingungan tentang tipe dependen dan tipe perbaikan dan logika hoare.

Karena dari tipe Depenedent vs refinement, tipe refinement terlihat seperti logika Hoare. Apa yang lebih banyak diberikan oleh tipe perbaikan daya selain hanya memungkinkan untuk menyatakan predikat yang harus dipenuhi (Yang tampak hampir sama dengan Hoare Logic)?

Apa hal tambahan yang diberikan tipe dependen dibandingkan dengan tipe refinement? Dan apakah tipe Dependent lebih kuat dari tipe Refinement + Sat / Constraint solver.

Adakah yang bisa membersihkan udara dengan contoh-contoh.

Pushpa
sumber

Jawaban:

18

Ada karya terbaru oleh Paul-André Melliès dan Noam Zeilberger yang mengeksplorasi ini. Secara khusus makalah Functors adalah Type Refinement Systems dan An Isbell Duality Theorem untuk Type Refinement Systems . Ada juga video ceramah pada yang pertama.

Saya pikir ada banyak kebingungan di sekitar jenis perbaikan karena orang berpikir tentang sistem tertentu sebagai representatif yang menyebabkan tujuan dan perincian sistem tertentu dikaitkan dengan ide umum. Singkatnya adalah sistem perbaikan jenis mengklasifikasikan istilah yang ada secara independen sedangkan jenis (non-perbaikan), tergantung atau tidak, adalah bagian dari istilah. Ini mungkin terdengar akrab dan mungkin bahkan agak kontradiktif.

Bagian yang berpotensi akrab dan mungkin kontradiktif muncul jika Anda melihat jenis à la Curry (ekstrinsik) versus tipe à la Gereja (secara intrinsik). Ketika kita memikirkan jenis à la Curry, kita menganggap jenis sebagai mengklasifikasikan istilah yang tidak diketik yang sudah memiliki makna. Dalam tipe à la Church, satu-satunya istilah yang ada adalah istilah yang diketik dengan baik, yaitu batasan jenis adalah bagian dari sintaks kami. Jadi yang saya katakan adalah bahwa sistem tipe Curry sebenarnya adalah sistem perbaikan tipe yang memperbaiki istilah yang tidak diketik, sedangkan sistem tipe gaya Gereja bukanlah sistem perbaikan tipe. Ini berarti bahwa, misalnya, kita dapat menganggap kalkulus lambda yang diketik secara sederhana sebagai sistem penyempurnaan tipe atau sebagai sistem tipe penyempurnaan.

Tentu saja, tidak ada yang mengatakan bahwa ketentuan kita harus istilah yang tidak diketik. Kita bisa juga menerapkan sistem penyempurnaan jenis untuk istilah yang diketik, dan, secara historis, ini adalah konteks di mana jenis penyempurnaan (dengan nama itu) muncul. Namun, aplikasi untuk pengetikan lunak menggambarkan sesuatu yang lebih dekat dengan situasi yang dijelaskan di atas.

Sejauh ini saya belum mengatakan apa pun tentang tipe dependen. Alasannya adalah bahwa itu adalah masalah yang sepenuhnya ortogonal. Saya akan mengatakan sistem tipe dependen arketipal biasanya disajikan dalam gaya Gereja, dan dengan demikian bukan sistem penyempurnaan tipe, tetapi NuPRL (berdasarkan Computational Type Theory , sebuah varian dari teori tipe dependen arketip yang paling dasar, teori tipe Martin-Löf) adalah sistem penyempurnaan jenis terang seperti yang saya jelaskan. Ketentuan dalam NuPRL bahkan mungkin tidak memiliki tipe! Memang, fakta bahwa "PRL" adalah singkatan dari "Program Refinement Logic" mungkin juga merupakan tip-off. Di sisi lain, Jenis Perbaikan untuk ML menjelaskan sistem jenis perbaikan, mungkin asal istilah, yang bukan merupakan sistem tipe tergantung dengan cara apa pun.

Adapun Hoare tiga kali lipat, mereka adalah sistem penyempurnaan tipe. Mereka sebenarnya digunakan sebagai contoh dari sistem penyempurnaan tipe di kertas pertama. Namun, Hoare Type Theory memberikan sesuatu yang dapat dilihat sebagai sistem tipe non-penyempurnaan untuk bahasa yang memiliki Hoare tiga kali lipat.

Untuk mendapatkan jawaban tentang "kekuatan" dari sistem yang berbeda, Anda perlu menentukan sistem jenis dependen (s) tertentu dan (jenis) sistem penyempurnaan tertentu. Istilah "sistem tipe dependen" mencakup kelas sistem tipe yang sangat luas, dan "sistem penyempurnaan tipe" bahkan lebih luas. Meskipun demikian, istilah tersebut tidak eksklusif satu sama lain, jadi itu tidak akan menjadi perbandingan antara "sistem tipe dependen" dan "sistem tipe penyempurnaan". Namun, jika dengan "sistem tipe dependen" Anda memikirkan sesuatu seperti Coq , dan untuk "sistem tipe penyempurnaan" sesuatu seperti Jenis Cairmaka itu cukup sepihak. Coq umumnya dipandang cukup kuat untuk menangani hampir semua matematika dalam praktiknya; Anda bisa benar-benar menerapkan dan membuktikan memperbaiki pemecah SMT dalam Coq dan kemudian menggunakannya; dan analog yang sangat dekat dengan tipe subset dapat dirumuskan. (NuPRL secara harfiah memiliki tipe himpunan bagian.) Di sisi lain, pemecah SMT biasanya terbatas pada teori yang dapat ditentukan di mana Coq tidak memiliki batasan seperti itu; dan banyak sistem seperti Liquid Type memiliki bahasa yang terbatas dan tidak dapat diperluas untuk menentukan predikat. (Tentu saja, dengan "sistem tipe dependen" Anda bisa berarti Dependent ML , dan dengan "tipe sistem penyempurnaan" NuPRL [yang juga merupakan sistem tipe dependen] yang akan satu sisi dengan cara lain.)

Derek Elkins meninggalkan SE
sumber
1
Terima kasih banyak, Sungguh Membantu. Ya sedang membaca Jenis Ketergantungan dalam pemrograman praktek (popl '99) dan kebingungan. Bersulang.
Pushpa
1
Ini adalah jawaban yang FANTASTIS. terima kasih sudah menulisnya.
Jonathan Sterling