src/HOL/UNITY/Deadlock.ML
changeset 6536 281d44905cab
parent 5648 fe887910e32e
child 7127 48e235179ffb
equal deleted inserted replaced
6535:880f31a62784 6536:281d44905cab
     7     Misra, "A Logic for Concurrent Programming", 1994
     7     Misra, "A Logic for Concurrent Programming", 1994
     8 *)
     8 *)
     9 
     9 
    10 (*Trivial, two-process case*)
    10 (*Trivial, two-process case*)
    11 Goalw [constrains_def, stable_def]
    11 Goalw [constrains_def, stable_def]
    12     "[| F : constrains (A Int B) A;  F : constrains (B Int A) B |] \
    12     "[| F : (A Int B) co A;  F : (B Int A) co B |] \
    13 \    ==> F : stable (A Int B)";
    13 \    ==> F : stable (A Int B)";
    14 by (Blast_tac 1);
    14 by (Blast_tac 1);
    15 result();
    15 result();
    16 
    16 
    17 
    17 
    67 qed "INT_le_Suc_equals_Int";
    67 qed "INT_le_Suc_equals_Int";
    68 
    68 
    69 
    69 
    70 (*The final deadlock example*)
    70 (*The final deadlock example*)
    71 val [zeroprem, allprem] = goalw thy [stable_def]
    71 val [zeroprem, allprem] = goalw thy [stable_def]
    72     "[| F : constrains (A 0 Int A (Suc n)) (A 0);  \
    72     "[| F : (A 0 Int A (Suc n)) co (A 0);  \
    73 \       ALL i: atMost n. F : constrains (A(Suc i) Int A i) \
    73 \       ALL i: atMost n. F : (A(Suc i) Int A i) co \
    74 \                                         (-A i Un A(Suc i)) |] \
    74 \                            (-A i Un A(Suc i)) |] \
    75 \    ==> F : stable (INT i: atMost (Suc n). A i)";
    75 \    ==> F : stable (INT i: atMost (Suc n). A i)";
    76 
    76 
    77 by (rtac ([zeroprem, allprem RS ball_constrains_INT] MRS 
    77 by (rtac ([zeroprem, allprem RS ball_constrains_INT] MRS 
    78     constrains_Int RS constrains_weaken) 1);
    78     constrains_Int RS constrains_weaken) 1);
    79 by (simp_tac (simpset() addsimps [Collect_le_Int_equals, 
    79 by (simp_tac (simpset() addsimps [Collect_le_Int_equals,