intros; generalize (inter31a alpha_irr prop_alpha prop_N N n); intros;
generalize (eq_after_M_N1 alpha_irr prop_alpha prop_N N n H H0);
intro; rewrite <- H2; cut (n < last (M N)).
intro;
rewrite
(first_eq_M_N alpha_irr prop_alpha prop_N N (M N)
(refl_equal (first N + last N))); apply (H1 H H3).
generalize
(le_N_M alpha_irr prop_alpha prop_N N (M N) (refl_equal (first N + last N)));
intro; generalize (le_lt_or_eq N (first N + last N) H3);
intro; elim H4; intro.
cut (N - first N < last (M N)).
intro; apply (lt_trans n (N - first N) (last (M N)) H0 H6).
rewrite <-
(last_eq_M_N alpha_irr prop_alpha prop_N N (M N)
(refl_equal (first N + last N)));
apply (lt_plus_minus N (first N) (last N) (first_N N (prop_N N)) H5).
rewrite <-
(last_eq_M_N alpha_irr prop_alpha prop_N N (M N)
(refl_equal (first N + last N))); cut (M N = first N + last N).
intro; rewrite <- H6 in H5; rewrite H5 in H0;
rewrite <-
(first_eq_M_N alpha_irr prop_alpha prop_N N (M N)
(refl_equal (first N + last N))) in H0;
rewrite (plus_minus (M N) (first N) (last N) H6);
auto with arith real.
auto with arith real.
Qed.

(* Specifications: *)
(**********)
Lemma three_gap2 :
forall N n : nat,
N - first N <= n -> n < last N -> after N n = n + first N - last N.