O que é diferente entre Set e Type in Coq? [fechadas]


13

Os tipos AFAIU podem ser a Setcujos elementos são programas ou a propositioncujos 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 Setcom Typeou o outro Typecom Setele 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.

2
Os provadores de teoremas sempre foram uma área cinzenta para o CS.SE, mas acho que esse é um bom candidato para os mods migrarem para o StackOverflow.
Jmite 01/09/19

Esta pergunta tem algumas respostas aqui .
Anton Trunov

@ jmite Dado que esta pergunta é sobre o cálculo de construções com Coq apenas servindo como sintaxe concreta, acho que é sobre o assunto aqui.
Gilles 'SO- stop be evil'

Respostas:


12

Coq possui 3 tipos "grandes":

  • Propp1,p2:Pp1=p2
  • Set1=2Set
  • Type é um supertipo de ambos, permitindo escrever código uma vez que funcione com

Tenho certeza de que seu erro é porque você está definindo um Setcujos parâmetros podem ser Type, o que significa que podem ser Prop, o que não é permitido. Se você mudar para isso:

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

seu código deve funcionar.


3
O Coq não tem irrelevância para prova, a Propmenos que você o adicione como axioma.
Geoff
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.