Module ExtrFacts := GenExtrFacts (Def) (Conseq) (Extr).

Theorem semax_load_backward: forall {CS: compspecs} {Espec: OracleKind} (Delta: tycontext),
forall (P: environ->mpred) id e1,
@semax CS Espec Delta
(EX sh: share, EX t2: type, EX v2: val,
!! (typeof_temp Delta id = Some t2 /\
is_neutral_cast (typeof e1) t2 = true /\
readable_share sh) &&
|> ( (tc_lvalue Delta e1) &&
local (`(tc_val (typeof e1) v2)) &&
(`(mapsto sh (typeof e1)) (eval_lvalue e1) (`v2) * TT) &&
subst id (`v2) P))
(Sset id e1) (normal_ret_assert P).