Coq 中的对定义类型为“(Set * Set)%type”,而预期类型为“Type”

Maa*_*gon 2 coq

我正在阅读 Software Foundations(*) 并且在 Coq 中定义类型时遇到问题:在下面的示例中,我尝试进行 2 个类型定义。t1是自然数列表,并且t2是一对自然数。

第一个定义t1被 Coq 接受,但定义t2被拒绝并显示错误消息:

该术语(nat, nat)具有类型,(Set * Set)%type而预期具有类型Type

我不太明白出了什么问题以及这条消息的含义。定义有什么问题t2

  Definition t1 : Type := list nat.
  Definition t2 : Type := pair nat nat.
Run Code Online (Sandbox Code Playgroud)

(*) http://www.cis.upenn.edu/~bcpierce/sf/Lists.html#lab58

小智 5

不,pair是构造函数,prod是类型。

Print prod.
Check prod.
Check @pair.

Definition t1 : Type := list nat.
Definition t2 : Type := prod nat nat.
Definition t2' : Type := (nat * nat)%type.
Run Code Online (Sandbox Code Playgroud)

  • 对。`pair x1 x2: prod t1 t2`,或使用它们的符号,`(x1, x2): t1 * t2`。 (2认同)