Quot/quotient_tacs.ML
changeset 896 4e0b89d886ac
parent 871 4163fe3dbf8c
child 906 a394c7337966
--- a/Quot/quotient_tacs.ML	Fri Jan 15 17:09:36 2010 +0100
+++ b/Quot/quotient_tacs.ML	Sat Jan 16 02:09:38 2010 +0100
@@ -5,7 +5,7 @@
   val all_injection_tac: Proof.context -> int -> tactic
   val clean_tac: Proof.context -> int -> tactic
   val procedure_tac: Proof.context -> thm -> int -> tactic
-  val lift_tac: Proof.context -> thm -> int -> tactic
+  val lift_tac: Proof.context -> thm list -> int -> tactic
   val quotient_tac: Proof.context -> int -> tactic
   val quot_true_tac: Proof.context -> (term -> term) -> int -> tactic
 end;
@@ -612,18 +612,24 @@
 
 (* Automatic Proofs *)
 
-val msg1 = "Regularize proof failed."
-val msg2 = cat_lines ["Injection proof failed.", 
+val msg1 = "The regularize proof failed."
+val msg2 = cat_lines ["The injection proof failed.", 
                       "This is probably due to missing respects lemmas.",
                       "Try invoking the injection method manually to see", 
                       "which lemmas are missing."]
-val msg3 = "Cleaning proof failed."
+val msg3 = "The cleaning proof failed."
 
-fun lift_tac ctxt rthm =
-  procedure_tac ctxt rthm
-  THEN' RANGE_WARN 
-     [(regularize_tac ctxt, msg1),
-      (all_injection_tac ctxt, msg2),
-      (clean_tac ctxt, msg3)]
+fun lift_tac ctxt rthms =
+let
+  fun mk_tac rthm = 
+    procedure_tac ctxt rthm
+    THEN' RANGE_WARN 
+      [(regularize_tac ctxt, msg1),
+       (all_injection_tac ctxt, msg2),
+       (clean_tac ctxt, msg3)]
+in
+  simp_tac (mk_minimal_ss ctxt) (* unfolding multiple &&& *)  
+  THEN' RANGE (map mk_tac rthms)
+end
 
 end; (* structure *)