Чи має значення порядок декларацій індуктивного типу?


9

Мені було цікаво, чи може мати значення порядок декларацій індуктивного типу.

Наприклад, у Coq ви можете визначити Nat:

Inductive Nat :=
  | O : Nat
  | S : Nat -> Nat.

або

Inductive Nat :=
  | S : Nat -> Nat
  | O : Nat.

Це, можливо, змінить порядок параметрів в автоматично сформованому елімінаторі, але це не велика справа.

Мені цікаво, чи можна написати декларацію на кшталт

Inductive typewhereordermatters :=
  | cons1 : type1
  | cons2 : type2.

де type2залежний тип, залежно від cons1? (і в цьому випадку писати декларації в іншому порядку не мало б жодного значення, оскільки type2посилання на cons1яке ще не існує).

Відповіді:


10
  1. Порядок не має значення. Я не можу придумати випадок, коли це було б. Як в коментарі зазначає Андрій Бауер , якщо змінити порядок, результат є канонічно ізоморфним для оригіналу .

  2. Один випадок не може залежати від іншого. Елементи суми представляють вибір, тому немає сенсу, що вибір залежить від вибору, який не приймається.


2
Ви можете бути більш конкретними щодо вашого першого пункту. Порядок не має значення. Якщо змінити порядок, результат є канонічно ізоморфним для оригіналу.
Андрій Бауер

2
@Dave: Дякую! Я задавав це питання через (високоекспериментальну теорію) вищих індуктивних типів, де це явище, здається, трапляється , і я хотів знати, чи може це траплятися і з регулярними індуктивними типами.
Гійом Брунері

1
@Guillaume: Я не впевнений, на яке явище ти вказуєш за посиланням. Різні конструкторські пропозиції визначення типу даних не можуть залежати один від одного, незалежно від того, чи це тип даних вищого порядку. Можливо, ви думаєте про залежні записи (які використовуються за посиланням, і вони доступні в Agda та Coq )?
Ноам Зейльбергер

1
@Noam: У прикладі вищого індуктивного типу circleтип loopконструктора залежить від baseконструктора.
Гійом Брунері

2
@Guillaume: Я бачу зараз (вони вводять експериментальний синтаксис), не знаю, як я це пропустив.
Ноам Зейльбергер

6

Чи має значення замовлення, як ви запитуєте? Ні.

Але чи наказ абсолютно не має значення для функціонування кореспондента з доказування? Знову ні. У Matita, помічника доказу, дуже схожого на Coq, порядок, в якому конструктори записуються в індуктивному визначенні, має значення для перевірки типу, зокрема, під час перевірки типу відповідності виразу.

Матіта спочатку повинен перевірити, чи всі конструктори підбираються в тілі матчу. Це робиться, переходячи через конструктори в тому порядку, в якому вони оголошені. Потім виходить перевірити власне вираз відповідності, що відбувається у зворотному порядку, спочатку перевіряючи випадок для останнього оголошеного конструктора. Потім цей тип застосовується для перевірки інших випадків.

Це дуже часто виявляється при написанні великого виразу відповідника. Спочатку ви хочете заповнити прості справи, залишаючи складніші справи під шаблоном, періодично набираючи текст, перевіряючи те, що ви написали, щоб переконатися, що це має сенс. Іноді Matita не в змозі зробити тип виразу неповного збігу, але цілком щасливо це зробить, якщо ви заповните справу для останнього конструктора, визначеного в індуктивному типі.

Я припускаю, хоча я не впевнений, що Кок робить щось подібне.

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