规范的方法来获得更具体的引理

时间:2013-04-09 10:41:05

标签: isabelle apply-script

说我有一个引理mylem: foo ?a = bar ?a,我需要将它应用于有两次出现foo的目标,例如baz (foo (f p q)) (foo (g r s)),但仅限于其中一个职位。我知道有两种方法可以做到这一点,而不必写出所有pq ...,这可能是复杂的表达式。

  • 使用apply (subst mylem)后跟适当数量(此处为0或1)的back命令。
  • 使用apply (subst mylem[where a = 'foo x y', standard]),其中xy是未绑定的名称。

此处使用subst仅用于演示;我真的想修改引理,例如如果有多个可能的匹配项我希望以这种方式消除歧义,则将其与rule一起使用。

对我来说,这两种方法看起来都很糟糕。有没有更好的方法来实现这一目标?

1 个答案:

答案 0 :(得分:1)

您可以告诉subst应该替换哪个匹配项:subst (i) mylemmylem匹配匹配项下展开i。这样可以省去back步骤。您还可以在subst (1 2) mylem中列出多个职位。如果您想在场所展开mylem,请使用subst (asm) (1 2) mylem

一般来说,我不知道在apply脚本中实现所需的方法。在理论层面,您可以使用lemmasfor子句来概括本地引入的变量:

lemmas mylem' = mylem[where a="f x y"] for x y

在结构化证明中,你可以像这样明确地做到:

{ fix x y note mylem[where a="f x y"] }
note mylem' = this