Isabelle 如何使用Isar中的基本命题规则来证明'A⟶;A∨;B`?
我想将这个证明转化为Isar作为ab练习(让我自己学习Isar),只使用命题逻辑中的基本自然推理规则(ND)(例如,Isabelle 如何使用Isar中的基本命题规则来证明'A⟶;A∨;B`?,isabelle,isar,Isabelle,Isar,我想将这个证明转化为Isar作为ab练习(让我自己学习Isar),只使用命题逻辑中的基本自然推理规则(ND)(例如,notI,notE,impI,impE…等) 我可以在应用脚本中轻松完成: lemma very_simple0: "A ⟶ A ∨ B" apply (rule impI) (* A ⟹ A ∨ B *) thm disjI1 (* ?P ⟹ ?P ∨ ?Q *) apply (rule disjI1) (* A ⟹ A *) by assumption 但我的
notI
,notE
,impI
,impE
…等)
我可以在应用脚本中轻松完成:
lemma very_simple0: "A ⟶ A ∨ B"
apply (rule impI) (* A ⟹ A ∨ B *)
thm disjI1 (* ?P ⟹ ?P ∨ ?Q *)
apply (rule disjI1) (* A ⟹ A *)
by assumption
但我的Isar验证尝试失败了:
lemma very_simple1: "A ⟶ A ∨ B"
proof (* TODO why/how does this introduce A by itself*)
assume A (* probably not neccessary since Isabelle did impI by itself *)
have "A ⟹ A" by disjI1
show "A ⟹ A" by assumption
qed
我的主要错误是:
Undefined method: "disjI1"⌂
这对我来说似乎很神秘,因为规则在之前的应用脚本中运行得很好
我做错了什么
注意,这也会导致错误:
lemma very_simple2: "A ⟶ A ∨ B"
proof impI
assume A (* probably not neccessary since Isabelle did impI by itself *)
have "A ⟹ A" by disjI1
show "A ⟹ A" by assumption
qed
与上述错误相同:
Undefined method: "impI"⌂
为什么?
编辑: 我了解到“方法”仍然需要工作
规则impI
或metis etc
,但脚本仍然失败:
lemma very_simple1: "A ⟶ A ∨ B"
proof (rule impI)
assume A (* probably not neccessary since Isabelle did impI by itself *)
have "A ⟹ A" by (rule disjI1)
show "A ⟹ A" by assumption
qed
编辑2:
lemma very_simple1: "A ⟶ A ∨ B"
proof (rule impI)
have 0: "A ⟹ A ∨ B" by (rule disjI1)
have 1: "A ⟹ A" by assumption
from 1 show "True" by assumption
qed
我仍然无法完成证明。你有几个问题 让我们考虑这个例子:
have "A ⟹ A" by (rule disjI1)
这是失败的,那么首先,定理disjI1到底是什么
thm disjI1
(* ?P ⟹ ?P ∨ ?Q *)
由于规则的工作方式,它尝试将目标“A”与?p匹配∨ ?“Q”,它失败了。现在,如果您的目标具有正确的形式:
have "A ⟹ A ∨ B" by (rule disjI1)
它起作用了
第二个问题:
proof
默认情况下等同于“证明标准”,默认情况下应用某些定理。通常,您将使用“证明-”来应用任何定理
最后,让我们考虑你的例子
lemma very_simple1: "A ⟶ A ∨ B"
proof (rule impI)
在状态视图中,可以看到:
proof (state)
goal (1 subgoal):
1. A ⟹ A ∨ B
这意味着Isar必须看起来像
lemma very_simple1: "A ⟶ A ∨ B"
proof (rule impI)
assume ‹A›
show ‹A ∨ B›
sorry
qed
assume A
show "A \/ B"
show works的事实表明,证明块具有正确的形式
注意:这是一个重要的步骤,尤其是在开始的时候。总是从假设和表演开始。别再写别的了。如果显示不起作用,Isar证明(假设和显示)产生的结构与预期证明(可在状态面板中看到)不匹配
您可以从那里做任何您想做的事情(包括启动一个新的证明块),但是您不能在不更改应用的规则的情况下更改该结构
让我们完成这个证明。我们希望使用假设(因此我们添加一个然后)和规则来证明目标
lemma very_simple1: "A ⟶ A ∨ B"
proof (rule impI)
assume ‹A›
then show ‹A ∨ B›
by (rule disjI1)
qed
总的来说,我认为你应该阅读报告的Isar部分
编辑:
最重要的问题是,您误解了Isar是什么:Isar不是在这里帮助您完成不同的证明步骤(例如证明“A==>A”)。这里是做一个正向证明:你从假设(这里是a)开始,然后得出结论。所以Isar证据看起来像
lemma very_simple1: "A ⟶ A ∨ B"
proof (rule impI)
assume ‹A›
show ‹A ∨ B›
sorry
qed
assume A
show "A \/ B"
你永远不必在证明中重复假设A 您仍然需要编写规则impI
,impI是不够的。注意“证明”等同于“证明标准”,并自动应用一个定理。@MathiasFleury`有“A”⟹ “根据(规则disjI1)`这仍然不起作用。为什么?因为disjI1不是你想要的定理<代码>拥有“A”⟹ “根据假设”
是可行的。我当然正在研究它,但我想用一个比他们给出的Cantor证明更简单的例子(只使用单步证明方法)。为什么我的证明尝试仍然不起作用?我把我的答案扩大了一点。此外,大多数Isabelle方法试图通过auto and co教授更自动化的风格。这是一件好事(也是你应该做的),但如果你只对使用规则感兴趣,你也可以阅读教程第5节什么是“好事”?您提到学习使用自动
和co
了吗?我认为这些是做“真正的证明”的好方法,但我讨厌它们是黑匣子。我不知道他们在做什么,也不知道如何实现我自己的一个。我很好奇,你为什么要把
放在你的证明中?谢谢你的帮助。看来我一点也不了解Isar,特别是考虑到完成证明不需要“假设”命令/规则。也许使用他们的例子(康托的论点)并通读这一章是学习Isar的唯一切实可行的方法。谢谢你迄今为止的帮助,顺便说一句!