Section CMCONSTR.
Variable sp: val.
Variable e: env.
Variable m: mem.

(* Specifications: *)
Lemma eval_condexpr_of_expr:
forall a le v b,
eval_expr tge sp e m le a v ->
Val.bool_of_val v b ->
eval_condexpr tge sp e m le (condexpr_of_expr a) b.
Lemma eval_load:
forall le a v chunk v',
eval_expr tge sp e m le a v ->
Mem.loadv chunk m v = Some v' ->
eval_expr tge sp e m le (load chunk a) v'.
Lemma eval_coopstore:
forall chunk a1 a2 v1 v2 f k m',
eval_expr tge sp e m nil a1 v1 ->
eval_expr tge sp e m nil a2 v2 ->
Mem.storev chunk m v1 v2 = Some m' ->
CMinSel_corestep tge (CMinSel_State f (store chunk a1 a2) k sp e) m
(CMinSel_State f Sskip k sp e) m'.
Lemma eval_effstore:
forall chunk a1 a2 v1 v2 f k m',
eval_expr tge sp e m nil a1 v1 ->
eval_expr tge sp e m nil a2 v2 ->
Mem.storev chunk m v1 v2 = Some m' ->
cminsel_effstep tge (StoreEffect v1 (encode_val chunk v2))
(CMinSel_State f (store chunk a1 a2) k sp e) m
(CMinSel_State f Sskip k sp e) m'.