intros a b c H; inversion_clear H.
apply congruentDef with (u := u * c) (v := v * c); auto.
repeat rewrite mult_comm with (m := c); repeat rewrite mult_assoc_reverse;
repeat rewrite (mult_comm c).
repeat rewrite <- mult_plus_distr_r.
rewrite H0; auto.
Qed.

(* Specifications: *)
Lemma cong_mult :
forall a b c d : nat,
congruent a b -> congruent c d -> congruent (a * c) (b * d).