Coq 为什么我的sort类型记录显示为Set sort?
当我使用Record宏创建记录类型时,它显示为Set sort而不是type sort 我创建了一个显示相同行为的最小测试示例:Coq 为什么我的sort类型记录显示为Set sort?,coq,Coq,当我使用Record宏创建记录类型时,它显示为Set sort而不是type sort 我创建了一个显示相同行为的最小测试示例: Record little_test : Type := { bit1 : nat; bit2 : nat; }. Check little_test. Set只是类型的无限层次结构中的最低级别。因为Coq的宇宙是累积的,这意味着little_test也存在于每一个更高的层次。一般来说,你不想把你的类型限制在更高的层次,所以Coq只是最小化
Record little_test : Type :=
{
bit1 : nat;
bit2 : nat;
}.
Check little_test.
Set
只是类型的无限层次结构中的最低级别。因为Coq的宇宙是累积的,这意味着little_test
也存在于每一个更高的层次。一般来说,你不想把你的类型限制在更高的层次,所以Coq只是最小化了宇宙层次。如果您真的希望little\u test
处于更高的级别,您可以明确地请求它
如果使用CoqIDE,请在“视图”菜单中设置“显示宇宙级别”,而不是设置打印宇宙。
。其他ide(Proof-General等)也可能有自己的方式来显示宇宙级别
Set Printing Universes.
Record little_test@{i} : Type@{i} :=
{
bit1 : nat;
bit2 : nat;
}.
Check little_test.
这种方法声明了一个固定的宇宙级别(little_set.i
),并强制little_set驻留在Type@{little_test.i}
。如果你已经从其他地方获得了宇宙级别,你可以省略宇宙级别的声明
Set Printing Universes.
Record little_test1@{i} : Type@{i} :=
{
bit1 : nat;
bit2 : nat;
}.
Record little_test2 : Type@{little_test1.i} :=
{
bit3 : nat;
bit4 : nat;
}.
Check little_test1.
Check little_test2.
Set Printing Universes.
Unset Universe Minimization ToSet.
Polymorphic Record little_test@{i} : Type@{i} :=
{
bit1 : nat;
bit2 : nat;
}.
Check little_test.
在这种方法中,little_test1
和little_test2
具有相同的最低级别(但请记住,宇宙累积性意味着它们都存在于每一个更高级别)
最后一种方法声明无限多个little_test
s-每个宇宙级别一个
Set Printing Universes.
Record little_test1@{i} : Type@{i} :=
{
bit1 : nat;
bit2 : nat;
}.
Record little_test2 : Type@{little_test1.i} :=
{
bit3 : nat;
bit4 : nat;
}.
Check little_test1.
Check little_test2.
Set Printing Universes.
Unset Universe Minimization ToSet.
Polymorphic Record little_test@{i} : Type@{i} :=
{
bit1 : nat;
bit2 : nat;
}.
Check little_test.
但是,默认情况下,当您使用little_test
而不使用宇宙参数时(如果不存在约束,则设置Set
),Coq将最小化宇宙级别,因此我们必须Unset universe minimation to Set
来更改此行为。如果您希望所有记录
和归纳
类型都像这样具有多态性,您可以设置宇宙多态性
。请注意,您仍然必须使用@{i}
(或宇宙级别的其他名称)来指示多态性的位置。Set
只是类型的无限层次结构中的最低级别。因为Coq的宇宙是累积的,这意味着little_test
也存在于每一个更高的层次。一般来说,你不想把你的类型限制在更高的层次,所以Coq只是最小化了宇宙层次。如果您真的希望little\u test
处于更高的级别,您可以明确地请求它
如果使用CoqIDE,请在“视图”菜单中设置“显示宇宙级别”,而不是设置打印宇宙。
。其他ide(Proof-General等)也可能有自己的方式来显示宇宙级别
Set Printing Universes.
Record little_test@{i} : Type@{i} :=
{
bit1 : nat;
bit2 : nat;
}.
Check little_test.
这种方法声明了一个固定的宇宙级别(little_set.i
),并强制little_set驻留在Type@{little_test.i}
。如果你已经从其他地方获得了宇宙级别,你可以省略宇宙级别的声明
Set Printing Universes.
Record little_test1@{i} : Type@{i} :=
{
bit1 : nat;
bit2 : nat;
}.
Record little_test2 : Type@{little_test1.i} :=
{
bit3 : nat;
bit4 : nat;
}.
Check little_test1.
Check little_test2.
Set Printing Universes.
Unset Universe Minimization ToSet.
Polymorphic Record little_test@{i} : Type@{i} :=
{
bit1 : nat;
bit2 : nat;
}.
Check little_test.
在这种方法中,little_test1
和little_test2
具有相同的最低级别(但请记住,宇宙累积性意味着它们都存在于每一个更高级别)
最后一种方法声明无限多个little_test
s-每个宇宙级别一个
Set Printing Universes.
Record little_test1@{i} : Type@{i} :=
{
bit1 : nat;
bit2 : nat;
}.
Record little_test2 : Type@{little_test1.i} :=
{
bit3 : nat;
bit4 : nat;
}.
Check little_test1.
Check little_test2.
Set Printing Universes.
Unset Universe Minimization ToSet.
Polymorphic Record little_test@{i} : Type@{i} :=
{
bit1 : nat;
bit2 : nat;
}.
Check little_test.
但是,默认情况下,当您使用little_test
而不使用宇宙参数时(如果不存在约束,则设置Set
),Coq将最小化宇宙级别,因此我们必须Unset universe minimation to Set
来更改此行为。如果您希望所有记录
和归纳
类型都像这样具有多态性,您可以设置宇宙多态性
。注意,您仍然必须使用@{i}
(或者宇宙级别的其他名称)来指示多态性的位置