(* copy predicate *)
Definition copy_p (c : Config) (t : class_trans c) :=
match t with
| make_copy s1 s2 h1 h2 => True
| _ => False
end.
Section LEGAL_NO_COPY.
(** this inductive definition defines legal_no_copy as a predicate over a configuration c, which is accessible with legal transitions from a legal config c0, without using any copy transition *)
Variable c0 : Config.
Inductive legal_no_copy : Config -> Prop :=
| no_copy_init : legal c0 -> legal_no_copy c0
| after_no_copy :
forall (c : Config) (t : class_trans c),
~ copy_p c t -> legal_no_copy c -> legal_no_copy (transition c t).
End LEGAL_NO_COPY.

(* Specifications: *)
Lemma legal_no_copy_is_legal :
forall c c0 : Config, legal_no_copy c0 c -> legal c.
Lemma decide_empty_queue :
forall (c : Config) (s1 s2 : Site),
{bm c s1 s2 = empty Message} + {bm c s1 s2 <> empty Message}.