Coq 导入QArith后定义产品类型

Coq 导入QArith后定义产品类型,coq,Coq,在Coq中导入QArith后 Require Import Coq.QArith.QArith_base. 我想定义一个产品类型 Parameter T : Type. Definition TT : Type := T * T. 但是*在QArith中被重新定义,我得到了错误消息 Error: The term "T" has type "Type" while it is expected to have type "Q". 如何使用原始的*?从某种意义上说,没有“原始的”*。符号可以

在Coq中导入
QArith

Require Import Coq.QArith.QArith_base.
我想定义一个产品类型

Parameter T : Type.
Definition TT : Type := T * T.
但是
*
QArith
中被重新定义,我得到了错误消息

Error: The term "T" has type "Type" while it is expected to have type "Q".
如何使用原始的
*

从某种意义上说,没有“原始的”
*
。符号可以重载和重用,通常Coq足够聪明,可以为符号选择正确的解释。但有时您需要明确告诉Coq使用什么解释范围

参考手册上说():

解释范围是术语及其解释的一组符号。解释范围提供了一种弱的、纯粹的语法形式的符号重载:相同的符号,例如中缀符号
+
,可用于表示加法运算符的不同定义。根据当前打开的解释范围,解释是不同的。解释范围可以包括对数字和字符串的解释

让我提到一个有用的命令,可以了解有关符号及其解释范围的更多信息:
Locate“*”
将为您提供
*
展开到的内容列表,以及解释范围和默认解释范围的名称

从版本8.4pl4开始,Coq尝试使用默认的解释范围,在您的情况下,它是
Q_范围
——这就是您看到错误的原因。它可以很容易地修复,例如使用范围注释:

Definition TT : Type := (T * T) % type.

但是,更新的Coq版本(如8.7.0)理解在这种情况下我们应该使用
type\u scope
,因此您的代码段可以不经任何修改就工作。

请提供语法正确的代码段。@Antontronov I修复了两个输入错误。现在我可以使用
定义TT:type:=(T*T)%type.
谢谢,我不知道
%type
syntaxI可能有一个旧版本
coqc——版本
为我提供了
Coq证明助手,版本8.4pl4(2015年11月),使用OCaml 4.02.3于2015年11月4日12:56:53编译。我用Ubuntu 16.04上的apt get install coq安装了它。我的测试文件就是这三行(require、parameter、definition)。