src/HOL/UNITY/WFair.ML
changeset 5232 e5a7cdd07ea5
parent 5111 8f4b72f0c15d
child 5239 2fd94efb9d64
equal deleted inserted replaced
5231:2a454140ae24 5232:e5a7cdd07ea5
     5 
     5 
     6 Weak Fairness versions of transient, ensures, leadsTo.
     6 Weak Fairness versions of transient, ensures, leadsTo.
     7 
     7 
     8 From Misra, "A Logic for Concurrent Programming", 1994
     8 From Misra, "A Logic for Concurrent Programming", 1994
     9 *)
     9 *)
    10 
       
    11 open WFair;
       
    12 
       
    13 Goal "Union(B) Int A = Union((%C. C Int A)``B)";
       
    14 by (Blast_tac 1);
       
    15 qed "Int_Union_Union";
       
    16 
    10 
    17 
    11 
    18 (*** transient ***)
    12 (*** transient ***)
    19 
    13 
    20 Goalw [stable_def, constrains_def, transient_def]
    14 Goalw [stable_def, constrains_def, transient_def]
   119 \     !!A B. ensures Acts A B ==> P A B; \
   113 \     !!A B. ensures Acts A B ==> P A B; \
   120 \     !!A B C. [| leadsTo Acts A B; P A B; leadsTo Acts B C; P B C |] \
   114 \     !!A B C. [| leadsTo Acts A B; P A B; leadsTo Acts B C; P B C |] \
   121 \              ==> P A C; \
   115 \              ==> P A C; \
   122 \     !!B S. ALL A:S. leadsTo Acts A B & P A B ==> P (Union S) B \
   116 \     !!B S. ALL A:S. leadsTo Acts A B & P A B ==> P (Union S) B \
   123 \  |] ==> P za zb";
   117 \  |] ==> P za zb";
   124 br (major RS leadsto.induct) 1;
   118 by (rtac (major RS leadsto.induct) 1);
   125 by (REPEAT (blast_tac (claset() addIs prems) 1));
   119 by (REPEAT (blast_tac (claset() addIs prems) 1));
   126 qed "leadsTo_induct";
   120 qed "leadsTo_induct";
   127 
   121 
   128 
   122 
   129 Goal "[| A<=B;  id: Acts |] ==> leadsTo Acts A B";
   123 Goal "[| A<=B;  id: Acts |] ==> leadsTo Acts A B";