问题是我在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”),它可能有问题吗?
答案 0 :(得分:1)
pair
是nat -> nat -> natprod
类型的函数。
因此,要应用它,请使用函数应用程序语法:
Definition threefive := pair 3 5.
所以要测试它的类型:
Check (pair 3 5).
nat
和Datatypes.nat
属于同一类型。 Coq在某些消息中更加冗长,以避免混淆(它告诉您“在数据类型模块中定义的nat”,以防您在其他地方定义了另一个版本...)
我想这条消息的出现是因为你定义了自己的nat
,所以如果你这样做,你可能会遇到麻烦:
Check (pair 3 5).
因为3和5是Datatypes.nat
的一部分,而不是您创建的nat
类型。
因此,您应该使用自己的nat
类型的构造函数。