src/HOL/Tools/inductive_realizer.ML
changeset 33040 cffdb7b28498
parent 32952 aeb1e44fbc19
child 33171 292970b42770
--- a/src/HOL/Tools/inductive_realizer.ML	Wed Oct 21 08:16:25 2009 +0200
+++ b/src/HOL/Tools/inductive_realizer.ML	Wed Oct 21 10:15:31 2009 +0200
@@ -70,7 +70,7 @@
     val params = map dest_Var (Library.take (nparms, ts));
     val tname = Binding.name (space_implode "_" (Long_Name.base_name s ^ "T" :: vs));
     fun constr_of_intr intr = (Binding.name (Long_Name.base_name (name_of_thm intr)),
-      map (Logic.unvarifyT o snd) (rev (Term.add_vars (prop_of intr) []) \\ params) @
+      map (Logic.unvarifyT o snd) (subtract (op =) params (rev (Term.add_vars (prop_of intr) []))) @
         filter_out (equal Extraction.nullT) (map
           (Logic.unvarifyT o Extraction.etype_of thy vs []) (prems_of intr)),
             NoSyn);
@@ -115,7 +115,7 @@
     val r = if n then Extraction.nullt else Var ((Long_Name.base_name s, 0), rT);
     val S = list_comb (h, params @ xs);
     val rvs = relevant_vars S;
-    val vs' = map fst rvs \\ vs;
+    val vs' = subtract (op =) vs (map fst rvs);
     val rname = space_implode "_" (s ^ "R" :: vs);
 
     fun mk_Tprem n v =
@@ -141,7 +141,7 @@
     val ctxt = ProofContext.init thy
     val args = map (Free o apfst fst o dest_Var) ivs;
     val args' = map (Free o apfst fst)
-      (Term.add_vars (prop_of intr) [] \\ params);
+      (subtract (op =) params (Term.add_vars (prop_of intr) []));
     val rule' = strip_all rule;
     val conclT = Extraction.etype_of thy vs [] (Logic.strip_imp_concl rule');
     val used = map (fst o dest_Free) args;
@@ -331,7 +331,7 @@
     val rintrs = map (fn (intr, c) => Envir.eta_contract
       (Extraction.realizes_of thy2 vs
         (if c = Extraction.nullt then c else list_comb (c, map Var (rev
-          (Term.add_vars (prop_of intr) []) \\ params'))) (prop_of intr)))
+          (subtract (op =) params' (Term.add_vars (prop_of intr) []))))) (prop_of intr)))
             (maps snd rss ~~ flat constrss);
     val (rlzpreds, rlzpreds') =
       rintrs |> map (fn rintr =>
@@ -427,9 +427,9 @@
         val (prem :: prems) = prems_of elim;
         fun reorder1 (p, (_, intr)) =
           Library.foldl (fn (t, ((s, _), T)) => Logic.all (Free (s, T)) t)
-            (strip_all p, Term.add_vars (prop_of intr) [] \\ params');
+            (strip_all p, subtract (op =) params' (Term.add_vars (prop_of intr) []));
         fun reorder2 ((ivs, intr), i) =
-          let val fs = Term.add_vars (prop_of intr) [] \\ params'
+          let val fs = subtract (op =) params' (Term.add_vars (prop_of intr) [])
           in Library.foldl (fn (t, x) => lambda (Var x) t)
             (list_comb (Bound (i + length ivs), ivs), fs)
           end;
@@ -469,7 +469,7 @@
     val thy5 = Extraction.add_realizers_i
       (map (mk_realizer thy4 vs) (map (fn (((rule, rrule), rlz), c) =>
          (name_of_thm rule, rule, rrule, rlz,
-            list_comb (c, map Var (rev (Term.add_vars (prop_of rule) []) \\ params'))))
+            list_comb (c, map Var (subtract (op =) params' (rev (Term.add_vars (prop_of rule) []))))))
               (maps snd rss ~~ #intrs ind_info ~~ rintrs ~~ flat constrss))) thy4;
     val elimps = map_filter (fn ((s, intrs), p) =>
       if s mem rsets then SOME (p, intrs) else NONE)
@@ -503,7 +503,7 @@
     add_ind_realizers (hd sets)
       (case arg of
         NONE => sets | SOME NONE => []
-      | SOME (SOME sets') => sets \\ sets')
+      | SOME (SOME sets') => subtract (op =) sets' sets)
   end I);
 
 val setup =