split_all operation;
authorwenzelm
Tue, 09 Jan 2001 15:15:28 +0100
changeset 10829 b74566c667c7
parent 10828 b207d6d1bedc
child 10830 d19f9f4c35ee
split_all operation;
src/HOL/Product_Type.ML
--- a/src/HOL/Product_Type.ML	Tue Jan 09 13:54:44 2001 +0100
+++ b/src/HOL/Product_Type.ML	Tue Jan 09 15:15:28 2001 +0100
@@ -138,13 +138,14 @@
     | exists_paired_all (t $ u) = exists_paired_all t orelse exists_paired_all u
     | exists_paired_all (Abs (_, _, t)) = exists_paired_all t
     | exists_paired_all _ = false;
-  val split_tac = full_simp_tac
-    (HOL_basic_ss
-      addsimps [split_paired_all, unit_all_eq2, unit_abs_eta_conv]
-      addsimprocs [unit_eq_proc]);
+  val ss = HOL_basic_ss
+    addsimps [split_paired_all, unit_all_eq2, unit_abs_eta_conv]
+    addsimprocs [unit_eq_proc];
 in
   val split_all_tac = SUBGOAL (fn (t, i) =>
-    if exists_paired_all t then split_tac i else no_tac);
+    if exists_paired_all t then full_simp_tac ss i else no_tac);
+  fun split_all th =
+    if exists_paired_all (#prop (Thm.rep_thm th)) then full_simplify ss th else th;
 end;
 
 claset_ref() := claset()
@@ -568,8 +569,7 @@
 
 
 (*Attempts to remove occurrences of split, and pair-valued parameters*)
-val remove_split = rewrite_rule [split RS eq_reflection] o
-                   rule_by_tactic (TRYALL split_all_tac);
+val remove_split = rewrite_rule [split RS eq_reflection] o split_all;
 
 local
 
@@ -599,7 +599,6 @@
 val split_rule_var = standard o remove_split o split_rule_var';
 
 (*Curries ALL function variables occurring in a rule's conclusion*)
-fun split_rule rl = remove_split (foldr split_rule_var' (term_vars (concl_of rl), rl))
-                    |> standard;
+fun split_rule rl = standard (remove_split (foldr split_rule_var' (term_vars (concl_of rl), rl)));
 
 end;