(** Correctness of [make_unop]. *)

(* Specifications: *)
Lemma eval_make_unop:
forall sp te tm a v op v',
eval_expr tge sp te tm a v ->
eval_unop op v = Some v' ->
exists v'', eval_expr tge sp te tm (make_unop op a) v'' /\ Val.lessdef v' v''.
Lemma make_unop_correct:
forall f sp te tm a v op v' tv,
eval_expr tge sp te tm a tv ->
eval_unop op v = Some v' ->
val_inject f v tv ->
exists tv', eval_expr tge sp te tm (make_unop op a) tv' /\ val_inject f v' tv'.
Lemma eval_make_unop:
forall sp te tm a v op v',
eval_expr tge sp te tm a v ->
eval_unop op v = Some v' ->
exists v'', eval_expr tge sp te tm (make_unop op a) v'' /\ Val.lessdef v' v''.
Lemma make_unop_correct:
forall f sp te tm a v op v' tv,
eval_expr tge sp te tm a tv ->
eval_unop op v = Some v' ->
val_inject f v tv ->
exists tv', eval_expr tge sp te tm (make_unop op a) tv' /\ val_inject f v' tv'.