Theorem: Real.cauSeq_converges
File: Mathlib/Data/Real/Basic.lean

tactic: let S := { x : ℝ | const abs x < f }
state_before: x y : ℝ
f : CauSeq ℝ abs
⊢ ∃ x, f ≈ const abs x

tactic: have lb : ∃ x, x ∈ S := exists_lt f
state_before: x y : ℝ
f : CauSeq ℝ abs
S : Set ℝ := {x | const abs x < f}
⊢ ∃ x, f ≈ const abs x

tactic: have ub' : ∀ x, f < const abs x → ∀ y ∈ S, y ≤ x := fun x h y yS =>
  le_of_lt <| const_lt.1 <| CauSeq.lt_trans yS h
state_before: x y : ℝ
f : CauSeq ℝ abs
S : Set ℝ := {x | const abs x < f}
lb : ∃ x, x ∈ S
⊢ ∃ x, f ≈ const abs x

tactic: have ub : ∃ x, ∀ y ∈ S, y ≤ x := (exists_gt f).imp ub'
state_before: x y : ℝ
f : CauSeq ℝ abs
S : Set ℝ := {x | const abs x < f}
lb : ∃ x, x ∈ S
ub' : ∀ (x : ℝ), f < const abs x → ∀ (y : ℝ), y ∈ S → y ≤ x
⊢ ∃ x, f ≈ const abs x

tactic: refine' ⟨sSup S, ((lt_total _ _).resolve_left fun h => _).resolve_right fun h => _⟩
state_before: x y : ℝ
f : CauSeq ℝ abs
S : Set ℝ := {x | const abs x < f}
lb : ∃ x, x ∈ S
ub' : ∀ (x : ℝ), f < const abs x → ∀ (y : ℝ), y ∈ S → y ≤ x
ub : ∃ x, ∀ (y : ℝ), y ∈ S → y ≤ x
⊢ ∃ x, f ≈ const abs x

tactic: rcases h with ⟨ε, ε0, i, ih⟩
state_before: case refine'_1
x y : ℝ
f : CauSeq ℝ abs
S : Set ℝ := {x | const abs x < f}
lb : ∃ x, x ∈ S
ub' : ∀ (x : ℝ), f < const abs x → ∀ (y : ℝ), y ∈ S → y ≤ x
ub : ∃ x, ∀ (y : ℝ), y ∈ S → y ≤ x
h : f < const abs (sSup S)
⊢ False

tactic: refine' (csSup_le lb (ub' _ _)).not_lt (sub_lt_self _ (half_pos ε0))
state_before: case refine'_1.intro.intro.intro
x y : ℝ
f : CauSeq ℝ abs
S : Set ℝ := {x | const abs x < f}
lb : ∃ x, x ∈ S
ub' : ∀ (x : ℝ), f < const abs x → ∀ (y : ℝ), y ∈ S → y ≤ x
ub : ∃ x, ∀ (y : ℝ), y ∈ S → y ≤ x
ε : ℝ
ε0 : ε > 0
i : ℕ
ih : ∀ (j : ℕ), j ≥ i → ε ≤ ↑(const abs (sSup S) - f) j
⊢ False

tactic: refine' ⟨_, half_pos ε0, i, fun j ij => _⟩
state_before: case refine'_1.intro.intro.intro
x y : ℝ
f : CauSeq ℝ abs
S : Set ℝ := {x | const abs x < f}
lb : ∃ x, x ∈ S
ub' : ∀ (x : ℝ), f < const abs x → ∀ (y : ℝ), y ∈ S → y ≤ x
ub : ∃ x, ∀ (y : ℝ), y ∈ S → y ≤ x
ε : ℝ
ε0 : ε > 0
i : ℕ
ih : ∀ (j : ℕ), j ≥ i → ε ≤ ↑(const abs (sSup S) - f) j
⊢ f < const abs (sSup S - ε / 2)

tactic: rw [sub_apply, const_apply, sub_right_comm, le_sub_iff_add_le, add_halves]
state_before: case refine'_1.intro.intro.intro
x y : ℝ
f : CauSeq ℝ abs
S : Set ℝ := {x | const abs x < f}
lb : ∃ x, x ∈ S
ub' : ∀ (x : ℝ), f < const abs x → ∀ (y : ℝ), y ∈ S → y ≤ x
ub : ∃ x, ∀ (y : ℝ), y ∈ S → y ≤ x
ε : ℝ
ε0 : ε > 0
i : ℕ
ih : ∀ (j : ℕ), j ≥ i → ε ≤ ↑(const abs (sSup S) - f) j
j : ℕ
ij : j ≥ i
⊢ ε / 2 ≤ ↑(const abs (sSup S - ε / 2) - f) j

