(** We define the ``adherence'' of the problem [mu] as the set of
  registers that partially overlap with one of the registers
  possibly assigned by the parallel move: destinations and temporaries.
  Again, we define the complement of the ``adherence'' set, which is
  more convenient for Coq reasoning. *)

Definition no_adherence (r: reg) : Prop :=
  forall x, In x (dests mu) \/ is_temp x -> no_overlap x r.

(* Specifications: *)
Lemma no_overlap_pairwise: forall r1 r2 m, pairwise_disjoint m -> In r1 m -> In r2 m -> no_overlap r1 r2.
Lemma no_adherence_dst: forall d, In d (dests mu) -> no_adherence d.
Lemma no_adherence_src: forall s, In s (srcs mu) -> no_adherence s.
Lemma no_adherence_tmp: forall t, is_temp t -> no_adherence t.
Lemma no_overlap_pairwise: forall r1 r2 m, pairwise_disjoint m -> In r1 m -> In r2 m -> no_overlap r1 r2.
Lemma no_adherence_dst: forall d, In d (dests mu) -> no_adherence d.
Lemma no_adherence_src: forall s, In s (srcs mu) -> no_adherence s.
Lemma no_adherence_tmp: forall t, is_temp t -> no_adherence t.