Доповнення 2016-10-03: Я змішав індукцію-індукцію та індукцію-рекурсію (не вперше робив це!). Мої вибачення за безлад. Я оновив відповідь, щоб охопити обидва.
Я знаходжу пояснення у статті Forsberg & Setzer. Кінцева аксіоматизація індуктивно-індуктивних визначень, що висвітлюються.
Індукційно-рекурсійні
Індуктивно-рекурсивне визначення - це те, в якому ми визначаємо тип А і сімейство типів Б : А → Т у р е одночасно особливим чином:
- А визначається як індуктивний тип.
- Б визначається рекурсії наА .
- Важливо відзначити , що визначення А може використовувати Б .
Без третьої вимоги, ми могли б спочатку визначити А , а потім окремо Б .
Ось дитячий приклад. Визначте А індуктивно, щоб мати такі конструктори:
- а : А
- ℓ : ( ∑х : АB ( x ) ) → A
Сімейство типів Б визначається за допомогою
- B(a)=bool
- B(ℓ(x,f))=nat .
Отже, що в A ? Перш за все ми маємо елемент a:A.
Через це існує тип B(a) який визначається як bool . Таким чином, ми можемо утворити два нових елементи ℓ(a,false)
і ℓ(a,true)
в . Тепер маємо B ( ℓ ( a , f aAB(ℓ(a,false))=B(ℓ(a,true))=nat , тому ми можемо також сформувати для кожногоn:nat елементи
ℓ(ℓ(a,false),n):A
і
ℓ(ℓ(a,true),n):A
Ми можемо продовжувати так. Наступним етапом буде те, що оскільки
B(ℓ(ℓ(a,true),n))=nat
існує для кожногоm:nat елемент
ℓ(ℓ(ℓ(a,true),n),m):A
і елемент
ℓ(ℓ(ℓ(a,false),n),m):A
Ми можемо продовжувати рух. Трохи роздумуючи, виявляється, щоA - це більш-менш дві копії списків натуральних чисел, що мають спільний порожній список. Я залишу це як вправу, щоб зрозуміти, чому.
Індукція-індукція
Індуктивно-індуктивне визначення також визначає тип A і одночасно сімейство типів B:A→Type :
- A визначається індуктивно
- BA
- AB
BB(c(…))=⋯
c(…)ABB
A
- a:A
- ℓ:(∑x:AB(x))→A
B
- Tru:B(a)
- Fal:B(a)
- x:Ay:B(x)Zer:B(ℓ(x,y))
- x:Ay:B(x)z:B(ℓ(x,y))Suc(z):B(ℓ(x,y))
BB(a)B(ℓ(x,y))