Isabelle 我们怎么能强迫伊莎贝尔向我们揭示它的规则';证据开始时,在Isar的背景中应用了什么?
我试图证明:Isabelle 我们怎么能强迫伊莎贝尔向我们揭示它的规则';证据开始时,在Isar的背景中应用了什么?,isabelle,theorem-proving,hol,Isabelle,Theorem Proving,Hol,我试图证明: lemma shows "¬ ev (Suc 0)" 我做到了: lemma shows "¬ ev (Suc 0)" proof (rule notI) assume "ev (Suc 0)" then show False proof 它给了我非常漂亮的目标: proof (state) goal (2 subgoals): 1. Suc 0 = 0 ⟹ False 2. ⋀n. ⟦Suc 0 = Suc (Suc n); ev n⟧ ⟹ Fals
lemma
shows "¬ ev (Suc 0)"
我做到了:
lemma
shows "¬ ev (Suc 0)"
proof (rule notI)
assume "ev (Suc 0)"
then show False
proof
它给了我非常漂亮的目标:
proof (state)
goal (2 subgoals):
1. Suc 0 = 0 ⟹ False
2. ⋀n. ⟦Suc 0 = Suc (Suc n); ev n⟧ ⟹ False
这可能会让我的证明更具可读性
它似乎在后台应用了某种案例。但是当我写案例时,证明立即完成,而不是显式地显示上面的规则反转案例。见:
lemma
shows "¬ ev (Suc 0)"
proof (rule notI)
assume "ev (Suc 0)"
then show False
proof (cases)
这表明:
proof (state)
goal:
No subgoals!
这意味着我可以放置一个qed
我怎样才能确切地知道Isar在Isabelle中自动执行的规则是什么?正如在对您的问题的评论中所指出的,在您的情况下,
proof
归结为proof rule
。规则
方法(无任何参数)应用一些拟合引入/消除规则。您可以使用rule\u trace
属性找出它是哪一个:
using [[rule_trace]] apply rule
(或者您可以在上面的某个地方全局地执行声明[[rule\u trace]]
,或者在Isar证明中执行注释[[rule\u trace]]
)
这是说
proof (prove)
goal (2 subgoals):
1. Suc 0 = 0 ⟹ False
2. ⋀n. Suc 0 = Suc (Suc n) ⟹ ev n ⟹ False
rules:
ev ?a ⟹ (?a = 0 ⟹ ?P) ⟹ (⋀n. ?a = Suc (Suc n) ⟹ ev n ⟹ ?P) ⟹ ?P
不幸的是,它没有给你名字。但是很明显,这个规则必须来自于归纳的命令,因为你自己没有证明它。如果在归纳
命令之后立即执行打印定理
命令,您会发现这就是定理ev.cases
,这也是cases
方法使用的方法(除了cases
方法还对目标进行了一些后处理简化,如上所述)
inclusive
命令将ev.cases
规则注册为elim?
规则,这意味着自动化将不使用该规则,但如果您执行类似于apply rule
的操作,则将予以考虑。来自Isar参考文件第6.4.2节:除非用户明确给出,否则默认的初始方法是standard,它至少包含规则或其经典变体规则。这些方法根据所涉及的最顶层逻辑连接词应用单一的标准消除或引入规则。没有单独的默认终端方法。在最后一步中,任何剩余的目标都是通过假设来解决的。“不过,我不确定是否有一种简单的方法可以得到事实的名称。