有效使用Coq和x27的最佳实践;s提示数据库

有效使用Coq和x27的最佳实践;s提示数据库,coq,Coq,“你所问的问题似乎是主观的,很可能是封闭的。” 嗯,我知道,但还是觉得值得在这里问一下 我已经被告知很多次,我应该使用提示数据库和自动,因为它是有史以来最好的东西。然而,在我尝试使用它的几次中,我完全被琐碎的细节所困扰。有一件事一直在发生 Section Annoying. Variable T : Type. Variable P : T -> Prop. Axiom notP : forall x, ~ P x. Hint Resolve notP. Goal forall (

“你所问的问题似乎是主观的,很可能是封闭的。”

嗯,我知道,但还是觉得值得在这里问一下


我已经被告知很多次,我应该使用提示数据库和自动,因为它是有史以来最好的东西。然而,在我尝试使用它的几次中,我完全被琐碎的细节所困扰。有一件事一直在发生

Section Annoying.

Variable T : Type.
Variable P : T -> Prop.

Axiom notP : forall x, ~ P x.
Hint Resolve notP.

Goal forall (x : T), P x -> False.
intros x.
auto. (* nothing... *)
replace (P x -> False) with (~ P x) by reflexivity.
(* fold not. does not work, don't know why either but that is not the point here... *)
auto.
Qed.

End Annoying.


因此,我的问题是:人们如何使用提示数据库而不会遇到这样的麻烦。对于一个有效的提示数据库来说,有什么好的经验法则吗?

自动将未修改的定理应用于目标。它通过对其形状的句法观察来寻找要应用的定理。所以定理notP只适用于形式的目标

~p

形式px->False的目标在语法上不在此形式中。事实上,自动策略的工作方式如下:首先尽可能多地使用介绍,然后尝试应用定理。所以你的目标被转化为

H : P x ========= False H:Px ========= 假的 然后,它尝试应用可以证明错误的定理。不幸的是,它只尝试应用那些不需要猜测实例化的定理(这些定理可以与策略一起使用,并且不需要“with”扩展)。所以一个定理,它的形式是 auto永远不会使用“forall a,pa->False”,因为apply会抱怨它不知道如何实例化a

所以,汽车的好的候选证明是证明,你可以只使用介绍和应用,没有实例展开或应用。。。在没有手动将定理应用于参数的情况下,并且在每个步骤中,定理最右边的公式(箭头末端)使用谓词作为目标结论中出现的谓词

你这个恼人的例子之所以有效,是因为在某一点上,主公式的目标是“~px”,所以主符号不是,而auto的表中有这个主符号的引理notP

下面是一个很好的例子:

Variable my_le : nat -> nat -> Prop. Hypotheses my_le_n : forall x, my_le x x. Hypothesis my_le_S : forall x y, my_le x y -> my_le x (S y). Hint Resolve my_le_n my_le_S. Lemma toto : my_le 10 14. Proof. auto. Qed. 变量my_le:nat->nat->Prop。 我的假设:对于所有x,我的x。 假设my_le_S:对于所有xy,my_le x y->my_le x(sy)。 提示解决我的问题。 莱玛·托托:我的孩子。 证明。 自动的。 Qed。
在Hint命令之后,auto的表中有两个引理“my_le_n”和“my_le_S”,当目标主符号是my_le时使用。当看“my_le 10 14”时,它会依次尝试这两个引理。第一个失败,但第二个应用并生成一个新目标“my_le 10 13”,可以重复多次,直到auto成功应用“my_le en”。所以auto探索了一个可能性树,其中分支来自于一个事实,即可能有几个定理适用于给定的目标。此外,分支的长度被限制为5,因此我的10 15将不会自动解决。您可以通过向auto提供数字参数来更改分支的长度。因此,“auto 20”将解决“my_le 10 15”和其他类似的问题。

我将把这作为一个答案,即使我知道它的大部分内容。我只是想知道人们是否在引理中扩展了
not
的定义,这将进入hintdb,以便在某种策略将
not
s变为
->False
s时,它们都会起作用。。。我想不会,所以有点烦人。