Program Definition rel_expr {CS: compspecs} (e: expr) (v: val) (rho: environ) : pred rmap :=
    fun phi => rel_expr' rho phi e v.Program Definition rel_lvalue {CS: compspecs}  (e: expr) (v: val) (rho: environ) : pred rmap :=
    fun phi => rel_lvalue' rho phi e v.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 -> (* Clight.eval_expr ge ve te m e2 v1 -> *) Cop.sem_cast v1 t2 t1 m = Some v2 -> Val.load_result ch v2 = v2.
Lemma deref_loc_load_result: forall t ch m loc ofs v2, access_mode t = By_value ch -> deref_loc t m loc ofs v2 -> Val.load_result ch v2 = v2.
Lemma rel_LR'_fun: forall {CS: compspecs} rho phi e v, (rel_expr' rho phi e v -> forall v', rel_expr' rho phi e v' -> v=v') /\ (rel_lvalue' rho phi e v -> forall v', rel_lvalue' rho phi e v' -> v=v').
Lemma rel_expr'_fun: forall {CS: compspecs} rho phi e v v', rel_expr' rho phi e v -> rel_expr' rho phi e v' -> v=v'.
Lemma rel_lvalue'_fun: forall {CS: compspecs} rho phi e v v', rel_lvalue' rho phi e v -> rel_lvalue' rho phi e v' -> v=v'.
Lemma rel_LR_extend: forall {CS: compspecs} e v rho w, (rel_expr' rho w e v -> forall w', extendM w w' -> rel_expr' rho w' e v) /\ (rel_lvalue' rho w e v -> forall w', extendM w w' -> rel_lvalue' rho w' e v).
Lemma rel_expr_extend: forall {CS: compspecs} e v rho, boxy extendM (rel_expr e v rho).
Lemma rel_lvalue_extend: forall {CS: compspecs} e v rho, boxy extendM (rel_lvalue e v rho).