-- Mathlib/Algebra/Order/CauSeq/Basic.lean
theorem abv_pos_of_not_limZero {f : CauSeq β abv} (hf : ¬LimZero f) :
    ∃ K > 0, ∃ i, ∀ j ≥ i, K ≤ abv (f j)

Proof state:
α : Type u_1
β : Type u_2
inst✝² : LinearOrderedField α
inst✝¹ : Ring β
abv : β → α
inst✝ : IsAbsoluteValue abv
f : CauSeq β abv
hf : ¬f.LimZero
this : (a : Prop) → Decidable a
nk : ¬∃ K > 0, ∃ i, ∀ j ≥ i, K ≤ abv (↑f j)
⊢ False

Tactic:
refine hf fun ε ε0 => ?_

Result:
α : Type u_1
β : Type u_2
inst✝² : LinearOrderedField α
inst✝¹ : Ring β
abv : β → α
inst✝ : IsAbsoluteValue abv
f : CauSeq β abv
hf : ¬f.LimZero
this : (a : Prop) → Decidable a
nk : ¬∃ K > 0, ∃ i, ∀ j ≥ i, K ≤ abv (↑f j)
ε : α
ε0 : ε > 0
⊢ ∃ i, ∀ j ≥ i, abv (↑f j) < ε

Proof state:
case intro.intro.intro
α : Type u_1
β : Type u_2
inst✝² : LinearOrderedField α
inst✝¹ : Ring β
abv : β → α
inst✝ : IsAbsoluteValue abv
f : CauSeq β abv
hf : ¬f.LimZero
this : (a : Prop) → Decidable a
ε : α
ε0 : ε > 0
nk : ∀ (x : α), 0 < x → ∀ (x_1 : ℕ), ∃ x_2, ∃ (_ : x_1 ≤ x_2), abv (↑f x_2) < x
i : ℕ
hi : ∀ j ≥ i, ∀ k ≥ j, abv (↑f k - ↑f j) < ε / 2
j : ℕ
ij : i ≤ j
hj : abv (↑f j) < ε / 2
⊢ ∃ i, ∀ j ≥ i, abv (↑f j) < ε

Tactic:
refine ⟨j, fun k jk => ?_⟩

Result:
case intro.intro.intro
α : Type u_1
β : Type u_2
inst✝² : LinearOrderedField α
inst✝¹ : Ring β
abv : β → α
inst✝ : IsAbsoluteValue abv
f : CauSeq β abv
hf : ¬f.LimZero
this : (a : Prop) → Decidable a
ε : α
ε0 : ε > 0
nk : ∀ (x : α), 0 < x → ∀ (x_1 : ℕ), ∃ x_2, ∃ (_ : x_1 ≤ x_2), abv (↑f x_2) < x
i : ℕ
hi : ∀ j ≥ i, ∀ k ≥ j, abv (↑f k - ↑f j) < ε / 2
j : ℕ
ij : i ≤ j
hj : abv (↑f j) < ε / 2
k : ℕ
jk : k ≥ j
⊢ abv (↑f k) < ε

Proof state:
case intro.intro.intro
α : Type u_1
β : Type u_2
inst✝² : LinearOrderedField α
inst✝¹ : Ring β
abv : β → α
inst✝ : IsAbsoluteValue abv
f : CauSeq β abv
hf : ¬f.LimZero
this : (a : Prop) → Decidable a
ε : α
ε0 : ε > 0
nk : ∀ (x : α), 0 < x → ∀ (x_1 : ℕ), ∃ x_2, ∃ (_ : x_1 ≤ x_2), abv (↑f x_2) < x
i : ℕ
hi : ∀ j ≥ i, ∀ k ≥ j, abv (↑f k - ↑f j) < ε / 2
j : ℕ
ij : i ≤ j
hj : abv (↑f j) < ε / 2
k : ℕ
jk : k ≥ j
⊢ abv (↑f k) < ε

Tactic:
have := lt_of_le_of_lt (abv_add abv _ _) (add_lt_add (hi j ij k jk) hj)

