La maggior parte delle teorie sui tipi di cui sono a conoscenza sono predicative con le quali intendo quello
Void : Prop
Void = (x : Prop) -> x
non è ben scritto nella maggior parte dei dimostratori di teoremi poiché questo tipo di pi appartiene allo stesso universo Prop
e non è così Prop : Prop
. Questo li rende predicativi e non consente definizioni impredicative come quelle sopra. Tuttavia, moltissimi "linguaggi di lavagna" come System F o CoC sono in realtà impredicativi. In effetti, questa impredicatività è vitale per definire la maggior parte dei costrutti non inclusi in modo primitivo nella lingua.
La mia domanda è: perché si vorrebbe rinunciare all'impredicatività dato il suo potere nel definire costrutti logici? Ho sentito un paio di persone notare che l'impredicatività rovina "il calcolo" o "l'induzione", ma ho difficoltà a trovare una spiegazione concreta.
forall P : Type, {P} + {~P}
, poiché questo insieme + impredicativo implica prova di irrilevanza (e nonnat
è irrilevante). Vedi ad esempio coq.inria.fr/library/Coq.Logic.ClassicalUniqueChoice.html e coq.inria.fr/library/Coq.Logic.Berardi.html