考虑以下语言环境定义:
locale my_locale =
fixes a :: nat
assumes "a > 0"
begin
definition "f n ≡ a + n"
lemma f_pos: "f x > 0"
sorry
end
在 Isar 中,如果我尝试使用f
或 lemma的定义f_pos
,则语言环境假设和固定变量对我来说是隐藏的。例如,thm f_def f_pos
返回:
f ?n ≡ a + ?n
0 < f ?x
正如预期的那样。
然而,如果我试图在 ML 中推理这些术语,“隐藏的”固定变量就会突然暴露出来。ML {* @{thm f_def} |> prop_of *}
,例如,返回:
Const ("==", "nat ⇒ nat ⇒ prop") $
(Const ("TestSimple.my_locale.f", "nat ⇒ nat ⇒ nat") $
Free ("a", "nat") $ Var (("n", 0), "nat")) $
(Const ("Groups.plus_class.plus", "nat ⇒ nat ⇒ nat") $
Free ("a", "nat") $ Var (("n", 0), "nat"))
其中固定变量a
成为函数的参数f
。
有没有办法能够在 ML 的语言环境中工作,这样我就不会接触到这样的语言环境变量?