Definition is_temp (r: reg): Prop := exists s, r = temp s.(** A set of moves is a list of pairs of registers, of the form
    (source, destination). *)

Definition moves := (list (reg * reg))%type.(* src -> dst *)

Definition srcs (m: moves) := List.map (@fst reg reg) m.Definition dests (m: moves) := List.map (@snd reg reg) m.Definition env := reg -> val.

(* Specifications: *)
Lemma env_ext: forall (e1 e2: env), (forall r, e1 r = e2 r) -> e1 = e2.
Lemma env_ext: forall (e1 e2: env), (forall r, e1 r = e2 r) -> e1 = e2.