(** An RTL register environment matches a CminorSel local environment and let-environment if the value of every local or let-bound variable in the CminorSel environments is identical to the value of the corresponding pseudo-register in the RTL register environment. *)
Record match_env
(map: mapping) (e: env) (le: letenv) (rs: regset) : Prop :=
mk_match_env {
me_vars:
(forall id v,
e!id = Some v -> exists r, map.(map_vars)!id = Some r /\ Val.lessdef v rs#r);
me_letvars:
Val.lessdef_list le rs##(map.(map_letvars))
}.

Lemma match_env_invariant:
forall map e le rs rs',
match_env map e le rs ->
(forall r, (reg_in_map map r) -> rs'#r = rs#r) ->
match_env map e le rs'.