Isabelle未能完成证据,即使这与目标相同

时间:2015-10-10 22:27:27

标签: isabelle

我的代码如下。我期望它能够完美地运作,并且确实在最终的“因此”线(由Sledgehammer发现)结束时,Isabelle声称this∀y. ∃x. P x y,并且它的目标只有一个子目标这是∀y. ∃x. P x y。这两个表达式是相同的,所以我认为Isabelle会接受证明完成。

lemma assumes "EX x. ALL y. P x y" shows "ALL y. EX x. P x y"
proof -
 fix y
 assume "EX x. ALL f. P x f"
 then obtain x where "ALL f. P x f" by blast
 hence "P x y" by blast
 hence "ALL y. EX x. P x y" using `∀f. P x f` by blast
qed

我错过了什么?我是伊莎贝尔的初学者,可能很明显。

1 个答案:

答案 0 :(得分:2)

命令havehence仅表示您希望证明的中间事实。你必须明确地说一个声明应该是一个目标。为此,您必须使用showthus代替havehence。因此,如果您将上一个hence替换为thus,则证明应该成功(以下面的备注为模)。您还可以在Output缓冲区中看到(或者通过鼠标悬停在thus上,您会收到一条消息Successful attempt to solve goal by exported rule ...。这表示目标确实已经解除。

顺便说一下,证明不会按预期工作。首先,在您编写proof -的第一步中,您实际上想要对通用量词进行介绍(在下一步中修复y。因此,-应该是替换为适当的规则应用程序,即(rule allI)。因此,您的show语句应为EX x. P x y而不是ALL y. EX x. P x y

其次,引理语句中的assumes已经将该假设添加到上下文中。因此,没有必要在证明中再次假设它。事实上,Isabelle会在showthus抱怨它无法解决目标。因此,您应该删除assume ...部分并将其替换为对该假设的引用,例如,使用预定义的名称assms