Coq中的对定义具有“类型”;(设置*设置)%type“;而它应该是“类型”;“类型”;

Coq中的对定义具有“类型”;(设置*设置)%type“;而它应该是“类型”;“类型”;,coq,Coq,我正在阅读软件基础(*),在Coq中定义类型时遇到了一个问题:在下面的示例中,我尝试了两个类型定义t1是自然列表,t2是一对自然列表 Coq接受第一个定义t1,但拒绝定义t2,并显示错误消息: 术语(nat,nat)具有type(Set*Set)%type,而预期它具有typetype 我不太明白什么是错的,这条信息意味着什么。定义t2有什么问题 Definition t1 : Type := list nat. Definition t2 : Type := pair nat nat.

我正在阅读软件基础(*),在Coq中定义类型时遇到了一个问题:在下面的示例中,我尝试了两个类型定义
t1
是自然列表,
t2
是一对自然列表

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

术语
(nat,nat)
具有type
(Set*Set)%type
,而预期它具有type
type

我不太明白什么是错的,这条信息意味着什么。定义
t2
有什么问题

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

(*)

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

Pair是数据构造函数,prod是类型构造函数?对<代码>对x1-x2:prod t1 t2,或使用其符号,
(x1,x2):t1*t2