我证明了基于公理here的字段的一些基本属性,现在我继续定义矢量空间的公理。特别是,Field.v
包含以下几行:
(***********)
(* IMPORTS *)
(***********)
Require Import Setoid Morphisms.
Variable (F:Type).
Variable (zero:F).
Variable (one :F).
Variable (add: F -> F -> F).
Variable (mul: F -> F -> F).
Variable (eq: F -> F -> Prop).
我将其导入了名为VectorSpace.v
的文件中,但Coq抱怨它不知道F
:
(*******************)
(* GENERAL IMPORTS *)
(*******************)
Require Import Setoid Morphisms.
(*******************)
(* PROJECT IMPORTS *)
(*******************)
Require Import Field.
(****************)
(* Vector Space *)
(****************)
Variable (V:Type).
Variable (zerov:V).
Variable (onev :V).
Variable (addv: V -> V -> V).
Variable (mulv: F -> V -> V).
这是错误消息:
The reference F was not found in the current environment.
答案 0 :(得分:2)
在任何地方都用Variable
声明替换Axiom
。
使用项目的结构在项目的根目录下创建一个_CoqProject
文件。例如:
-Q . MyProject
Field.v
VectorSpace.v
现在,您可以使用MyProject.Field
来引用Field.v
中的VectorSpace.v
(我相信您以前是从标准库中导入Field
模块的。)
生成一个makefile并编译该项目:
coq_makefile -f _CoqProject -o Makefile
make
如果您在Emacs中使用Proof General,则应该可以交互运行VectorSpace.v
。我相信CoqIDE支持自动执行步骤(2)和(3),但是我不确定。
答案 1 :(得分:2)
如果您真的想为整个开发项目分配一个字段,请改用Parameter
(或Axiom
,含义相同)。
相反,Variable
是要在Section
中使用的,它声明将被转换为参数的绑定,以便可以用不同的字段实例化开发。
Variable
在各节之外的含义完全不同,因此为避免混淆,我建议不要以这种方式使用此命令。
Variable ...
(...) 在任何部分之外使用Variable
命令等同于使用Local Parameter
。
Local Parameter ...
导入及其变体永远不会通过其非限定名称来访问此类参数。您必须明确给出其完全限定的名称才能引用它们。--- Coq参考手册