我有引理
lemma ex1_variable: "(∃x. ∀z. x = y z) = (∃!x. ∀z. x = y z)"
我在证明中有一个中间陈述
"∀a. ∃P. ∀z. P = Q z a"
我想展示
"∀a. ∃!P. ∀z. P = Q z a".
由于by (rule ex1_variable)
,我无法直接使用∀a
。但是,我觉得应该可以使用类似subst
方法的东西,例如
from `∀a. ∃P. ∀z. P = Q z a` have "∀a. ∃!P. ∀z. P = Q z a"
by (subst_tac ?x="P" and ?y="λx. Q x a" and ?z="z" in ex1_variable)
这样ex1_variable
在当前目标中被替换,但仅在实例化之后。这个特殊的例子不起作用,但有类似的东西吗?
答案 0 :(得分:1)
没有必要明确地实例化引理ex1_variable
,高阶统一将为您做到这一点。由于ex1_variable
是一个相等的语句,你实际上可以使用普通的subst
来证明用实例化的右侧替换左侧的实例。但是你必须告诉subst
查看假设,因为这是左侧实例在你的子目标中发生的地方。所以以下内容应该有效:
lemma ex1_variable: "(∃x. ∀z. x = y z) = (∃!x. ∀z. x = y z)" sorry
notepad begin
fix Q
have "∀a. ∃P. ∀z. P = Q z a" sorry
then have "∀a. ∃!P. ∀z. P = Q z a"
by(subst (asm) ex1_variable)
end
或者,您可以翻转定理的边并将subst
应用于结论:
by(subst ex1_variable[symmetric])