我正在阅读 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)
小智 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)