Definition substopt {A} (ret: option ident) (v: val) (P: environ -> A)  : environ -> A :=
match ret with
| Some id => subst id v P
| None => P
end.

Lemma eval_exprlist_relate:
forall (Delta : tycontext) (fsig0 : funsig)
(bl : list expr) (psi : genv) (vx : env) (tx : temp_env)
(rho : environ) m,
denote_tc_assert (typecheck_exprlist Delta (snd (split (fst fsig0))) bl) rho (m_phi m) ->
typecheck_environ Delta rho ->
genv_cenv psi = cenv_cs ->
rho = construct_rho (filter_genv psi) vx tx ->
forall f : function,
fsig0 = fn_funsig f ->
Clight.eval_exprlist psi vx tx (m_dry m) bl
(type_of_params (fn_params f))
(eval_exprlist (snd (split (fst fsig0))) bl rho).