Чому Агда і Кок не згодні з суворою позитивністю?


24

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

Зокрема, Agda приймає таке визначення:

  data Ty : Set0 -> Set0 where
    c1 : Ty ℕ
    c2 : Ty (Ty ℕ)

тоді як еквівалентне визначення Coq відкидається, оскільки поява [Ty _] як самого індексу в c2 вважається порушенням суворої позитивності.

  Inductive Ty : Set -> Set :=
    | c1 : Ty nat
    | c2 : Ty (Ty nat).

Насправді цей випадок є майже дослівним прикладом із розділу 14.1.2.1 Coq'Art про порушення суворої позитивності:

  Inductive T : Set -> Set := c : (T (T nat)).

Але я не бачу причин такої різниці між теоріями типів. Класичний приклад доведення помилкового використання негативного явища типу в аргументі конструктора мені зрозумілий, але я не можу зрозуміти, як можна вивести протиріччя із цього стилю індексації (незалежно від строго позитивних аргументів конструктора).

Обмірковуючи літературу, стаття "Індуктивних сімей" Діб'єра невідкладно коментує рішення Пауліна-Морінга в документі CID, що має дещо інші обмеження, і тумано припускає, що відмінності можуть бути пов'язані з непередбачуваністю, але не розглядають далі. Папір Діб'єра, здається, дозволяє це, тоді як Палін-Морінг чітко забороняє це.

Мабуть, я не вперше помітив цю різницю думок, і деякі вважають, що це визначення не повинно бути дозволене в жодній системі ( https://lists.chalmers.se/pipermail/agda/2012/004249.html ), але Я не знайшов пояснень, чому це звук в одній системі, але не в іншій, або просто різниця в думках.

Тож, мабуть, у мене є кілька питань:

  1. Це приклад монотонного, але не строго позитивного типу? (В Coq; явно Агда вважає це суто позитивним)
  2. Чому Агда дозволяє це, поки Кок це відкидає? Це просто ідіосинкратична різниця в трактуванні "строго позитивного", чи є тонка різниця між Кок і Агдою, яка робить це звуком в Агді і невідомим у Кока, або це питання смаку, обумовлене певними теоретичними уподобаннями?
  3. Чи є змістовна різниця між першим визначенням вище та еквівалентним індуктивно-рекурсивним визначенням нижче?

Індуктивно-рекурсивне визначення:

  mutual
    data U : Set0 -> Set0 where
      c : (i : Fin 2) -> U (T i)
    T : Fin 2 -> Set0
    T zero = ℕ
    T (suc zero) = U ℕ

Я радий мати покажчики на відповідну літературу.

Заздалегідь спасибі.


1
Наскільки я знаю, Кок суворіший за те, що дозволяє основна теорія, тому що це було легше здійснити і досить корисно на практиці. Ця відповідь про інший, але споріднений випадок - наскільки я розумію.
Жил 'SO- перестань бути злим'

1
Це визначення не прийняте нинішньою версією Ty is not strictly positive, because it occurs in an index of the target type of the constructor c2 in the definition of Ty.
Agda

2
Так, ти маєш рацію, хтось інший вказав на це минулої ночі. Я використовував пакет Debian 2.3.0.1, але 2.3.2.1 від Cabal відкидає як прямі, так і ІЧ-визначення. Схоже, начебто непов’язана помилка зробила перевірку позитивності на жорсткіші індекси: code.google.com/p/agda/isissue/detail?id=690 Оскільки це обговорювалося у списку, не позначаючи явно питання про надійність, я все одно цікаво, чи є сам тип звуку.
Колін Гордон

Відповіді:


10

Проблема, здається, плутанина внаслідок злиття двох факторів:

  1. Я використовував усталену версію Agda (2.3.0.1). Здається, що до 2.3.2, Agda просто не перевіряла сувору позитивність показників результатів конструктора (див. Помилку, яку я пов’язував в іншому місці в потоці).
  2. Більш детальне читання статті " Індуктивні сім'ї" Діб'єра говорить про те, що він, можливо, мав намір, щоб визначений індуктивний тип не був пов'язаний під час введення показників результату конструктора . Розділ 3.2.1 подає схему для індуктивних конструкторів у прозовій формі, і, мабуть, я неправильно читаю мову, що описує середовища зв’язування кожної частини схеми.

Це більш детальне читання, звичайно, узгоджується з перевіркою, яку виконують Coq та (останні версії) Agda, що забороняє появу Т у власних показниках.


4

Можлива причина різниці, як натякають ваші власні зауваження, - непередбачуваність. Coq історично мав непередбачуваний набір (все ще доступний як прапор, я вірю!)

Цитуючи книгу Адама Чліпала http://adam.chlipala.net/cpdt/html/Universes.html

Інструменти Coq підтримують прапор командного рядка -impredicative-set, який модифікує Gallina більш фундаментальним способом, роблячи Set непередбачуваним. Термін, як forall T: Set, T має тип Set, а індуктивні визначення в Set можуть мати конструктори, які кількісно визначають аргументи будь-яких типів. Для збереження узгодженості необхідно встановити обмеження усунення, подібно до обмеження для Prop. Обмеження застосовується лише до великих індуктивних типів, де деякі конструктори кількісно визначають тип типу Type. У таких випадках значення цього індуктивного типу можуть бути узгоджені лише для отримання типу результату, типом якого є Set або Prop. Це правило суперечить правилу для Prop, де обмеження застосовується навіть до великих великих індуктивних типів, і де тип результату може мати лише тип Підп. У старих версіях Coq Set за замовчуванням був непередбачуваним. Пізніші версії роблять Set предикативними, щоб уникнути невідповідності деяким класичним аксіомам. Зокрема, слід бути уважним при використанні непередбачуваного набору з вибором аксіом. У поєднанні з виключеною середньою чи предикатною розширеністю може призвести непослідовність. Наслідкована множина може бути корисною для моделювання невід'ємних математичних понять, але майже всі розробки Coq прекрасно обходяться без неї.


Зі звуку виправлення помилок, який я знайшов вище, звучить так, що Agda просто не перевіряла позитивність показників на результати конструктора. Що насправді не вказує на те, чи пропонується мій тип монотонним, але припускає, що він не пов'язаний з непередбачуваністю.
Колін Гордон

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