Isabelle:在没有try0的情况下运行try命令

时间:2014-02-21 08:15:55

标签: isabelle

偶尔有一个引理,try0崩溃了Isabelle / JEdit。过程ID上只有kill -9可用。

当我在相同的情况下拨打try时,Isabelle / JEdit再次崩溃。

在这种情况下是否可以调用try而不运行try0的所有内容(或者忽略所有证明try0会调用的内容)?

(我做了一些谷歌搜索,但找不到任何相关内容。)

2 个答案:

答案 0 :(得分:1)

isar-ref.pdf,第267页,它在try0try上提供了以下注释:

  • try0 尝试使用标准校对方法(auto,simp,blast等)的组合来证明子目标。通过simp:,intro:,elim:和dest:提供的其他事实将传递给相应的证明方法。
  • 尝试尝试使用证明者和反驳者(solve_directquickchecktry0sledgehammer的组合来证明或反驳子目标, nitpick)。

因此,如果说明在Isar参考手册中完整,那么trytry0加上两个证明,solve_directsledgehammer,以及两个反例查找器,{{ 1}}和quickcheck

据我所知,要不运行nitpick的投标人,您必须单独运行try0solve_direct

如果sledgehammer悬挂PIDE,那么它很可能会进入某种类型的错误循环,其中try0中的Auto Methods启用也会导致这些循环,因为它会执行某些操作类似于Plugin Options / Isabelle

我经历过两种循环,在那里我只记得下面列出的第二个循环挂起PIDE:

    try0或调用simp的方法引起的
  1. simp规则循环,例如simpautoforce,{{1 }和fastforce。要停止无限循环,我只需要删除命令。
  2. slowsimp调用bestsimp引起的
  3. blast次循环。对于这些类型,它要么立即发生,要么在我让命令运行5秒左右之后发生。
  4. 您可以尝试缩小哪种自动校样方法导致autoblast挂起PIDE。

    您可以获得这样使用的try0方法的列表(我不知道它显示的证明列表是否完整):

    try

    从该列表中,如果try0正在循环,您知道有lemma "False" try0 (*Trying "simp", "auto", "fast", "fastforce", "force", "blast", "metis", "linarith", and "presburger"...*) oops 规则循环(或apply(simp)规则需要很长时间才能完成),这会使{{1} }},simpsimp循环,因为他们调用auto

    如果fastforce正在循环播放,则可能是forcesimp,因为auto可以调用其中的每一个,因此您可以尝试simp看问blast是否有问题。

    使用Isabelle2013-2,对我来说,PIDE的挂起是因为auto,因为它调用了apply(blast)。据说,这已经为下一个版本修复了。

答案 1 :(得分:1)

我把它作为第二个答案,因为它已经足够不同了。

我正在浏览存储库更改,这导致我发现以下与trytry0相关的Isabelle2013-2 ML文件(但是没有完全锁定,因为我列出了其他文件显示事情正在发生变化):

文件try.ML给出了这一行来源:

val get_tools : theory -> tool list

我想,使用ML,一个人可以获得try使用的工具列表,但如果是这样,那么它可能与isar-ref.pdf的另一个答案中给出的描述相对应。

基本上,有try调用其他工具sledgehammer,这些工具有自己的特殊功能,try0的使用是其工具库solve_direct的一部分,然后是try0使用的全自动校对方法,列于try0.ML

try0.ML部分中引用try0.ML中列出的大多数自动校对方法

  • 9.3简化器[187]
  • 9.4.4全自动方法[211],
  • 12.7模型消除和解决[263]和
  • 12.8通过Gröbner基地进行代数推理[263]。

现在对于管道中的一些更改,取自最新文件或更改集:

从最新的存储库try0中,它提供了try0.ML将尝试的证明方法列表。如果您查看上面的Isabelle2013-2 False,您会发现在尝试证明val full_attrs = (SOME "simp", SOME "intro", SOME "elim", SOME "dest"); val clas_attrs = (NONE, SOME "intro", SOME "elim", SOME "dest"); val simp_attrs = (SOME "add", NONE, NONE, NONE); val metis_attrs = (SOME "", SOME "", SOME "", SOME ""); val no_attrs = (NONE, NONE, NONE, NONE); (* name * ((all_goals, run_if_auto_try), (simp, intro, elim, dest) *) val named_methods = [("simp", ((false, true), simp_attrs)), ("auto", ((true, true), full_attrs)), ("blast", ((false, true), clas_attrs)), ("metis", ((false, true), metis_attrs)), ("linarith", ((false, true), no_attrs)), ("presburger", ((false, true), no_attrs)), ("algebra", ((false, true), no_attrs)), ("fast", ((false, false), clas_attrs)), ("fastforce", ((false, false), full_attrs)), ("force", ((false, false), full_attrs)), ("meson", ((false, false), metis_attrs))] 时,该文件中给出的列表与其他答案中显示的方法列表相同。

此处有一些额外的自动校对方法,目前Isabelle2013-2尚未尝试过。

{{1}}