Coq 为什么我的sort类型记录显示为Set 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宏创建记录类型时,它显示为Set sort而不是type sort

我创建了一个显示相同行为的最小测试示例:

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}
(或者宇宙级别的其他名称)来指示多态性的位置