intros; rewrite H;
cut
((frac_part_n_alpha (first N) + frac_part_n_alpha (last N) < 1)%R \/
(frac_part_n_alpha (first N) + frac_part_n_alpha (last N) >= 1)%R).
intros; elim H0; intro; clear H0.
right; unfold frac_part_n_alpha in H1; unfold frac_part_n_alpha in |- *;
rewrite (plus_INR (first N) (last N));
rewrite (Rmult_comm (INR (first N) + INR (last N)) alpha);
rewrite (Rmult_plus_distr_l alpha (INR (first N)) (INR (last N)));
rewrite (Rmult_comm (INR (first N)) alpha) in H1;
rewrite (Rmult_comm (INR (last N)) alpha) in H1;
rewrite (Rmult_comm (INR (last N)) alpha);
rewrite (plus_frac_part2 (alpha * INR (first N)) (alpha * INR (last N)) H1);
elim (Rplus_ne (alpha * INR (last N))); intros; clear H0;
pattern (alpha * INR (last N))%R at 2 in |- *; rewrite <- H2;
rewrite
(Rplus_comm (frac_part (alpha * INR (first N)))
(frac_part (alpha * INR (last N))));
rewrite (Rplus_comm 0 (alpha * INR (last N)));
cut (frac_part (alpha * INR (last N)) + frac_part 0 < 1)%R.
intro; rewrite (plus_frac_part2 (alpha * INR (last N)) 0 H0); rewrite fp_R0;
apply
(Rplus_gt_compat_l (frac_part (alpha * INR (last N)))
(frac_part (alpha * INR (first N))) 0); generalize (fp_first_R0 N);
unfold frac_part_n_alpha in |- *; rewrite (Rmult_comm alpha (INR (first N)));
auto.
rewrite fp_R0; elim (Rplus_ne (frac_part (alpha * INR (last N)))); intros;
clear H3; rewrite H0; rewrite (Rmult_comm alpha (INR (last N)));
cut (frac_part (INR (last N) * alpha) = frac_part_n_alpha (last N)).
intro; rewrite H3; apply (P2 (last N)).
unfold frac_part_n_alpha in |- *; auto.
(**)
left; unfold frac_part_n_alpha in H1; unfold frac_part_n_alpha in |- *;
unfold frac_part_n_alpha in |- *; rewrite (plus_INR (first N) (last N));
rewrite (Rmult_comm (INR (first N) + INR (last N)) alpha);
rewrite (Rmult_plus_distr_l alpha (INR (first N)) (INR (last N)));
rewrite (Rmult_comm (INR (first N)) alpha) in H1;
rewrite (Rmult_comm (INR (last N)) alpha) in H1;
rewrite (Rmult_comm (INR (first N)) alpha);
rewrite (plus_frac_part1 (alpha * INR (first N)) (alpha * INR (last N)) H1);
unfold Rminus in |- *; rewrite Rplus_assoc;
elim (Rplus_ne (alpha * INR (first N))); intros; clear H2;
pattern (alpha * INR (first N))%R at 2 in |- *; rewrite <- H0;
cut (frac_part (alpha * INR (first N)) + frac_part 0 < 1)%R.
intro; rewrite (plus_frac_part2 (alpha * INR (first N)) 0 H2); rewrite fp_R0;
apply
(Rplus_lt_compat_l (frac_part (alpha * INR (first N)))
(frac_part (alpha * INR (last N)) + -1) 0);
cut
((frac_part (alpha * INR (last N)) + -1)%R =
(frac_part (alpha * INR (last N)) - 1)%R).
intro; rewrite H3; clear H3;
apply (Rlt_minus (frac_part (alpha * INR (last N))) 1).
rewrite (Rmult_comm alpha (INR (last N)));
cut (frac_part (INR (last N) * alpha) = frac_part_n_alpha (last N)).
intro; rewrite H3; apply (P2 (last N)).
unfold frac_part_n_alpha in |- *; auto.
unfold Rminus in |- *; auto.
rewrite fp_R0; elim (Rplus_ne (frac_part (alpha * INR (first N)))); intros;
clear H3; rewrite H2; rewrite (Rmult_comm alpha (INR (first N)));
cut (frac_part (INR (first N) * alpha) = frac_part_n_alpha (first N)).
intro; rewrite H3; apply (P2 (first N)).
unfold frac_part_n_alpha in |- *; auto.
(**)
unfold Rge in |- *;
generalize
(Rtotal_order (frac_part_n_alpha (first N) + frac_part_n_alpha (last N)) 1);
intro; elim H0; intro.
left; auto.
right; elim H1; auto.
Qed.

(* Specifications: *)
(**********)
Lemma le_N_M : forall N M : nat, M = first N + last N -> N <= M.
intros; generalize (prop_M N M H); intro; cut (~ N > M).