intros.
elim whnf with e x; intros; auto with pts.
elim whnf with e y; intros; auto with pts.
elim CR_WHNF_inv_cumul_dec with e x0 x1; intros.
left.
apply cumul_trans with x0; auto 10 with pts.
apply cumul_trans with x1; auto 10 with pts.
right; red in |- *; intros.
apply b.
apply inv_cumul_hn with x y; auto with pts.
apply sn_red_sn with x; auto with pts.
apply sn_red_sn with y; auto with pts.
Qed.

(* Specifications: *)
Lemma cumul_inv_prod : product_inversion rt_cumul.
cut
(forall (e : env) (A B C D : term),
rt_cumul e (Prod A B) (Prod C D) ->
rt_cumul e C A /\ rt_cumul (Ax C :: e) B D).