Dalam pemrograman dependen-mengetik, ada dua cara utama untuk mendekomposisi data dan melakukan rekursi:
- Pencocokan pola dependen : definisi fungsi diberikan sebagai beberapa klausa. Unifikasi memastikan bahwa semua kasus yang dihilangkan tidak mungkin, dan pemecah eksternal memastikan bahwa rekursi memiliki dasar yang kuat.
- Eliminator : Setiap datatype induktif memiliki konstan terkait , yang bertindak sebagai prinsip induksi, dan sebagai fungsi rekursif yang terurai nilai tipe . Ini lebih verbose, tetapi memiliki keuntungan menjadi total (semua kasus dicakup oleh ) dan berakhir dengan konstruksi.
Saya telah melihat eliminator untuk tipe data umum, seperti , di mana eliminator pada dasarnya adalah induksi matematika, atau , di mana eliminator pada dasarnya adalah lipatan.
Saya telah membaca beberapa makalah tentang pencocokan pola dependen, dan banyak merujuk pada teori tipe di mana tipe data dapat didefinisikan, dan eliminator disediakan oleh teori. Misalnya, Menghilangkan Dependent Pola Matching menjelaskan bagaimana UTT didasarkan pada eliminator, dan bagaimana pencocokan pola dapat dikonversi ke eliminasi di hadapan aksioma . Pemahaman saya adalah bahwa, begitu suatu tipe data didefinisikan, teorinya menyediakan eliminator.
Apa yang belum saya temukan (atau setidaknya, belum dikenali jika saya melihatnya) adalah deskripsi yang baik tentang bagaimana seseorang dapat menurunkan eliminator, baik tipe dan semantiknya.
Dapatkah seseorang mengarahkan saya ke referensi yang menjelaskan bagaimana seseorang dapat memperoleh eliminator dari definisi tipe data?
fix
dan match
. Saya tidak memiliki referensi, tetapi saya tahu saya telah membaca sesuatu tentang bagaimana eliminator ini dihasilkan. cs.stackexchange.com/questions/104/… mungkin menarik.
T
, Coq mendefinisikan prinsip induksi T_ind
yang merupakan eliminator dependen. Ini didefinisikan dalam hal rekursi dan pencocokan pola, tetapi pada prinsipnya Anda dapat menganggapnya sebagai konstanta baru yang memiliki tipe yang sama (dengan semantik yang sama).