tactic: exact ih _ ij
state_before: case refine'_1.intro.intro.intro
x y : ℝ
f : CauSeq ℝ abs
S : Set ℝ := {x | const abs x < f}
lb : ∃ x, x ∈ S
ub' : ∀ (x : ℝ), f < const abs x → ∀ (y : ℝ), y ∈ S → y ≤ x
ub : ∃ x, ∀ (y : ℝ), y ∈ S → y ≤ x
ε : ℝ
ε0 : ε > 0
i : ℕ
ih : ∀ (j : ℕ), j ≥ i → ε ≤ ↑(const abs (sSup S) - f) j
j : ℕ
ij : j ≥ i
⊢ ε ≤ sSup S - ↑f j

tactic: rcases h with ⟨ε, ε0, i, ih⟩
state_before: case refine'_2
x y : ℝ
f : CauSeq ℝ abs
S : Set ℝ := {x | const abs x < f}
lb : ∃ x, x ∈ S
ub' : ∀ (x : ℝ), f < const abs x → ∀ (y : ℝ), y ∈ S → y ≤ x
ub : ∃ x, ∀ (y : ℝ), y ∈ S → y ≤ x
h : const abs (sSup S) < f
⊢ False

tactic: refine' (le_csSup ub _).not_lt ((lt_add_iff_pos_left _).2 (half_pos ε0))
state_before: case refine'_2.intro.intro.intro
x y : ℝ
f : CauSeq ℝ abs
S : Set ℝ := {x | const abs x < f}
lb : ∃ x, x ∈ S
ub' : ∀ (x : ℝ), f < const abs x → ∀ (y : ℝ), y ∈ S → y ≤ x
ub : ∃ x, ∀ (y : ℝ), y ∈ S → y ≤ x
ε : ℝ
ε0 : ε > 0
i : ℕ
ih : ∀ (j : ℕ), j ≥ i → ε ≤ ↑(f - const abs (sSup S)) j
⊢ False

tactic: refine' ⟨_, half_pos ε0, i, fun j ij => _⟩
state_before: case refine'_2.intro.intro.intro
x y : ℝ
f : CauSeq ℝ abs
S : Set ℝ := {x | const abs x < f}
lb : ∃ x, x ∈ S
ub' : ∀ (x : ℝ), f < const abs x → ∀ (y : ℝ), y ∈ S → y ≤ x
ub : ∃ x, ∀ (y : ℝ), y ∈ S → y ≤ x
ε : ℝ
ε0 : ε > 0
i : ℕ
ih : ∀ (j : ℕ), j ≥ i → ε ≤ ↑(f - const abs (sSup S)) j
⊢ ε / 2 + sSup S ∈ S

tactic: rw [sub_apply, const_apply, add_comm, ← sub_sub, le_sub_iff_add_le, add_halves]
state_before: case refine'_2.intro.intro.intro
x y : ℝ
f : CauSeq ℝ abs
S : Set ℝ := {x | const abs x < f}
lb : ∃ x, x ∈ S
ub' : ∀ (x : ℝ), f < const abs x → ∀ (y : ℝ), y ∈ S → y ≤ x
ub : ∃ x, ∀ (y : ℝ), y ∈ S → y ≤ x
ε : ℝ
ε0 : ε > 0
i : ℕ
ih : ∀ (j : ℕ), j ≥ i → ε ≤ ↑(f - const abs (sSup S)) j
j : ℕ
ij : j ≥ i
⊢ ε / 2 ≤ ↑(f - const abs (ε / 2 + sSup S)) j

tactic: exact ih _ ij
state_before: case refine'_2.intro.intro.intro
x y : ℝ
f : CauSeq ℝ abs
S : Set ℝ := {x | const abs x < f}
lb : ∃ x, x ∈ S
ub' : ∀ (x : ℝ), f < const abs x → ∀ (y : ℝ), y ∈ S → y ≤ x
ub : ∃ x, ∀ (y : ℝ), y ∈ S → y ≤ x
ε : ℝ
ε0 : ε > 0
i : ℕ
ih : ∀ (j : ℕ), j ≥ i → ε ≤ ↑(f - const abs (sSup S)) j
j : ℕ
ij : j ≥ i
⊢ ε ≤ ↑f j - sSup S