Definition tearing_elem_fst (u : nat -> R) (v : R -> nat) (pen : enumeration R u v) (x : R)
:= exists n : nat, x = fst (proj1_sig (tearing_sequences u v pen n)).
(* The limit of the first tearing sequence cannot be reached by u *)
Definition torn_number (u : nat -> R) (v : R -> nat) (pen : enumeration R u v) :
{m : R | is_lub (tearing_elem_fst u v pen) m}.

(* Specifications: *)
(* The torn number is between both tearing sequences, so it could have been chosen at each step. *)
Lemma torn_number_below_second_sequence (u : nat -> R) (v : R -> nat)
(en : enumeration R u v) :
forall n : nat, Rlt (proj1_sig (torn_number u v en))
(snd (proj1_sig (tearing_sequences u v en n))).
(* Here is the contradiction : the torn number's index is above a sequence that tends to infinity *)
Lemma limit_index_above_all_indices (u : nat -> R) (v : R -> nat) (en : enumeration R u v) :
forall n : nat, v (fst (proj1_sig (tearing_sequences u v en (S n))))
< v (proj1_sig (torn_number u v en)).
(* The indices increase because each time the minimum index is chosen *)
Lemma first_indices_increasing (u : nat -> R) (v : R -> nat) (H : enumeration R u v)
: forall n : nat, n <> 0 -> v (fst (proj1_sig (tearing_sequences u v H n)))
< v (fst (proj1_sig (tearing_sequences u v H (S n)))).
Theorem R_uncountable : forall u : nat -> R, ~Bijective u.