src/HOL/UNITY/Comp.ML
changeset 7947 b999c1ab9327
parent 7915 c7fd7eb3b0ef
child 8055 bb15396278fb
equal deleted inserted replaced
7946:95e1de322e82 7947:b999c1ab9327
    54 
    54 
    55 Goal "G<=F ==> F Join G = F";
    55 Goal "G<=F ==> F Join G = F";
    56 by (auto_tac (claset(), simpset() addsimps Join_ac@[component_def]));
    56 by (auto_tac (claset(), simpset() addsimps Join_ac@[component_def]));
    57 qed "Join_absorb2";
    57 qed "Join_absorb2";
    58 
    58 
       
    59 Goal "((JOIN I F) <= H) = (ALL i: I. F i <= H)";
       
    60 by (simp_tac (simpset() addsimps [component_eq_subset]) 1);
       
    61 by (Blast_tac 1);
       
    62 qed "JN_component_iff";
       
    63 
    59 Goalw [component_def] "i : I ==> (F i) <= (JN i:I. (F i))";
    64 Goalw [component_def] "i : I ==> (F i) <= (JN i:I. (F i))";
    60 by (blast_tac (claset() addIs [JN_absorb]) 1);
    65 by (blast_tac (claset() addIs [JN_absorb]) 1);
    61 qed "component_JN";
    66 qed "component_JN";
    62 
    67 
    63 Goalw [component_def] "[| F <= G; G <= H |] ==> F <= (H :: 'a program)";
    68 Goalw [component_def] "[| F <= G; G <= H |] ==> F <= (H :: 'a program)";
    82 Goal "[| F <= G; G : A co B |] ==> F : A co B";
    87 Goal "[| F <= G; G : A co B |] ==> F : A co B";
    83 by (auto_tac (claset(), 
    88 by (auto_tac (claset(), 
    84 	      simpset() addsimps [constrains_def, component_eq_subset]));
    89 	      simpset() addsimps [constrains_def, component_eq_subset]));
    85 qed "component_constrains";
    90 qed "component_constrains";
    86 
    91 
       
    92 (*Used in Guar.thy to show that programs are partially ordered*)
    87 bind_thm ("program_less_le", strict_component_def RS meta_eq_to_obj_eq);
    93 bind_thm ("program_less_le", strict_component_def RS meta_eq_to_obj_eq);
       
    94 
       
    95 Goal "F' <= F ==> Diff C G (Acts F) <= Diff C G (Acts F')";
       
    96 by (auto_tac (claset(), simpset() addsimps [Diff_def, component_eq_subset]));
       
    97 qed "Diff_anti_mono";
       
    98 
       
    99 (*The LocalTo analogue fails unless 
       
   100     reachable (F Join G) <= reachable (F' Join G),
       
   101   e.g. if the initial condition of F is stronger than that of F'*)
       
   102 Goalw [LOCALTO_def, stable_def]
       
   103      "[| G : v localTo[C] F';  F' <= F |] ==> G : v localTo[C] F";
       
   104 by (auto_tac (claset() addIs [Diff_anti_mono RS component_constrains], 
       
   105 	      simpset()));
       
   106 qed "localTo_component";
       
   107