src/HOL/UNITY/Project.thy
changeset 32960 69916a850301
parent 24147 edc90be09ac1
child 35416 d8d7d1b785af
equal deleted inserted replaced
32959:23a8c5ac35f8 32960:69916a850301
     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)