Remark select_loc_l_monotone:
forall l q1 q2,
OrderedEquation'.eq q1 q2 \/ OrderedEquation'.lt q1 q2 ->
select_loc_l l q1 = true -> select_loc_l l q2 = true.
Remark select_loc_h_monotone:
forall l q1 q2,
OrderedEquation'.eq q1 q2 \/ OrderedEquation'.lt q2 q1 ->
select_loc_h l q1 = true -> select_loc_h l q2 = true.
Remark select_loc_charact:
forall l q,
select_loc_l l q = false \/ select_loc_h l q = false <-> Loc.diff l (eloc q).

(* Specifications: *)
Lemma loc_unconstrained_sound:
forall l e q,
loc_unconstrained l e = true ->
EqSet.In q e ->
Loc.diff l (eloc q).
Lemma loc_unconstrained_satisf:
forall rs ls k r mr e v,
let l := R mr in
satisf rs ls (remove_equation (Eq k r l) e) ->
loc_unconstrained (R mr) (remove_equation (Eq k r l) e) = true ->
Val.lessdef (sel_val k rs#r) v ->
satisf rs (Locmap.set l v ls) e.
Lemma reg_loc_unconstrained_sound:
forall r l e q,
reg_loc_unconstrained r l e = true ->
EqSet.In q e ->
ereg q <> r /\ Loc.diff l (eloc q).
Lemma parallel_assignment_satisf:
forall k r mr e rs ls v v',
let l := R mr in
Val.lessdef (sel_val k v) v' ->
reg_loc_unconstrained r (R mr) (remove_equation (Eq k r l) e) = true ->
satisf rs ls (remove_equation (Eq k r l) e) ->
satisf (rs#r <- v) (Locmap.set l v' ls) e.
Lemma parallel_assignment_satisf_2:
forall rs ls res res' e e' v v',
remove_equations_res res res' e = Some e' ->
satisf rs ls e' ->
reg_unconstrained res e' = true ->
forallb (fun l => loc_unconstrained l e') (map R (regs_of_rpair res')) = true ->
Val.lessdef v v' ->
satisf (rs#res <- v) (Locmap.setpair res' v' ls) e.