Os tipos AFAIU podem ser a Set
cujos elementos são programas ou a proposition
cujos elementos são Provas. Então, com base neste entendimento:
Inductive prod (X Y: Type) : Set :=
| pair: X -> Y -> prod X Y.
O código a seguir deve ser compilado, mas isso não ocorre devido ao seguinte erro. Se eu mudar Set
com Type
ou o outro Type
com Set
ele compila bem. Alguém pode me ajudar a entender o que significa o seguinte erro? Estou tentando me ensinar Coq usando o livro Software Foundations.
Erro:
Error: Large non-propositional inductive types must be in Type.
dependent-types
coq
Abhishek Kumar
fonte
fonte
Respostas:
Coq possui 3 tipos "grandes":
Prop
Set
Set
Type
é um supertipo de ambos, permitindo escrever código uma vez que funcione comTenho certeza de que seu erro é porque você está definindo um
Set
cujos parâmetros podem serType
, o que significa que podem serProp
, o que não é permitido. Se você mudar para isso:seu código deve funcionar.
fonte
Prop
menos que você o adicione como axioma.