
diff -r 020e27417b59 -r 0911d3aabf47 QuotMain.thy
--- a/QuotMain.thy	Mon Nov 30 12:14:20 2009 +0100
+++ b/QuotMain.thy	Mon Nov 30 15:32:14 2009 +0100
@@ -738,7 +738,7 @@
       end
   | _ =>
       (**************************************************)
-      (*  new
+      (*  new *)
       let
         val (rhead, rargs) = strip_comb rtrm
         val (qhead, qargs) = strip_comb qtrm
@@ -765,10 +765,10 @@
              list_comb (inj_repabs_trm lthy (rhead, qhead), rargs') 
         | _ => raise (LIFT_MATCH "injection")
       end
-      *)
+      (**)
 
       (*************************************************)
-      (* old *)
+      (* old
       let
         val (rhead, rargs) = strip_comb rtrm
         val (qhead, qargs) = strip_comb qtrm
@@ -792,7 +792,7 @@
                mk_repabs lthy (rty, qty) (list_comb (inj_repabs_trm lthy (rhead, qhead), rargs')) 
           | _ => raise (LIFT_MATCH "injection")
       end
-      (**)
+      *)
 end
 *}
 
@@ -1029,6 +1029,7 @@
 fun find_aps rtm qtm = distinct (op =) (find_aps_all rtm qtm)
 *}
 
+(* TODO: This is slow *)
 ML {*
 fun allex_prs_tac lthy quot =
   (EqSubst.eqsubst_tac lthy [0] @{thms all_prs ex_prs}) THEN' (quotient_tac quot)
@@ -1103,6 +1104,7 @@
 *}
 
 (*
+ TODO: Update
  Cleaning the theorem consists of 5 kinds of rewrites.
  These rewrites can be done independently and in any order.
 
@@ -1124,18 +1126,16 @@
 ML {*
 fun clean_tac lthy quot defs aps =
   let
-    val lower = flat (map (add_lower_defs lthy) defs)
-    val meta_lower = map (fn x => @{thm eq_reflection} OF [x]) lower
     val absrep = map (fn x => @{thm QUOTIENT_ABS_REP} OF [x]) quot
+    val meta_absrep = map (fn x => @{thm eq_reflection} OF [x]) absrep;
     val reps_same = map (fn x => @{thm QUOTIENT_REL_REP} OF [x]) quot
     val meta_reps_same = map (fn x => @{thm eq_reflection} OF [x]) reps_same
-    val simp_ctxt = (Simplifier.context lthy empty_ss) addsimps (meta_reps_same @ meta_lower)
-    val aps_thms = map (applic_prs lthy absrep) aps
+    val simp_ctxt = (Simplifier.context lthy empty_ss) addsimps
+      (@{thm eq_reflection[OF fun_map.simps]} :: @{thms id_simps} @ meta_absrep @ meta_reps_same @ defs)
   in
     EVERY' [lambda_prs_tac lthy quot,
+            TRY o REPEAT_ALL_NEW (allex_prs_tac lthy quot),
             TRY o simp_tac simp_ctxt,
-            TRY o REPEAT_ALL_NEW (allex_prs_tac lthy quot),
-            TRY o REPEAT_ALL_NEW (EqSubst.eqsubst_tac lthy [0] aps_thms),
             TRY o rtac refl]
   end
 *}




