Definition weak_mapsto_ sh e rho :=
match (eval_expr e rho) with
| Vptr b o => (mapsto_ sh (typeof e) (Vptr b o)) ||
(mapsto_ sh (typeof e) (Vptr b o))
| _ => FF
end.

Lemma semax_set_forward:
forall (Delta: tycontext) (P: assert) id e,
semax Espec Delta
(fun rho =>
|> (tc_expr Delta e rho  && (tc_temp_id id (typeof e) Delta e rho) && P rho))
(Sset id e)
(normal_ret_assert
(fun rho => (EX old:val,
!! (eval_id id rho =  subst id old (eval_expr e) rho) &&
subst id old P rho))).