当我apply (rule)
在应用脚本中使用时,通常会选择适当的规则。这同样适用proof
于结构化证明。我在哪里可以了解/查找使用的规则的名称?
3 回答
您可以尝试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
; 我不确定它们是否可以直接确定。
声明为Pure.intro
/ intro
/ iff
(或其变体之一?
)的所有!
内容都被视为默认引入规则(即,如果没有链接当前事实)。同样,声明为Pure.elim
//的所有内容都被视为默认消除规则(即,如果当前事实被链接)elim
。iff
通常后面的声明优先于前面的声明(至少如果使用相同类型的声明......混合,例如,Pure.intro?
withintro
等,可能会产生不同的结果)。
然而,这只是回答了原则上考虑什么样的规则。我不知道直接找出应用了哪个规则的方法。但是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
其他答案已经告诉您如何确定应用了哪些引理rule
。注意proof
不是调用的rule
,而是方法default
。大多数时候,default
与 做相同rule
的事情,但例如证明它调用的语言环境谓词unfold_locales
。
我不知道有什么方法可以看到那里实际发生了什么。