Section SIMPLE_EVAL.
Variable f: function.
Variable k: cont.
Variable e: env.
Variable m: mem.
Proof (proj1 eval_simple_steps).
Proof (proj2 eval_simple_steps).
Fixpoint rval_list (vl: list val) (rl: exprlist) : exprlist :=
match vl, rl with
| v1 :: vl', Econs r1 rl' => Econs (Eval v1 (typeof r1)) (rval_list vl' rl')
| _, _ => Enil
end.
Inductive eval_simple_list': exprlist -> list val -> Prop :=
| esrl'_nil:
eval_simple_list' Enil nil
| esrl'_cons: forall r rl v vl,
eval_simple_rvalue e m r v ->
eval_simple_list' rl vl ->
eval_simple_list' (Econs r rl) (v :: vl).

Lemma eval_simple_list_implies:
forall rl tyl vl,
eval_simple_list e m rl tyl vl ->
exists vl', cast_arguments m (rval_list vl' rl) tyl vl /\ eval_simple_list' rl vl'.