intros H; elim H; auto.
intros c'; case c'.
intros; omega.
intros c'' Hrec Hneq Hlt;
repeat rewrite <- (fun x : nat => mult_n_Sm x (S c'')).
auto with *.
Qed.
Remark add_sub_square_identity :
forall a b : nat,
(b + a - b) * (b + a - b) = (b + a) * (b + a) + b * b - 2 * ((b + a) * b).
intros a b; rewrite minus_plus.
repeat rewrite mult_plus_distr_r || rewrite <- (mult_comm (b + a)).
replace (b * b + a * b + (b * a + a * a) + b * b) with
(b * b + a * b + (b * b + a * b + a * a)); try (ring; fail).
rewrite expand_mult2; repeat rewrite minus_plus; auto with *.
Qed.

Theorem sub_square_identity :
forall a b : nat, b <= a -> (a - b) * (a - b) = a * a + b * b - 2 * (a * b).