(** Correctness of the variable accessor [var_addr] *)

(* Specifications: *)
Lemma var_addr_correct:
forall cenv id f tf e le te sp lo hi m cs tm b,
match_callstack f m tm (Frame cenv tf e le te sp lo hi :: cs) (Mem.nextblock m) (Mem.nextblock tm) ->
eval_var_addr ge e id b ->
exists tv,
eval_expr tge (Vptr sp Int.zero) te tm (var_addr cenv id) tv
/\ val_inject f (Vptr b Int.zero) tv.
Lemma var_addr_correct:
forall cenv id f tf e le te sp lo hi m cs tm b,
match_callstack f m tm (Frame cenv tf e le te sp lo hi :: cs) (Mem.nextblock m) (Mem.nextblock tm) ->
eval_var_addr ge e id b ->
exists tv,
eval_expr tge (Vptr sp Int.zero) te tm (var_addr cenv id) tv
/\ val_inject f (Vptr b Int.zero) tv.