(* 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.

Lemma legal_no_copy_is_legal :
forall c c0 : Config, legal_no_copy c0 c -> legal c.