End CastLoadF2B.
Module CastLoadB2F
(Def: CLIGHT_SEPARATION_HOARE_LOGIC_DEF)
(Conseq: CLIGHT_SEPARATION_HOARE_LOGIC_CONSEQUENCE with Module CSHL_Def := Def)
(CastLoadB: CLIGHT_SEPARATION_HOARE_LOGIC_CAST_LOAD_BACKWARD with Module CSHL_Def := Def):
CLIGHT_SEPARATION_HOARE_LOGIC_CAST_LOAD_FORWARD with Module CSHL_Def := Def.
Module CSHL_Def := Def.
Module ConseqFacts := GenConseqFacts (Def) (Conseq).

Theorem semax_cast_load_forward: forall {CS: compspecs} {Espec: OracleKind} (Delta: tycontext),
forall sh id P e1 t1 (v2: val),
typeof_temp Delta id = Some t1 ->
cast_pointer_to_bool (typeof e1) t1 = false ->
readable_share sh ->
local (tc_environ Delta) && P |-- `(mapsto sh (typeof e1)) (eval_lvalue e1) (`v2) * TT ->
@semax CS Espec Delta
(|> ( (tc_lvalue Delta e1) &&
local (`(tc_val t1) (`(eval_cast (typeof e1) t1 v2))) &&
P))
(Sset id (Ecast e1 t1))
(normal_ret_assert (EX old:val, local (`eq (eval_id id) (subst id (`old) (`(eval_cast (typeof e1) t1 v2)))) &&
(subst id (`old) P))).