当我在apply-script中使用apply (rule)
时,通常会选择适当的规则。结构化证明中的proof
也是如此。我在哪里可以学习/查找所用规则的名称?
答案 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
。大多数情况下,default
与rule
的效果相同,但是要证明它调用unfold_locales
的语言环境谓词。
我不知道有什么方法可以看到那里发生了什么。