使用where-attribute实例化以数字结尾的变量(Isabelle)

时间:2016-04-01 13:15:38

标签: isabelle

在Isabelle中,给定一个带有自由变量x的定理(更准确地说,是一个原理图变量),可以使用x - 属性来实例化where

,例如thm[where x=5]

如果变量名以数字结尾,我无法完成此工作,例如thm[where x1=5]。这似乎是由于变量在定理中表示为“?x1.0”而不是“?x1”。

下面的理论给出了一个例子。

我的问题是:如何在这样的定理中实例化x1? (例如,下面理论中的定理。)

我所知道的“解决方案”:   - 使用thm[of 1]代替thm[where x1=1]。这在某些情况下有效,但对于有许多变量的定理,这变得非常笨拙和不稳定(变量的顺序可能会改变)。   - 仅使用不以数字结尾的变量名称。这可行,但有时像x1这样的变量在给定的上下文中非常自然。

theory Tmp imports Main begin

lemma l1: "x+y=y+(x::nat)" by simp

thm l1[where x=1]
(* Prints: 1 + ?y = ?y + 1 *)

lemma l2: "x1+x2=x1+(x2::nat)" by simp

thm l2[where x1=1]
(* Prints: No such variable in theorem: "?x1" *)

thm l2
(* Prints: ?x1.0 + ?x2.0 = ?x1.0 + ?x2.0 *)

1 个答案:

答案 0 :(得分:3)

您必须使用原理图变量的全名,包括问号:

thm l2[where ?x1.0 = 1]