我的代码如下。我期望它能够完美地运作,并且确实在最终的“因此”线(由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
我错过了什么?我是伊莎贝尔的初学者,可能很明显。
答案 0 :(得分:2)
命令have
和hence
仅表示您希望证明的中间事实。你必须明确地说一个声明应该是一个目标。为此,您必须使用show
或thus
代替have
或hence
。因此,如果您将上一个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会在show
或thus
抱怨它无法解决目标。因此,您应该删除assume ...
部分并将其替换为对该假设的引用,例如,使用预定义的名称assms
。