Section TABLES.
(* la vision en table est globale sur l'ensemble des sites, on peut aussi la voir distribuee chaque site etant proprietaire de son entree *)
Definition Date_table := Site -> nat.
Definition Send_table := Site -> Z.
Definition Rec_table := Site -> bool.
End TABLES.
Section BAG.
(* l'ensemble des messages est distribue sur les files d'attente, ceci pour respecter la contrainte que les messages entre deux sites sont recus dans l'ordre dans lequel ils sont emis *)
Definition Bag_of_message := Site -> Site -> queue Message.
Definition card_mess (m : Message) (q : queue Message) :=
card Message eq_message_dec m q.

(* Specifications: *)
Lemma pos_card_mess :
forall (m : Message) (q : queue Message), (card_mess m q >= 0)%Z.
Lemma strct_pos_card_mess :
forall (m : Message) (q : queue Message),
In_queue Message m q -> (card_mess m q > 0)%Z.
Lemma diff_or_elsewhere :
forall (m m' : Message) (bom : Bag_of_message) (s1 s2 s3 s4 : Site),
first Message (bom s3 s4) = value Message m ->
m <> m' ->
first Message (bom s1 s2) <> value Message m' \/ s1 <> s3 \/ s2 <> s4.