1 (* Title: HOL/UNITY/Project.thy |
1 (* Title: HOL/UNITY/Project.thy |
2 ID: $Id$ |
|
3 Author: Lawrence C Paulson, Cambridge University Computer Laboratory |
2 Author: Lawrence C Paulson, Cambridge University Computer Laboratory |
4 Copyright 1999 University of Cambridge |
3 Copyright 1999 University of Cambridge |
5 |
4 |
6 Projections of state sets (also of actions and programs) |
5 Projections of state sets (also of actions and programs). |
7 |
6 |
8 Inheritance of GUARANTEES properties under extension |
7 Inheritance of GUARANTEES properties under extension. |
9 *) |
8 *) |
10 |
9 |
11 header{*Projections of State Sets*} |
10 header{*Projections of State Sets*} |
12 |
11 |
13 theory Project imports Extend begin |
12 theory Project imports Extend begin |
14 |
13 |
15 constdefs |
14 constdefs |
16 projecting :: "['c program => 'c set, 'a*'b => 'c, |
15 projecting :: "['c program => 'c set, 'a*'b => 'c, |
17 'a program, 'c program set, 'a program set] => bool" |
16 'a program, 'c program set, 'a program set] => bool" |
18 "projecting C h F X' X == |
17 "projecting C h F X' X == |
19 \<forall>G. extend h F\<squnion>G \<in> X' --> F\<squnion>project h (C G) G \<in> X" |
18 \<forall>G. extend h F\<squnion>G \<in> X' --> F\<squnion>project h (C G) G \<in> X" |
20 |
19 |
21 extending :: "['c program => 'c set, 'a*'b => 'c, 'a program, |
20 extending :: "['c program => 'c set, 'a*'b => 'c, 'a program, |
22 'c program set, 'a program set] => bool" |
21 'c program set, 'a program set] => bool" |
23 "extending C h F Y' Y == |
22 "extending C h F Y' Y == |
24 \<forall>G. extend h F ok G --> F\<squnion>project h (C G) G \<in> Y |
23 \<forall>G. extend h F ok G --> F\<squnion>project h (C G) G \<in> Y |
25 --> extend h F\<squnion>G \<in> Y'" |
24 --> extend h F\<squnion>G \<in> Y'" |
26 |
25 |
27 subset_closed :: "'a set set => bool" |
26 subset_closed :: "'a set set => bool" |
28 "subset_closed U == \<forall>A \<in> U. Pow A \<subseteq> U" |
27 "subset_closed U == \<forall>A \<in> U. Pow A \<subseteq> U" |
29 |
28 |
30 |
29 |
564 |
563 |
565 lemma (in Extend) project_act_Restrict_subset_project_act: |
564 lemma (in Extend) project_act_Restrict_subset_project_act: |
566 "project_act h (Restrict C act) \<subseteq> project_act h act" |
565 "project_act h (Restrict C act) \<subseteq> project_act h act" |
567 apply (auto simp add: project_act_def) |
566 apply (auto simp add: project_act_def) |
568 done |
567 done |
569 |
568 |
570 |
569 |
571 lemma (in Extend) subset_closed_ok_extend_imp_ok_project: |
570 lemma (in Extend) subset_closed_ok_extend_imp_ok_project: |
572 "[| extend h F ok G; subset_closed (AllowedActs F) |] |
571 "[| extend h F ok G; subset_closed (AllowedActs F) |] |
573 ==> F ok project h C G" |
572 ==> F ok project h C G" |
574 apply (auto simp add: ok_def) |
573 apply (auto simp add: ok_def) |
575 apply (rename_tac act) |
574 apply (rename_tac act) |