Inductive conv1 : lambda -> lambda -> Prop :=
  | red1_conv : forall M N : lambda, red1 M N -> conv1 M N
  | exp1_conv : forall M N : lambda, red1 N M -> conv1 M N.Inductive conv1 : lambda -> lambda -> Prop :=
  | red1_conv : forall M N : lambda, red1 M N -> conv1 M N
  | exp1_conv : forall M N : lambda, red1 N M -> conv1 M N.Inductive conv1 : lambda -> lambda -> Prop :=
  | red1_conv : forall M N : lambda, red1 M N -> conv1 M N
  | exp1_conv : forall M N : lambda, red1 N M -> conv1 M N.(* Beta conversion *)
Inductive conv : lambda -> lambda -> Prop :=
  | one_step_conv : forall M N : lambda, conv1 M N -> conv M N
  | refl_conv : forall M : lambda, conv M M
  | trans_conv : forall M N P : lambda, conv M N -> conv N P -> conv M P.(* Beta conversion *)
Inductive conv : lambda -> lambda -> Prop :=
  | one_step_conv : forall M N : lambda, conv1 M N -> conv M N
  | refl_conv : forall M : lambda, conv M M
  | trans_conv : forall M N P : lambda, conv M N -> conv N P -> conv M P.(* Beta conversion *)
Inductive conv : lambda -> lambda -> Prop :=
  | one_step_conv : forall M N : lambda, conv1 M N -> conv M N
  | refl_conv : forall M : lambda, conv M M
  | trans_conv : forall M N P : lambda, conv M N -> conv N P -> conv M P.(* Beta conversion *)
Inductive conv : lambda -> lambda -> Prop :=
  | one_step_conv : forall M N : lambda, conv1 M N -> conv M N
  | refl_conv : forall M : lambda, conv M M
  | trans_conv : forall M N P : lambda, conv M N -> conv N P -> conv M P.

Theorem Church_Rosser : forall M N : lambda, conv M N -> exists P : lambda, red M P /\ red N P.