Next Obligation. intros. apply rel_expr'_hered. Defined.
Program Definition rel_lvalue {CS: compspecs}  (e: expr) (v: val) (rho: environ) : pred rmap :=
fun phi => rel_lvalue' rho phi e v.
Next Obligation. intros. apply rel_lvalue'_hered. Defined.
Definition rel_lvalue'_expr'_sch CS rho phi P P0 :=
fun H1 H2 H3 H4 H5 H6 H7 H8 H9 H10 H11 H12 H13 H14 H15 H16 H17 =>
conj (rel_expr'_sch CS rho phi P P0 H1 H2 H3 H4 H5 H6 H7 H8 H9 H10 H11 H12 H13 H14 H15 H16 H17)
(rel_lvalue'_sch CS rho phi P P0 H1 H2 H3 H4 H5 H6 H7 H8 H9 H10 H11 H12 H13 H14 H15 H16 H17).

(* Specifications: *)
Lemma rel_lvalue_expr_relate:
forall {CS: compspecs} ge te ve rho jm,
genv_cenv ge = cenv_cs ->
rho = construct_rho (filter_genv ge) ve te ->
(forall e v,
rel_expr e v rho (m_phi jm) ->
Clight.eval_expr ge ve te (m_dry jm) e v) /\
(forall e v,
rel_lvalue e v rho (m_phi jm) ->
match v with
| Vptr b z => Clight.eval_lvalue ge ve te (m_dry jm) e b z
| _ => False
end).
Lemma rel_expr_relate:
forall {CS: compspecs} ge te ve rho e jm v,
genv_cenv ge = cenv_cs ->
rho = construct_rho (filter_genv ge) ve te ->
rel_expr e v rho (m_phi jm) ->
Clight.eval_expr ge ve te (m_dry jm) e v.
Lemma rel_lvalue_relate:
forall {CS: compspecs}  ge te ve rho e jm b z,
genv_cenv ge = cenv_cs ->
rho = construct_rho (filter_genv ge) ve te ->
rel_lvalue e (Vptr b z) rho (m_phi jm) ->
Clight.eval_lvalue ge ve te (m_dry jm) e b z.
Lemma sem_cast_load_result:
forall v1 t1 t2 v2 ch m,
access_mode t1 = By_value ch ->
Cop.sem_cast v1 t2 t1 m = Some v2 ->
Val.load_result ch v2 = v2.