equal
deleted
inserted
replaced
98 simpset() addsimps [SKIP_def, lift_prog_def])); |
98 simpset() addsimps [SKIP_def, lift_prog_def])); |
99 qed "lift_prog_SKIP"; |
99 qed "lift_prog_SKIP"; |
100 |
100 |
101 Goal "lift_prog i (F Join G) = (lift_prog i F) Join (lift_prog i G)"; |
101 Goal "lift_prog i (F Join G) = (lift_prog i F) Join (lift_prog i G)"; |
102 by (rtac program_equalityI 1); |
102 by (rtac program_equalityI 1); |
103 by (auto_tac (claset(), simpset() addsimps [Acts_Join])); |
103 by Auto_tac; |
104 qed "lift_prog_Join"; |
104 qed "lift_prog_Join"; |
105 |
105 |
106 Goal "lift_prog i (JOIN J F) = (JN j:J. lift_prog i (F j))"; |
106 Goal "lift_prog i (JOIN J F) = (JN j:J. lift_prog i (F j))"; |
107 by (rtac program_equalityI 1); |
107 by (rtac program_equalityI 1); |
108 by (auto_tac (claset(), simpset() addsimps [Acts_JN])); |
108 by Auto_tac; |
109 qed "lift_prog_JN"; |
109 qed "lift_prog_JN"; |
110 |
110 |
111 Goal "drop_prog i SKIP = SKIP"; |
111 Goal "drop_prog i SKIP = SKIP"; |
112 by (auto_tac (claset() addSIs [program_equalityI], |
112 by (auto_tac (claset() addSIs [program_equalityI], |
113 simpset() addsimps [SKIP_def, drop_set_def, drop_prog_def])); |
113 simpset() addsimps [SKIP_def, drop_set_def, drop_prog_def])); |
159 qed "inj_lift_act"; |
159 qed "inj_lift_act"; |
160 |
160 |
161 Goal "drop_prog i (lift_prog i F) = F"; |
161 Goal "drop_prog i (lift_prog i F) = F"; |
162 by (simp_tac (simpset() addsimps [lift_prog_def, drop_prog_def]) 1); |
162 by (simp_tac (simpset() addsimps [lift_prog_def, drop_prog_def]) 1); |
163 by (rtac program_equalityI 1); |
163 by (rtac program_equalityI 1); |
164 by (simp_tac (simpset() addsimps [image_compose RS sym, o_def]) 2); |
164 by (simp_tac (simpset() addsimps [image_image_eq_UN]) 2); |
165 by (Simp_tac 1); |
165 by (Simp_tac 1); |
166 qed "lift_prog_inverse"; |
166 qed "lift_prog_inverse"; |
167 Addsimps [lift_prog_inverse]; |
167 Addsimps [lift_prog_inverse]; |
168 |
168 |
169 Goal "inj (lift_prog i)"; |
169 Goal "inj (lift_prog i)"; |
222 by (auto_tac (claset(), simpset() addsimps [extend_act_def, lift_map_def])); |
222 by (auto_tac (claset(), simpset() addsimps [extend_act_def, lift_map_def])); |
223 by (rtac bexI 1); |
223 by (rtac bexI 1); |
224 by (auto_tac (claset() addSIs [exI], simpset())); |
224 by (auto_tac (claset() addSIs [exI], simpset())); |
225 qed "lift_act_correct"; |
225 qed "lift_act_correct"; |
226 |
226 |
227 Goal "drop_act i = project_act (lift_map i)"; |
227 Goal "drop_act i = project_act UNIV (lift_map i)"; |
228 by (rtac ext 1); |
228 by (rtac ext 1); |
229 by (rewrite_goals_tac [project_act_def, drop_act_def, lift_map_def]); |
229 by (rewrite_goals_tac [project_act_def, drop_act_def, lift_map_def]); |
230 by Auto_tac; |
230 by Auto_tac; |
231 by (rtac image_eqI 2); |
231 by (rtac image_eqI 2); |
232 by (REPEAT (rtac exI 1 ORELSE stac (refl RS fun_upd_idem) 1)); |
232 by (REPEAT (rtac exI 1 ORELSE stac (refl RS fun_upd_idem) 1)); |
239 by (simp_tac (simpset() |
239 by (simp_tac (simpset() |
240 addsimps [lift_export Acts_extend, |
240 addsimps [lift_export Acts_extend, |
241 lift_act_correct]) 1); |
241 lift_act_correct]) 1); |
242 qed "lift_prog_correct"; |
242 qed "lift_prog_correct"; |
243 |
243 |
244 Goal "drop_prog i F = project (lift_map i) F"; |
244 Goal "drop_prog i F = project UNIV (lift_map i) F"; |
245 by (rtac program_equalityI 1); |
245 by (rtac program_equalityI 1); |
246 by (simp_tac (simpset() addsimps [drop_set_correct]) 1); |
246 by (simp_tac (simpset() addsimps [drop_set_correct]) 1); |
247 by (simp_tac (simpset() |
247 by (simp_tac (simpset() |
248 addsimps [lift_export Acts_project, |
248 addsimps [lift_export Acts_project, |
249 drop_act_correct]) 1); |
249 drop_act_correct]) 1); |
406 (*** Programs of the form lift_prog i F Join G |
406 (*** Programs of the form lift_prog i F Join G |
407 in other words programs containing a replicated component ***) |
407 in other words programs containing a replicated component ***) |
408 |
408 |
409 Goal "drop_prog i ((lift_prog i F) Join G) = F Join (drop_prog i G)"; |
409 Goal "drop_prog i ((lift_prog i F) Join G) = F Join (drop_prog i G)"; |
410 by (rtac program_equalityI 1); |
410 by (rtac program_equalityI 1); |
411 by (simp_tac (simpset() addsimps [Acts_Join, image_Un, |
411 by (simp_tac (simpset() addsimps [image_Un, image_image_eq_UN]) 2); |
412 image_compose RS sym, o_def]) 2); |
|
413 by (simp_tac (simpset() addsimps [drop_set_Int_lift_set]) 1); |
412 by (simp_tac (simpset() addsimps [drop_set_Int_lift_set]) 1); |
414 qed "drop_prog_lift_prog_Join"; |
413 qed "drop_prog_lift_prog_Join"; |
415 |
414 |
416 Goal "(lift_prog i F) Join G = lift_prog i H \ |
415 Goal "(lift_prog i F) Join G = lift_prog i H \ |
417 \ ==> H = F Join (drop_prog i G)"; |
416 \ ==> H = F Join (drop_prog i G)"; |
424 \ ==> f i : reachable (F Join drop_prog i G)"; |
423 \ ==> f i : reachable (F Join drop_prog i G)"; |
425 by (etac reachable.induct 1); |
424 by (etac reachable.induct 1); |
426 by (force_tac (claset() addIs [reachable.Init, drop_set_I], simpset()) 1); |
425 by (force_tac (claset() addIs [reachable.Init, drop_set_I], simpset()) 1); |
427 (*By case analysis on whether the action is of lift_prog i F or G*) |
426 (*By case analysis on whether the action is of lift_prog i F or G*) |
428 by (force_tac (claset() addIs [reachable.Acts, drop_act_I], |
427 by (force_tac (claset() addIs [reachable.Acts, drop_act_I], |
429 simpset() addsimps [Acts_Join, image_iff]) 1); |
428 simpset() addsimps [image_iff]) 1); |
430 qed "reachable_lift_prog_Join_D"; |
429 qed "reachable_lift_prog_Join_D"; |
431 |
430 |
432 (*Opposite inclusion fails, even for the initial state: lift_set i includes |
431 (*Opposite inclusion fails, even for the initial state: lift_set i includes |
433 ALL functions determined only by their value at i.*) |
432 ALL functions determined only by their value at i.*) |
434 Goal "reachable (lift_prog i F Join G) <= \ |
433 Goal "reachable (lift_prog i F Join G) <= \ |