Result:
case intro.intro.intro
α : Type u_1
β : Type u_2
inst✝² : LinearOrderedField α
inst✝¹ : Ring β
abv : β → α
inst✝ : IsAbsoluteValue abv
f : CauSeq β abv
hf : ¬f.LimZero
this✝ : (a : Prop) → Decidable a
ε : α
ε0 : ε > 0
nk : ∀ (x : α), 0 < x → ∀ (x_1 : ℕ), ∃ x_2, ∃ (_ : x_1 ≤ x_2), abv (↑f x_2) < x
i : ℕ
hi : ∀ j ≥ i, ∀ k ≥ j, abv (↑f k - ↑f j) < ε / 2
j : ℕ
ij : i ≤ j
hj : abv (↑f j) < ε / 2
k : ℕ
jk : k ≥ j
this : abv (↑f k - ↑f j + ↑f j) < ε / 2 + ε / 2
⊢ abv (↑f k) < ε

Proof state:
case intro.intro.intro
α : Type u_1
β : Type u_2
inst✝² : LinearOrderedField α
inst✝¹ : Ring β
abv : β → α
inst✝ : IsAbsoluteValue abv
f : CauSeq β abv
hf : ¬f.LimZero
this✝ : (a : Prop) → Decidable a
ε : α
ε0 : ε > 0
nk : ∀ (x : α), 0 < x → ∀ (x_1 : ℕ), ∃ x_2, ∃ (_ : x_1 ≤ x_2), abv (↑f x_2) < x
i : ℕ
hi : ∀ j ≥ i, ∀ k ≥ j, abv (↑f k - ↑f j) < ε / 2
j : ℕ
ij : i ≤ j
hj : abv (↑f j) < ε / 2
k : ℕ
jk : k ≥ j
this : abv (↑f k - ↑f j + ↑f j) < ε / 2 + ε / 2
⊢ abv (↑f k) < ε

Tactic:
rwa [sub_add_cancel, add_halves] at this

Result:
no goals

Proof state:
α : Type u_1
β : Type u_2
inst✝² : LinearOrderedField α
inst✝¹ : Ring β
abv : β → α
inst✝ : IsAbsoluteValue abv
f : CauSeq β abv
hf : ¬f.LimZero
this : (a : Prop) → Decidable a
ε : α
ε0 : ε > 0
nk : ∀ (x : α), 0 < x → ∀ (x_1 : ℕ), ∃ x_2, ∃ (_ : x_1 ≤ x_2), abv (↑f x_2) < x
⊢ ∃ i, ∀ j ≥ i, abv (↑f j) < ε

Tactic:
obtain ⟨i, hi⟩ := f.cauchy₃ (half_pos ε0)

Result:
case intro
α : Type u_1
β : Type u_2
inst✝² : LinearOrderedField α
inst✝¹ : Ring β
abv : β → α
inst✝ : IsAbsoluteValue abv
f : CauSeq β abv
hf : ¬f.LimZero
this : (a : Prop) → Decidable a
ε : α
ε0 : ε > 0
nk : ∀ (x : α), 0 < x → ∀ (x_1 : ℕ), ∃ x_2, ∃ (_ : x_1 ≤ x_2), abv (↑f x_2) < x
i : ℕ
hi : ∀ j ≥ i, ∀ k ≥ j, abv (↑f k - ↑f j) < ε / 2
⊢ ∃ i, ∀ j ≥ i, abv (↑f j) < ε

Proof state:
α : Type u_1
β : Type u_2
inst✝² : LinearOrderedField α
inst✝¹ : Ring β
abv : β → α
inst✝ : IsAbsoluteValue abv
f : CauSeq β abv
hf : ¬f.LimZero
⊢ ∃ K > 0, ∃ i, ∀ j ≥ i, K ≤ abv (↑f j)

Tactic:
haveI := Classical.propDecidable

Result:
α : Type u_1
β : Type u_2
inst✝² : LinearOrderedField α
inst✝¹ : Ring β
abv : β → α
inst✝ : IsAbsoluteValue abv
f : CauSeq β abv
hf : ¬f.LimZero
this : (a : Prop) → Decidable a
⊢ ∃ K > 0, ∃ i, ∀ j ≥ i, K ≤ abv (↑f j)

Proof state:
α : Type u_1
β : Type u_2
inst✝² : LinearOrderedField α
inst✝¹ : Ring β
abv : β → α
inst✝ : IsAbsoluteValue abv
f : CauSeq β abv
hf : ¬f.LimZero
this : (a : Prop) → Decidable a
nk : ¬∃ K > 0, ∃ i, ∀ j ≥ i, K ≤ abv (↑f j)
ε : α
ε0 : ε > 0
⊢ ∃ i, ∀ j ≥ i, abv (↑f j) < ε

Tactic:
simp? [not_forall] at nk says
  simp only [gt_iff_lt, ge_iff_le, not_exists, not_and, not_forall, Classical.not_imp,
    not_le] at nk

