Ltac dec_enc :=
match goal with
[ |- decode_val ?CH _ = ?V] => assert (DE := decode_encode_val_general V CH CH);
apply decode_encode_val_similar in DE; auto
end.

Lemma semax_set_forward_nl:
forall (Delta: tycontext) (P: assert) id e v t,
typeof_temp Delta id = Some t ->
(forall rho, P rho |-- rel_expr e v rho) ->
tc_val t v ->
semax Espec Delta
(fun rho => |> (P rho))
(Sset id e)
(normal_ret_assert
(fun rho => (EX old:val, !! (v = eval_id id rho) && subst id old P rho))).