equal
deleted
inserted
replaced
29 by (simp add: PLam_def) |
29 by (simp add: PLam_def) |
30 |
30 |
31 lemma PLam_SKIP [simp]: "(plam i : I. SKIP) = SKIP" |
31 lemma PLam_SKIP [simp]: "(plam i : I. SKIP) = SKIP" |
32 by (simp add: PLam_def JN_constant) |
32 by (simp add: PLam_def JN_constant) |
33 |
33 |
34 lemma PLam_insert: "PLam (insert i I) F = (lift i (F i)) Join (PLam I F)" |
34 lemma PLam_insert: "PLam (insert i I) F = (lift i (F i)) \<squnion> (PLam I F)" |
35 by (unfold PLam_def, auto) |
35 by (unfold PLam_def, auto) |
36 |
36 |
37 lemma PLam_component_iff: "((PLam I F) \<le> H) = (\<forall>i \<in> I. lift i (F i) \<le> H)" |
37 lemma PLam_component_iff: "((PLam I F) \<le> H) = (\<forall>i \<in> I. lift i (F i) \<le> H)" |
38 by (simp add: PLam_def JN_component_iff) |
38 by (simp add: PLam_def JN_component_iff) |
39 |
39 |
182 |
182 |
183 (*simplify using reachable_lift??*) |
183 (*simplify using reachable_lift??*) |
184 lemma reachable_lift_Join_PLam [rule_format]: |
184 lemma reachable_lift_Join_PLam [rule_format]: |
185 "[| i \<notin> I; A \<in> reachable (F i) |] |
185 "[| i \<notin> I; A \<in> reachable (F i) |] |
186 ==> \<forall>f. f \<in> reachable (PLam I F) |
186 ==> \<forall>f. f \<in> reachable (PLam I F) |
187 --> f(i:=A) \<in> reachable (lift i (F i) Join PLam I F)" |
187 --> f(i:=A) \<in> reachable (lift i (F i) \<squnion> PLam I F)" |
188 apply (erule reachable.induct) |
188 apply (erule reachable.induct) |
189 apply (ALLGOALS Clarify_tac) |
189 apply (ALLGOALS Clarify_tac) |
190 apply (erule reachable.induct) |
190 apply (erule reachable.induct) |
191 (*Init, Init case*) |
191 (*Init, Init case*) |
192 apply (force intro: reachable.intrs) |
192 apply (force intro: reachable.intrs) |