src/HOL/UNITY/Constrains.ML
changeset 8069 19b9f92ca503
parent 7689 affe0c2fdfbf
child 8216 e4b3192dfefa
equal deleted inserted replaced
8068:72d783f7313a 8069:19b9f92ca503
    22 
    22 
    23 Goal "Acts G <= Acts F ==> G : stable (reachable F)";
    23 Goal "Acts G <= Acts F ==> G : stable (reachable F)";
    24 by (blast_tac (claset() addIs [stableI, constrainsI] @ reachable.intrs) 1);
    24 by (blast_tac (claset() addIs [stableI, constrainsI] @ reachable.intrs) 1);
    25 qed "stable_reachable";
    25 qed "stable_reachable";
    26 
    26 
       
    27 AddSIs [stable_reachable];
       
    28 Addsimps [stable_reachable];
    27 
    29 
    28 (*The set of all reachable states is an invariant...*)
    30 (*The set of all reachable states is an invariant...*)
    29 Goal "F : invariant (reachable F)";
    31 Goal "F : invariant (reachable F)";
    30 by (simp_tac (simpset() addsimps [invariant_def]) 1);
    32 by (simp_tac (simpset() addsimps [invariant_def]) 1);
    31 by (blast_tac (claset() addIs (stable_reachable::reachable.intrs)) 1);
    33 by (blast_tac (claset() addIs reachable.intrs) 1);
    32 qed "invariant_reachable";
    34 qed "invariant_reachable";
    33 
    35 
    34 (*...in fact the strongest invariant!*)
    36 (*...in fact the strongest invariant!*)
    35 Goal "F : invariant A ==> reachable F <= A";
    37 Goal "F : invariant A ==> reachable F <= A";
    36 by (full_simp_tac 
    38 by (full_simp_tac 
   192     "(ALL i:I. F : Stable (A i)) ==> F : Stable (INT i:I. A i)";
   194     "(ALL i:I. F : Stable (A i)) ==> F : Stable (INT i:I. A i)";
   193 by (etac ball_Constrains_INT 1);
   195 by (etac ball_Constrains_INT 1);
   194 qed "ball_Stable_INT";
   196 qed "ball_Stable_INT";
   195 
   197 
   196 Goal "F : Stable (reachable F)";
   198 Goal "F : Stable (reachable F)";
   197 by (simp_tac (simpset() addsimps [Stable_eq_stable, stable_reachable]) 1);
   199 by (simp_tac (simpset() addsimps [Stable_eq_stable]) 1);
   198 qed "Stable_reachable";
   200 qed "Stable_reachable";
   199 
   201 
   200 
   202 
   201 
   203 
   202 (*** Increasing ***)
   204 (*** Increasing ***)
   289 Addsimps [Always_UNIV_eq];
   291 Addsimps [Always_UNIV_eq];
   290 
   292 
   291 Goal "Always A = (UN I: Pow A. invariant I)";
   293 Goal "Always A = (UN I: Pow A. invariant I)";
   292 by (simp_tac (simpset() addsimps [Always_eq_includes_reachable]) 1);
   294 by (simp_tac (simpset() addsimps [Always_eq_includes_reachable]) 1);
   293 by (blast_tac (claset() addIs [invariantI, impOfSubs Init_subset_reachable, 
   295 by (blast_tac (claset() addIs [invariantI, impOfSubs Init_subset_reachable, 
   294                                stable_reachable,
       
   295 			       impOfSubs invariant_includes_reachable]) 1);
   296 			       impOfSubs invariant_includes_reachable]) 1);
   296 qed "Always_eq_UN_invariant";
   297 qed "Always_eq_UN_invariant";
   297 
   298 
   298 Goal "[| F : Always A; A <= B |] ==> F : Always B";
   299 Goal "[| F : Always A; A <= B |] ==> F : Always B";
   299 by (auto_tac (claset(), simpset() addsimps [Always_eq_includes_reachable]));
   300 by (auto_tac (claset(), simpset() addsimps [Always_eq_includes_reachable]));