Theory DFP_Proof_Rule1

Up to index of Isabelle/HOL/CSP/CSP_T/CSP_F/DFP

theory DFP_Proof_Rule1
imports DFP_Block

           (*-------------------------------------------*
            |                DFP package                |
            |                   June 2005               |
            |               December 2005  (modified)   |
            |                                           |
            |   DFP on CSP-Prover ver.3.0               |
            |              September 2006  (modified)   |
            |                  April 2007  (modified)   |
            |                                           |
            |        Yoshinao Isobe (AIST JAPAN)        |
            *-------------------------------------------*)

theory DFP_Proof_Rule1
imports DFP_Block
begin

(*  The following simplification rules are deleted in this theory file *)
(*  because they unexpectly rewrite UnionT and InterT.                 *)
(*                  Union (B ` A) = (UN x:A. B x)                      *)
(*                  Inter (B ` A) = (INT x:A. B x)                     *)

declare Union_image_eq [simp del]
declare Inter_image_eq [simp del]

(*  The following simplification rules are deleted in this theory file *)
(*  because they unexpectly rewrite (notick | t = []t)                 *)
(*                                                                     *)
(*                  disj_not1: (~ P | Q) = (P --> Q)                   *)

declare disj_not1 [simp del]

(*****************************************************************

         1. 
         2. 
         3. 
         4. 

 *****************************************************************)

(*--------------------------------------------------*
 |        Theorem 1 [Roscoe_Dathi_1987 P.8]         |
 *--------------------------------------------------*)

