Hint Resolve closed_wrtl_lvar : closed.
Definition expr_closed_wrt_lvars (S: ident -> Prop) (e: expr) : Prop :=
forall (cs: compspecs) rho ve',
(forall i, S i \/ Map.get (ve_of rho) i = Map.get ve' i) ->
eval_expr e rho = eval_expr e (mkEnviron (ge_of rho) ve' (te_of rho)).
Definition lvalue_closed_wrt_lvars (S: ident -> Prop) (e: expr) : Prop :=
forall (cs: compspecs) rho ve',
(forall i, S i \/ Map.get (ve_of rho) i = Map.get ve' i) ->
eval_lvalue e rho = eval_lvalue e (mkEnviron (ge_of rho) ve'  (te_of rho)).

(* Specifications: *)
Lemma closed_wrt_cmp_ptr : forall {cs: compspecs} S e1 e2 c,
expr_closed_wrt_vars S e1 ->
expr_closed_wrt_vars S e2 ->
closed_wrt_vars S (`(cmp_ptr_no_mem c) (eval_expr e1) (eval_expr e2)).
Lemma closed_wrtl_cmp_ptr : forall {cs: compspecs} S e1 e2 c,
expr_closed_wrt_lvars S e1 ->
expr_closed_wrt_lvars S e2 ->
closed_wrt_lvars S (`(cmp_ptr_no_mem c) (eval_expr e1) (eval_expr e2)).