intros x y z; case z.
(* Focus 1 *)
intros H; inversion H.
(* Focus 2 *)
case y; case x; auto.
(* 2.1.1 is solved by Auto *)
(* Focus 2.1.2 z>0 y=0 x>0 *)
simpl in |- *; auto.
(* Focus 2.1.3 z>0 y=0 x<0 *)
intros x' y' H H1; inversion H1.
(* Focus 2.2.1 z>0 y>0 x=0 *)
intros x' y' H H1; inversion H1.
(* Focus 2.2.2  z>0  y>0  x>0 *)
simpl in |- *; intros x' y' z' H H0; apply Qgt_pos_pos.
red in |- *; intros H1.
inversion H0.
elim H4; rewrite <- (Qpositive_mult_One x').
rewrite <- (Qpositive_mult_One y').
rewrite <- (Qpositive_mult_inv z').
repeat rewrite Qpositive_mult_assoc.
repeat rewrite (Qpositive_mult_sym (Qpositive_inv z')).
repeat rewrite <- Qpositive_mult_assoc.
apply Qpositive_le_mult.
auto.
(* Focus 2.2.3 z>0 y>0 x<0 *)
intros x' y' z' H H1; inversion H1.
(* Focus 2.3.1 z>0 y<0 x=0 *)
simpl in |- *; auto.
(* Focus 2.3.2 z>0 y<0 x>0*)
simpl in |- *; auto.
(* Focus 2.3.3 z>0 y<0 x<0 *)
simpl in |- *; intros x' y' z' H H1; apply Qgt_neg_neg.
red in |- *; intros H0; inversion H1.
elim H4; rewrite <- (Qpositive_mult_One y').
rewrite <- (Qpositive_mult_One x').
rewrite <- (Qpositive_mult_inv z').
repeat rewrite Qpositive_mult_assoc.
repeat rewrite (Qpositive_mult_sym (Qpositive_inv z')).
repeat rewrite <- Qpositive_mult_assoc.
apply Qpositive_le_mult.
auto.
(* Focus 3 *)
intros z' H; inversion H.
Qed.

Theorem Qpositive_mult_simpl :
forall w w' w'' : Qpositive,
Qpositive_mult w w'' = Qpositive_mult w' w'' -> w = w'.