次のロケール定義を検討してください。
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
またはの見出語の定義を操作しようとする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のロケール内で作業して、そのようなロケール変数にさらされないようにする方法はありますか?