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

(* The make_locals function actually satisfies the func_start_locals predicate. *)
Lemma make_locals_func_start_locals : forall fd vs n m,
identity m ->
func_start_locals fd vs (n,(make_locals vs fd,m)).