Saya berada dalam situasi di mana saya harus menunjukkan bahwa pemeriksaan ketik dapat dipilih untuk kalkulus yang diketik secara dependen yang sedang saya kerjakan. Sejauh ini, saya dapat membuktikan bahwa sistem ini sangat normal, dan dengan demikian kesetaraan definisi dapat ditentukan.
Dalam banyak referensi yang saya baca, decidability dari typechecking terdaftar sebagai akibat wajar dari normalisasi yang kuat, dan saya percaya pada kasus-kasus itu, tapi saya bertanya-tanya bagaimana orang bisa menunjukkan ini.
Secara khusus, saya terjebak pada hal berikut:
- Hanya karena istilah yang diketik dengan baik sangat normal, tidak berarti bahwa algoritme tidak akan berulang selamanya pada input yang tidak diketik dengan baik
- Karena hubungan logis biasanya digunakan untuk menunjukkan normalisasi yang kuat, tidak ada metrik penurunan yang nyaman saat kami mengembangkan istilah pengetikan. Jadi, bahkan jika aturan jenis saya diarahkan sintaks, tidak ada jaminan bahwa penerapan aturan pada akhirnya akan berakhir.
Saya bertanya-tanya, apakah ada yang punya referensi yang baik untuk bukti kepastian pengetikan untuk bahasa yang diketik secara dependen? Jika itu adalah kalkulus inti kecil, itu bagus. Apa pun yang membahas teknik bukti untuk menunjukkan kepatutan akan bagus.
sumber
Jawaban:
Memang ada kehalusan di sini, meskipun hal-hal bekerja dengan baik dalam hal pemeriksaan tipe. Saya akan menuliskan masalahnya di sini, karena tampaknya muncul di banyak utas terkait, dan mencoba menjelaskan mengapa semuanya beres ketika mengetikkan teori tipe ketergantungan "standar" (saya akan sengaja tidak jelas, karena masalah ini cenderung muncul terlepas):
Fakta 1: Jika adalah derivasi dari , maka ada derivasi dari untuk beberapa jenis , dan untuk setiap subterm , ada beberapa jenis , konteks dan derivasi dari .D Γ⊢t:A D′ Γ⊢A:s s u≤t B Δ D′′ Δ⊢u:B
Fakta yang baik ini agak sulit untuk dibuktikan, dan diimbangi dengan fakta yang cukup buruk:
Fakta 2: Secara umum, dan bukan merupakan turunan dari !D′ D′′ D
Ini sedikit tergantung pada formulasi yang tepat dari sistem tipe Anda, tetapi sebagian besar sistem "operasional" yang diterapkan dalam praktik memuaskan Fakta 2.
Ini berarti bahwa Anda tidak dapat "beralih ke sub-istilah" ketika bernalar dengan induksi pada derivasi, atau menyimpulkan bahwa pernyataan induktif benar tentang jenis istilah yang Anda coba buktikan.
Fakta ini menggigit Anda dengan keras ketika mencoba untuk membuktikan pernyataan yang tampaknya tidak bersalah, misalnya bahwa sistem dengan konversi yang diketik sama dengan yang memiliki konversi yang tidak diketik.
Namun , dalam kasus inferensi tipe, Anda dapat memberikan algoritme inferensi tipe dan sortir (tipe tipe) secara simultan dengan menginduksi pada struktur istilah, yang mungkin melibatkan algoritma tipe-terarah seperti yang disarankan Andrej. Untuk istilah tertentu (dan konteks , Anda gagal atau menemukan sehingga dan . Anda tidak perlu menggunakan hipotesis induktif untuk menemukan yang terakhir derivasi, dan khususnya Anda menghindari masalah yang dijelaskan di atas.t Γ A,s Γ⊢t:A Γ⊢A:s
Kasus penting (dan satu-satunya kasus yang benar-benar membutuhkan konversi) adalah aplikasi:
Setiap panggilan untuk menormalkan dilakukan pada istilah yang diketik dengan baik, karena ini adalah invarian untuk
infer
kesuksesan.Omong-omong, seperti yang diterapkan, Coq tidak memiliki pengecekan tipe yang dapat didekati, karena akan menormalkan isi
fix
pernyataan sebelum mencoba mengetikkan memeriksanya.Bagaimanapun, batas-batas pada bentuk normal dari istilah-istilah yang diketik dengan baik begitu astronomis, sehingga teorema desidabilitas kebanyakan bersifat akademis pada titik ini. Dalam praktiknya, Anda menjalankan algoritme pengecekan tipe selama Anda memiliki kesabaran, dan mencoba rute yang berbeda jika belum selesai saat itu.
sumber
infer(t u):
; untuk menemukannya, cari "tCheck r (App f a) =
". Untuk implementasi yang lebih lengkap tetapi masih sederhana, Anda dapat memeriksa Morte'stypeWith
.