Isabelle中的实例化定理

Isabelle中的实例化定理,isabelle,Isabelle,假设某个引理,我们称之为一个方程,证明了方程f(n)=n*n+1适用于所有奇数自然数n(而f是以前定义的函数) 我如何将这个引理实例化为具体的n值,这样我就可以证明,比如f(5)=5*5+1 (有一个引理关键字,我可以用它证明引理inst=an_方程[其中n=5,简化],但这不是我想要的,我想要的是 lemma inst_new : "f(5) = 5*5+1" 但是,由于在我查阅的常用文档中几乎没有任何例子,我不知道如何证明这一点。)你可以用of和where属性在你的定理中实例化自由变量,例

假设某个引理,我们称之为一个方程,证明了方程f(n)=n*n+1适用于所有奇数自然数n(而f是以前定义的函数)

我如何将这个引理实例化为具体的n值,这样我就可以证明,比如f(5)=5*5+1

(有一个
引理
关键字,我可以用它证明
引理inst=an_方程[其中n=5,简化]
,但这不是我想要的,我想要的是

lemma inst_new : "f(5) = 5*5+1"

但是,由于在我查阅的常用文档中几乎没有任何例子,我不知道如何证明这一点。)

你可以用
of
where
属性在你的定理中实例化自由变量,例如
一个方程[of 5]
一个方程[where n=5]
。您还可以实例化其假设,例如,如果您有一个名为
foo
的定理,其形式为
px⟹ qx
你有一个叫做
bar
的定理,形式是
p5
,你可以做
foo[of bar]
得到定理
q5

您可以使用
thm
(例如
thm-foo[of 5]
)检查这些实例化的代码,并使用
使用
来自
等在校样中使用它们

请注意,证明方法也会在需要时实例化定理,例如,如果您有如上所述的定理
foo
说明
pn⟹ Q n
如果你有目标
Q 5
,你可以这样做:

lemma "Q 5"
  apply (rule foo)
然后目标状态将有一个子目标,即
p5

因此,在您的情况下,
根据(规则a_方程)
应该可以做到这一点。类似于
by(simp add:an_等式)
使用simp的_等式
使用blast的_等式
可能也会起作用,但总体来说可能会稍差一些,因为简化器可以先做其他事情,然后规则可能不再适用