src/HOL/UNITY/Lift_prog.ML
changeset 9403 aad13b59b8d9
parent 8948 b797cfa3548d
child 10064 1a77667b21ef
--- a/src/HOL/UNITY/Lift_prog.ML	Fri Jul 21 17:46:43 2000 +0200
+++ b/src/HOL/UNITY/Lift_prog.ML	Fri Jul 21 18:01:36 2000 +0200
@@ -46,6 +46,7 @@
 Goalw [lift_map_def, drop_map_def] "!!s. drop_map i (lift_map i s) = s";
 by (force_tac (claset() addIs [insert_map_inverse], simpset()) 1);
 qed "drop_map_lift_map_eq";
+Addsimps [drop_map_lift_map_eq];
 
 Goalw [lift_map_def] "inj (lift_map i)";
 by (rtac injI 1);
@@ -57,10 +58,11 @@
 Goalw [lift_map_def, drop_map_def] "!!s. lift_map i (drop_map i s) = s";
 by (force_tac (claset(), simpset() addsimps [insert_map_delete_map_eq]) 1);
 qed "lift_map_drop_map_eq";
+Addsimps [lift_map_drop_map_eq];
 
 Goal "(drop_map i s) = (drop_map i s') ==> s=s'";
 by (dres_inst_tac [("f", "lift_map i")] arg_cong 1);
-by (full_simp_tac (simpset() addsimps [lift_map_drop_map_eq]) 1);
+by (Full_simp_tac 1);
 qed "drop_map_inject";
 AddSDs [drop_map_inject];
 
@@ -74,19 +76,15 @@
 qed "bij_lift_map";
 AddIffs [bij_lift_map];
 
-AddIffs [bij_lift_map RS mem_rename_act_iff];
-
 Goal "inv (lift_map i) = drop_map i";
 by (rtac inv_equality 1);
-by (rtac lift_map_drop_map_eq 2);
-by (rtac drop_map_lift_map_eq 1);
+by Auto_tac;  
 qed "inv_lift_map_eq";
 Addsimps [inv_lift_map_eq];
 
 Goal "inv (drop_map i) = lift_map i";
 by (rtac inv_equality 1);
-by (rtac drop_map_lift_map_eq 2);
-by (rtac lift_map_drop_map_eq 1);
+by Auto_tac;  
 qed "inv_drop_map_eq";
 Addsimps [inv_drop_map_eq];
 
@@ -96,18 +94,13 @@
 qed "bij_drop_map";
 AddIffs [bij_drop_map];
 
-(*** sub ***)
-
+(*sub's main property!*)
 Goal "sub i f = f i";
 by (simp_tac (simpset() addsimps [sub_def]) 1);
 qed "sub_apply";
 Addsimps [sub_apply];
 
-Goal "lift_set i {s. P s} = {s. P (drop_map i s)}";
-by (rtac set_ext 1);
-by (asm_simp_tac (simpset() delsimps [image_Collect]
-			    addsimps [lift_set_def, bij_image_Collect_eq]) 1);
-qed "lift_set_eq_Collect";
+(*** lift_set ***)
 
 Goalw [lift_set_def] "lift_set i {} = {}";
 by Auto_tac;
@@ -117,7 +110,6 @@
 Goalw [lift_set_def] "(lift_map i x : lift_set i A) = (x : A)";
 by (rtac (inj_lift_map RS inj_image_mem_iff) 1);
 qed "lift_set_iff";
-AddIffs [lift_set_iff];
 
 (*Do we really need both this one and its predecessor?*)
 Goal "((f,uu) : lift_set i A) = ((f i, (delete_map i f, uu)) : A)";
@@ -232,6 +224,11 @@
 qed "lift_guarantees_eq_lift_inv";
 
 
+(*** We devote an ENORMOUS effort to proving lift_transient_eq_disj, 
+     which is used only in TimerArray and perhaps isn't even essential
+     there!
+***)
+
 (*To preserve snd means that the second component is there just to allow
   guarantees properties to be stated.  Converse fails, for lift i F can 
   change function components other than i*)
@@ -264,12 +261,21 @@
 
 Addsimps [vimage_o_fst_eq, vimage_sub_eq_lift_set];
 
+Goalw [extend_act_def]
+     "((s,s') : extend_act (%(x,u::unit). lift_map i x) act) = \
+\     ((drop_map i s, drop_map i s') : act)";
+by Auto_tac;  
+by (rtac bexI 1);
+by Auto_tac;  
+qed "mem_lift_act_iff";
+AddIffs [mem_lift_act_iff];
+
 Goal "[| F : preserves snd;  i~=j |] \
 \     ==> lift j F : stable (lift_set i (A <*> UNIV))";
 by (auto_tac (claset(),
 	      simpset() addsimps [lift_def, lift_set_def, 
-				  stable_def, constrains_def, 
-				  mem_rename_act_iff, mem_rename_set_iff]));
+				  stable_def, constrains_def, rename_def,
+                                  extend_def, mem_rename_set_iff]));
 by (auto_tac (claset() addSDs [preserves_imp_eq],
 	      simpset() addsimps [lift_map_def, drop_map_def]));
 by (dres_inst_tac [("x", "i")] fun_cong 1);
@@ -326,8 +332,8 @@
 by (case_tac "i=j" 1);
 by (auto_tac (claset(), simpset() addsimps [lift_transient]));
 by (auto_tac (claset(),
-	      simpset() addsimps [lift_def, transient_def,
-				  Domain_rename_act]));
+	      simpset() addsimps [lift_set_def, lift_def, transient_def, 
+                              rename_def, extend_def, Domain_extend_act]));
 by (dtac subsetD 1);
 by (Blast_tac 1);
 by Auto_tac;
@@ -338,12 +344,11 @@
 by (dtac sym 1);
 by (dtac subsetD 1);
 by (rtac ImageI 1);
-by (etac rename_actI 1);
-by (force_tac (claset(), simpset() addsimps [lift_set_def]) 1);
+by (etac 
+    (bij_lift_map RS good_map_bij RS export (mem_extend_act_iff RS iffD2)) 1);
+by (Force_tac 1);
 by (etac (lift_map_eq_diff RS exE) 1);
-by (assume_tac 1);
-by (dtac ComplD 1);
-by (etac notE 1 THEN etac ssubst 1 THEN Fast_tac 1);
+by Auto_tac;  
 qed "lift_transient_eq_disj";
 
 (*USELESS??*)