Tamamlayıcı 2016-10-03: İndüksiyon indüksiyonunu ve indüksiyon- tekrarını karıştırdım (ilk kez yapmadım!). Dağınıklıktan dolayı özür dilerim. Cevabı her ikisini de kapsayacak şekilde güncelledim.
Açıklamaları Forsberg & Setzer'in makalesinde buluyorum Endüktif-endüktif tanımların aydınlatıcı sonlu bir aksiyomatizasyonu .
İndüksiyon-yineleme
Bir indüktif özyinelemeli tanım türü tanımlayan olduğu bir dengedir A ve tip bir aile B:A→Type özel bir şekilde eş zamanlı olarak:
- A , endüktif tip olarak tanımlanır.
- B ,A üzerindeki özyineleme ile tanımlanır.
- En önemlisi, A tanımı B kullanabilir .
Üçüncü gereklilik olmadan, önce A sonra ayrı olarak B tanımlayabiliriz .
İşte bir bebek örneği. Aşağıdaki kuruculara sahip olmak için A endüktif olarak tanımlayın :
- a:A
- ℓ:(∑x:AB(x))→A
B tipi ailesi ,
- B(a)=bool
- B(ℓ(x,f))=nat .
Peki, A ne var ? Her şeyden önce biz bir eleman var a:A.
Bunun için, bir tür olduğu B(a) olarak tanımlanır bool . Bu nedenle, iki yeni elemanlar oluşturabilir ℓ(a,false)
ve ℓ(a,true)
içinde A . Şimdi B(ℓ(a,false))=B(ℓ(a,true))=nat , böylece hern:natℓ(ℓ(a,false),n):A
elemanları
için de oluşturabiliriz ( ℓ ( a , f a l s e ) , n ) : A
ve
ℓ(ℓ(a,true),n):A
Böyle devam edebiliriz. Bir sonraki aşama, olacaktır, çünkü
B(ℓ(ℓ(a,true),n))=nat
her için oradam:nat elemanı
ℓ(ℓ(ℓ(a,true),n),m):A
veℓ(ℓ(ℓ(a,false),n),m):A
öğesi
: A
Devam edebiliriz. Biraz düşünme,A doğal bir listenin aşağı yukarı iki kopyası olduğunu ve ortak bir boş listeyi paylaştığınıortaya koyuyor. Nedenini bulmak için bir egzersiz olarak bırakacağım.
İndüksiyon-indüksiyon
Bir endüktif-endüktif tanım aynı zamanda bir tip A ve aynı zamanda bir tip B:A→Type ailesini tanımlar : A → T y p e :
- A endüktif olarak tanımlanır
- B endüktif olarak tanımlanır veA
- En önemlisi, A , B atıfta bulunabilir .
İndüksiyon-özyineleme ve indüksiyon-indüksiyon arasındaki farkı anlamak önemlidir. İndüksiyon-özyinelemede , B ( c ( … ) ) = ⋯ formunun denklemlerini sağlayarak B tanımlarız ,
burada c ( … ) A için bir yapıcıdır . Endüktif-endüktif bir tanımda , B'nin elemanlarını oluşturmak için yapıcılar sağlayarak B'yi tanımlarız .B(c(…))=⋯
c(…)ABB
Önceki örneğimizi, tümevarım-tümevarım olarak yeniden biçimlendirelim. İlk olarak endüktif olarak verilen tpye A sahibiz :
- a:A
- ℓ:(∑x:AB(x))→A
B tipi aile aşağıdaki kurucular tarafından tanımlanır:
- Tru:B(a)
- Fal:B(a)
- Eğer x:A ve y:B(x) daha sonra Zer:B(ℓ(x,y))
- Eğer x:A ve y:B(x) ve z:B(ℓ(x,y)) daha sonra Suc(z):B(ℓ(x,y)) .
Gördüğünüz gibi , B ( a ) ' nın booleanlar ( B ( ℓ ( x , y ) )' nin doğal sayılar (izomorfik ) olduğunu söyleyen miktarda B elementini üretmeye yönelik kurallar verdik .B(a)B(ℓ(x,y))