什么规则“适用(规则)”或“证明”使用?

时间:2013-03-21 10:36:55

标签: isabelle

当我在apply-script中使用apply (rule)时,通常会选择适当的规则。结构化证明中的proof也是如此。我在哪里可以学习/查找所用规则的名称?

3 个答案:

答案 0 :(得分:5)

您可以尝试使用rule_trace,如下所示:

lemma "a ∧ b"
  using [[rule_trace]]
  apply rule

将显示在输出中:

rules:
  ?P ⟹ ?Q ⟹ ?P ∧ ?Q
  ?P ⟹ ?Q ⟹ ?P ∧ ?Q 
proof (prove): step 2

goal (2 subgoals):
 1. a
 2. b

如果需要规则名称,则可以尝试使用find_theorems;我不确定他们是否可以直接确定。

答案 1 :(得分:3)

声明为Pure.intro / intro / iff(或其?!个变种之一)的所有内容都被视为默认导入规则(即,如果没有当前事实链接)。同样,声明为Pure.elim / elim / iff的所有内容都被视为默认排除规则(即,如果当前事实被链接在内)。通常后来的声明优先于先前声明(至少如果使用相同类型的声明...混合,例如,Pure.intro?intro等,可能会有不同的结果。)

但是,这只是回答了原则上考虑的规则。我不知道如何直接找出适用的规则。但是,通过find_theorems intro直接在您想知道的线上方找到正确的规则是相对简单的。如,

lemma "A & B"
find_theorems intro
proof

将向您展示可作为介绍规则应用于目标A & B的所有规则。其中一个是proof应用的默认规则(您将通过您获得的子目标识别它)。

对于您可以使用的消除规则,例如

lemma assumes "A | B" shows "P"
using assms
find_theorems elim
proof

答案 2 :(得分:3)

其他答案已经告诉您如何确定rule应用了哪些引理。请注意,proof不会调用rule,而是调用方法default。大多数情况下,defaultrule的效果相同,但是要证明它调用unfold_locales的语言环境谓词。

我不知道有什么方法可以看到那里发生了什么。