src/HOL/UNITY/Lift_prog.ML
changeset 7482 7badd511844d
parent 7399 cf780c2bcccf
child 7499 23e090051cb8
equal deleted inserted replaced
7481:d44c77be268c 7482:7badd511844d
     1 (*  Title:      HOL/UNITY/Lift_prog.ML
     1 (*  Title:      HOL/UNITY/Lift_prog.ML
     2     ID:         $Id$
     2     ID:         $Id$
     3     Author:     Lawrence C Paulson, Cambridge University Computer Laboratory
     3     Author:     Lawrence C Paulson, Cambridge University Computer Laboratory
     4     Copyright   1998  University of Cambridge
     4     Copyright   1998  University of Cambridge
       
     5 
       
     6 THESE PROOFS CAN BE REPLACED BY INVOCATIONS OF RESULTS FROM EXTEND.ML
     5 *)
     7 *)
     6 
     8 
     7 
     9 
     8 (*** Basic properties ***)
    10 (*** Basic properties ***)
     9 
    11 
   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