# HG changeset patch # User wenzelm # Date 1439747061 -7200 # Node ID 35a3f66629ad788c75ccaeb93aa6683d97544a54 # Parent ccbf9379e355583ebb9efce4220724559a5273a4 tuned; diff -r ccbf9379e355 -r 35a3f66629ad src/Pure/more_thm.ML --- a/src/Pure/more_thm.ML Sun Aug 16 19:25:08 2015 +0200 +++ b/src/Pure/more_thm.ML Sun Aug 16 19:44:21 2015 +0200 @@ -314,26 +314,28 @@ local -fun forall_elim_vars_aux strip_vars i th = +fun forall_elim_vars_aux vars i th = let val thy = Thm.theory_of_thm th; - val {tpairs, prop, ...} = Thm.rep_thm th; - val add_used = Term.fold_aterms - (fn Var ((x, j), _) => if i = j then insert (op =) x else I | _ => I); - val used = fold (fn (t, u) => add_used t o add_used u) tpairs (add_used prop []); - val vars = strip_vars prop; + val used = + (Thm.fold_terms o Term.fold_aterms) + (fn Var ((x, j), _) => if i = j then insert (op =) x else I | _ => I) th []; val cvars = (Name.variant_list used (map #1 vars), vars) |> ListPair.map (fn (x, (_, T)) => Thm.global_cterm_of thy (Var ((x, i), T))); in fold Thm.forall_elim cvars th end; in -val forall_elim_vars = forall_elim_vars_aux Term.strip_all_vars; +fun forall_elim_vars i th = + forall_elim_vars_aux (Term.strip_all_vars (Thm.prop_of th)) i th; fun forall_elim_var i th = - forall_elim_vars_aux - (fn Const ("Pure.all", _) $ Abs (a, T, _) => [(a, T)] - | _ => raise THM ("forall_elim_vars", i, [th])) i th; + let + val vars = + (case Thm.prop_of th of + Const ("Pure.all", _) $ Abs (a, T, _) => [(a, T)] + | _ => raise THM ("forall_elim_vars", i, [th])); + in forall_elim_vars_aux vars i th end; end;