偶然地,我发现可以在Coq中进行以下定义:
Definition x := Type : Type.
Type : Type
是什么意思?这种定义有哪些用例?
答案 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
,并且有一个断言x
是y
类型。通常,此声明是多余的,因为Coq能够仅凭其自身来确定y
的类型。但是,有时一个术语的隐含部分过多,因此需要断言来确定所有这些隐含部分。
A
是什么意思?具有隐式部分的示例是y
。 Coq中没有单个Type : Type
,这可能会让您感到惊讶。相反,存在Type
,Type
,Type@{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
*)
,类型为x
。 Type@{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。