src/HOL/UNITY/Union.ML
changeset 8041 e3237d8c18d6
parent 7964 6b3e345c47b3
child 8042 ecdedff41e67
equal deleted inserted replaced
8040:23e2a2457c77 8041:e3237d8c18d6
   336 Goalw [LOCALTO_def, stable_def, constrains_def]
   336 Goalw [LOCALTO_def, stable_def, constrains_def]
   337      "G : v localTo[C] F ==> G : (f o v) localTo[C] F";
   337      "G : v localTo[C] F ==> G : (f o v) localTo[C] F";
   338 by (Force_tac 1);
   338 by (Force_tac 1);
   339 qed "localTo_imp_o_localTo";
   339 qed "localTo_imp_o_localTo";
   340 
   340 
       
   341 Goal "G : v LocalTo F ==> G : (f o v) LocalTo F";
       
   342 by (asm_full_simp_tac
       
   343     (simpset() addsimps [LocalTo_def, localTo_imp_o_localTo]) 1);
       
   344 qed "LocalTo_imp_o_LocalTo";
       
   345 
   341 (*NOT USED*)
   346 (*NOT USED*)
   342 Goalw [LOCALTO_def, stable_def, constrains_def]
   347 Goalw [LOCALTO_def, stable_def, constrains_def]
   343      "(%s. x) localTo[C] F = UNIV";
   348      "(%s. x) localTo[C] F = UNIV";
   344 by (Blast_tac 1);
   349 by (Blast_tac 1);
   345 qed "triv_localTo_eq_UNIV";
   350 qed "triv_localTo_eq_UNIV";
   364 Goal "(F Join G : v LocalTo F) = (G : v LocalTo F)";
   369 Goal "(F Join G : v LocalTo F) = (G : v LocalTo F)";
   365 by (simp_tac (simpset() addsimps [self_Join_localTo, LocalTo_def,
   370 by (simp_tac (simpset() addsimps [self_Join_localTo, LocalTo_def,
   366 				  Join_left_absorb]) 1);
   371 				  Join_left_absorb]) 1);
   367 qed "self_Join_LocalTo";
   372 qed "self_Join_LocalTo";
   368 
   373 
       
   374 Goalw [LOCALTO_def]
       
   375      "[| G : v localTo[C] F;  F<=F' |] ==> G : v localTo[C] F'";
       
   376 by (Force_tac 1);
       
   377 qed "localTo_imp_o_localTo";
       
   378 
   369 
   379 
   370 
   380 
   371 (*** Higher-level rules involving localTo and Join ***)
   381 (*** Higher-level rules involving localTo and Join ***)
   372 
   382 
   373 Goal "[| F : {s. P (v s)} co {s. P' (v s)};  G : v localTo[C] F |]  \
   383 Goal "[| F : {s. P (v s)} co B;  G : v localTo[C] F |]  \
   374 \     ==> G : C Int {s. P (v s)} co {s. P' (v s)}";
   384 \     ==> G : C Int {s. P (v s)} co B";
   375 by (ftac constrains_imp_subset 1);
   385 by (ftac constrains_imp_subset 1);
   376 by (auto_tac (claset(), 
   386 by (auto_tac (claset(), 
   377 	      simpset() addsimps [LOCALTO_def, stable_def, constrains_def,
   387 	      simpset() addsimps [LOCALTO_def, stable_def, constrains_def,
   378 				  Diff_def]));
   388 				  Diff_def]));
   379 by (case_tac "Restrict C act: Restrict C `` Acts F" 1);
   389 by (case_tac "Restrict C act: Restrict C `` Acts F" 1);
   390      "[| G : v localTo[C] F;  G : w localTo[C] F |]  \
   400      "[| G : v localTo[C] F;  G : w localTo[C] F |]  \
   391 \     ==> G : (%s. (v s, w s)) localTo[C] F";
   401 \     ==> G : (%s. (v s, w s)) localTo[C] F";
   392 by (Blast_tac 1);
   402 by (Blast_tac 1);
   393 qed "localTo_pairfun";
   403 qed "localTo_pairfun";
   394 
   404 
   395 Goal "[| F : {s. P (v s) (w s)} co {s. P' (v s) (w s)};   \
   405 Goal "[| F : {s. P (v s) (w s)} co B;   \
   396 \        G : v localTo[C] F;       \
   406 \        G : v localTo[C] F;       \
   397 \        G : w localTo[C] F |]               \
   407 \        G : w localTo[C] F |]               \
   398 \     ==> G : C Int {s. P (v s) (w s)} co {s. P' (v s) (w s)}";
   408 \     ==> G : C Int {s. P (v s) (w s)} co B";
   399 by (res_inst_tac [("A", "C Int {s. (%(x,y). P x y) (v s, w s)}"),
   409 by (res_inst_tac [("A", "C Int {s. (%(x,y). P x y) (v s, w s)}")] 
   400 		  ("A'", "{s. (%(x,y). P' x y) (v s, w s)}")] 
       
   401     constrains_weaken 1);
   410     constrains_weaken 1);
   402 by (rtac (localTo_pairfun RSN (2, constrains_localTo_constrains)) 1);
   411 by (rtac (localTo_pairfun RSN (2, constrains_localTo_constrains)) 1);
   403 by Auto_tac;
   412 by Auto_tac;
   404 qed "constrains_localTo_constrains2";
   413 qed "constrains_localTo_constrains2";
   405 
   414