了解 Isar 式证明何时在 Isabelle 中真正有效

Knowing when an Isar-style proof is actually valid in Isabelle

我在尝试学习伊萨尔语的同时正在做一个练习。我有以下关于列表引理的脚本。

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

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

首先,虽然Isabelle在位置(*L*)声明了"Successful attempt to solve goal"和"No subgoals!",但是字符串"by blast"继续被高亮显示,这表明我这个方法没有终止。是这样吗?如果是这样,根据 Isabelle,我的证明是否真的有效?

一般来说,我注意到如果我在我的脚本中写任何东西来代替 "blast",那么 Isabelle 将在输出中陈述相同的事情,只是它也可能在底部陈述红色表示有一些失败。即便如此,如果我之后写 "qed",伊莎贝尔似乎接受了证明的引理。这里发生了什么?我怎么知道我的证明何时被认为有效?

非常感谢任何见解!

如果某些方法没有终止,或者有一些明确的失败消息,那么您的证明不被接受。只是 prover-IDE 的并行处理允许你继续,就好像证明已经成功一样。

要检查你的证明是否全部没问题,最安全的方法是运行isabelle build,或者你可以在Isabelle/jEdit的理论面板中检查,你的理论是否得到了粗体黑色边框,也表示处理成功。