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

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

tactic: have lb : ∃ x, x ∈ S := exists_lt f
state_before: f : CauSeq ℝ abs
S : Set ℝ := {x | const abs x < f}
⊢ ∃ x, f ≈ const abs x
state_after: f : CauSeq ℝ abs
S : Set ℝ := {x | const abs x < f}
lb : ∃ x, x ∈ S
⊢ ∃ 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: f : CauSeq ℝ abs
S : Set ℝ := {x | const abs x < f}
lb : ∃ x, x ∈ S
⊢ ∃ x, f ≈ const abs x
state_after: f : CauSeq ℝ abs
S : Set ℝ := {x | const abs x < f}
lb : ∃ x, x ∈ S
ub' : ∀ (x : ℝ), f < const abs x → ∀ y ∈ S, y ≤ x
⊢ ∃ x, f ≈ const abs x

tactic: have ub : ∃ x, ∀ y ∈ S, y ≤ x := (exists_gt f).imp ub'
state_before: f : CauSeq ℝ abs
S : Set ℝ := {x | const abs x < f}
lb : ∃ x, x ∈ S
ub' : ∀ (x : ℝ), f < const abs x → ∀ y ∈ S, y ≤ x
⊢ ∃ x, f ≈ const abs x
state_after: f : CauSeq ℝ abs
S : Set ℝ := {x | const abs x < f}
lb : ∃ x, x ∈ S
ub' : ∀ (x : ℝ), f < const abs x → ∀ y ∈ S, y ≤ x
ub : ∃ x, ∀ 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: f : CauSeq ℝ abs
S : Set ℝ := {x | const abs x < f}
lb : ∃ x, x ∈ S
ub' : ∀ (x : ℝ), f < const abs x → ∀ y ∈ S, y ≤ x
ub : ∃ x, ∀ y ∈ S, y ≤ x
⊢ ∃ x, f ≈ const abs x
state_after: case refine_1
f : CauSeq ℝ abs
S : Set ℝ := {x | const abs x < f}
lb : ∃ x, x ∈ S
ub' : ∀ (x : ℝ), f < const abs x → ∀ y ∈ S, y ≤ x
ub : ∃ x, ∀ y ∈ S, y ≤ x
h : f < const abs (sSup S)
⊢ False

case refine_2
f : CauSeq ℝ abs
S : Set ℝ := {x | const abs x < f}
lb : ∃ x, x ∈ S
ub' : ∀ (x : ℝ), f < const abs x → ∀ y ∈ S, y ≤ x
ub : ∃ x, ∀ y ∈ S, y ≤ x
h : const abs (sSup S) < f
⊢ False

tactic: rcases h with ⟨ε, ε0, i, ih⟩
state_before: case refine_1
f : CauSeq ℝ abs
S : Set ℝ := {x | const abs x < f}
lb : ∃ x, x ∈ S
ub' : ∀ (x : ℝ), f < const abs x → ∀ y ∈ S, y ≤ x
ub : ∃ x, ∀ y ∈ S, y ≤ x
h : f < const abs (sSup S)
⊢ False
state_after: case refine_1.intro.intro.intro
f : CauSeq ℝ abs
S : Set ℝ := {x | const abs x < f}
lb : ∃ x, x ∈ S
ub' : ∀ (x : ℝ), f < const abs x → ∀ y ∈ S, y ≤ x
ub : ∃ x, ∀ y ∈ S, y ≤ x
ε : ℝ
ε0 : ε > 0
i : ℕ
ih : ∀ j ≥ i, ε ≤ ↑(const abs (sSup S) - f) j
⊢ False

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

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

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

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

tactic: rcases h with ⟨ε, ε0, i, ih⟩
state_before: case refine_2
f : CauSeq ℝ abs
S : Set ℝ := {x | const abs x < f}
lb : ∃ x, x ∈ S
ub' : ∀ (x : ℝ), f < const abs x → ∀ y ∈ S, y ≤ x
ub : ∃ x, ∀ y ∈ S, y ≤ x
h : const abs (sSup S) < f
⊢ False
state_after: case refine_2.intro.intro.intro
f : CauSeq ℝ abs
S : Set ℝ := {x | const abs x < f}
lb : ∃ x, x ∈ S
ub' : ∀ (x : ℝ), f < const abs x → ∀ y ∈ S, y ≤ x
ub : ∃ x, ∀ y ∈ S, y ≤ x
ε : ℝ
ε0 : ε > 0
i : ℕ
ih : ∀ j ≥ i, ε ≤ ↑(f - const abs (sSup S)) j
⊢ 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
f : CauSeq ℝ abs
S : Set ℝ := {x | const abs x < f}
lb : ∃ x, x ∈ S
ub' : ∀ (x : ℝ), f < const abs x → ∀ y ∈ S, y ≤ x
ub : ∃ x, ∀ y ∈ S, y ≤ x
ε : ℝ
ε0 : ε > 0
i : ℕ
ih : ∀ j ≥ i, ε ≤ ↑(f - const abs (sSup S)) j
⊢ False
state_after: case refine_2.intro.intro.intro
f : CauSeq ℝ abs
S : Set ℝ := {x | const abs x < f}
lb : ∃ x, x ∈ S
ub' : ∀ (x : ℝ), f < const abs x → ∀ y ∈ S, y ≤ x
ub : ∃ x, ∀ y ∈ S, y ≤ x
ε : ℝ
ε0 : ε > 0
i : ℕ
ih : ∀ j ≥ i, ε ≤ ↑(f - const abs (sSup S)) j
⊢ ε / 2 + sSup S ∈ S

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

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
f : CauSeq ℝ abs
S : Set ℝ := {x | const abs x < f}
lb : ∃ x, x ∈ S
ub' : ∀ (x : ℝ), f < const abs x → ∀ y ∈ S, y ≤ x
ub : ∃ x, ∀ y ∈ S, y ≤ x
ε : ℝ
ε0 : ε > 0
i : ℕ
ih : ∀ j ≥ i, ε ≤ ↑(f - const abs (sSup S)) j
j : ℕ
ij : j ≥ i
⊢ ε / 2 ≤ ↑(f - const abs (ε / 2 + sSup S)) j
state_after: case refine_2.intro.intro.intro
f : CauSeq ℝ abs
S : Set ℝ := {x | const abs x < f}
lb : ∃ x, x ∈ S
ub' : ∀ (x : ℝ), f < const abs x → ∀ y ∈ S, y ≤ x
ub : ∃ x, ∀ y ∈ S, y ≤ x
ε : ℝ
ε0 : ε > 0
i : ℕ
ih : ∀ j ≥ i, ε ≤ ↑(f - const abs (sSup S)) j
j : ℕ
ij : j ≥ i
⊢ ε ≤ ↑f j - sSup S

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