Fixpoint eval (e: expr) : env -> adr :=
fun s =>
match e with
| Const n => n
| Var x => s x
| Offset e n => n + eval e s
| Mem e => 0
end.
Definition eval_list (xs: list expr) : env -> (list adr) := fun s => map (fun e => eval e s) xs.

Lemma offset_zero:  forall a, eval (a .+ 0) = eval a.