Coq中的对定义具有"(Set * Set)%type"虽然它有类型" Type"

时间:2014-04-23 10:27:22

标签: coq

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

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

  

术语(nat, nat)的类型为(Set * Set)%type,而预期类型为Type

我不太明白错误是什么,这个消息意味着什么。定义t2有什么问题?

  Definition t1 : Type := list nat.
  Definition t2 : Type := pair nat nat.

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

1 个答案:

答案 0 :(得分:3)

不,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.