132 Goalw [lift_act_def, drop_act_def] "drop_act i (lift_act i act) = act"; |
134 Goalw [lift_act_def, drop_act_def] "drop_act i (lift_act i act) = act"; |
133 by Auto_tac; |
135 by Auto_tac; |
134 by (res_inst_tac [("x", "f(i:=a)")] exI 1); |
136 by (res_inst_tac [("x", "f(i:=a)")] exI 1); |
135 by (Asm_simp_tac 1); |
137 by (Asm_simp_tac 1); |
136 by (res_inst_tac [("x", "f(i:=b)")] exI 1); |
138 by (res_inst_tac [("x", "f(i:=b)")] exI 1); |
137 by (Asm_simp_tac 1); |
|
138 by (rtac ext 1); |
|
139 by (Asm_simp_tac 1); |
139 by (Asm_simp_tac 1); |
140 qed "lift_act_inverse"; |
140 qed "lift_act_inverse"; |
141 Addsimps [lift_act_inverse]; |
141 Addsimps [lift_act_inverse]; |
142 |
142 |
143 Goal "inj (lift_act i)"; |
143 Goal "inj (lift_act i)"; |
488 by (simp_tac (simpset() addsimps [localTo_def]) 1); |
488 by (simp_tac (simpset() addsimps [localTo_def]) 1); |
489 by Auto_tac; |
489 by Auto_tac; |
490 by (stac Collect_eq_lift_set 1); |
490 by (stac Collect_eq_lift_set 1); |
491 by (asm_simp_tac (simpset() addsimps [Diff_lift_prog_stable]) 1); |
491 by (asm_simp_tac (simpset() addsimps [Diff_lift_prog_stable]) 1); |
492 qed "localTo_lift_prog_I"; |
492 qed "localTo_lift_prog_I"; |
|
493 |
|
494 |
|
495 (*****************************************************************) |
|
496 |
|
497 (**EQUIVALENCE WITH "EXTEND" VERSION**) |
|
498 |
|
499 Goalw [lift_map_def] "good_map (lift_map i)"; |
|
500 by (rtac good_mapI 1); |
|
501 by (res_inst_tac [("f", "%f. (f i, f)")] surjI 1); |
|
502 by Auto_tac; |
|
503 by (dres_inst_tac [("f", "%f. f i")] arg_cong 1); |
|
504 by Auto_tac; |
|
505 qed "good_map_lift_map"; |
|
506 |
|
507 |
|
508 |
|
509 Goal "fst (inv (lift_map i) g) = g i"; |
|
510 br (good_map_lift_map RS good_map_is_surj RS fst_inv_equalityI) 1; |
|
511 by (auto_tac (claset(), simpset() addsimps [lift_map_def])); |
|
512 qed "fst_inv_lift_map"; |
|
513 Addsimps [fst_inv_lift_map]; |
|
514 |
|
515 |
|
516 Goal "lift_set i A = extend_set (lift_map i) A"; |
|
517 by (auto_tac (claset(), |
|
518 simpset() addsimps [good_map_lift_map RS export mem_extend_set_iff])); |
|
519 qed "lift_set_correct"; |
|
520 |
|
521 Goalw [drop_set_def, project_set_def, lift_map_def] |
|
522 "drop_set i A = project_set (lift_map i) A"; |
|
523 auto(); |
|
524 br image_eqI 2; |
|
525 br exI 1; |
|
526 by (stac (refl RS fun_upd_idem) 1); |
|
527 auto(); |
|
528 qed "drop_set_correct"; |
|
529 |
|
530 Goal "lift_act i = extend_act (lift_map i)"; |
|
531 br ext 1; |
|
532 by Auto_tac; |
|
533 by (forward_tac [good_map_lift_map RS export extend_act_D] 2); |
|
534 by(Full_simp_tac 2); |
|
535 bws [extend_act_def, lift_map_def]; |
|
536 by Auto_tac; |
|
537 br bexI 1; |
|
538 ba 2; |
|
539 auto(); |
|
540 br exI 1; |
|
541 auto(); |
|
542 qed "lift_act_correct"; |
|
543 |
|
544 Goal "drop_act i = project_act (lift_map i)"; |
|
545 br ext 1; |
|
546 bws [project_act_def, drop_act_def, lift_map_def]; |
|
547 by Auto_tac; |
|
548 br image_eqI 2; |
|
549 by (REPEAT (rtac exI 1 ORELSE stac (refl RS fun_upd_idem) 1)); |
|
550 auto(); |
|
551 qed "drop_act_correct"; |
|
552 |
|
553 |
|
554 Goal "lift_prog i F = extend (lift_map i) F"; |
|
555 by (rtac program_equalityI 1); |
|
556 by (simp_tac (simpset() addsimps [lift_set_correct]) 1); |
|
557 by (simp_tac (simpset() |
|
558 addsimps [good_map_lift_map RS export Acts_extend, lift_act_correct]) 1); |
|
559 qed "lift_prog_correct"; |
|
560 |
|
561 Goal "drop_prog i F = project (lift_map i) F"; |
|
562 by (rtac program_equalityI 1); |
|
563 by (simp_tac (simpset() addsimps [drop_set_correct]) 1); |
|
564 by (simp_tac (simpset() |
|
565 addsimps [good_map_lift_map RS export Acts_project, drop_act_correct]) 1); |
|
566 qed "drop_prog_correct"; |
|
567 |