Що таке індукція-індукція?


11

Що таке індукція-індукція ?

Я знайшов такі ресурси:

Перші дві посилання для мене занадто короткі, а останні два - надто технічні. Чи може хтось пояснити це терміном мирянина? Було б краще, якщо є код Agda.


У вашому четвертому цитаті є код Агди.
Жил "ТАК - перестань бути злим"

Звичайно, але прочитати цю величезну кількість коду було б дуже важко. І (я здогадуюсь) дуже легко, просто побачивши 1 або 2 приклади.
盛安安

Відповіді:


13

Доповнення 2016-10-03: Я змішав індукцію-індукцію та індукцію-рекурсію (не вперше робив це!). Мої вибачення за безлад. Я оновив відповідь, щоб охопити обидва.

Я знаходжу пояснення у статті Forsberg & Setzer. Кінцева аксіоматизація індуктивно-індуктивних визначень, що висвітлюються.

Індукційно-рекурсійні

Індуктивно-рекурсивне визначення - це те, в якому ми визначаємо тип A і сімейство типів B:AType одночасно особливим чином:

  1. A визначається як індуктивний тип.
  2. B визначається рекурсії наA .
  3. Важливо відзначити , що визначення A може використовувати B .

Без третьої вимоги, ми могли б спочатку визначити A , а потім окремо B .

Ось дитячий приклад. Визначте A індуктивно, щоб мати такі конструктори:

  • a:A
  • :(x:AB(x))A

Сімейство типів B визначається за допомогою

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

  1. A визначається індуктивно
  2. BA
  3. AB

B

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


чому, пекло, хтось би визначав такі типи даних D:
盛安安

7
Для того, щоб навчити, що таке індуктивно-індуктивний тип. Я можу навести вам реальний приклад, а саме всесвіт типу, але це буде заплутано.
Андрій Бауер

3
@AndrejBauer Для мене це більше схоже на індукцію-рекурсію. Індукція-індукція - це коли сімейство типів визначається як індуктивний тип .
gallais

2
На жаль, ви абсолютно праві. Я це виправлю.
Андрій Бауер

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.