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) b) (max (pmon1 (S n) a) (pmon1 (S n) b)))
; auto.
rewrite
(plus_comm (pmon1 (S n) b)
(max (pmon1 (S n) a) (pmon1 (S n) b) - pmon1 (S n) b))
; auto.
apply le_max_r; auto.
Qed.

(* Specifications: *)
Theorem plus_minus_le : forall a b : nat, a - b + b = a -> b <= a.
intros a; elim a; simpl in |- *; auto.