Coq 导入QArith后定义产品类型
在Coq中导入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". 如何使用原始的*?从某种意义上说,没有“原始的”*。符号可以
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)。