我使用Coq 8.4pl6,并希望在Coq中编译Logic.v(Coq标准库),并将其输出视为模块编译和打印的示例,但失败了。
更具体地说,Logic.v第107行的tauto
失败了:
104 Theorem and_cancel_l : forall A B C : Prop,
105 (B -> A) -> (C -> A) -> ((A /\ B <-> A /\ C) <-> (B <-> C)).
106 Proof.
107 intros; tauto.
108 Qed.
我尝试的过程如下:
coqc Logic.v
,在第107行生成Error: tauto failed
。我认为这是因为Coq初始环境已导入Logic.vo
,因此加载同一模块两次就会产生错误。 接下来,我尝试通过运行coqc -nois Logic.v
来编译空的初始状态,这会产生以下错误。我不明白这个错误的意思......
File ".../Logic.v", line 107, characters 10-15:
Anomaly: Incorrect tactic expression. Received exception is:
Anomaly: Uncaught exception Nametab.GlobalizationError(_). Please report..
Please report.
有没有办法编译Logic.v
没有错误?
答案 0 :(得分:2)
编译Logic.v的问题似乎是由于它重新定义了归纳类型True, False, and, or, ex, ex2, eq
和常量not, iff, IF_then_else, all, eq_ind_r, eq_rec_r, eq_rect_r, subrelation, unique, uniqueness
。
自动化策略必须考虑(并对待)这些&#34;新的&#34;当Coq启动时,类型和常量不同于首先加载的类型和常量。
从Logic.v中删除了这些Definition
和Inductive
语句后,我就可以编译该文件了。
希望这会有所帮助。 (更完整的答案将准确解释启动过程中的这种情况。)