Coq中的"详细"汽车

use*_*615 10 coq verbose

我正在学习Coq和我正在学习的书,(CPDT)大量使用auto证明.

因为我正在学习,所以我认为确切地看到auto引擎盖下的内容可能会有所帮助(早期越少越好).有没有办法强制它显示它用于计算证据的确切策略或技术?

如果没有,是否有一个地方详细说明了什么auto呢?

Pti*_*val 15

有多种方法可以了解幕后发生的事情.

TLDR:放在info你的战术之前,或Show Proof.在调用策略之前和之后使用并发现差异.


要查看特定策略调用的作用,可以使用前缀info,以显示它所采取的特定证明步骤.

(这可能会被Coq 8.4打破,我看到它们提供info_了某些策略的版本,如果需要,请阅读错误消息.)

这可能是你想要的初学者水平,它已经非常简洁了.


查看证明中当前正在进行的操作的另一种方法是使用该命令Show Proof..它将向您显示当前构建的带孔的术语,并显示您当前每个目标应该填充的孔.

这可能是更先进的,特别是如果你使用的策略,如inductioninversion,作为正在建设将是相当棘手的术语,然后会要求你了解诱导方案或从属模式匹配(其中CPDT应该教你的基本性质很快就好了).


一旦你完成了证明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`:它显示所有失败(!)和成功. (3认同)