Quelle est la différence entre Set et Type dans Coq? [fermé]

13

Les types AFAIU peuvent être un Setdont les éléments sont des programmes ou un propositiondont les éléments sont des preuves. Donc, sur la base de cette compréhension:

Inductive prod (X Y: Type) : Set := 
| pair: X -> Y -> prod X Y.

Le code suivant doit être compilé, mais il n'est pas dû à l'erreur suivante. Si je change Setavec Typeou l'autre Typeavec Setça se compile très bien. Quelqu'un peut-il m'aider à comprendre ce que signifie l'erreur suivante? J'essaie d'enseigner moi-même Coq en utilisant le livre Software Foundations.

Erreur:

Error: Large non-propositional inductive types must be in Type.
Abhishek Kumar
la source
2
Les prouveurs de théorèmes ont toujours été une zone grise pour CS.SE, mais je suppose que c'est un bon candidat pour que les mods migrent vers StackOverflow.
jmite
Cette question a quelques réponses ici .
Anton Trunov
@jmite Étant donné que cette question concerne le calcul des constructions avec Coq servant uniquement de syntaxe concrète, je pense que c'est sur le sujet ici.
Gilles 'SO- arrête d'être méchant'

Réponses:

12

Coq a 3 "grands" types:

  • Propp1,p2:Pp1=p2
  • Set1=2Set
  • Type est un super-type des deux, vous permettant d'écrire du code une fois qui fonctionne avec

Je suis sûr que votre erreur est due au fait que vous définissez un Setdont les paramètres peuvent être Type, ce qui signifie qu'ils peuvent l'être Prop, ce qui n'est pas autorisé. Si vous passez à ceci:

Inductive prod (X Y: Set) : Set := 
| pair: X -> Y -> prod X Y. 

votre code devrait fonctionner.

jmite
la source
3
Coq n'a pas de preuve de pertinence à Propmoins que vous ne l'ajoutiez comme axiome.
Geoff