Isabelle 什么规则是';应用(规则)';或';证明';使用?

Isabelle 什么规则是';应用(规则)';或';证明';使用?,isabelle,Isabelle,在应用脚本中使用apply(rule)时,通常会选择适当的规则。结构化证明中的证明也是如此。我在哪里可以了解/查找使用的规则的名称?所有声明为纯的内容。intro/intro/iff(或其?或!变体之一)被视为默认的引入规则(即,如果没有链接当前事实)。类似地,声明为Pure.elim/elim/iff的所有内容都被视为默认消除规则(即,如果当前事实被链接)。通常,后面的声明优先于前面的声明(至少如果使用相同类型的声明…混合,例如,Pure.intro?与intro等,结果可能会不同) 然而,这

在应用脚本中使用
apply(rule)
时,通常会选择适当的规则。结构化证明中的
证明
也是如此。我在哪里可以了解/查找使用的规则的名称?

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

然而,这只是回答了原则上考虑什么样的规则。我不知道有什么方法可以直接找出应用了哪条规则。但是,在你想知道的那条线的正上方,通过
find_定理简介
找到正确的规则是相对直接的。例如:

lemma "A & B"
find_theorems intro
proof
将显示可作为目标介绍规则应用的所有规则
A&B
。其中之一是
proof
应用的默认规则(您将通过获得的子目标识别它)

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

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

您可以按如下方式尝试使用
规则\u 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_定理
;我不确定它们是否可以直接确定。

其他答案已经告诉你如何确定哪些引理是由
规则应用的。请注意,
proof
不调用
规则
,而是调用方法
default
。大多数情况下,
默认值
规则
的作用相同,但例如,为了证明它调用的语言环境谓词
展开语言环境

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