Isabelle 伊莎贝尔:不使用try0运行try命令
偶尔会有一个引理,Isabelle 伊莎贝尔:不使用try0运行try命令,isabelle,Isabelle,偶尔会有一个引理,try0使Isabelle/JEdit崩溃。只有进程id上的kill-9起作用 当我在同样的情况下调用try时,Isabelle/JEdit再次崩溃 在这种情况下,是否可以调用try中的所有内容而不运行try0(或者忽略try0将调用的所有内容) (我做了一些谷歌搜索,但找不到任何相关内容。)在第267页,它给出了关于try0和try的以下注释: try0尝试使用标准证明方法(自动、simp、blast等)组合证明子目标。通过simp:、intro:、elim:、dest:提
try0
使Isabelle/JEdit崩溃。只有进程id上的kill-9
起作用
当我在同样的情况下调用try
时,Isabelle/JEdit再次崩溃
在这种情况下,是否可以调用try
中的所有内容而不运行try0
(或者忽略try0
将调用的所有内容)
(我做了一些谷歌搜索,但找不到任何相关内容。)在第267页,它给出了关于try0
和try
的以下注释:
- try0尝试使用标准证明方法(自动、simp、blast等)组合证明子目标。通过simp:、intro:、elim:、dest:提供的其他事实将传递给适当的证明方法
- try尝试使用验证和反驳的组合来证明或反驳子目标(
,solve\u direct
,quickcheck
,try0
,大锤
)挑剔
try
就是try0
加上两个校准器,solve\u direct
和sledgehammer
,以及两个反例查找器,quickcheck
和nitpick
要不运行try0
的校准仪,据我所知,您必须分别运行solve\u direct
和sledgehammer
如果try0
挂起了PIDE,那么它很可能会进入某种类型的坏循环,在Plugin Options/Isabelle
中启用Auto-Methods
也会导致这些循环,因为它的作用类似于try0
我经历过两种循环,我只记得下面列出的第二种循环挂起了PIDE:
simp
规则循环由simp
或调用simp
的方法引起,如auto
、force
、fastforce
、slowsimp
和bestsimp
。要停止无限循环,我只需删除该命令blast
由auto
调用blast
引起的循环。对于这种情况,它要么立即发生,要么在我让命令运行5秒钟左右之后发生try0
和try
挂起PIDE的自动校对方法的范围
您可以获得一个类似这样使用的try0
方法列表(我不知道它显示的校准器列表是否完整):
从该列表中,如果apply(simp)
正在循环,您知道有一个simp
规则循环(或者simp
规则需要很长时间才能完成),这将使自动,fastforce
和force
循环,因为它们调用simp
如果auto
是循环,那么它可能是simp
或blast
,因为auto
可以调用其中的每一个,所以您可以尝试apply(blast)
来查看blast
是否是问题所在
对于Isabelle2013-2,对我来说,PIDE的挂起是因为auto
,因为它调用blast
。据推测,这在下一版本中已经修复。我将此作为第二个答案,因为它已经足够不同了
我浏览了存储库的更改,这使我找到了以下与try
和try0
相关的Isabelle 2013-2 ML文件(但不要完全锁定,因为我列出了其他文件以显示正在更改的内容):
文件try.ML
给出了这行源代码:
val get_tools : theory -> tool list
我想,使用ML,一个人可以得到try
使用的工具列表,但如果是这样,那么它可能与isar-ref.pdf
中的另一个答案中给出的描述相对应
基本上,有调用其他工具的try
,sledgehammer
做它自己特殊的事情,try0
的使用是它的武器库的一部分,solve\u direct
,然后是try0
使用的全自动证明方法,这些方法列在try0.ML
中
try0.ML
中列出的大多数自动验证方法在章节中引用
- 9.3简化器[187]
- 9.4.4全自动方法[211]
- 12.7模型消除和分辨率[263],以及
- 12.8通过Gröbner基进行代数推理[263]
现在,对于即将进行的一些更改,请参考最新的文件或更改集:
- 变更集:
- 变更集:
从最新的存储库try0.ML
,它给出了try0
将尝试的证明方法列表。如果您查看上面的Isabelle2013-2try0.ML
,您将看到该文件中给出的列表与试图证明False
时另一个答案中显示的方法列表相同
在这里,有一些额外的自动证明方法,目前还没有在Isabelle 2013-2中尝试
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))]
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))]