Я натрапив на заплутану незгоду між Агдою та Кок, яка, очевидно, не пов'язана з найбільш відомими відмінностями між їх теоріями типів (наприклад, (не) прогнозованість, індукція-рекурсія тощо).
Зокрема, 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 ), але Я не знайшов пояснень, чому це звук в одній системі, але не в іншій, або просто різниця в думках.
Тож, мабуть, у мене є кілька питань:
- Це приклад монотонного, але не строго позитивного типу? (В Coq; явно Агда вважає це суто позитивним)
- Чому Агда дозволяє це, поки Кок це відкидає? Це просто ідіосинкратична різниця в трактуванні "строго позитивного", чи є тонка різниця між Кок і Агдою, яка робить це звуком в Агді і невідомим у Кока, або це питання смаку, обумовлене певними теоретичними уподобаннями?
- Чи є змістовна різниця між першим визначенням вище та еквівалентним індуктивно-рекурсивним визначенням нижче?
Індуктивно-рекурсивне визначення:
mutual
data U : Set0 -> Set0 where
c : (i : Fin 2) -> U (T i)
T : Fin 2 -> Set0
T zero = ℕ
T (suc zero) = U ℕ
Я радий мати покажчики на відповідну літературу.
Заздалегідь спасибі.
Ty is not strictly positive, because it occurs in an index of the target type of the constructor c2 in the definition of Ty.