src/Pure/meta_simplifier.ML
changeset 30356 36d0e00af606
parent 30336 efd1bec4630a
child 30552 58db56278478
--- a/src/Pure/meta_simplifier.ML	Sun Mar 08 00:41:52 2009 +0100
+++ b/src/Pure/meta_simplifier.ML	Sun Mar 08 12:15:58 2009 +0100
@@ -24,7 +24,14 @@
   val mk_solver: string -> (thm list -> int -> tactic) -> solver
   val empty_ss: simpset
   val merge_ss: simpset * simpset -> simpset
-  val pretty_ss: simpset -> Pretty.T
+  val dest_ss: simpset ->
+   {simps: (string * thm) list,
+    procs: (string * cterm list) list,
+    congs: (string * thm) list,
+    weak_congs: string list,
+    loopers: string list,
+    unsafe_solvers: string list,
+    safe_solvers: string list}
   type simproc
   val eq_simproc: simproc * simproc -> bool
   val morph_simproc: morphism -> simproc -> simproc
@@ -325,35 +332,6 @@
 end;
 
 
-(* print simpsets *)
-
-fun pretty_ss ss =
-  let
-    val pretty_thms = map Display.pretty_thm;
-
-    fun pretty_cong (name, {thm, lhs}) =
-      Pretty.block [Pretty.str (name ^ ":"), Pretty.brk 1, Display.pretty_thm thm];
-    fun pretty_proc (name, lhss) =
-      Pretty.big_list (name ^ ":") (map Display.pretty_cterm lhss);
-
-    val Simpset ({rules, ...}, {congs, procs, loop_tacs, solvers, ...}) = ss;
-    val smps = map #thm (Net.entries rules);
-    val prcs = Net.entries procs |>
-      map (fn Proc {name, lhs, id, ...} => ((name, lhs), id))
-      |> partition_eq (eq_snd eq_procid)
-      |> map (fn ps => (fst (fst (hd ps)), map (snd o fst) ps))
-      |> Library.sort_wrt fst;
-  in
-    [Pretty.big_list "simplification rules:" (pretty_thms smps),
-      Pretty.big_list "simplification procedures:" (map pretty_proc prcs),
-      Pretty.big_list "congruences:" (map pretty_cong (fst congs)),
-      Pretty.strs ("loopers:" :: map (quote o fst) loop_tacs),
-      Pretty.strs ("unsafe solvers:" :: map (quote o solver_name) (#1 solvers)),
-      Pretty.strs ("safe solvers:" :: map (quote o solver_name) (#2 solvers))]
-    |> Pretty.chunks
-  end;
-
-
 
 (** simpset operations **)
 
@@ -806,7 +784,7 @@
       val Simpset ({rules = rules2, prems = prems2, bounds = bounds2, depth = depth2, context = _},
        {congs = (congs2, weak2), procs = procs2, mk_rews = _, termless = _, subgoal_tac = _,
         loop_tacs = loop_tacs2, solvers = (unsafe_solvers2, solvers2)}) = ss2;
-  
+
       val rules' = Net.merge eq_rrule (rules1, rules2);
       val prems' = merge Thm.eq_thm_prop (prems1, prems2);
       val bounds' = if #1 bounds1 < #1 bounds2 then bounds2 else bounds1;
@@ -823,6 +801,22 @@
     end;
 
 
+(* dest_ss *)
+
+fun dest_ss (Simpset ({rules, ...}, {congs, procs, loop_tacs, solvers, ...})) =
+ {simps = Net.entries rules
+    |> map (fn {name, thm, ...} => (name, thm)),
+  procs = Net.entries procs
+    |> map (fn Proc {name, lhs, id, ...} => ((name, lhs), id))
+    |> partition_eq (eq_snd eq_procid)
+    |> map (fn ps => (fst (fst (hd ps)), map (snd o fst) ps)),
+  congs = map (fn (name, {thm, ...}) => (name, thm)) (#1 congs),
+  weak_congs = #2 congs,
+  loopers = map fst loop_tacs,
+  unsafe_solvers = map solver_name (#1 solvers),
+  safe_solvers = map solver_name (#2 solvers)};
+
+
 
 (** rewriting **)