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

使用where属性实例化以数字结尾的变量(Isabelle),isabelle,Isabelle,在Isabelle中,给定一个定理thm,其中包含一个自由变量x(更准确地说,是一个原理图变量),可以使用where-属性实例化x 例如,thm[其中x=5] 如果变量名以数字结尾,例如,thm[where x1=5],则无法实现此功能。这似乎是由于该变量在定理中表示为“?x1.0”,而不是“?x1” 下面的理论给出了一个例子 我的问题是:如何在这样一个定理中实例化x1?(例如,下面理论中的定理。) 我知道的“解决方案”: -使用thm[of 1]而不是thm[其中x1=1]。这在某些情况下是可

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

例如,
thm[其中x=5]

如果变量名以数字结尾,例如,
thm[where x1=5]
,则无法实现此功能。这似乎是由于该变量在定理中表示为“?x1.0”,而不是“?x1”

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

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

我知道的“解决方案”: -使用
thm[of 1]
而不是
thm[其中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 *)

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

thm l2[where ?x1.0 = 1]

哦,谢谢。我试过
thml2[where”?x1.0“=1]
。接近。。。你知道这是否是一个有意的设计选择吗?(
x1=1
对我来说似乎更直观、可读性更强。)查看
的源代码(尤其是lexicon.ML中的
scan_vname
)似乎不难修复,但可能还有其他我不知道的技术原因……问号符号也适用于不以数字结尾的变量(例如,
thm l1[where?x.0=1]
),因此这实际上是一般形式,但很少使用。结尾有一个数字的缩写
thm l[其中x2=…]
实际上指的是变量
?x.2
,而不是
?x2.0
,可能是出于历史原因。这种非零指数在实践中相对较少,但它们确实出现在定理中,例如,从
{fix x假设“x=x”}
导出的规则。因此,目前,符号
x1
不能用于表示x1.0。当然可以改变这一点。。。