Bagaimana cara mendapatkan eliminator yang diketik secara dependen?

10

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.DEDDED

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.NSebuahtL.sayast

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.K

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?

Ya ampun
sumber
Saya yakin ada deskripsi dalam kalkulus konstruksi atau literatur Coq (untuk tipe yang benar-benar positif - eliminator Coq pada tipe yang lebih kompleks tidak sepenuhnya umum).
Gilles 'SANGAT berhenti menjadi jahat'
@Gilles Pemahaman saya adalah bahwa Coq tidak menggunakan eliminator, tetapi sebagai gantinya menggunakan operator yang cocok dengan pertandingan dan (dijaga).
jmite
3
Bahasa inti tidak menggunakan eliminator, tetapi ketika Anda mendefinisikan suatu tipe, Coq menghasilkan eliminator yang didefinisikan dalam istilah fixdan match. Saya tidak memiliki referensi, tetapi saya tahu saya telah membaca sesuatu tentang bagaimana eliminator ini dihasilkan. cs.stackexchange.com/questions/104/… mungkin menarik.
Gilles 'SANGAT berhenti menjadi jahat'
Untuk setiap tipe induktif T, Coq mendefinisikan prinsip induksi T_indyang 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).
chi

Jawaban:

8

Referensi kanonik untuk ini adalah Peter Dybjer, Keluarga Induktif , yang memberikan perawatan keluarga induktif yang cukup komprehensif berdasarkan eliminator.

cody
sumber
6

Anda mungkin menemukan beberapa makalah kami baru-baru ini tentang hal ini berguna, karena kami menurunkan eliminator untuk tipe data yang dikodekan lambda. Sebagai contoh, lihat ini satu untuk derivasi generik eliminator, dan ini salah satu untuk teknik dasar diterapkan hanya untuk jenis Nat.

Aaron Stump
sumber