我仍然对COQ中 Set 的排序感到困惑。我何时使用设置,何时使用类型?
在Hott中,集被定义为一种类型,其中身份证明是唯一的。 但我认为在Coq中它有不同的解释。
答案 0 :(得分:10)
Set
在Coq和HoTT中意味着相当不同的东西。
在Coq中,每个对象都有一个类型,包括类型本身。类型类型通常称为排序,种或 Universe 。在Coq中,(计算相关的)Universe是Set
和Type_i
,其中i
的范围超过自然数(0,1,2,3,...)。我们有以下内容:
Set <= Type_0 <= Type_1 <= Type_2 <= ...
这些宇宙的输入方式如下:
Set : Type_i for any i
Type_i : Type_j for any i < j
与Hott一样,需要这种分层以确保逻辑一致性。正如Antal指出的那样,Set
的行为大多类似于最小的Type
,但有一个例外:当您使用{{1}调用coqtop
时,可以将其设为 imprecicative }} 选项。具体而言,这意味着只要-impredicative-set
,forall X : Set, A
的类型为Set
。相比之下,A
的类型为forall X : Type_i, A
,即使Type_(i + 1)
的类型为A
。
这种差异的原因在于,由于逻辑悖论,只有这种层次结构的最低级别才能产生不可预测性。然后,您可能想知道为什么Type_i
默认情况下不会产生不可预测性。这是因为一个不可预测的Set
与排除中间的公理的强烈形式不一致:
Set
这个公理允许你做的是编写可以决定任意命题的函数。请注意,forall P : Prop, {P} + {~ P}.
类型位于{P} + {~ P}
,而不是Set
。排除的中间词Prop
的通常形式不能以相同的方式使用,因为forall P : Prop, P \/ ~ P
中的内容无法以计算相关的方式使用。
答案 1 :(得分:1)
除了Arthur的回答:
从Set
位于层次结构底部的事实
由此得出
Set
是“小”数据类型和函数类型的类型,即其值不直接或间接涉及类型的类型。
这意味着以下内容将失败:
Fail Inductive Ts : Set :=
| constrS : Set -> Ts.
出现此错误消息:
大型非命题归纳类型必须在
Type
。
正如消息所示,我们可以使用Type
:
Inductive Tt : Type :=
| constrT : Set -> Tt.
参考: