intros; rewrite <- H2; unfold after in |- *;
case (exist_after_M (frac_part_n_alpha n) (P1 n) (P2 n) N);
intros.
elim s; intros x y.
elim y; intros; clear y.
elim H4; intros; clear H4.
elim H6; intros; clear H6; auto.
cut (after N n = 0).
intro; rewrite H2 in H3; elimtype False; auto.
unfold after in |- *;
case (exist_after_M (frac_part_n_alpha n) (P1 n) (P2 n) N);
intros; auto.
elim s; intros x y.
elim y; intros; clear y.
elim H4; intros; clear H4.
elim H6; intros; clear H6; clear s.
generalize (lt_le_weak 0 x H3); intro.
elim (a x H6 H5); intros.
unfold Rle in H9; elim H9; intro; clear H9.
generalize (Rlt_asym (frac_part_n_alpha n) (frac_part_n_alpha x) H4); intro;
elimtype False; auto.
generalize (sym_eq H10); intro; clear H10.
cut
((frac_part_n_alpha n < frac_part_n_alpha x)%R \/
(frac_part_n_alpha n > frac_part_n_alpha x)%R); auto.
intro;
generalize
(Rlt_dichotomy_converse (frac_part_n_alpha n) (frac_part_n_alpha x) H10);
intro; elimtype False; auto.
Qed.

(**********)
Lemma after_last : forall N : nat, after N (last N) = 0.
unfold after in |- *; intro;
case
(exist_after_M (frac_part_n_alpha (last N)) (P1 (last N)) (P2 (last N)) N);
auto.