equal
deleted
inserted
replaced
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])); |