End ALTERNATE.
Section MESS_ALT.
(* consequence sur la structure alternee *)
Variable b0 : Bag_of_Data Message.
Variable s0 : Site.

(* Specifications: *)
Lemma D_collect :
forall s1 s2 : Site,
D_queue (b0 s0 owner) -> D_queue (Collect_message Message b0 s1 s2 s0 owner).
Lemma D_post_elsewhere :
forall (s1 s2 : Site) (m : Message),
s1 <> s0 \/ s2 <> owner ->
D_queue (b0 s0 owner) -> D_queue (Post_message Message m b0 s1 s2 s0 owner).
Lemma D_post_dec :
alternate (b0 s0 owner) ->
D_queue (Post_message Message dec b0 s0 owner s0 owner).
Lemma alt_collect :
forall s1 s2 : Site,
alternate (b0 s0 owner) ->
alternate (Collect_message Message b0 s1 s2 s0 owner).
Lemma alt_post_elsewhere :
forall (s1 s2 : Site) (m : Message),
s1 <> s0 \/ s2 <> owner ->
alternate (b0 s0 owner) ->
alternate (Post_message Message m b0 s1 s2 s0 owner).
Lemma alt_post_any :
forall m : Message,
(forall s : Site, m <> inc_dec s) ->
alternate (b0 s0 owner) ->
alternate (Post_message Message m b0 s0 owner s0 owner).
Lemma alt_post_inc :
forall s1 : Site,
alternate (b0 s0 owner) ->
In_queue_before Message dec is_inc_dec (b0 s0 owner) ->
alternate (Post_message Message (inc_dec s1) b0 s0 owner s0 owner).
Lemma D_collect :
forall s1 s2 : Site,
D_queue (b0 s0 owner) -> D_queue (Collect_message Message b0 s1 s2 s0 owner).
Lemma D_post_elsewhere :
forall (s1 s2 : Site) (m : Message),
s1 <> s0 \/ s2 <> owner ->
D_queue (b0 s0 owner) -> D_queue (Post_message Message m b0 s1 s2 s0 owner).
Lemma D_post_dec :
alternate (b0 s0 owner) ->
D_queue (Post_message Message dec b0 s0 owner s0 owner).
Lemma alt_collect :
forall s1 s2 : Site,
alternate (b0 s0 owner) ->
alternate (Collect_message Message b0 s1 s2 s0 owner).
Lemma alt_post_elsewhere :
forall (s1 s2 : Site) (m : Message),
s1 <> s0 \/ s2 <> owner ->
alternate (b0 s0 owner) ->
alternate (Post_message Message m b0 s1 s2 s0 owner).
Lemma alt_post_any :
forall m : Message,
(forall s : Site, m <> inc_dec s) ->
alternate (b0 s0 owner) ->
alternate (Post_message Message m b0 s0 owner s0 owner).
Lemma alt_post_inc :
forall s1 : Site,
alternate (b0 s0 owner) ->
b0 s0 owner = empty Message \/
last Message (b0 s0 owner) = value Message dec ->
alternate (Post_message Message (inc_dec s1) b0 s0 owner s0 owner).
Lemma D_collect :
forall s1 s2 : Site,
D_queue (b0 s0 owner) -> D_queue (Collect_message Message b0 s1 s2 s0 owner).
Lemma D_post_elsewhere :
forall (s1 s2 : Site) (m : Message),
s1 <> s0 \/ s2 <> owner ->
D_queue (b0 s0 owner) -> D_queue (Post_message Message m b0 s1 s2 s0 owner).
Lemma D_post_dec : D_queue (Post_message Message dec b0 s0 owner s0 owner).
Lemma alt_collect :
forall s1 s2 : Site,
alternate (b0 s0 owner) ->
alternate (Collect_message Message b0 s1 s2 s0 owner).
Lemma alt_post_elsewhere :
forall (s1 s2 : Site) (m : Message),
s1 <> s0 \/ s2 <> owner ->
alternate (b0 s0 owner) ->
alternate (Post_message Message m b0 s1 s2 s0 owner).
Lemma alt_post_any :
forall m : Message,
(forall s : Site, m <> inc_dec s) ->
alternate (b0 s0 owner) ->
alternate (Post_message Message m b0 s0 owner s0 owner).
Lemma alt_post_inc :
forall s1 : Site,
alternate (b0 s0 owner) ->
b0 s0 owner = empty Message \/
last Message (b0 s0 owner) = value Message dec ->
alternate (Post_message Message (inc_dec s1) b0 s0 owner s0 owner).
Lemma D_collect :
forall s1 s2 : Site,
D_queue (b0 s0 owner) -> D_queue (Collect_message Message b0 s1 s2 s0 owner).
Lemma D_post_elsewhere :
forall (s1 s2 : Site) (m : Message),
s1 <> s0 \/ s2 <> owner ->
D_queue (b0 s0 owner) -> D_queue (Post_message Message m b0 s1 s2 s0 owner).
Lemma D_post_dec : D_queue (Post_message Message dec b0 s0 owner s0 owner).
Lemma alt_collect :
forall s1 s2 : Site,
alternate (b0 s0 owner) ->
alternate (Collect_message Message b0 s1 s2 s0 owner).
Lemma alt_post_elsewhere :
forall (s1 s2 : Site) (m : Message),
s1 <> s0 \/ s2 <> owner ->
alternate (b0 s0 owner) ->
alternate (Post_message Message m b0 s1 s2 s0 owner).
Lemma alt_post_any :
forall m : Message,
(forall s : Site, m <> inc_dec s) ->
alternate (b0 s0 owner) ->
alternate (Post_message Message m b0 s0 owner s0 owner).
Lemma alt_post_inc :
forall s1 : Site,
alternate (b0 s0 owner) ->
b0 s0 owner = empty Message \/
last Message (b0 s0 owner) = value Message dec ->
alternate (Post_message Message (inc_dec s1) b0 s0 owner s0 owner).