Mi sono imbattuto in un disaccordo confuso tra Agda e Coq che non è ovviamente correlato alle distinzioni più note tra le loro teorie del tipo (ad esempio, la (im) predicatività, l'induzione-ricorsione, ecc.).
In particolare, Agda accetta la seguente definizione:
data Ty : Set0 -> Set0 where
c1 : Ty ℕ
c2 : Ty (Ty ℕ)
mentre la definizione equivalente di Coq viene respinta perché la comparsa di [Ty _] come indice di se stesso in c2 è considerata una violazione della positività rigorosa.
Inductive Ty : Set -> Set :=
| c1 : Ty nat
| c2 : Ty (Ty nat).
In realtà, questo caso è quasi letteralmente un esempio tratto dalla Sezione 14.1.2.1 di Coq'Art di violazione della positività rigorosa:
Inductive T : Set -> Set := c : (T (T nat)).
Ma non vedo i motivi di questa differenza tra le teorie dei tipi. Il classico esempio di dimostrazione di False utilizzando una ricorrenza negativa di un tipo in un argomento del costruttore mi è chiaro, ma non riesco a capire come si possa derivare una contraddizione da questo stile di indicizzazione (indipendentemente da argomenti del costruttore altrimenti strettamente positivi).
Sfogliando la letteratura, il primo documento delle famiglie induttive di Dybjer fa un commento disinvolto sulla soluzione di Paulin-Mohring nel documento CID che ha restrizioni leggermente diverse, e suggerisce vagamente che le differenze potrebbero essere correlate all'impredicatività, ma non si sviluppa ulteriormente. Il documento di Dybjer sembra consentire questo, mentre Paulin-Mohring lo proibisce chiaramente.
Apparentemente non sono il primo a notare questa differenza di opinioni e alcuni credono che questa definizione non dovrebbe essere consentita in nessuno dei due sistemi ( https://lists.chalmers.se/pipermail/agda/2012/004249.html ), ma Non ho trovato alcuna spiegazione del perché sia il suono in un sistema ma non nell'altro, o solo una differenza di opinione.
Quindi suppongo di avere diverse domande:
- È un esempio di un tipo monotono, ma non strettamente positivo? (In Coq; chiaramente Agda lo considera strettamente positivo)
- Perché Agda lo consente mentre Coq lo rifiuta? È semplicemente una differenza idiosincratica nell'interpretazione di "rigorosamente positivo", c'è una sottile differenza tra Coq e Agda che la fa suonare in Agda e non fondata in Coq, o è una questione di gusti guidata da particolari preferenze teoriche?
- Esiste una differenza significativa tra la prima definizione di cui sopra e l'equivalente definizione induttiva-ricorsiva di seguito?
Definizione induttiva-ricorsiva:
mutual
data U : Set0 -> Set0 where
c : (i : Fin 2) -> U (T i)
T : Fin 2 -> Set0
T zero = ℕ
T (suc zero) = U ℕ
Sono felice di avere indicazioni sulla letteratura pertinente.
Grazie in anticipo.
Ty is not strictly positive, because it occurs in an index of the target type of the constructor c2 in the definition of Ty.