&引用;冗长的;Coq中的自动

&引用;冗长的;Coq中的自动,coq,verbose,Coq,Verbose,我正在学习Coq,我正在学习的书,()在校样中大量使用了auto 由于我正在学习,我认为准确地了解auto在引擎盖下所做的事情可能会对我有所帮助(越早变魔术越好)。有没有办法强迫它确切地展示它在计算证据时使用的战术或技术 如果没有,是否有一个地方详细说明了auto的具体功能?有多种方法可以查看发动机罩下的情况 TLDR:将info放在你的战术之前,或者使用显示证据。在调用战术之前和之后,找出差异 要查看某个特定的战术调用一直在做什么,您可以使用info前缀is,以显示它所采取的特定验证步骤 (

我正在学习Coq,我正在学习的书,()在校样中大量使用了
auto

由于我正在学习,我认为准确地了解
auto
在引擎盖下所做的事情可能会对我有所帮助(越早变魔术越好)。有没有办法强迫它确切地展示它在计算证据时使用的战术或技术


如果没有,是否有一个地方详细说明了
auto
的具体功能?

有多种方法可以查看发动机罩下的情况

TLDR:将
info
放在你的战术之前,或者使用
显示证据。
在调用战术之前和之后,找出差异


要查看某个特定的战术调用一直在做什么,您可以使用
info
前缀is,以显示它所采取的特定验证步骤

(Coq 8.4可能会打破这一点,我看到他们提供了一些战术的
info\uu
版本,如果需要,请阅读错误消息。)

这可能是初学者想要的,它已经相当简洁了


查看校样中当前发生的情况的另一种方法是使用命令
Show-proof.
。它将向您展示当前构建的带有漏洞的术语,并向您展示当前每个目标应该填补的漏洞

这可能更高级,特别是如果您使用诸如
归纳法
反转法
之类的策略,因为所构建的术语将相当复杂,并且需要您理解归纳法或依赖模式匹配的基本性质(CPDT应该很快教会您)


一旦你用
Qed.
(或
定义了
)完成了一个证明,你也可以要求查看通过使用
打印术语构建的术语。
其中
术语
是定理/术语的名称

这通常是一个又大又难看的术语,需要一些培训才能阅读这些术语。特别是,如果这个术语是通过使用强大的策略(如
omega
crush
等)建立起来的,那么它可能是不可读的。基本上,你只能用它来扫描你感兴趣的术语的某个特定位置。如果超过10行,甚至不用费心读这么粗糙的格式


使用前面的所有功能,您可以预先使用
设置全部打印。
,以便Coq打印所有内容的展开的显式版本。此外,它还很详细,但当您想知道隐式参数的值是什么时,它会有所帮助

这些都是我脑海中能想到的,不过可能还有更多


关于战术的作用,通常最好的答案可以在文档中找到:

基本上,
auto
尝试使用提供的所有提示(取决于您使用的数据库),并将它们结合到一定深度(您可以指定)来解决您的目标。默认情况下,数据库为
core
,深度为
5

有关这方面的更多信息,请访问:


info\u auto
仅显示“成功之路”。要查看
auto
的具体尝试,可以使用
debug auto.
:它显示所有失败(!)和成功。