src/Pure/drule.ML
changeset 15574 b1d1b5bfc464
parent 15570 8d8c70b41bab
child 15669 2b1f1902505d
--- a/src/Pure/drule.ML	Fri Mar 04 11:44:26 2005 +0100
+++ b/src/Pure/drule.ML	Fri Mar 04 15:07:34 2005 +0100
@@ -343,10 +343,10 @@
   in Library.foldl elim (thm, Term.variantlist (map #1 vs, []) ~~ map #2 vs) end;
 
 (*Specialization over a list of cterms*)
-fun forall_elim_list cts th = Library.foldr (uncurry forall_elim) (rev cts, th);
+fun forall_elim_list cts th = foldr (uncurry forall_elim) th (rev cts);
 
 (* maps A1,...,An |- B   to   [| A1;...;An |] ==> B  *)
-fun implies_intr_list cAs th = Library.foldr (uncurry implies_intr) (cAs,th);
+fun implies_intr_list cAs th = foldr (uncurry implies_intr) th cAs;
 
 (* maps [| A1;...;An |] ==> B and [A1,...,An]   to   B *)
 fun implies_elim_list impth ths = Library.foldl (uncurry implies_elim) (impth,ths);
@@ -364,12 +364,12 @@
 fun zero_var_indexes th =
     let val {prop,sign,tpairs,...} = rep_thm th;
         val (tpair_l, tpair_r) = Library.split_list tpairs;
-        val vars = Library.foldr add_term_vars 
-                         (tpair_r, Library.foldr add_term_vars (tpair_l, (term_vars prop)));
+        val vars = foldr add_term_vars 
+                         (foldr add_term_vars (term_vars prop) tpair_l) tpair_r;
         val bs = Library.foldl add_new_id ([], map (fn Var((a,_),_)=>a) vars)
         val inrs = 
-            Library.foldr add_term_tvars 
-                  (tpair_r, Library.foldr add_term_tvars (tpair_l, (term_tvars prop)));
+            foldr add_term_tvars 
+                  (foldr add_term_tvars (term_tvars prop) tpair_l) tpair_r;
         val nms' = rev(Library.foldl add_new_id ([], map (#1 o #1) inrs));
         val tye = ListPair.map (fn ((v,rs),a) => (v, TVar((a,0),rs)))
                      (inrs, nms')
@@ -423,13 +423,13 @@
  let val fth = freezeT th
      val {prop, tpairs, sign, ...} = rep_thm fth
  in
-   case Library.foldr add_term_vars (prop :: Thm.terms_of_tpairs tpairs, []) of
+   case foldr add_term_vars [] (prop :: Thm.terms_of_tpairs tpairs) of
        [] => (fth, fn i => fn x => x)   (*No vars: nothing to do!*)
      | vars =>
          let fun newName (Var(ix,_), pairs) =
                    let val v = gensym (string_of_indexname ix)
                    in  ((ix,v)::pairs)  end;
-             val alist = Library.foldr newName (vars,[])
+             val alist = foldr newName [] vars
              fun mk_inst (Var(v,T)) =
                  (cterm_of sign (Var(v,T)),
                   cterm_of sign (Free(valOf (assoc(alist,v)), T)))
@@ -446,14 +446,14 @@
  let val fth = freezeT th
      val {prop, tpairs, sign, ...} = rep_thm fth
  in
-   case Library.foldr add_term_vars (prop :: Thm.terms_of_tpairs tpairs, []) of
+   case foldr add_term_vars [] (prop :: Thm.terms_of_tpairs tpairs) of
        [] => (fth, fn x => x)
      | vars =>
          let fun newName (Var(ix,_), (pairs,used)) =
                    let val v = variant used (string_of_indexname ix)
                    in  ((ix,v)::pairs, v::used)  end;
-             val (alist, _) = Library.foldr newName (vars, ([], Library.foldr add_term_names
-               (prop :: Thm.terms_of_tpairs tpairs, [])))
+             val (alist, _) = foldr newName ([], Library.foldr add_term_names
+               (prop :: Thm.terms_of_tpairs tpairs, [])) vars
              fun mk_inst (Var(v,T)) =
                  (cterm_of sign (Var(v,T)),
                   cterm_of sign (Free(valOf (assoc(alist,v)), T)))
@@ -641,9 +641,9 @@
 fun abs_def thm =
   let
     val (_, cvs) = strip_comb (fst (dest_equals (cprop_of thm)));
-    val thm' = Library.foldr (fn (ct, thm) => Thm.abstract_rule
+    val thm' = foldr (fn (ct, thm) => Thm.abstract_rule
       (case term_of ct of Var ((a, _), _) => a | Free (a, _) => a | _ => "x")
-        ct thm) (cvs, thm)
+        ct thm) thm cvs
   in transitive
     (symmetric (eta_conversion (fst (dest_equals (cprop_of thm'))))) thm'
   end;
@@ -835,7 +835,7 @@
     in  (sign', tye', maxi')  end;
 in
 fun cterm_instantiate ctpairs0 th =
-  let val (sign,tye,_) = Library.foldr add_types (ctpairs0, (Thm.sign_of_thm th, Vartab.empty, 0))
+  let val (sign,tye,_) = foldr add_types (Thm.sign_of_thm th, Vartab.empty, 0) ctpairs0
       fun instT(ct,cu) = 
         let val inst = cterm_of sign o subst_TVars_Vartab tye o term_of
         in (inst ct, inst cu) end
@@ -862,7 +862,7 @@
   handle THM _ => raise THM("equal_abs_elim", 0, [eqth]);
 
 (*Calling equal_abs_elim with multiple terms*)
-fun equal_abs_elim_list cts th = Library.foldr (uncurry equal_abs_elim) (rev cts, th);
+fun equal_abs_elim_list cts th = foldr (uncurry equal_abs_elim) th (rev cts);
 
 
 (*** Goal (PROP A) <==> PROP A ***)
@@ -991,7 +991,7 @@
 
 fun tfrees_of thm =
   let val {hyps, prop, ...} = Thm.rep_thm thm
-  in Library.foldr Term.add_term_tfree_names (prop :: hyps, []) end;
+  in foldr Term.add_term_tfree_names [] (prop :: hyps) end;
 
 fun tvars_intr_list tfrees thm =
   Thm.varifyT' (tfrees_of thm \\ tfrees) thm;