Was ist der Unterschied zwischen Set und Type in Coq? [geschlossen]

12

AFAIU-Typen können a sein, Setderen Elemente Programme sind oder propositionderen Elemente Proofs sind. Basierend auf diesem Verständnis:

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

Der folgende Code sollte kompiliert werden, dies ist jedoch aufgrund des folgenden Fehlers nicht der Fall. Wenn ich ändern Setmit Typeoder die andere Typemit Setkompiliert in Ordnung. Kann mir jemand helfen zu verstehen, was der folgende Fehler bedeutet? Ich versuche, mir Coq mithilfe des Software Foundations-Buches beizubringen.

Error:

Error: Large non-propositional inductive types must be in Type.
Abhishek Kumar
quelle
2
Theorembeweiser waren für CS.SE schon immer eine Grauzone, aber ich vermute, dass dies ein guter Kandidat für die Migration von Mods zu StackOverflow ist.
jmite
Diese Frage hat einige Antworten hier .
Anton Trunov
@jmite Angesichts der Tatsache, dass es bei dieser Frage um die Berechnung von Konstruktionen geht, bei denen Coq nur als konkrete Syntax dient, denke ich, dass sie hier zum Thema gehört.
Gilles 'SO - hör auf böse zu sein'

Antworten:

11

Coq hat 3 "große" Typen:

  • Propp1,p2:Pp1=p2
  • Set1=2Set
  • Type ist ein Supertyp von beiden, mit dem Sie Code schreiben können, sobald er mit beiden funktioniert

Ich bin mir ziemlich sicher, dass Ihr Fehler darin besteht, dass Sie einen definieren, Setdessen Parameter sein können Type, was bedeutet, dass sie sein können Prop, was nicht erlaubt ist. Wenn Sie dies ändern:

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

Ihr Code sollte funktionieren.

jmite
quelle
2
Coq hat keinen Beweis für die Irrelevanz, es Propsei denn, Sie fügen ihn als Axiom hinzu.
Geoff