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); |