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
。大多数情况下,默认值
与规则
的作用相同,但例如,为了证明它调用的语言环境谓词
展开语言环境
我不知道有什么方法可以知道那里到底发生了什么