--- a/src/Pure/more_thm.ML Sat Nov 30 16:42:22 2024 +0100
+++ b/src/Pure/more_thm.ML Sat Nov 30 17:14:30 2024 +0100
@@ -353,8 +353,7 @@
fun used_vars i =
Name.build_context o
- (Thm.fold_terms {hyps = false} o Term.fold_aterms)
- (fn Var ((x, j), _) => i = j ? Name.declare x | _ => I);
+ Thm.fold_terms {hyps = false} (Term.declare_var_names (fn j => i = j));
fun dest_all ct used =
(case Thm.term_of ct of
--- a/src/Pure/term.ML Sat Nov 30 16:42:22 2024 +0100
+++ b/src/Pure/term.ML Sat Nov 30 17:14:30 2024 +0100
@@ -153,7 +153,10 @@
val add_consts: term -> (string * typ) list -> (string * typ) list
val declare_tfree_namesT: typ -> Name.context -> Name.context
val declare_tfree_names: term -> Name.context -> Name.context
+ val declare_tvar_namesT: (int -> bool) -> typ -> Name.context -> Name.context
+ val declare_tvar_names: (int -> bool) -> term -> Name.context -> Name.context
val declare_free_names: term -> Name.context -> Name.context
+ val declare_var_names: (int -> bool) -> term -> Name.context -> Name.context
val hidden_polymorphism: term -> (indexname * sort) list
val declare_term_names: term -> Name.context -> Name.context
val variant_frees: term -> (string * 'a) list -> (string * 'a) list
@@ -576,7 +579,10 @@
val add_consts = fold_aterms (fn Const c => insert (op =) c | _ => I);
val declare_tfree_namesT = fold_atyps (fn TFree (a, _) => Name.declare a | _ => I);
val declare_tfree_names = fold_types declare_tfree_namesT;
+fun declare_tvar_namesT pred = fold_atyps (fn TVar ((a, i), _) => pred i ? Name.declare a | _ => I);
+val declare_tvar_names = fold_types o declare_tvar_namesT;
val declare_free_names = fold_aterms (fn Free (x, _) => Name.declare x | _ => I);
+fun declare_var_names pred = fold_aterms (fn Var ((x, i), _) => pred i ? Name.declare x | _ => I);
(*extra type variables in a term, not covered by its type*)
fun hidden_polymorphism t =
--- a/src/Pure/type.ML Sat Nov 30 16:42:22 2024 +0100
+++ b/src/Pure/type.ML Sat Nov 30 17:14:30 2024 +0100
@@ -345,9 +345,7 @@
val xs =
build (t |> (Term.fold_types o Term.fold_atyps)
(fn TFree v => if TFrees.defined fixed v then I else insert (op =) v | _ => I));
- val used =
- Name.build_context (t |>
- (fold_types o fold_atyps) (fn TVar ((a, _), _) => Name.declare a | _ => I));
+ val used = Name.build_context (t |> Term.declare_tvar_names (K true));
val ys = #1 (fold_map Name.variant (map #1 xs) used);
in map2 (fn (a, S) => fn b => ((a, S), ((b, 0), S))) xs ys end;
--- a/src/Tools/IsaPlanner/isand.ML Sat Nov 30 16:42:22 2024 +0100
+++ b/src/Tools/IsaPlanner/isand.ML Sat Nov 30 17:14:30 2024 +0100
@@ -56,10 +56,7 @@
let
val names =
Variable.names_of ctxt
- |> (fold o fold_aterms)
- (fn Var ((a, _), _) => Name.declare a
- | Free (a, _) => Name.declare a
- | _ => I) ts;
+ |> fold (fn t => Term.declare_free_names t #> Term.declare_var_names (K true) t) ts;
in fst (fold_map Name.variant xs names) end;
(* fix parameters of a subgoal "i", as free variables, and create an