(* Parallel beta reduction *)
Inductive par_red1 : lambda -> lambda -> Prop :=
| par_beta :
forall M M' : lambda,
par_red1 M M' ->
forall N N' : lambda,
par_red1 N N' -> par_red1 (App (Abs M) N) (subst N' M')
| ref_par_red : forall n : nat, par_red1 (Ref n) (Ref n)
| abs_par_red :
forall M M' : lambda, par_red1 M M' -> par_red1 (Abs M) (Abs M')
| app_par_red :
forall M M' : lambda,
par_red1 M M' ->
forall N N' : lambda, par_red1 N N' -> par_red1 (App M N) (App M' N').
Hint Resolve par_beta ref_par_red abs_par_red app_par_red.

Lemma refl_par_red1 : forall M : lambda, par_red1 M M.
Hint Resolve refl_par_red1.