Result:
α : Type u_1
β : Type u_2
inst✝² : LinearOrderedField α
inst✝¹ : Ring β
abv : β → α
inst✝ : IsAbsoluteValue abv
f : CauSeq β abv
hf : ¬f.LimZero
this : (a : Prop) → Decidable a
ε : α
ε0 : ε > 0
nk : ∀ (x : α), 0 < x → ∀ (x_1 : ℕ), ∃ x_2, ∃ (_ : x_1 ≤ x_2), abv (↑f x_2) < x
⊢ ∃ i, ∀ j ≥ i, abv (↑f j) < ε

Proof state:
α : Type u_1
β : Type u_2
inst✝² : LinearOrderedField α
inst✝¹ : Ring β
abv : β → α
inst✝ : IsAbsoluteValue abv
f : CauSeq β abv
hf : ¬f.LimZero
this : (a : Prop) → Decidable a
⊢ ∃ K > 0, ∃ i, ∀ j ≥ i, K ≤ abv (↑f j)

Tactic:
by_contra nk

Result:
α : Type u_1
β : Type u_2
inst✝² : LinearOrderedField α
inst✝¹ : Ring β
abv : β → α
inst✝ : IsAbsoluteValue abv
f : CauSeq β abv
hf : ¬f.LimZero
this : (a : Prop) → Decidable a
nk : ¬∃ K > 0, ∃ i, ∀ j ≥ i, K ≤ abv (↑f j)
⊢ False

Proof state:
case intro
α : Type u_1
β : Type u_2
inst✝² : LinearOrderedField α
inst✝¹ : Ring β
abv : β → α
inst✝ : IsAbsoluteValue abv
f : CauSeq β abv
hf : ¬f.LimZero
this : (a : Prop) → Decidable a
ε : α
ε0 : ε > 0
nk : ∀ (x : α), 0 < x → ∀ (x_1 : ℕ), ∃ x_2, ∃ (_ : x_1 ≤ x_2), abv (↑f x_2) < x
i : ℕ
hi : ∀ j ≥ i, ∀ k ≥ j, abv (↑f k - ↑f j) < ε / 2
⊢ ∃ i, ∀ j ≥ i, abv (↑f j) < ε

Tactic:
rcases nk _ (half_pos ε0) i with ⟨j, ij, hj⟩

Result:
case intro.intro.intro
α : Type u_1
β : Type u_2
inst✝² : LinearOrderedField α
inst✝¹ : Ring β
abv : β → α
inst✝ : IsAbsoluteValue abv
f : CauSeq β abv
hf : ¬f.LimZero
this : (a : Prop) → Decidable a
ε : α
ε0 : ε > 0
nk : ∀ (x : α), 0 < x → ∀ (x_1 : ℕ), ∃ x_2, ∃ (_ : x_1 ≤ x_2), abv (↑f x_2) < x
i : ℕ
hi : ∀ j ≥ i, ∀ k ≥ j, abv (↑f k - ↑f j) < ε / 2
j : ℕ
ij : i ≤ j
hj : abv (↑f j) < ε / 2
⊢ ∃ i, ∀ j ≥ i, abv (↑f j) < ε

Proof state:
α : Type u_1
β : Type u_2
inst✝² : LinearOrderedField α
inst✝¹ : Ring β
abv : β → α
inst✝ : IsAbsoluteValue abv
f : CauSeq β abv
hf : ¬f.LimZero
this : (a : Prop) → Decidable a
nk : ¬∃ K > 0, ∃ i, ∀ j ≥ i, K ≤ abv (↑f j)
ε : α
ε0 : ε > 0
⊢ ∃ i, ∀ j ≥ i, abv (↑f j) < ε

Tactic:
simp only [gt_iff_lt, ge_iff_le, not_exists, not_and, not_forall, Classical.not_imp,
  not_le] at nk

Result:
α : Type u_1
β : Type u_2
inst✝² : LinearOrderedField α
inst✝¹ : Ring β
abv : β → α
inst✝ : IsAbsoluteValue abv
f : CauSeq β abv
hf : ¬f.LimZero
this : (a : Prop) → Decidable a
ε : α
ε0 : ε > 0
nk : ∀ (x : α), 0 < x → ∀ (x_1 : ℕ), ∃ x_2, ∃ (_ : x_1 ≤ x_2), abv (↑f x_2) < x
⊢ ∃ i, ∀ j ≥ i, abv (↑f j) < ε