isabelle - (暂时)禁用 Eisbach 方法中的回溯

标签 isabelle

我有一个生成大量可能状态的方法,当使用 , 链接它时与(有条件的)failtactic no_tac ,由此产生的组合方法需要很长时间才能终止并导致 Isabelle 界面滞后。但是,当使用两个 apply 分别应用相同的方法时s,终止非常快。有没有办法强制 Eisbach 方法在失败时不回溯,而是立即失败? (本质上,功能是 apply <method> apply cond_fail 而不是 apply (<method>, cond_fail) ?)

最佳答案

我不认为有一种方法可以直接在 vanilla Eisbach 中执行此操作,但定义新的组合器(即高阶方法)相对容易。

我们在 https://github.com/seL4/l4v/blob/796887/lib/Eisbach_Methods.thy 中有一些这样的.具体针对您的情况,determ方法看起来像你想要的。它提升了 ML DETERM组合器进入艾斯巴赫:

method_setup determ =
 \<open>Method.text_closure >> (fn m => fn ctxt => fn facts =>
   let
     fun tac st' = method_evaluate m ctxt facts st'
   in SIMPLE_METHOD (DETERM tac) facts end)
\<close>

( https://github.com/seL4/l4v/blob/796887/lib/Eisbach_Methods.thy#L59 )

这些组合器已被添加到 Isabelle 发行版中,应该会出现在即将发布的 Isabelle2018 版本中。

DETERM切断所有回溯,只传递第一个选择。有了那个

apply (determ <f>, g)

应该等同于

apply f
apply g

关于isabelle - (暂时)禁用 Eisbach 方法中的回溯,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49265810/

相关文章:

isabelle - 使用集合理解的函数的终止证明

set - 如何在 Isabelle 中为子集做证明

isabelle - 如何证明伊莎贝尔极大值交换律

proof - 在伊莎贝尔证明时跳过一个子目标

需要 Isabelle/HOL 教程/文档

Isabelle2016 和 Proof General

functional-programming - 伊莎贝尔结构证明

isabelle - 如何保证类型变量的实例化不同

Isabelle:将引理调整为 `rule` 方法所需的形式

isabelle - Isabelle 中的商型模式是什么?