simplified proof -- avoid res_inst_tac, afford plain asm_full_simp_tac;
authorwenzelm
Fri, 30 Dec 2011 15:43:07 +0100
changeset 46054 3458b0e955ac
parent 46053 e9d4241f7be9
child 46055 20e5060ab75c
simplified proof -- avoid res_inst_tac, afford plain asm_full_simp_tac;
src/HOL/Tools/record.ML
--- a/src/HOL/Tools/record.ML	Fri Dec 30 14:19:58 2011 +0100
+++ b/src/HOL/Tools/record.ML	Fri Dec 30 15:43:07 2011 +0100
@@ -2091,8 +2091,8 @@
 
     (* 3rd stage: thms_thy *)
 
-    val ss = get_simpset defs_thy;
-    val sel_upd_ss = ss addsimps (sel_defs @ accessor_thms @ upd_defs @ updator_thms);
+    val record_ss = get_simpset defs_thy;
+    val sel_upd_ss = record_ss addsimps (sel_defs @ accessor_thms @ upd_defs @ updator_thms);
 
     val (sel_convs, upd_convs) =
       timeit_msg ctxt "record sel_convs/upd_convs proof:" (fn () =>
@@ -2177,22 +2177,9 @@
                 @{thms not_not Not_eq_iff})) 1 THEN
           rtac split_object 1));
 
-    fun equality_tac thms =
-      let
-        val s' :: s :: eqs = rev thms;
-        val ss' = ss addsimps (s' :: s :: sel_convs);
-        val eqs' = map (simplify ss') eqs;
-      in simp_tac (HOL_basic_ss addsimps (s' :: s :: eqs')) 1 end;
-
     val equality = timeit_msg ctxt "record equality proof:" (fn () =>
-      Skip_Proof.prove_global defs_thy [] [] equality_prop (fn {context, ...} =>
-        fn st =>
-          let val [s, s'] = map #1 (rev (Tactic.innermost_params 1 st)) in
-            st |> (res_inst_tac context [((rN, 0), s)] cases_scheme 1 THEN
-              res_inst_tac context [((rN, 0), s')] cases_scheme 1 THEN
-              Subgoal.FOCUS (fn {prems, ...} => equality_tac prems) context 1)
-             (*asm_full_simp_tac sel_upd_ss would also work but is less efficient*)
-          end));
+      Skip_Proof.prove_global defs_thy [] [] equality_prop
+        (fn _ => asm_full_simp_tac (record_ss addsimps (split_meta :: sel_convs)) 1));
 
     val ((([sel_convs', upd_convs', sel_defs', upd_defs',
             fold_congs', unfold_congs',