COQ中的Set究竟是什么

时间:2016-09-20 18:41:28

标签: coq type-theory

我仍然对COQ中 Set 的排序感到困惑。我何时使用设置,何时使用类型

在Hott中,被定义为一种类型,其中身份证明是唯一的。 但我认为在Coq中它有不同的解释。

2 个答案:

答案 0 :(得分:10)

Set在Coq和HoTT中意味着相当不同的东西。

在Coq中,每个对象都有一个类型,包括类型本身。类型类型通常称为排序 Universe 。在Coq中,(计算相关的)Universe是SetType_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-setforall 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.

参考:

  • B. Jacobs撰写的Coq作为形式系统的本质(2013),pdf