(* s1 is parent of s0 *)
Inductive mul_parent : Site -> Site -> Prop :=
    mul_parent_intro :
      forall s1 s0 : Site,
      rt c0 s0 = true ->
      In_queue Message (inc_dec s1) (bm c0 s0 owner) -> mul_parent s1 s0.(* s1 is parent of s0 *)
Inductive mul_parent : Site -> Site -> Prop :=
    mul_parent_intro :
      forall s1 s0 : Site,
      rt c0 s0 = true ->
      In_queue Message (inc_dec s1) (bm c0 s0 owner) -> mul_parent s1 s0.(* s1 is ancestor of s0 *)
Inductive mul_ancestor : Site -> Site -> Prop :=
  | mul_short : forall s1 s0 : Site, mul_parent s1 s0 -> mul_ancestor s1 s0
  | mul_long :
      forall s2 s1 s0 : Site,
      mul_ancestor s2 s1 -> mul_parent s1 s0 -> mul_ancestor s2 s0.(* s1 is ancestor of s0 *)
Inductive mul_ancestor : Site -> Site -> Prop :=
  | mul_short : forall s1 s0 : Site, mul_parent s1 s0 -> mul_ancestor s1 s0
  | mul_long :
      forall s2 s1 s0 : Site,
      mul_ancestor s2 s1 -> mul_parent s1 s0 -> mul_ancestor s2 s0.(* s1 is ancestor of s0 *)
Inductive mul_ancestor : Site -> Site -> Prop :=
  | mul_short : forall s1 s0 : Site, mul_parent s1 s0 -> mul_ancestor s1 s0
  | mul_long :
      forall s2 s1 s0 : Site,
      mul_ancestor s2 s1 -> mul_parent s1 s0 -> mul_ancestor s2 s0.

Lemma in_queue_collect : forall (b : Bag_of_message) (s1 s2 s3 s4 : Site) (m1 : Message), In_queue Message m1 (Collect_message Message b s3 s4 s1 s2) -> In_queue Message m1 (b s1 s2).