mrs*_*eve 9 theorem-proving isabelle
通常我有问题sledgehammer找到证据,但是当我插入它时,它不会终止.我猜sledgehammer是Isabelle最重要的部分之一,但如果证据失败则会变得很烦人.
在Sledgehammer教程中,有一个小章节"为什么Metis无法重建证明?".
它列出:
isar_proofs选项以获得逐步的Isar证明,其中每个步骤都是正确的metis.由于步骤相当小,
metis因此更有可能重播它们.smt证明方法而不是metis.它通常更强大,但您需要使用Z3重放证明,信任SMT求解器或使用证书.blast或者auto证明方法,通过传递必要的事实unfolding,using,intro:,elim:,dest:,或simp:适当.问题是第一个选项使证明更加冗长,并且还涉及手动干预.第二种选择很少有效.
那么第三种选择呢?我可以使用任何易于遵循的启发式方法吗?
unfolding和之间有什么区别using?也有关于如何使用的最佳做法intro:,elim:以及dest:从失败的metis证明吗?
部分例子
proof-
have "(det (?lm)) = (det (transpose ?lm))" by (smt det_transpose)
then have "(det (?lm)) = [...][not shown]"
unfolding det_transpose transpose_mat_factor_col by auto
then show ?thesis [...][not shown]
qed
Run Code Online (Sandbox Code Playgroud)
我想摆脱证明的第一行,因为这条线似乎微不足道.如果我删除了第一行,sledgehammer仍然会找到证据,但是这个证明失败了(不会终止).
chr*_*ris 11
关于你的陈述大锤是伊莎贝尔最重要的部分之一:你永远不需要大锤就能证明成功.但当然大锤非常方便,可以节省大量繁琐的推理.因此,对于那些没有花费多年时间使用它的人来说,Isabelle更有用,这绝对是一个非常重要的部分(即使是那些大锤每天都能提高效率).
来到你的问题
尝试
blast或者auto证明方法,通过传递必要的事实unfolding,using,intro:,elim:,dest:,或simp:适当.
[...]
那么[这]选项怎么样?我可以使用任何易于遵循的启发式方法吗?
确实有:
unfolding:这个(递归地)展开方程,即它非常相似apply (simp only: ...).启发式是,当你没有通过simp: ...尝试获得预期结果时unfolding ...(可能是其他方程干扰的情况).
using:这用于向当前子目标添加其他假设.启发式是,只要事实不适合下面的模式之一,请尝试using改为.
intro::这用于引入规则,即,每当满足某些假设时,可以引入一些连接(或更一般地恒定)的形式.
示例:( A ==> B ==> A & B引入的常量为(&)).
elim::这用于消除规则,即,从存在某个连接词(或更一般地说是常数)的形式,某些事实可以作为附加假设得出结论.
示例:( A & B ==> (A ==> B ==> P) ==> P其中常量(&)被消除,有利于显式拥有A和B作为假设).注意结论的一般形式(与主要前提无关A & B),这对于不松散的可证明性很重要(另见dest:).
dest::这用于销毁规则,即,从存在某个常数的形式,可以直接得出一些事实.
示例:( A & B ==> B请注意,A结论中保留的信息将丢失,与elim:示例中的不同.)
simp::这用于简化规则,即(条件)方程式,它们总是从左到右应用(因此有时候添加[symmetric]到事实中是有用的,以便从右到左应用它,但要注意不确定,因为很容易以这种方式引入循环派生).
说完这些之后,通常只有经验可以让您决定在证明中最好地使用给定事实的方式.当我sledgehammer在Isar 得到一个太慢的证据时,我通常会做的是检查找到的证据使用的事实.然后按上面的方式对它们进行分类,auto适当调用,如果没有完全解决目标,sledgehammer再次应用(希望这次提供"更容易"的证明).
小智 5
你问了很多问题,但我会把你的标题和第二段作为你主要抱怨的本质,我最终会给出一个冗长的答案,可以总结为,
minimize和preplay_timeout选项可以通过自动打回的证明,它给你定时信息,有时显示,所发现的证据将无法为你节省时间和挫折。从你的第二段开始,你说:
很多时候我都会遇到 Sledgehammer 找到证明的问题。但后来我尝试了一下,但证明并没有终止。我猜大锤是伊莎贝尔最重要的部分之一,...
大锤很重要,但我认为它是三管齐下的武器库的一部分,其中三个部分是:
auto,simp,rule,等。这将是创建自己的很大一部分simp重写规则,并学习使用与定理rule和其他自动证明方法无数。auto简化事情以使 Sledgehammer 成功,但您可能不会使用,auto因为它会将公式扩展到 Sledgehammer 没有机会成功的地方。...但是如果证明失败,那就很烦人了。
所以在这里,你和我对 Sledgehammer 的期望是不同的。这些天,如果我生气,我会生气,因为我将不得不工作 30 秒以上来证明一个定理。如果我对某个特定的 Sledgehammer 证明失败感到非常失望,那是因为我一直试图证明一个定理几个小时或几天没有成功。
自动化有时可以减轻挫折感。单击 Sledgehammer 证明,却发现它失败了,这令人沮丧。这是我目前使用 Sledgehammer 的方式,除非我开始急于求证:
sledgehammer_params[minimize=smart,preplay_timeout=10,timeout=60,verbose=true,
max_relevant=smart,provers="
remote_vampire metis remote_satallax z3_tptp remote_e
remote_e_tofof spass remote_e_sine e z3 yices
"]
Run Code Online (Sandbox Code Playgroud)
选项minimize=smart和preplay_timeout=10与 Sledgehammer 在找到它们后回放校样有关。不使用 Sledgehammer 找到的许多证明是使用 Sledgehammer 的重要组成部分,而证明回放是剔除证明的重要组成部分。
就我个人而言,我不太会处理不终止的 Sledgehammer 证明,但这可能是因为我有选择性地开始。
我对 Sledgehammer 证明的第一个标准是它相当快,所以当 Sledgehammer 报告说它找到了一个超过 3 秒长的证明时,我什至不会尝试使用它,除非我非常想知道定理可以证明。
我对 Sledgehammer 的使用通常是这样的:
tryisar-ref.pdf 第 208 页第 9.4.4 节中的自动证明方法。很多时候,我可以在 5 毫秒或更短的时间内获得证明。metis超过100ms的总时间证明,我愿意工作30分钟以上,试图获得更快的证明。metis200毫秒的500毫秒来证明,我会求助于我知道,试图把它降低到低于100毫秒,其多次手段转化为详细的证明一切。smtormetis大于1秒的证明我只认为好的作为临时证明。你说,
那么第三个选项呢。是否有任何我可以应用的易于遵循的启发式方法?
启发式是:
也就是说,启发式是“使用大锤作为三管齐下的武器库的一部分”。
启发式也是“阅读大量教程和文档,以便您有很多其他东西可以与 Sledgehammer 一起使用”。Sledgehammer 是强大的,但它不是无限强大的,对于一些定理,你可以使用自己的simp规则在 0ms 内证明apply(simp)或者apply(auto)Sledgehammer 永远不会证明的。
对我自己来说,我有大约 150 到 200 个定理,所以“酌情”对我来说比过去更有意义。基本上,您尝试按照需要设置的方式设置 Sledgehammer。
Sledgehammer 需要设置的方式有时意味着运行auto或simp首先,但有时不是,因为多次运行auto或simp将注定 Sledgehammer 失败。
但有时,您甚至不需要metisSledgehammer的证明,除非作为初步证明,直到您找到更好的证明,对我来说,这通常意味着使用自动证明方法更快地证明。
我不是 Sledgehammer 的权威,但 Sledgehammer 似乎擅长匹配旧定理的假设和结论,并将假设和结论用于新定理。它不擅长的是证明我通过使用simp和大大扩展的公式auto。
我继续以 Sledgehammer 为中心的冗长启发式:
simp带自动证明的方法,如使用重写规则simp,auto,fastforce等,在tutorial.pdf的第9章描述。intro和一起使用rule。simp并auto会奇迹般地被证明的东西,你将摆脱一些metis证据,可以证明大锤找到您。有时,您会使用 Sledgehammer 找到metis更快的证明。使用此命令优化时序:
ML_command "Toplevel.timing := true"
Run Code Online (Sandbox Code Playgroud)
还有另一个 SO 帖子提供了有关它的更多详细信息。
| 归档时间: |
|
| 查看次数: |
1488 次 |
| 最近记录: |