Inductive Forall2' (A B : Type) (R : A -> B -> Type) : list A -> list B -> Type :=
Forall2'_nil : Forall2' R [] []
| Forall2'_cons : forall (x : A) (y : B) (l : list A) (l' : list B),
R x y -> Forall2' R l l' -> Forall2' R (x :: l) (y :: l').

(* Simpler, weaker version *)
Lemma evaluates_sound' (t : term) (v : value):
evaluates t v ->
max_arity_term t <= max_arity ->
exists p, wf p /\ proj_right p = v /\ proj_left p = t.