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,等