src/ZF/UNITY/WFair.thy
changeset 32960 69916a850301
parent 24893 b8ef7afe3a6b
child 37936 1e4c5015a72e
equal deleted inserted replaced
32959:23a8c5ac35f8 32960:69916a850301
     1 (*  Title:      HOL/UNITY/WFair.thy
     1 (*  Title:      HOL/UNITY/WFair.thy
     2     ID:         $Id$
       
     3     Author:     Sidi Ehmety, Computer Laboratory
     2     Author:     Sidi Ehmety, Computer Laboratory
     4     Copyright   1998  University of Cambridge
     3     Copyright   1998  University of Cambridge
     5 *)
     4 *)
     6 
     5 
     7 header{*Progress under Weak Fairness*}
     6 header{*Progress under Weak Fairness*}
    17 definition
    16 definition
    18   (* This definition specifies weak fairness.  The rest of the theory
    17   (* This definition specifies weak fairness.  The rest of the theory
    19     is generic to all forms of fairness.*) 
    18     is generic to all forms of fairness.*) 
    20   transient :: "i=>i"  where
    19   transient :: "i=>i"  where
    21   "transient(A) =={F:program. (EX act: Acts(F). A<=domain(act) &
    20   "transient(A) =={F:program. (EX act: Acts(F). A<=domain(act) &
    22 			       act``A <= state-A) & st_set(A)}"
    21                                act``A <= state-A) & st_set(A)}"
    23 
    22 
    24 definition
    23 definition
    25   ensures :: "[i,i] => i"       (infixl "ensures" 60)  where
    24   ensures :: "[i,i] => i"       (infixl "ensures" 60)  where
    26   "A ensures B == ((A-B) co (A Un B)) Int transient(A-B)"
    25   "A ensures B == ((A-B) co (A Un B)) Int transient(A-B)"
    27   
    26   
    35      "leads(D, F)" <= "Pow(D)*Pow(D)"
    34      "leads(D, F)" <= "Pow(D)*Pow(D)"
    36   intros 
    35   intros 
    37     Basis:  "[| F:A ensures B;  A:Pow(D); B:Pow(D) |] ==> <A,B>:leads(D, F)"
    36     Basis:  "[| F:A ensures B;  A:Pow(D); B:Pow(D) |] ==> <A,B>:leads(D, F)"
    38     Trans:  "[| <A,B> : leads(D, F); <B,C> : leads(D, F) |] ==>  <A,C>:leads(D, F)"
    37     Trans:  "[| <A,B> : leads(D, F); <B,C> : leads(D, F) |] ==>  <A,C>:leads(D, F)"
    39     Union:   "[| S:Pow({A:S. <A, B>:leads(D, F)}); B:Pow(D); S:Pow(Pow(D)) |] ==> 
    38     Union:   "[| S:Pow({A:S. <A, B>:leads(D, F)}); B:Pow(D); S:Pow(Pow(D)) |] ==> 
    40 	      <Union(S),B>:leads(D, F)"
    39               <Union(S),B>:leads(D, F)"
    41 
    40 
    42   monos        Pow_mono
    41   monos        Pow_mono
    43   type_intros  Union_Pow_iff [THEN iffD2] UnionI PowI
    42   type_intros  Union_Pow_iff [THEN iffD2] UnionI PowI
    44  
    43  
    45 definition
    44 definition