在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 *)
答案 0 :(得分:3)
您必须使用原理图变量的全名,包括问号:
thm l2[where ?x1.0 = 1]