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_store:
forall Delta e1 e2 sh P,
writable0_share sh ->
semax Espec Delta
(fun rho =>
|> (tc_lvalue Delta e1 rho && tc_expr Delta (Ecast e2 (typeof e1)) rho  &&
(mapsto_ sh (typeof e1) (eval_lvalue e1 rho) * P rho)))
(Sassign e1 e2)
(normal_ret_assert (fun rho => mapsto sh (typeof e1) (eval_lvalue e1 rho)
(force_val (sem_cast  (typeof e2) (typeof e1) (eval_expr e2 rho))) * P rho)).