(* Simultaneous evaluation of a list of expressions *)
Fixpoint list_eval (es:list expr) (vs:list val) : pred world :=
match es, vs with
| e::es', v::vs' => eval e v && list_eval es' vs'
| nil, nil => TT
| _, _ => FF
end.

(* mapsto with the full share imp that memory stores will succeed. *)
Lemma mapsto_update : forall a v v' P n rho m,
(mapsto a Share.top v * P)%pred (n,(rho,m)) ->
exists m',
MemMap.map_upd a v' m = Some m' /\
(mapsto a Share.top v' * P)%pred (n,(rho,m')).