(* 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.

(* Some additional facts about evaluation *)
Lemma list_eval_join_sub : forall es vs w1 w2,
join_sub w1 w2 ->
list_eval es vs w1 ->
list_eval es vs w2.