End BAG.
Section CONFIGURATION.
(* une configuration est un etat de la machine a un instant donne, bien qu'il n'y ait pas d'horloge globale ou plus exactement que les transitions ne soient pas deterministes, la variable time permet d'ordonner les transitions et donc de dater le dernier positionnement du drapeau rt sur chaque site *)
Definition access (s : Site) (rt : Rec_table) := s = owner \/ rt s = true.
Record Config : Set := mkconfig
{time : nat;
dt : Date_table;
st : Send_table;
rt : Rec_table;
bm : Bag_of_message}.
End CONFIGURATION.
Section ALT_DEF.
(* la nature de la file d'attente entre un site et l'owner est particuliere. C'est une alternance de messages dec et inc_dec dans laquelle les messages inc_dec sont isoles. De plus l'information pernmettant de savoir qu'une file est vide ou commence par un message dec est utile car elle est caracteristique d'un site ayant son drapeau rt non positionne *)
Inductive D_queue : queue Message -> Prop :=
| D_empty : D_queue (empty Message)
| D_dec : forall qm : queue Message, D_queue (input Message dec qm).
Inductive alternate : queue Message -> Prop :=
| alt_null : alternate (empty Message)
| alt_single_inc :
forall s0 : Site,
alternate (input Message (inc_dec s0) (empty Message))
| alt_dec_alt :
forall qm : queue Message,
alternate qm -> alternate (input Message dec qm)
| alt_inc_dec :
forall (qm : queue Message) (s0 : Site),
alternate qm ->
alternate (input Message (inc_dec s0) (input Message dec qm)).

(* Specifications: *)
Lemma not_D_queue :
forall (q0 : queue Message) (s0 : Site),
~ D_queue (input Message (inc_dec s0) q0).
Lemma D_first_out :
forall q0 : queue Message, D_queue q0 -> D_queue (first_out Message q0).
Lemma alt_first_out :
forall q0 : queue Message, alternate q0 -> alternate (first_out Message q0).