Section SEMAX_PTREE.
Context {cs: compspecs}.

Lemma semax_PTree_set:
forall {Espec: OracleKind},
forall Delta id P Q R T1 T2 GV (e2: expr) t v,
local2ptree Q = (T1, T2, nil, GV) ->
typeof_temp Delta id = Some t ->
is_neutral_cast (implicit_deref (typeof e2)) t = true ->
msubst_eval_expr Delta T1 T2 GV e2 = Some v ->
ENTAIL Delta, PROPx P (LOCALx Q (SEPx R)) |--
(tc_expr Delta e2) ->
semax Delta (|>PROPx P (LOCALx Q (SEPx R)))
(Sset id e2)
(normal_ret_assert
(PROPx P
(LOCALx (temp id v :: remove_localdef_temp id Q)
(SEPx R)))).