intros d; elim d; simpl in |- *; auto.
intros n H' a b;
pattern (ppcm_mon n (pmon2 (S n) a) (pmon2 (S n) b)) at 1 in |- *;
rewrite (H' (pmon2 (S n) a) (pmon2 (S n) b)).
pattern (max (pmon1 (S n) a) (pmon1 (S n) b)) at 1 in |- *;
rewrite
(le_plus_minus (pmon1 (S n) a) (max (pmon1 (S n) a) (pmon1 (S n) b)))
; auto.
rewrite
(plus_comm (pmon1 (S n) a)
(max (pmon1 (S n) a) (pmon1 (S n) b) - pmon1 (S n) a))
; auto.
apply le_max_l; auto.
Qed.

(* Specifications: *)
Theorem ppcm_prop_r :
forall (d : nat) (a b : mon d),
ppcm_mon d a b = mult_mon d (div_mon d (ppcm_mon d a b) b) b.