(* 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 imp the ability to read from memory *)
Lemma mapsto_val : forall a sh v P n rho m,
(mapsto a sh v * P )%pred(n,(rho,m)) ->
MemMap.map_val a m = Some v.