[英]Complete proof output in Isabelle
如果Isabelle没有找到引理的证据,是否有可能输出所有用于到达子目标的证据方法所做的一切,在这些方法中他们无法继续进行? 这将有助于我看到,他们陷入了哪些途径,这将帮助我指出他们正确的方向。
(而且对于完整的证据,我会发现有一个完整的证明日志很有趣,它显示了为证明某些引理而进行的所有基本推论。)
这个问题听起来类似于这一个 ,这是我前几天回答。 该答案的部分内容也适用于此处。 无论如何,要具体回答这个问题:
并不是的。 对于大多数基本证明方法( rule
等, intro
, fact
, cases
, induct
),它们的行为相对简单,当它们失败时,它几乎总是因为他们试图应用的规则不能与目标一致/他们被给予的前提。 (或者他们不知道首先应用哪条规则)
你可能正在考虑更多自动战术,如blast
, force
, simp
和auto
。 他们中的大多数( blast
, force
, fastforce
, fast
, metis
, meson
, best
等)是“全或无”:他们要么解决的子目标或者什么也不做。 因此,找出它们卡在哪里并且通常人们使用auto
进行这种探索是有点棘手的:你应用auto
,查看其余的子目标,并考虑你可以添加哪些事实/参数来分解这些更多。
simp
的情况类似,只不过它比auto
更少。 simp
是简化器,它使用术语重写,称为simprocs的自定义重写过程,某些求解器(例如用于线性算术),以及一些其他方便的东西,如分离器来摆脱if
表达式。 auto
基本上是simp
与古典推理相结合,这使得它比很多更强大的simp
,也难以预料。 (偶尔, auto
做太多,从而将可证明的目标转变为无法实现的目标)
有一些跟踪工具(例如,简化程序跟踪, 这里解释)。 我认为还有一种方法可以追踪经典推理,但我似乎无法找到它; 也许我错了。 在任何情况下,跟踪工具有时可以帮助解释意外行为,但我不认为它们是您想要在这里使用的那种东西。 更好的方法是了解这些方法尝试了什么类型的东西,然后当simp
或auto
返回一个子目标时,你可以查看这些并确定你预期的simp
和auto
会做什么,以及为什么它不这样做(通常是因为一些遗漏的事实)并修复它。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.