Coq Datatype.nat与nat?
问题是我在中声明了一个归纳函数,并想测试它。但是我的Coq Datatype.nat与nat?,coq,Coq,问题是我在中声明了一个归纳函数,并想测试它。但是我的检查行有一个错误,它是: 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 applie
检查
行有一个错误,它是:
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之间有什么区别
注:我已经为“nat”(也称为“感应nat”)编写了一个感应函数,这有问题吗
pair
是类型为nat->nat->natprod
的函数
因此,要应用它,请使用函数应用程序语法:
Definition threefive := pair 3 5.
因此,要测试其类型:
Check (pair 3 5).
nat
和数据类型。nat
是相同的类型。Coq只是在某些消息中更加详细,以避免混淆(它告诉您“数据类型模块中定义的nat”,以防您在其他地方定义了另一个版本…)
我猜出现此消息是因为您定义了自己的
nat
,因此如果您这样做,您可能会遇到麻烦:
Check (pair 3 5).
因为3和5是数据类型.nat
的一部分,而不是您创建的nat
类型的一部分
所以你应该使用你自己的
nat
类型的构造函数。我该怎么做呢?我的意思是,它也被命名为nat(我的归纳函数)。你对nat
的定义是什么?归纳nat:type:=|O:nat:nat->nat,等