(* *)

(* Specifications: *)
Lemma transl_exprlist_Enil_correct:
forall (le : letenv),
transl_exprlist_prop le Enil nil.
Lemma transl_exprlist_Econs_correct:
forall (le : letenv) (a1 : expr) (al : exprlist) (v1 : val)
(vl : list val),
eval_expr ge sp e m le a1 v1 ->
transl_expr_prop le a1 v1 ->
eval_exprlist ge sp e m le al vl ->
transl_exprlist_prop le al vl ->
transl_exprlist_prop le (Econs a1 al) (v1 :: vl).
Lemma transl_condexpr_CEcond_correct:
forall le cond al vl vb,
eval_exprlist ge sp e m le al vl ->
transl_exprlist_prop le al vl ->
eval_condition cond vl m = Some vb ->
transl_condexpr_prop le (CEcond cond al) vb.
Lemma transl_condexpr_CEcondition_correct:
forall le a b c va v,
eval_condexpr ge sp e m le a va ->
transl_condexpr_prop le a va ->
eval_condexpr ge sp e m le (if va then b else c) v ->
transl_condexpr_prop le (if va then b else c) v ->
transl_condexpr_prop le (CEcondition a b c) v.
Lemma transl_condexpr_CElet_correct:
forall le a b v1 v2,
eval_expr ge sp e m le a v1 ->
transl_expr_prop le a v1 ->
eval_condexpr ge sp e m (v1 :: le) b v2 ->
transl_condexpr_prop (v1 :: le) b v2 ->
transl_condexpr_prop le (CElet a b) v2.
Theorem transl_expr_correct:
forall le a v,
eval_expr ge sp e m le a v ->
transl_expr_prop le a v.