End EVAL_BUILTIN_ARG_PRESERVED.
(** Compatibility with the "is less defined than" relation. *)
Section EVAL_BUILTIN_ARG_LESSDEF.
Variable A: Type.
Variable ge: Senv.t.
Variables e1 e2: A -> val.
Variable sp: val.
Variables m1 m2: mem.
Hypothesis env_lessdef: forall x, Val.lessdef (e1 x) (e2 x).
Hypothesis mem_extends: Mem.extends m1 m2.

(* Specifications: *)
Lemma eval_builtin_arg_lessdef:
forall a v1, eval_builtin_arg ge e1 sp m1 a v1 ->
exists v2, eval_builtin_arg ge e2 sp m2 a v2 /\ Val.lessdef v1 v2.
Lemma eval_builtin_args_lessdef:
forall al vl1, eval_builtin_args ge e1 sp m1 al vl1 ->
exists vl2, eval_builtin_args ge e2 sp m2 al vl2 /\ Val.lessdef_list vl1 vl2.
Lemma eval_builtin_arg_lessdef:
forall a v1, eval_builtin_arg ge e1 sp m1 a v1 ->
exists v2, eval_builtin_arg ge e2 sp m2 a v2 /\ Val.lessdef v1 v2.
Lemma eval_builtin_args_lessdef:
forall al vl1, eval_builtin_args ge e1 sp m1 al vl1 ->
exists vl2, eval_builtin_args ge e2 sp m2 al vl2 /\ Val.lessdef_list vl1 vl2.