如何证明Coq中的“类型<>集”(即类型不等于集)?

时间:2019-05-31 19:50:04

标签: coq dependent-type theorem-proving type-theory

Coq中TypeSet之间是否存在相等或不平等关系?

我正在学习Coq的类型系统,并且了解Set的类型为Type@{Set+1},并且Type@{k}的类型为Type@{k+1}。我试图证明Type = Set,然后试图证明Type <> Set,但是在两种情况下都失败了。

我从

开始
Lemma set_is_type :  Type = Set.
Proof.
reflexivity.

给出一条错误消息,指出无法将“ Set”与“ Type@{Top.74}”统一

然后我尝试了

Lemma set_is_not_type : Type <> Set.
Proof.
intros contra.

目前我不知道如何进行。策略discriminate无效,inversion contra也无效。

可以证明上述两个引理中的哪一个?

1 个答案:

答案 0 :(得分:2)

这实际上不是一个完全琐碎的定理。为了证明Type = Set导致了悖论(因此有必要单独设置Type的水平),您需要使用类似于集合论中Russell悖论的标准结果。具体来说,您将需要Codepen-Link,这实际上意味着较小的Type与较大的Type不能并存(请记住Type在Coq中是多态的,尤其是Set是最低级别(如果包含Prop,则是第二最低级别)。

我们想要的特定定理可以在标准库中找到。

Require Logic.Hurkens.
Import Logic.Hurkens.TypeNeqSmallType.

Check paradox.

paradox具有类型签名forall A : Type, Type = A -> False。由于Set: Type(至少在Type足够大的情况下),这就是我们要证明的东西。

Lemma set_is_not_type: Type <> Set.
Proof.
  intro F.
  exact (paradox _ F).
Defined.

在此引理中,Coq自动对Type设置限制,以确保Set: Type


另一方面,Set等于Type some 水平,因此我们应该能够证明Type = SetType。我发现最简单的方法是证明Type = Type,然后用Set实例化该定理。正如您所发现的那样,无论出于什么原因,自反性本身都不能强加宇宙约束。为此,我们需要使两个引理Universe都具有多态性,以便可以使用特定的Universe级别对其进行实例化。

Polymorphic Lemma type_is_type: Type = Type.
Proof.
  reflexivity.
Defined.

Polymorphic Lemma type_is_set: Type = Set.
Proof.
  apply type_is_type.
Defined.

使所有事物都具有多态性的更简单方法是将Set Universe Polymorphism.放在所有事物之前。