Remark eval_same_expr:
forall a1 a2 le v1 v2,
same_expr_pure a1 a2 = true ->
eval_expr ge sp e m le a1 v1 ->
eval_expr ge sp e m le a2 v2 ->
a1 = a2 /\ v1 = v2.

(* Specifications: *)
Theorem eval_or: binary_constructor_sound or Val.or.
Theorem eval_xorimm:
forall n, unary_constructor_sound (xorimm n) (fun x => Val.xor x (Vint n)).
Theorem eval_xor: binary_constructor_sound xor Val.xor.
Theorem eval_divs_base:
forall le a b x y z,
eval_expr ge sp e m le a x ->
eval_expr ge sp e m le b y ->
Val.divs x y = Some z ->
exists v, eval_expr ge sp e m le (divs_base a b) v /\ Val.lessdef z v.
Lemma eval_mod_aux:
forall divop semdivop,
(forall sp x y m, eval_operation ge sp divop (x :: y :: nil) m = semdivop x y) ->
forall le a b x y z,
eval_expr ge sp e m le a x ->
eval_expr ge sp e m le b y ->
semdivop x y = Some z ->
eval_expr ge sp e m le (mod_aux divop a b) (Val.sub x (Val.mul z y)).
Theorem eval_mods_base:
forall le a b x y z,
eval_expr ge sp e m le a x ->
eval_expr ge sp e m le b y ->
Val.mods x y = Some z ->
exists v, eval_expr ge sp e m le (mods_base a b) v /\ Val.lessdef z v.
Theorem eval_divu_base:
forall le a b x y z,
eval_expr ge sp e m le a x ->
eval_expr ge sp e m le b y ->
Val.divu x y = Some z ->
exists v, eval_expr ge sp e m le (divu_base a b) v /\ Val.lessdef z v.
Theorem eval_modu_base:
forall le a b x y z,
eval_expr ge sp e m le a x ->
eval_expr ge sp e m le b y ->
Val.modu x y = Some z ->
exists v, eval_expr ge sp e m le (modu_base a b) v /\ Val.lessdef z v.
Theorem eval_shrximm:
forall le a n x z,
eval_expr ge sp e m le a x ->
Val.shrx x (Vint n) = Some z ->
exists v, eval_expr ge sp e m le (shrximm a n) v /\ Val.lessdef z v.
Theorem eval_shl: binary_constructor_sound shl Val.shl.
Theorem eval_shr: binary_constructor_sound shr Val.shr.
Theorem eval_shru: binary_constructor_sound shru Val.shru.
Theorem eval_negf: unary_constructor_sound negf Val.negf.
Theorem eval_absf: unary_constructor_sound absf Val.absf.
Theorem eval_addf: binary_constructor_sound addf Val.addf.
Theorem eval_subf: binary_constructor_sound subf Val.subf.
Theorem eval_mulf: binary_constructor_sound mulf Val.mulf.
Theorem eval_negfs: unary_constructor_sound negfs Val.negfs.
Theorem eval_absfs: unary_constructor_sound absfs Val.absfs.
Theorem eval_addfs: binary_constructor_sound addfs Val.addfs.
Theorem eval_subfs: binary_constructor_sound subfs Val.subfs.
Theorem eval_mulfs: binary_constructor_sound mulfs Val.mulfs.
Section COMP_IMM.
Theorem eval_or: binary_constructor_sound or Val.or.
Theorem eval_xorimm:
forall n, unary_constructor_sound (xorimm n) (fun x => Val.xor x (Vint n)).
Theorem eval_xor: binary_constructor_sound xor Val.xor.
Lemma eval_mod_aux:
forall divop semdivop,
(forall sp x y m, eval_operation ge sp divop (x :: y :: nil) m = semdivop x y) ->
forall le a b x y z,
eval_expr ge sp e m le a x ->
eval_expr ge sp e m le b y ->
semdivop x y = Some z ->
eval_expr ge sp e m le (mod_aux divop a b) (Val.sub x (Val.mul z y)).
Theorem eval_divs_base:
forall le a b x y z,
eval_expr ge sp e m le a x ->
eval_expr ge sp e m le b y ->
Val.divs x y = Some z ->
exists v, eval_expr ge sp e m le (divs_base a b) v /\ Val.lessdef z v.
Theorem eval_mods_base:
forall le a b x y z,
eval_expr ge sp e m le a x ->
eval_expr ge sp e m le b y ->
Val.mods x y = Some z ->
exists v, eval_expr ge sp e m le (mods_base a b) v /\ Val.lessdef z v.
Theorem eval_divu_base:
forall le a x b y z,
eval_expr ge sp e m le a x ->
eval_expr ge sp e m le b y ->
Val.divu x y = Some z ->
exists v, eval_expr ge sp e m le (divu_base a b) v /\ Val.lessdef z v.
Theorem eval_modu_base:
forall le a x b y z,
eval_expr ge sp e m le a x ->
eval_expr ge sp e m le b y ->
Val.modu x y = Some z ->
exists v, eval_expr ge sp e m le (modu_base a b) v /\ Val.lessdef z v.
Theorem eval_shrximm:
forall le a n x z,
eval_expr ge sp e m le a x ->
Val.shrx x (Vint n) = Some z ->
exists v, eval_expr ge sp e m le (shrximm a n) v /\ Val.lessdef z v.
Theorem eval_shl: binary_constructor_sound shl Val.shl.
Theorem eval_shr: binary_constructor_sound shr Val.shr.
Theorem eval_shru: binary_constructor_sound shru Val.shru.
Theorem eval_negf: unary_constructor_sound negf Val.negf.
Theorem eval_absf: unary_constructor_sound absf Val.absf.
Theorem eval_addf: binary_constructor_sound addf Val.addf.
Theorem eval_subf: binary_constructor_sound subf Val.subf.
Theorem eval_mulf: binary_constructor_sound mulf Val.mulf.
Theorem eval_negfs: unary_constructor_sound negfs Val.negfs.
Theorem eval_absfs: unary_constructor_sound absfs Val.absfs.
Theorem eval_addfs: binary_constructor_sound addfs Val.addfs.
Theorem eval_subfs: binary_constructor_sound subfs Val.subfs.
Theorem eval_mulfs: binary_constructor_sound mulfs Val.mulfs.
Section COMP_IMM.