证明自动化

时间:2017-08-04 14:31:45

标签: automation coq proof

假设通过应用策略--inspect-brk来获得子目标列表:

T

假设我们知道引理______________________________________(1/10) A ______________________________________(2/10) A' ______________________________________(3/10) A'' 可用于证明LA,但 A''

我的问题是,我们可以使用A'的应用结果对T进行排序,这只留下了一个子目标L吗?

我尝试A'没有成功,因为测序似乎需要证明所有分支/子目标。

我还尝试使用SSReflect中的T;apply L.来控制自动化,这是enter image description here建议的。不幸的是,Coq也陷入困境,并报告by T;apply L.

4 个答案:

答案 0 :(得分:4)

您可以使用try战术,如下所示:

T; try by apply L.

这样做如下。首先,它适用T。然后,在每个子目标上,它应用策略by apply L。如果战术成功,那就好。否则,如果失败,try什么都不做。

答案 1 :(得分:4)

我会推荐Arthur的T; try by apply L.。但如果您需要更多控制权,可以使用

T; [ (* first goal *) now apply L 
   | (* second goal *) now apply L 
   | (* last goal *) idtac ].

答案 2 :(得分:4)

Coq 8.6也有目标选择器,所以如果T创建4个子目标,你可以写

T. 1-2,4: apply L.

除了第三个子目标外,其他所有人都适用。

答案 3 :(得分:2)

如Vilhelm所述,Coq 8.6有目标选择器。

您还可以执行T; only 1,3: apply L.,其优势在于只编号由策略T生成的子目标。

请参阅https://coq.inria.fr/refman/proof-engine/ltac.html#goal-selectors