(*Replaced by make_boolean_inject below Lemma make_boolean_correct: forall e le m a v ty b, eval_expr ge e le m a v -> bool_val v ty = Some b -> exists vb, eval_expr ge e le m (make_boolean a ty) vb /\ Val.bool_of_val vb b. *)

(* Specifications: *)
Lemma make_neg_correct:
forall a tya c va v e le m,
sem_neg va tya = Some v ->
make_neg a tya = OK c ->
eval_expr ge e le m a va ->
eval_expr ge e le m c v.
Lemma make_notbool_correct:
forall a tya c va v e le m,
sem_notbool va tya = Some v ->
make_notbool a tya = OK c ->
eval_expr ge e le m a va ->
eval_expr ge e le m c v.
Lemma make_notint_correct:
forall a tya c va v e le m,
sem_notint va tya = Some v ->
make_notint a tya = OK c ->
eval_expr ge e le m a va ->
eval_expr ge e le m c v.