Baru-baru ini saya mencoba menerapkan Aille 's Cedille-Core , bahasa pemrograman minimalis yang mampu membuktikan teorema matematika tentang istilah-istilahnya sendiri. Saya juga telah membuktikan induksi untuk tipe data yang dikodekan dengan λ, yang menjelaskan mengapa ekstensi-nya diperlukan.
Nether kurang, saya masih bertanya-tanya dari mana ekstensi itu berasal. Kenapa mereka apa adanya? Apa yang membenarkan mereka? Saya tahu, misalnya, bahwa beberapa ekstensi, seperti rekursi, merusak bahasa sebagai sistem pembuktian. Jika saya memutuskan untuk juga memperpanjang CoC dengan primitif lainnya, bagaimana saya membenarkan? Saya memahami bukti normalisasi diperlukan, tetapi itu tidak membuktikan bahwa primitif "masuk akal".
Singkatnya, apa yang secara spesifik memenuhi syarat suatu bahasa (dan jenis sistemnya) sebagai suatu sistem yang mampu membuktikan teorema tentang istilah-istilahnya sendiri?
Jawaban:
[Self-advertising mengikuti, tapi saya pikir ini relevan.]
Ada beberapa pendekatan yang mungkin untuk pertanyaan ini. Salah satu cara (yang saya eksplorasi selama tesis PhD saya dalam konteks bahasa mirip-ML) adalah untuk memperluas sistem tipe dengan lapisan orde pertama, sehingga istilah bahasa dapat dimanipulasi sebagai objek dari logika yang mendasarinya . Tentu saja, Anda juga perlu memasukkan beberapa predikat sehingga ada sesuatu yang perlu diperhatikan. Dalam kasus sistem saya, predikat ini adalah persamaan istilah. Secara khusus, jika dan adalah istilah bahasa, maka tipe hanya dihuni jika dan memang setara (secara observasi). Anda bisa menggunakan quantifier orde pertama untuk menyandikan properti sepertiu t ≡ u t u ∀ v , ( λ x . x )t u t≡u t u ∀v,(λx.x)v≡v dalam jenis, dan mereka dibuktikan dengan membangun program yang menghuninya.
Tentu saja Anda juga dapat mengasumsikan persamaan, dan ada beberapa bentuk kuantifier yang berbeda (diketik / tidak diketik, universal / eksistensial). Mekanisme ini dapat digunakan untuk alasan tentang program apa pun (mereka tidak harus terbukti mengakhiri atau bahkan mengetik). Satu-satunya kendala adalah bahwa program yang digunakan sebagai bukti harus dibuktikan berakhir oleh sistem (rekursi umum yang sewenang-wenang menyebabkan inkonsistensi).
Berikut adalah beberapa referensi jika Anda ingin memeriksanya:
sumber