类型:键入Coq

时间:2019-01-07 09:58:38

标签: coq

偶然地,我发现可以在Coq中进行以下定义:

Definition x := Type : Type.

Type : Type是什么意思?这种定义有哪些用例?

1 个答案:

答案 0 :(得分:3)

此答案分为两部分。

std::conditional是什么意思?

这意味着 $(".regular").slick({ dots: true, infinite: false, vertical: true, slidesToShow: 5, slidesToScroll: 5, responsive: [ { breakpoint: 500, settings: { slidesToShow: 1, slidesToScroll: 1, } } ] }); 被定义为Definition x := y : A,并且有一个断言xy类型。通常,此声明是多余的,因为Coq能够仅凭其自身来确定y的类型。但是,有时一个术语的隐含部分过多,因此需要断言来确定所有这些隐含部分。

A是什么意思?

具有隐式部分的示例是y。 Coq中没有单个Type : Type,这可能会让您感到惊讶。相反,存在TypeTypeType@{0}…类型的无限层次结构,如果Type@{1}则带有Type@{2}。这意味着每个Universe(Type@{i} : Type@{j})都包含每个具有较小级别的Universe作为元素。

但是,默认情况下,Coq不会明确显示这些“宇宙级别”。 Coq通常足够聪明,以至于它可以弄清楚宇宙的层次(或使它们通用)而不会打扰您。您可以使用白话命令i < j告诉Coq显示它们,或者如果使用的话,可以通过在IDE菜单中设置选项来显示它们。然后,按照您的定义Type@{j},使用命令Set Printing Universes.将显示

x

因此Print x.被定义为x = Type@{Top.2} : Type@{Top.1} (* {Top.2 Top.1} |= Top.2 < Top.1 *) ,类型为xType@{Top.2}Type@{Top.1}只是通用Universe级别的名称。消息底部的内容只是说明Top.1必须小于Top.2。这是因为我们需要Top.2具有类型Top.1。请记住,Universe包含其下方的宇宙,但不包含其上方的宇宙。

另一个问题:为什么Type@{Top.2}有多个级别?

简而言之,如果我们只有一个Type@{Top.1}Type,则有可能表明系统不一致。这称为吉拉德悖论(或称为“霍肯斯悖论”的更简单变体)。有关一些详细信息,请参见this answer

如果您想对Coq的宇宙进行另一种解释,请参见this great answer