src/HOL/UNITY/Project.ML
changeset 10834 a7897aebbffc
parent 10797 028d22926a41
child 11170 015af2fc7026
equal deleted inserted replaced
10833:c0844a30ea4e 10834:a7897aebbffc
   382 
   382 
   383 Goalw [transient_def]
   383 Goalw [transient_def]
   384      "[| G : transient (C Int extend_set h A);  G : stable C |]  \
   384      "[| G : transient (C Int extend_set h A);  G : stable C |]  \
   385 \     ==> project h C G : transient (project_set h C Int A)";
   385 \     ==> project h C G : transient (project_set h C Int A)";
   386 by (auto_tac (claset(), simpset() addsimps [Domain_project_act]));
   386 by (auto_tac (claset(), simpset() addsimps [Domain_project_act]));
   387 by (subgoal_tac "act ``` (C Int extend_set h A) <= - extend_set h A" 1);
   387 by (subgoal_tac "act `` (C Int extend_set h A) <= - extend_set h A" 1);
   388 by (asm_full_simp_tac 
   388 by (asm_full_simp_tac 
   389     (simpset() addsimps [stable_def, constrains_def]) 2);
   389     (simpset() addsimps [stable_def, constrains_def]) 2);
   390 by (Blast_tac 2);
   390 by (Blast_tac 2);
   391 (*back to main goal*)
   391 (*back to main goal*)
   392 by (thin_tac "?AA <= -C Un ?BB" 1);
   392 by (thin_tac "?AA <= -C Un ?BB" 1);
   500 
   500 
   501 (*** Towards project_Ensures_D ***)
   501 (*** Towards project_Ensures_D ***)
   502 
   502 
   503 
   503 
   504 Goalw [project_set_def, extend_set_def, project_act_def]
   504 Goalw [project_set_def, extend_set_def, project_act_def]
   505      "act ``` (C Int extend_set h A) <= B \
   505      "act `` (C Int extend_set h A) <= B \
   506 \     ==> project_act h (Restrict C act) ``` (project_set h C Int A) \
   506 \     ==> project_act h (Restrict C act) `` (project_set h C Int A) \
   507 \         <= project_set h B";
   507 \         <= project_set h B";
   508 by (Blast_tac 1);
   508 by (Blast_tac 1);
   509 qed "act_subset_imp_project_act_subset";
   509 qed "act_subset_imp_project_act_subset";
   510 
   510 
   511 (*This trivial proof is the complementation part of transferring a transient
   511 (*This trivial proof is the complementation part of transferring a transient
   512   property upwards.  The hard part would be to 
   512   property upwards.  The hard part would be to 
   513   show that G's action has a big enough domain.*)
   513   show that G's action has a big enough domain.*)
   514 Goal "[| act: Acts G;       \
   514 Goal "[| act: Acts G;       \
   515 \        (project_act h (Restrict C act))``` \
   515 \        (project_act h (Restrict C act))`` \
   516 \             (project_set h C Int A - B) <= -(project_set h C Int A - B) |] \
   516 \             (project_set h C Int A - B) <= -(project_set h C Int A - B) |] \
   517 \     ==> act```(C Int extend_set h A - extend_set h B) \
   517 \     ==> act``(C Int extend_set h A - extend_set h B) \
   518 \           <= -(C Int extend_set h A - extend_set h B)"; 
   518 \           <= -(C Int extend_set h A - extend_set h B)"; 
   519 by (auto_tac (claset(), 
   519 by (auto_tac (claset(), 
   520      simpset() addsimps [project_set_def, extend_set_def, project_act_def]));  
   520      simpset() addsimps [project_set_def, extend_set_def, project_act_def]));  
   521 result();
   521 result();
   522 
   522 
   533 by (auto_tac (claset(), 
   533 by (auto_tac (claset(), 
   534 	      simpset() addsimps [Int_Diff,
   534 	      simpset() addsimps [Int_Diff,
   535 				  extend_set_Diff_distrib RS sym]));
   535 				  extend_set_Diff_distrib RS sym]));
   536 by (dtac act_subset_imp_project_act_subset 1);
   536 by (dtac act_subset_imp_project_act_subset 1);
   537 by (subgoal_tac
   537 by (subgoal_tac
   538     "project_act h (Restrict C act) ``` (project_set h C Int (A - B)) = {}" 1);
   538     "project_act h (Restrict C act) `` (project_set h C Int (A - B)) = {}" 1);
   539 by (REPEAT (thin_tac "?r```?A <= ?B" 1));
   539 by (REPEAT (thin_tac "?r``?A <= ?B" 1));
   540 by (rewrite_goals_tac [project_set_def, extend_set_def, project_act_def]);
   540 by (rewrite_goals_tac [project_set_def, extend_set_def, project_act_def]);
   541 by (Blast_tac 2);
   541 by (Blast_tac 2);
   542 by (rtac ccontr 1);
   542 by (rtac ccontr 1);
   543 by (dtac subsetD 1);
   543 by (dtac subsetD 1);
   544 by (Blast_tac 1);
   544 by (Blast_tac 1);