Use Var to maintain the difference between function and locale parameters
authornipkow
Sun, 17 Nov 2024 09:50:54 +0100
changeset 81466 bb82ebb18b5d
parent 81465 42b0f923fd82
child 81467 3fab5b28027d
child 81474 a3dc66165d15
Use Var to maintain the difference between function and locale parameters
src/HOL/Tools/Function/function.ML
--- a/src/HOL/Tools/Function/function.ML	Sat Nov 16 22:46:33 2024 +0100
+++ b/src/HOL/Tools/Function/function.ML	Sun Nov 17 09:50:54 2024 +0100
@@ -76,10 +76,9 @@
     val spec = map (fn (bnd, prop) => (bnd, [prop])) spec0
     val (eqs, post, sort_cont, cnames) = get_preproc lthy config ctxt' fixes spec
     val props0 = map snd spec0
-    val vars0 = map Term.strip_all_vars props0
-    val input_eqns =
-      map (fn (ps,prop) => Term.subst_bounds (rev (map Free ps), Term.strip_all_body prop))
-        (vars0 ~~ props0)
+    fun varify (ps,prop) =
+      Term.subst_bounds (rev (map (fn (a,T) => Var((a,0),T)) ps), Term.strip_all_body prop)
+    val input_eqns = map varify (map Term.strip_all_vars props0 ~~ props0)
     val fnames = map (fst o fst) fixes0
     val defname = Binding.conglomerate fnames;