Datatype.nat与nat?

时间:2014-05-24 16:56:00

标签: coq

问题是我在Coq中声明了一个归纳函数并想测试它。但是我的Check行出错了:

Inductive natprod : Type :=
   pair : nat -> nat -> natprod.

Check pair(3 5).

这是错误:

Error: Illegal application (Non-functional construction): 
The expression "3" of type "Datatypes.nat"
cannot be applied to the term
 "5" : "Datatypes.nat"

我真的不明白这是什么问题? Datatype.nat和nat有什么区别?

P.S。:我已经为“nat”写了一个归纳函数(也称为“归纳nat”),它可能有问题吗?

1 个答案:

答案 0 :(得分:1)

pairnat -> nat -> natprod类型的函数。

因此,要应用它,请使用函数应用程序语法:

Definition threefive := pair 3 5.

所以要测试它的类型:

Check (pair 3 5).

natDatatypes.nat属于同一类型。 Coq在某些消息中更加冗长,以避免混淆(它告诉您“在数据类型模块中定义的nat”,以防您在其他地方定义了另一个版本...)


我想这条消息的出现是因为你定义了自己的nat,所以如果你这样做,你可能会遇到麻烦:

Check (pair 3 5).

因为3和5是Datatypes.nat的一部分,而不是您创建的nat类型。

因此,您应该使用自己的nat类型的构造函数。