Section EquivCumulInv.
simple induction 1; intros; auto 10 with arith pts.
elim H0; intros; auto with arith pts.
apply cumul_trans with (Srt y0); auto with arith pts.
apply cumul_trans with (Prod A' B).
elim H0; intros; auto 10 with arith pts.
apply cumul_trans with (Prod y0 B); auto with arith pts.
elim H1; intros; auto 10 with arith pts.
apply cumul_trans with (Prod A' y0); auto with arith pts.
Qed.
Hypotheses (CR : church_rosser red_step)
(shn_sort : forall (e : env) (s : sort), head_normal hdr e (Srt s))
(shn_prod : forall (e : env) (A B : term), head_normal hdr e (Prod A B)).
red in |- *.
simple induction 1.
simple induction 1; intros.
inversion_clear H2.
elim CR with e0 y1 z; intros; auto with arith pts.
exists x2; auto 10 with arith pts.
split; auto with arith pts.
apply hn_red_hn with z; auto with arith pts.
change (conv hdr e0 y1 z) in |- *.
apply conv_trans with x1; auto with arith pts.
inversion_clear H2.
exists (Srt s2); auto with arith pts.
apply cumul_trans with (Srt s1); auto 10 with arith pts.
inversion_clear H5.
exists (Prod C D); auto with arith pts.
apply cumul_trans with (Prod A B); auto 10 with arith pts.
intros.
exists z; auto with arith pts.
intros.
elim H1 with z0; intros; auto with arith pts.
elim H3 with x1; intros; auto with arith pts.
exists x2; auto with arith pts.
apply cumul_trans with x1; auto with arith pts.
Qed.
simple induction 1; intros; auto 10 with arith pts.
Qed.

Lemma equiv_inv_cumul_hn :
forall (e : env) (x y : term),
rt_cumul e x y ->
forall x' y' : term,
red hdr e x x' ->
head_normal hdr e x' ->
red hdr e y y' -> head_normal hdr e y' -> cumul_hn_inv e x' y'.