我正在学习Coq,并且使用的教材是 (CPDT),在证明中广泛使用了 auto
。
由于我正在学习,因此我认为看到 auto
在幕后执行的确切步骤可能会对我有所帮助(起初尽量减少神秘感)。是否有任何方法可以强制它显示计算证明时使用的确切策略或技术?
如果没有,请问是否有地方详细介绍了 auto
所做的事情?
info
,或在调用策略之前和之后使用Show Proof.
,以便发现差异。info
,以显示它所采取的特定证明步骤。info_
版本的某些策略,请阅读错误消息如果需要。)Show Proof.
。它将向您显示带有空洞的当前构建术语,并向您显示每个当前目标应该填充的空洞。Qed。
(或Defined.
)的证明后,您还可以使用Print term.
来查看构建的术语,其中term
是定理/术语的名称。omega
、crush
等)构建的,则可能无法阅读。基本上,您只会在感兴趣的术语的某个特定位置上扫描它。如果超过10行,请不要试图以这种粗略的格式阅读它! :)关于这些内容,您可以在使用 Set Printing All
之前,让 Coq 打印所有展开、显式版本的内容。虽然这样会变得更加冗长,但它可以帮助您了解隐含参数的值。
这些是我能够想到的所有内容,但可能还有更多。
至于策略的作用,通常最好的答案可以在文档中找到:
http://coq.inria.fr/distrib/V8.4/refman/Reference-Manual011.html#@tactic155
基本上,auto
尝试使用提供的所有提示(取决于您使用的数据库),并组合它们以解决目标,您可以指定一定的深度。默认情况下,数据库为core
,深度为5
。
关于此更多信息可以在这里找到:
http://coq.inria.fr/distrib/V8.4/refman/Reference-Manual011.html#Hints-databases
info_auto
仅显示“成功路径”。要查看auto
尝试了什么,可以使用debug auto.
:它会显示所有失败(!)和成功的内容。 - Anton Trunov