在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".
如何使用原始*
?
答案 0 :(得分:3)
从某种意义上说,没有“原创”*
。符号可以重载和重用,通常Coq足够聪明,可以为符号选择正确的解释。但有时您需要明确告诉Coq使用什么解释范围。
参考手册说(sect. 12.2):
解释范围是一组带有解释的术语符号。解释范围提供了一种弱的,纯粹的语法形式的符号重载:相同的符号,例如中缀符号
+
,可用于表示加法运算符的不同定义。根据当前开放的解释范围,解释是不同的。解释范围可以包括对数字和字符串的解释。
让我提一个有用的命令,以了解更多关于符号及其解释范围的信息:Locate "*".
将为您提供*
展开的事项列表,以及解释范围的名称和默认值解释范围。
版本8.4pl4的Coq尝试使用默认解释范围,在您的情况下为Q_scope
- 这就是您看到错误的原因。它可以很容易地修复,例如带范围注释:
Definition TT : Type := (T * T) % type.
但是,最近的Coq版本(如8.7.0)明白在这种情况下我们应该使用type_scope
,因此您的代码段无需任何修改即可运行。