Чем отличается Set от Type в Coq? [закрыто]

13

Типы AFAIU могут быть Setэлементами, чьи элементы являются программами, или propositionэлементами, чьи элементы являются доказательствами. Итак, исходя из этого понимания:

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

Следующий код компиляции , но это не из - за следующей ошибки. Если я изменяю Setс Typeили другой Typeс Setним составляет штраф. Может кто-нибудь помочь мне понять, что означает следующая ошибка? Я пытаюсь научить себя Coq, используя книгу Software Foundations.

Ошибка:

Error: Large non-propositional inductive types must be in Type.
Абхишек Кумар
источник
2
Проверщики теорем всегда были серой областью для CS.SE, но я предполагаю, что это хороший кандидат для перехода модов в StackOverflow.
jmite
Этот вопрос имеет несколько ответов здесь .
Антон Трунов
@jmite Учитывая, что этот вопрос о исчислении конструкций с Coq, просто служащим конкретным синтаксисом, я думаю, что это здесь по теме.
Жиль "ТАК - перестать быть злым"

Ответы:

12

Coq имеет 3 "больших" типа:

  • Propp1,p2:Pp1=p2
  • Set1=2Set
  • Type является супертипом обоих из них, позволяя вам написать код, который работает с

Я уверен, что ваша ошибка в том, что вы определяете, Setчьи параметры могут быть Type, что означает, что они могут быть Prop, что недопустимо. Если вы измените на это:

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

ваш код должен работать.

jmite
источник
3
Coq не имеет доказательств несущественности, Propесли вы не добавите его в качестве аксиомы.
Джефф