Tambahan 2016-10-03: Saya mencampur induksi-induksi dan rekursi-induksi (bukan pertama kali saya melakukan itu!). Saya minta maaf atas kekacauan ini. Saya memperbarui jawaban untuk mencakup keduanya.
Saya menemukan penjelasan dalam makalah Forsberg & Setzer A axiomatisation terbatas definisi induktif-induktif menerangi.
Induksi-rekursi
Definisi induktif-rekursif adalah definisi di mana kami mendefinisikan tipe dan tipe keluarga secara bersamaan dengan cara khusus:SEBUAHB:A→Type
- A didefinisikan sebagai tipe induktif.
- B didefinisikan oleh rekursi pada .A
- Krusial, definisi dapat menggunakan .AB
Tanpa persyaratan ketiga, pertama kita bisa mendefinisikan dan kemudian secara terpisah .AB
Ini contoh bayi. Tentukan induktif untuk memiliki konstruktor berikut:A
- a:A
- ℓ:(∑x:AB(x))→A
Tipe keluarga didefinisikan olehB
- B(a)=bool
- B(ℓ(x,f))=nat .
Jadi, apa yang ada di ? Pertama-tama kita memiliki elemen Karena itu, ada tipe yang didefinisikan sebagai . Oleh karena itu, kita dapat membentuk dua elemen baru dan di . Sekarang kita memiliki , jadi kita juga dapat membentuk untuk setiap elemen
dan
Kita bisa terus seperti ini . Tahap selanjutnya adalah sejak itu
Aa:A.
B(a)boolℓ(a,false)
ℓ(a,true)
AB(ℓ(a,false))=B(ℓ(a,true))=natn:natℓ(ℓ(a,false),n):A
ℓ(ℓ(a,true),n):A
B(ℓ(ℓ(a,true),n))=nat
ada untuk setiap elemen
dan elemen
Kita dapat terus berjalan. Sedikit pemikiran mengungkapkan bahwa kurang lebih adalah dua salinan daftar bilangan asli, berbagi daftar kosong yang sama. Saya akan meninggalkannya sebagai latihan untuk mencari tahu mengapa.m:natℓ(ℓ(ℓ(a,true),n),m):A
ℓ(ℓ(ℓ(a,false),n),m):A
A
Induksi-induksi
Definisi induktif-induktif juga mendefinisikan tipe dan secara bersamaan tipe keluarga :AB:A→Type
- A didefinisikan secara induktif
- B didefinisikan secara induktif, dan itu bisa merujuk keA
- Krusial, bisa merujuk ke .AB
Penting untuk memahami perbedaan antara induksi-rekursi dan induksi-induksi. Dalam induksi-rekursi kita mendefinisikan dengan menyediakan persamaan dari bentuk
mana adalah konstruktor untuk . Dalam definisi induktif-induktif kita mendefinisikan dengan menyediakan konstruktor untuk membentuk unsur-unsur .BB(c(…))=⋯
c(…)ABB
Mari kita merumuskan kembali contoh kita sebelumnya sebagai induksi-induksi. Pertama-tama kita mendapatkan tpye diberikan secara induktif :A
- a:A
- ℓ:(∑x:AB(x))→A
Tipe keluarga didefinisikan oleh konstruktor berikut:B
- Tru:B(a)
- Fal:B(a)
- jika dan makax:Ay:B(x)Zer:B(ℓ(x,y))
- jika dan dan maka .x:Ay:B(x)z:B(ℓ(x,y))Suc(z):B(ℓ(x,y))
Seperti yang Anda lihat, kami memberikan aturan untuk menghasilkan elemen yang sama dengan mengatakan bahwa adalah (isomoprhic) boolean, dan adalah (isomorfik ke) bilangan alami .BB(a)B(ℓ(x,y))