我正在尝试练习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”,伊莎贝尔似乎也接受了证明的引理。这里发生了什么?我怎么确切知道我的证明何时有效?
任何见解都值得赞赏!
答案 0 :(得分:1)
如果某些方法没有终止,或者出现了一些明确的失败消息,那么您的证明将不被接受。证明者IDE的并行处理使您可以继续进行,就好像证明会成功一样。
要检查所有证明是否都可以,最安全的方法是运行isabelle build
,或者可以在Isabelle / jEdit的理论面板中检查您的理论是否有粗体黑色边框,这也表明处理成功。