Coq中的Set和Type有什么区别?[关闭]


13

AFAIU类型可以是Set其元素为程序或其proposition元素为证明的类型。因此,基于这种理解:

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

以下代码应编译,但不是由于以下错误。如果我SetTypeTypeSet它一起更改,则可以正常编译。有人可以帮助我了解以下错误的含义吗?我正在尝试使用Software Foundations书籍自学Coq。

错误:

Error: Large non-propositional inductive types must be in Type.

2
定理证明一直是CS.SE的一个灰色领域,但是我猜想这是mod迁移到StackOverflow的不错选择。
jmite

这个问题在这里有一些答案。
安东·特鲁诺夫

@jmite鉴于这个问题是关于以Coq充当具体语法的构造演算的,所以我认为这是话题。
吉尔(Gilles)'“ SO-别再作恶了”

Answers:


12

Coq有3种“大”类型:

  • Propp1个p2Pp1个=p2
  • Set1个=2Set
  • Type 是这两者的超型,允许您编写一次可与任何一个一起使用的代码

我很确定您的错误是因为您正在定义一个Set参数Type,其参数可以为,这意味着它们可以为Prop,这是不允许的。如果更改为:

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

您的代码应该可以工作。


3
Prop除非您将Coq 添加为公理,否则Coq没有证明无关紧要。
杰夫
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.