theorem Theorem1_Roscoe_Dathi_1987:
  "[| (I,FXf) isFailureOf (I,PXf) ; I ~= {} ; finite I ; 
      triple_disjoint (I,FXf) ; BusyNetwork (I,FXf) ; 
      EX f::('i => 'a failure => ('pi::order)).
      ALL t Yf. (t,Yf) isStateOf (I,FXf) -->
      (ALL i j. (I,FXf) >> i --[(t,Yf), (VocabularyOf (I,FXf))]-->o j
                --> f j (t rest-tr (snd (FXf j)), Yf j)
                  < f i (t rest-tr (snd (FXf i)), Yf i)) |]
   ==> DeadlockFreeNetwork (I,PXf)"
apply (simp add: DeadlockFree_notDeadlockState)
apply (case_tac "ALL t Yf. ~ (t, Yf) isDeadlockStateOf (I, FXf)", simp)

      (* by contradiction *)
apply (simp)
apply (elim conjE exE)
apply (subgoal_tac "(t,Yf) isStateOf (I,FXf)")
apply (simp add: Lemma1_Roscoe_Dathi_1987)
apply (subgoal_tac "EX j:I. ALL i:I. ~(f i (t rest-tr (snd (FXf i)), Yf i) 
                                     < f j (t rest-tr (snd (FXf j)), Yf j))")
apply (elim bexE)
apply (drule_tac x="j" in bspec, simp)
apply (simp add: isBlockedIn_def)
apply (elim conjE exE)
apply (drule_tac x="x" in spec)
apply (simp)

apply (drule_tac x="t" in spec)
apply (drule_tac x="Yf" in spec)
apply (simp)
apply (drule_tac x="j" in spec)
apply (drule_tac x="x" in spec)
apply (simp)
apply (drule_tac x="x" in bspec, simp add: isRequestOf_def)
apply (simp)

apply (simp add: nonempty_finite_set_exists_min_fun)
apply (simp add: isDeadlockStateOf_def)
done

(*--------------------------------------------------*
 |         Lemma 2 [Roscoe_Dathi_1987 P.9]          |
 *--------------------------------------------------*)

lemma Lemma2_Roscoe_Dathi_1987:
  "[| I ~= {} ; finite I ;
      triple_disjoint (I,FXf) ; BusyNetwork (I,FXf) ; 
      EX f::('i => 'a failure => ('pi::order)).
      ALL i:I. ALL j:I. i ~= j -->
      (ALL t Yf.
       (t,Yf) isStateOf ({i,j},FXf) &
       ({i,j},FXf) >> i --[(t,Yf), (VocabularyOf (I,FXf))]-->o j
                 --> f j (t rest-tr (snd (FXf j)), Yf j)
                   < f i (t rest-tr (snd (FXf i)), Yf i)) |]
   ==> EX f::('i => 'a failure => ('pi::order)).
       ALL t Yf. (t,Yf) isStateOf (I,FXf) -->
      (ALL i j. (I,FXf) >> i --[(t,Yf), (VocabularyOf (I,FXf))]-->o j
                --> f j (t rest-tr (snd (FXf j)), Yf j)
                  < f i (t rest-tr (snd (FXf i)), Yf i))"
apply (elim exE)
apply (rule_tac x="f" in exI)
apply (intro allI impI)
apply (drule_tac x="i" in bspec)
apply (simp add: in_index_I)
apply (drule_tac x="j" in bspec)
apply (simp add: in_index_I)
apply (simp add: in_index_I)

apply (drule_tac x="t rest-tr ((snd (FXf i) Un snd (FXf j)))" in spec)
apply (drule_tac x="Yf" in spec)
apply (drule mp)
 apply (rule conjI)
 apply (rule isStateOf_subsetI)
 apply (simp)
 apply (simp add: in_index_I)
 apply (blast)
 apply (rule isUngrantedRequestOfwrt_subsetI)
 apply (simp_all add: in_index_I)
 apply (simp add: in_index_I)
 apply (fast)
 apply (fast)

 apply (subgoal_tac 
    "t rest-tr ((snd (FXf i) Un snd (FXf j))) rest-tr (snd (FXf i))
   = t rest-tr (snd (FXf i))")
 apply (subgoal_tac 
    "t rest-tr ((snd (FXf i) Un snd (FXf j))) rest-tr (snd (FXf j))
   = t rest-tr (snd (FXf j))")
 apply (simp)
 apply (rule rest_tr_of_rest_tr_subset)
 apply (force)
 apply (rule rest_tr_of_rest_tr_subset)
 apply (force)
done

(*--------------------------------------------------*
 |         Rule 1 [Roscoe_Dathi_1987 P.9]           |
 *--------------------------------------------------*)

lemma Rule1_Roscoe_Dathi_1987:
  "[| (I,FXf) isFailureOf (I,PXf) ; I ~= {} ; finite I ;
      triple_disjoint (I,FXf) ; BusyNetwork (I,FXf) ; 
      EX f::('i => 'a failure => ('pi::order)).
      ALL i:I. ALL j:I. i ~= j -->
      (ALL t Yf.
       ({i,j},FXf) >> i --[(t,Yf), (VocabularyOf (I,FXf))]-->o j
                 --> f j (t rest-tr (snd (FXf j)), Yf j)
                   < f i (t rest-tr (snd (FXf i)), Yf i)) |]
   ==> DeadlockFreeNetwork (I,PXf)"
apply (rule Theorem1_Roscoe_Dathi_1987)
apply (simp_all)
apply (rule Lemma2_Roscoe_Dathi_1987)
apply (simp_all)
apply (simp add: isUngrantedRequestOfwrt_def)
apply (simp add: isUngrantedRequestOf_def)
apply (simp add: isRequestOf_def)
done

lemma Rule1_Roscoe_Dathi_1987_I:
  "[| (I,FXf) isFailureOf V ; I ~= {} ; finite I ;
      triple_disjoint (I,FXf) ; BusyNetwork (I,FXf) ; 
      EX f::('i => 'a failure => ('pi::order)).
      ALL i:I. ALL j:I. i ~= j -->
      (ALL t Yf.
       ({i,j},FXf) >> i --[(t,Yf), (VocabularyOf (I,FXf))]-->o j
                 --> f j (t rest-tr (snd (FXf j)), Yf j)
                   < f i (t rest-tr (snd (FXf i)), Yf i)) |]
   ==> DeadlockFreeNetwork V"
apply (insert decompo_V[of V])
apply (rotate_tac -1, erule exE)
apply (rotate_tac -1, erule exE)
apply (subgoal_tac "Ia = I")
apply (simp add: Rule1_Roscoe_Dathi_1987)
apply (simp add: isFailureOf_def)
done

(*** looks test ***)

theorem Rule1_Roscoe_Dathi_1987_simp:
  "[| VF = {(F i, X i) | i:I}Fnet ; V = {(P i, X i) | i:I}net ;
      VF isFailureOf V ; I ~= {} ; finite I ;
      triple_disjoint VF ; BusyNetwork VF ;
      EX f::('i => 'a failure => ('pi::order)).
      ALL i:I. ALL j:I. i ~= j -->
      (ALL t Y.
       {(F i, X i) | i:{i,j}}Fnet >> 
               i --[(t,Y), (VocabularyOf VF)]-->o j
                 --> f j (t rest-tr (X j), Y j)
                   < f i (t rest-tr (X i), Y i)) |]
   ==> DeadlockFreeNetwork V"
apply (simp)
apply (rule Rule1_Roscoe_Dathi_1987_I)
apply (simp_all)
apply (elim conjE exE)
apply (rule_tac x="f" in exI)
apply (auto)
done

(****************** to add it again ******************)

declare disj_not1   [simp]

declare Union_image_eq [simp]
declare Inter_image_eq [simp]

end