Як отримати залежно набрані елімінатори?


10

У залежно типовому програмуванні є два основні способи декомпозиції даних та виконання рекурсії:

  • Залежне узгодження шаблону : визначення функції подаються у вигляді декількох пропозицій. Уніфікація гарантує, що всі пропущені випадки неможливі, а зовнішній вирішувач гарантує, що рекурсія є обґрунтованою.
  • Сепаратори : Кожен індуктивний тип даних має пов'язаний з ним постійний , який діє в якості принципу індукції, а також рекурсивної функції , які розкладаються значення типу . Вони є більш багатослівними, але мають перевагу в тому, що вони є тотальними (усі випадки охоплені ) і закінчуються конструкцією.D D E DЕDDЕD

Я бачив елімінатори для поширених типів даних, наприклад, , де елімінатор в основному є математичною індукцією, або , де елімінатор - це в основному складка.Л і с тNатLiст

Я читав кілька статей про залежність відповідності шаблонів, і багато хто посилається на теорії типів, в яких можна визначити типи даних, а теоретичні засоби усунення забезпечуються. Наприклад, усунення залежного шаблону узгодження описує , як ЕТТ заснований на Елімінатори, і як зіставлення з зразком може бути перетворено в усунення в присутності аксіоми . Я розумію, що після визначення типу даних теорія забезпечує елімінатор.К

Те, що я не знайшов (або, принаймні, не визнав, чи бачив) - це хороший опис того, як можна отримати елімінатори, як їхні типи, так і їх семантику.

Чи може хтось вказати мені на посилання, яке описує, як можна отримати елімінатор з визначення типу даних?


Я впевнений, що в описі конструкцій чи літературі про Coq є опис (для строго позитивних типів - усунення Coq на більш складних типах не зовсім загальні).
Жил "ТАК - перестань бути злим"

@Gilles Моє розуміння полягало в тому, що Coq не використовує елімінаторів, а замість цього використовує окремі оператори відповідності та (захищеного) виправлення.
jmite

3
Основна мова не використовує елімінаторів, але коли ви визначаєте тип, Coq генерує елімінатор, який визначається в термінах fixі match. У мене немає довідки, але я знаю, що я прочитав щось про те, як створюється цей елімінатор. cs.stackexchange.com/questions/104/… може представляти інтерес.
Жил "ТАК - перестань бути злим"

Для будь-якого індуктивного типу TCoq визначає принцип індукції, T_indякий є залежним елімінатором. Це визначається з точки зору рекурсії та відповідності шаблону, але ви, в принципі, можете вважати це новою константою, що має той же тип (з однаковою семантикою).
чі

Відповіді:


8

Канонічним посиланням на це є Пітер Діб'єр, Індуктивна сім'я , який дає досить всебічне лікування індуктивних сімей на основі елімінаторів.


6

Деякі з наших останніх робіт з цього питання можуть виявитись корисними, оскільки ми отримуємо елімінатори для типів даних, кодованих лямбда. Наприклад, див цього один для загального висновку Елімінатори, і це один для основного методу застосовуються тільки до Nat типу.

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