intros n m; case m.
(* Focus 1 *)
intros; try rewrite <- (Qplus_sym Zero); repeat rewrite Qplus_zero_left;
auto with *.
(* Focus 2 *)
case n.
(* 2.2 *)
2: intros n' m' p'; apply Qplus_assoc_one_neg.
intros m' p'; repeat rewrite Qplus_zero_left; auto.
intros n' m' p'.
repeat rewrite (Qplus_sym (Qneg n')).
repeat rewrite <- Qplus_assoc_two_neg.
repeat rewrite (Qplus_sym (Qneg n')).
auto.
(* Focus 3 *)
intros m' p'; apply Qplus_assoc_two_neg.
Qed.

(* Specifications: *)
Theorem Qplus_assoc :
forall n m p : Q, Qplus n (Qplus m p) = Qplus (Qplus n m) p.