Fixpoint inc_dec_in_queue (s : Site) (q : queue Message) {struct q} : Prop :=
  match q with
  | empty => False
  | input (inc_dec s2) q' =>
      if eq_site_dec s2 s then True else False
  | input _ q' => inc_dec_in_queue s q'
  end.

(* Specifications: *)
Lemma inc_dec_in : forall (s : Site) (q : queue Message), inc_dec_in_queue s q -> In_queue Message (inc_dec s) q.
Lemma inc_dec_queue_equal : forall (q : queue Message) (s1 s2 : Site), inc_dec_in_queue s1 q -> inc_dec_in_queue s2 q -> s1 = s2.
Lemma inc_dec_in : forall (s : Site) (q : queue Message), inc_dec_in_queue s q -> In_queue Message (inc_dec s) q.
Lemma inc_dec_queue_equal : forall (q : queue Message) (s1 s2 : Site), inc_dec_in_queue s1 q -> inc_dec_in_queue s2 q -> s1 = s2.
Lemma inc_dec_in : forall (s : Site) (q : queue Message), inc_dec_in_queue s q -> In_queue Message (inc_dec s) q.
Lemma inc_dec_queue_equal : forall (q : queue Message) (s1 s2 : Site), inc_dec_in_queue s1 q -> inc_dec_in_queue s2 q -> s1 = s2.