Apa itu induksi-induksi?

11

Apa itu induksi-induksi ?

Sumber daya yang saya temukan adalah:

Dua referensi pertama terlalu singkat untuk saya, dan dua yang terakhir terlalu teknis. Adakah yang bisa menjelaskannya dalam istilah awam? Akan lebih baik jika ada kode Agda.

盛安安
sumber
Ada kode Agda dalam kutipan keempat Anda.
Gilles 'SO- stop being evil'
Tentu, tetapi akan sangat sulit untuk membaca kode dalam jumlah besar itu. Dan (saya kira) sangat mudah hanya dengan melihat 1 atau 2 contoh.
盛安安

Jawaban:

13

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:AB:AType

  1. A didefinisikan sebagai tipe induktif.
  2. B didefinisikan oleh rekursi pada .A
  3. 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 A

a: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:AType

  1. A didefinisikan secara induktif
  2. B didefinisikan secara induktif, dan itu bisa merujuk keA
  3. 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 .B

B(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))

Andrej Bauer
sumber
kenapa seseorang mendefinisikan tipe data seperti D:
盛安安
7
Untuk mengajarkan apa tipe induktif-induktif. Saya bisa memberi Anda contoh nyata, yaitu alam semesta tipe, tapi itu akan membingungkan.
Andrej Bauer
3
@AndrejBauer Ini lebih mirip induksi-rekursi kepada saya. Induksi-induksi adalah ketika tipe keluarga didefinisikan sebagai tipe induktif .
gallais
2
Ups, Anda memang benar. Saya akan memperbaikinya.
Andrej Bauer
Apakah domain seharusnya merupakan tipe Sigma dan bukan tipe Pi?
Dan Christensen