在Coq中,有没有一种方法可以看到陶托运用的战术?

在Coq中,有没有一种方法可以看到陶托运用的战术?,coq,coq-tactic,Coq,Coq Tactic,有没有一种方法可以看出陶托所采用的战术?也就是说,运行tauto并获取要应用的策略列表(不包括tauto)?tauto是直接用OCaml编写的策略,因此它不应用其他策略-它构造了一个证明术语。但是你可以看看它构造的证明项 例如 结果: (fun (P Q : Prop) (H : P /\ Q) => and_ind (fun (H0 : P) (_ : Q) => H0) H) fun(pq:Prop)(H:p/\Q)对应于简介pqh。然后它使用和_ind以及一个函数作为参数。这

有没有一种方法可以看出陶托所采用的战术?也就是说,运行tauto并获取要应用的策略列表(不包括tauto)?

tauto是直接用OCaml编写的策略,因此它不应用其他策略-它构造了一个证明术语。但是你可以看看它构造的证明项

例如

结果:

(fun (P Q : Prop) (H : P /\ Q) => and_ind (fun (H0 : P) (_ : Q) => H0) H)
fun(pq:Prop)(H:p/\Q)
对应于
简介pqh
。然后它使用
和_ind
以及一个函数作为参数。这对应于
精确(和_ind(fun P'Q'=>P')H)。
。正如您所看到的,技巧在于构造
和_ind
的函数参数

看看这些证明术语是很有启发性的,但是如果你想手动进行证明,你通常会用与tauto不同的方式进行


如果您查看tauto的证明术语,请将您用tauto证明的目标隔离开来-否则证明术语将很难理解。

但是,
tauto
主要是在Ltac中定义的,而不是OCaml,在文件
theory/Init/Tauto.v
中,
theory/Init/Tauto.v
中的代码只是对目标的一些预处理,以使其成为使用较少定义的形式。真正的工作是在通过
声明ML模块“tauto\u plugin”定义的策略中完成的;大多数实际工作是通过Ltac策略
tauto_intuit
完成的,插件只是用来定义一些辅助策略,最明显的是
flatte_逆变{conj,disj}
(它们似乎可以在Ltac中定义,或者至少是近似值)和一些策略来检查归纳类型的形状。
(fun (P Q : Prop) (H : P /\ Q) => and_ind (fun (H0 : P) (_ : Q) => H0) H)