知道何时在Isabelle中实际使用Isar风格的证明

时间:2019-01-11 22:56:22

标签: automation isabelle proof theorem-proving formal-verification

我正在尝试练习Isar语言的同时进行一项练习。我有以下脚本可用于列表的引理。

lemma "EX ys zs. xs = ys @ zs ∧ (length ys = length zs ∨ length ys = length zs + 1)"
proof -
show ?thesis by blast (* L *) 
qed

伊莎贝尔(Isabelle)似乎接受了这一点,但是有些事情使我感到困惑。

首先,尽管伊莎贝尔(Isabelle)说“成功解决目标”和“没有子目标!”在(* L *)位置,字符串“ by blast”继续突出显示,这向我暗示此方法尚未终止。是这样吗如果是这样,那么根据伊莎贝尔(Isabelle)的说法,我的证明是否真的有效?

通常,我已经注意到,如果我在脚本中完全代替“ blast”编写任何内容,则Isabelle将在输出中声明相同的内容,除了它也可能在底部以红色表示存在有些失败。即使这样,如果我以后写“ qed”,伊莎贝尔似乎也接受了证明的引理。这里发生了什么?我怎么确切知道我的证明何时有效?

任何见解都值得赞赏!

1 个答案:

答案 0 :(得分:1)

如果某些方法没有终止,或者出现了一些明确的失败消息,那么您的证明将不被接受。证明者IDE的并行处理使您可以继续进行,就好像证明会成功一样。

要检查所有证明是否都可以,最安全的方法是运行isabelle build,或者可以在Isabelle / jEdit的理论面板中检查您的理论是否有粗体黑色边框,这也表明处理成功。