你问了很多问题,但我会把你的标题和第二段作为你主要抱怨的本质,我最终给出了一个冗长的答案,可以总结为,
- 大锤是三管齐下的武器库的一部分,
- 你变得更有经验,不断的实验,伴随着试错是启发式的,
- 不使用 Sledgehammer 返回的许多证明是使用 Sledgehammer 的重要组成部分,并且
- 和选项可以通过自动回放证明来节省您一些时间和挫败感,这会为您提供时间信息,有时会显示找到的证明将失败
minimize
。preplay_timeout
从你的第二段开始,你说:
我经常遇到大锤找到证据的问题。但是后来我尝试了一下,但证明并没有终止。我猜大锤是伊莎贝尔最重要的部分之一,...
大锤很重要,但我认为它是三管齐下的武器库的一部分,其中三个部分是:
- 使用自然演绎的详细证明步骤。
- 自动证明方法,例如
auto
、simp
、rule
等。其中很大一部分将是创建自己的simp
重写规则,并学习将定理与rule
无数其他自动证明方法一起使用。
- 大锤调用自动定理证明器 (ATP)。使用第 1 步和第 2 步,有经验,用于设置 Sledgehammer。经验很重要。您可能会使用
auto
来简化事情以使 Sledgehammer 成功,但您可能不会使用auto
,因为它会将公式扩展到 Sledgehammer 没有机会成功的地方。
...但是如果证明失败,它会变得很烦人。
所以在这里,你和我对 Sledgehammer 的期望是不同的。这些天来,如果我生气,我会生气,因为我必须工作 30 多秒才能证明一个定理。如果我对某个特定的 Sledgehammer 证明失败感到非常失望,那是因为我已经尝试证明一个定理数小时或数天而没有成功。
使用 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
"]
选项minimize=smart
和preplay_timeout=10
与 Sledgehammer 在找到它们后播放证明有关。不使用 Sledgehammer 找到的许多证明是使用 Sledgehammer 的重要部分,而证明回放是剔除证明的重要部分。
我自己,我很少处理不会终止的 Sledgehammer 证明,但这可能是因为我一开始就有选择性。
我对 Sledgehammer 证明的第一个标准是它相当快,所以当 Sledgehammer 报告它发现了一个超过 3 秒的证明时,我什至不尝试使用它,除非我迫切地想知道一个可以证明定理。
对我来说 Sledgehammer 的使用通常是这样的:
- 陈述一个定理,看看我是否能幸运地使用大锤。
- 如果 Sledgehammer 给我一个 30 毫秒或更短的证明,那么我认为这是一个很好的证明,但我仍然尝试使用
try
isar-ref.pdf 第 208 页第 9.4.4 节的自动证明方法。很多时候,我可以在 5 毫秒或更短的时间内得到一个证明。
- 总时间超过 100 毫秒的
metis
证明,我愿意工作 30 分钟或更长时间来尝试获得更快的证明。
- 一个
metis
200 毫秒到 500 毫秒的证明,我将尽我所能尝试将其降低到 100 毫秒以下,这在很多时候意味着转换为详细的证明。
- A
smt
或metis
大于 1 秒的证明我只认为好的作为临时证明。
- 输出面板中 Sledgehammer 报告的大于 3 秒的证明,我通常什至不尝试,因为即使它最终起作用,我也必须努力寻找另一个证明,所以我会宁愿花时间在前面试图找到一个好的证据。
选项 3 启发式
你说,
那么第三个选项呢。我可以应用任何易于遵循的启发式方法吗?
启发式是:
也就是说,启发式是“将大锤用作三管齐下的武器库的一部分”。
启发式方法也是“阅读大量教程和文档,以便您可以在 Sledgehammer 中使用很多其他东西”。Sledgehammer 很强大,但不是无限强大,对于某些定理,您可以使用自己的simp
规则在 0ms 内证明apply(simp)
Sledgehammerapply(auto)
永远不会证明的内容。
对我自己来说,我有大约 150 到 200 个定理,所以“适当”对我来说比以前更有意义。基本上,您尝试按照需要设置的方式设置 Sledgehammer。
Sledgehammer 需要设置的方式有时意味着运行auto
或simp
首先,但有时不是,因为多次运行auto
或simp
将注定 Sledgehammer 失败。
但有时,您甚至不需要metis
Sledgehammer 的证明,除非作为初步证明,直到您找到更好的证明,对我而言,这通常意味着使用自动证明方法进行更快的证明。
我不是 Sledgehammer 的权威,但 Sledgehammer 似乎擅长匹配旧定理的假设和结论,并将假设和结论用于新定理。它不擅长的是证明我通过使用simp
and大大扩展的公式auto
。
我继续以 Sledgehammer 为中心的冗长启发式:
- 使用 Sledgehammer 通过用 Sledgehammer 证明一些您不知道如何证明的定理来启动证明过程。
- 如 tutorial.pdf 第 9 章所述,将您的等价定理转化为
simp
重写规则,以便与 、 、 等自动证明方法一起simp
使用auto
。fastforce
- 将您的一些定理用于与
intro
和一起使用的条件重写规则rule
。
- 最后两个步骤用于完全解决证明步骤或用于“酌情”设置 Sledgehammer。大锤永远不会停止有用,无论你知道多少,当你知道的不多时它非常有用,但只有大锤并不是通往成功的道路。
- 如果 Sledgehammer 无法证明某个定理,则求助于详细证明,从简单的详细证明开始。有时,当 Sledgehammer 无法证明 if-and-only-if 时,将 if-and-only-if 分解为两个条件可以让 Sledgehammer 轻松证明这两个条件。
- 在你证明了很多东西之后,回去优化你的证明。有时,使用您创建的所有重写规则,
simp
并且auto
会神奇地证明事情,并且您会摆脱metis
Sledgehammer 为您找到的一些证明。有时,您会使用 Sledgehammer 找到metis
更快的证明。
使用此命令优化时序:
ML_command "Toplevel.timing := true"
还有另一个 SO 帖子提供了更多详细信息。