导入QArith后定义产品类型

时间:2017-10-25 08:52:21

标签: 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".

如何使用原始*

1 个答案:

答案 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,因此您的代码段无需任何修改即可运行。