Hint Resolve lvalue_closed_deref lvalue_closedl_deref: closed.
Fixpoint closed_eval_expr (j: ident) (e: expr) : bool :=
match e with
| Econst_int i ty => true
| Econst_long i ty => true
| Econst_float f ty => true
| Econst_single f ty => true
| Etempvar id ty => negb (eqb_ident j id)
| Eaddrof a ty => closed_eval_lvalue j a
| Eunop op a ty =>  closed_eval_expr j a
| Ebinop op a1 a2 ty =>  andb (closed_eval_expr j a1) (closed_eval_expr j a2)
| Ecast a ty => closed_eval_expr j a
| Evar id ty => true
| Ederef a ty => closed_eval_expr j a
| Efield a i ty => closed_eval_lvalue j a
| Esizeof _ _ => true
| Ealignof _ _ => true
end
with closed_eval_lvalue (j: ident) (e: expr) : bool :=
match e with
| Evar id ty => true
| Ederef a ty => closed_eval_expr j a
| Efield a i ty => closed_eval_lvalue j a
| _  => false
end.

(* Specifications: *)
Lemma closed_eval_expr_e:
forall {cs: compspecs} j e, closed_eval_expr j e = true -> closed_wrt_vars (eq j) (eval_expr e)
with closed_eval_lvalue_e:
forall {cs: compspecs} j e, closed_eval_lvalue j e = true -> closed_wrt_vars (eq j) (eval_lvalue e).