(* Specifications: *)
Lemma tech_fp_alp_irr : forall n m : nat, frac_part_n_alpha n = frac_part_n_alpha m -> n = m.
Lemma fp_first_R0 : forall N : nat, (frac_part_n_alpha (first N) > 0)%R.
Lemma contra_tech_fp_alp_irr : forall n m : nat, n <> m -> frac_part_n_alpha n <> frac_part_n_alpha m.
Lemma contradiction1 : forall N k : nat, N <= k -> k < first N + last N -> (frac_part_n_alpha k < frac_part_n_alpha (first N))%R \/ (frac_part_n_alpha k > frac_part_n_alpha (last N))%R -> False.
Lemma absurd1 : forall N k : nat, N <= k -> k < first N + last N -> (frac_part_n_alpha k >= frac_part_n_alpha (first N))%R /\ (frac_part_n_alpha k <= frac_part_n_alpha (last N))%R.
Lemma absurd_first : forall N k : nat, 0 < k -> k < first N + last N -> (frac_part_n_alpha (first N) <= frac_part_n_alpha k)%R.
Lemma absurd_last : forall N k : nat, 0 < k -> k < first N + last N -> (frac_part_n_alpha k <= frac_part_n_alpha (last N))%R.
Lemma tech_first_aux : forall N a : nat, 0 < a -> a < N -> ((forall b : nat, 0 < b -> b < N -> (frac_part_n_alpha a <= frac_part_n_alpha b)%R) <-> a = first N).
Lemma eq_first_M_N : forall N M : nat, M = first N + last N -> ((forall b : nat, 0 < b -> b < M -> (frac_part_n_alpha (first N) <= frac_part_n_alpha b)%R) <-> first N = first M).
Lemma first_eq_M_N : forall N M : nat, M = first N + last N -> first N = first M.
Lemma tech_last_aux : forall N a : nat, 0 < a -> a < N -> ((forall b : nat, 0 < b -> b < N -> (frac_part_n_alpha b <= frac_part_n_alpha a)%R) <-> a = last N).
Lemma eq_last_M_N : forall N M : nat, M = first N + last N -> ((forall b : nat, 0 < b -> b < M -> (frac_part_n_alpha b <= frac_part_n_alpha (last N))%R) <-> last N = last M).
Lemma last_eq_M_N : forall N M : nat, M = first N + last N -> last N = last M.
Lemma tech_after : forall N n m : nat, 0 < n -> n < N -> 0 <= m -> m < N -> (frac_part_n_alpha n < frac_part_n_alpha m)%R -> ((exists k : nat, 0 < k /\ k < N /\ (frac_part_n_alpha n < frac_part_n_alpha k)%R /\ (frac_part_n_alpha k < frac_part_n_alpha m)%R) -> False) -> m = after N n.
Lemma prop_after : forall N n m : nat, after N n = m -> (exists k : nat, 0 < k /\ k < N /\ (frac_part_n_alpha n < frac_part_n_alpha k)%R /\ (frac_part_n_alpha k < frac_part_n_alpha m)%R) -> False.
Lemma tech_after_lt : forall N n m : nat, 0 < n -> n < N -> m <> 0 -> after N n = m -> (frac_part_n_alpha n < frac_part_n_alpha m)%R.
Lemma after_last : forall N : nat, after N (last N) = 0.
Lemma prop_M : forall N M : nat, M = first N + last N -> (frac_part_n_alpha M < frac_part_n_alpha (first N))%R \/ (frac_part_n_alpha M > frac_part_n_alpha (last N))%R.
Lemma le_N_M : forall N M : nat, M = first N + last N -> N <= M.
Lemma first_N : forall N : nat, N >= 2 -> first N < N.
Lemma last_N : forall N : nat, N >= 2 -> last N < N.
Lemma inter1 : forall N : nat, N >= 2 -> max (first N) (last N) < N.
Lemma first_N01 : forall N : nat, first N <= N.
Lemma last_N01 : forall N : nat, last N <= N.
Lemma first_0 : forall N : nat, N >= 2 -> 0 < first N.
Lemma last_0 : forall N : nat, N >= 2 -> 0 < last N.
Lemma first_n : forall N n : nat, N >= 2 -> 0 < n -> n < N -> (0 < alpha)%R /\ (alpha < 1)%R -> (frac_part_n_alpha (first N) <= frac_part_n_alpha n)%R.
Lemma last_n : forall N n : nat, N >= 2 -> 0 < n -> n < N -> (0 < alpha)%R /\ (alpha < 1)%R -> (frac_part_n_alpha n <= frac_part_n_alpha (last N))%R.
Lemma tech_first_last : forall N k : nat, N >= 2 -> 0 < k -> k < N -> ordre_total (first N) k /\ ordre_total k (last N).
Lemma le_first_last : forall N : nat, N >= 2 -> ordre_total (first N) (last N).
Lemma three_gap1 : forall N n : nat, 0 < n -> n < N - first N -> after N n = n + first N.
Lemma three_gap2 : forall N n : nat, N - first N <= n -> n < last N -> after N n = n + first N - last N.
Lemma three_gap3 : forall N n : nat, last N <= n -> n < N -> after N n = n - last N.