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,它至少包含规则或其经典变体规则。这些方法根据所涉及的最顶层逻辑连接词应用单一的标准消除或引入规则。没有单独的默认终端方法。在最后一步中,任何剩余的目标都是通过假设来解决的。“不过,我不确定是否有一种简单的方法可以得到事实的名称。