Isabelle 获得更具体引理的标准方法
假设我有一个引理Isabelle 获得更具体引理的标准方法,isabelle,apply-script,Isabelle,Apply Script,假设我有一个引理mylem:foo?a=bar?a,我需要将它应用于两次出现foo的目标,例如baz(foo(fpq))(foo(grs)),但只在其中一个位置。我知道有两种方法可以不用写出所有的p,q…,它们可以是复杂的表达式 使用apply(subst mylem)后跟适当数量的back命令 使用apply(subst mylem[其中a='foo x y',standard]),其中x和y是未绑定的名称 这里使用subst只是为了演示;我真的很想修改引理,例如,当有多个可能的匹配时,我
mylem:foo?a=bar?a
,我需要将它应用于两次出现foo
的目标,例如baz(foo(fpq))(foo(grs))
,但只在其中一个位置。我知道有两种方法可以不用写出所有的p
,q
…,它们可以是复杂的表达式
- 使用
后跟适当数量的apply(subst mylem)
命令back
- 使用
,其中apply(subst mylem[其中a='foo x y',standard])
和x
是未绑定的名称y
subst
只是为了演示;我真的很想修改引理,例如,当有多个可能的匹配时,我想用这种方式消除歧义,将它与规则一起使用
在我看来,这两种方法都很糟糕。有没有更好的方法来实现这一点呢?你可以告诉subst
它应该替换哪个事件:subst(i)mylem
在第i
个匹配事件处展开mylem
。这将为您节省back
步骤。您还可以在subst(1 2)mylem
中列出多个位置。如果要在premises中展开mylem
,请使用subst(asm)(1 2)mylem
一般来说,我不知道如何在apply
脚本中实现您想要的内容。在理论层面上,您可以使用引理和for
子句对局部引入的变量进行推广:
lemmas mylem' = mylem[where a="f x y"] for x y
在结构化证明中,您可以这样显式执行:
{ fix x y note mylem[where a="f x y"] }
note mylem' = this
您可以告诉subst
它应该替换哪个引用:subst(i)mylem
在第i
个匹配引用处展开mylem
。这将为您节省back
步骤。您还可以在subst(1 2)mylem
中列出多个位置。如果要在premises中展开mylem
,请使用subst(asm)(1 2)mylem
一般来说,我不知道如何在apply
脚本中实现您想要的内容。在理论层面上,您可以使用引理和for
子句对局部引入的变量进行推广:
lemmas mylem' = mylem[where a="f x y"] for x y
在结构化证明中,您可以这样显式执行:
{ fix x y note mylem[where a="f x y"] }
note mylem' = this
好的,这对subst有效。但是如果我想应用规则,比如说,规则
,并且有多种方法将其与目标统一起来,那该怎么办?我以前不知道用这种方式来应用。我可以在比引理
和解释
更多的位置使用它吗?你可以将用于定理
,这类似于引理
;使用感应式
和感应式
来固定参数;以及出现在解释(解释)
、子本地化
和语言环境中的内部语言环境表达式…=。。。为了+
。好的,这对subst有效。但是如果我想应用规则,比如说,规则
,并且有多种方法将其与目标统一起来,该怎么办?我以前不知道用这种方法来应用。我可以在比引理
和解释
更多的位置使用它吗?你可以将用于定理
,这类似于引理
;使用感应式
和感应式
来固定参数;以及出现在解释(解释)
、子本地化
和语言环境中的内部语言环境表达式…=。。。为了+代码>。