Definition MATCH (d:CL_core) mu c1 m1 c2 m2:Prop :=
match_states (restrict (as_inj mu) (vis mu)) c1 m1 c2 m2 /\
REACH_closed m1 (vis mu) /\
meminj_preserves_globals ge (as_inj mu) /\
globalfunction_ptr_inject (as_inj mu) /\
(forall b, isGlobalBlock ge b = true -> frgnBlocksSrc mu b = true) /\
sm_valid mu m1 m2 /\ SM_wd mu /\ Mem.inject (as_inj mu) m1 m2.

Lemma transl_arglist_correctMu:
forall e le m al tyl vl mu te tle tm
(EVAL:Clight.eval_exprlist ge e le m al tyl vl)
(MENV : match_env (restrict (as_inj mu) (vis mu)) e te)
(TENV : match_tempenv (restrict (as_inj mu) (vis mu)) le tle)
(INJ : Mem.inject (as_inj mu) m tm)
(PG : meminj_preserves_globals ge (as_inj mu))
(RC: REACH_closed m (vis mu))
(GLOB: forall b, isGlobalBlock ge b = true -> frgnBlocksSrc mu b = true),
forall tal, transl_arglist al tyl = OK tal ->
exists tvl, val_list_inject (restrict (as_inj mu) (vis mu)) vl tvl /\
Csharpminor.eval_exprlist tge te tle tm tal tvl.