awhecmu/canonical-drafter-extract-mathlib huggingface dataset:
-- Module: Mathlib.Algebra.Order.CauSeq.BigOperators
Goal:
α : Type u_1
β : Type u_2
inst : Field α
inst_1 : LinearOrder α
inst_2 : IsStrictOrderedRing α
inst_3 : Ring β
abv : β → α
inst_4 : IsAbsoluteValue abv
f g : ℕ → β
ha : IsCauSeq.{u_1, u_1} (α := α) abs fun (m : ℕ) ↦ ∑ n ∈ range m, abv (f n)
hb : IsCauSeq abv fun (m : ℕ) ↦ ∑ n ∈ range m, g n
ε : α
ε0 : 0 < ε
P : α
hP : ∀ (i : ℕ), |∑ n ∈ range i, abv (f n)| < P
Q : α
hQ : ∀ (i : ℕ), abv (∑ n ∈ range i, g n) < Q
hP0 : 0 < P
hPε0 : 0 < ε / (2 * P)
N : ℕ
hN : ∀ j ≥ N, ∀ k ≥ N, abv (HSub.hSub (α := β) (∑ n ∈ range j, g n) (∑ n ∈ range k, g n)) < ε / (2 * P)
hQε0 : 0 < ε / (4 * Q)
M : ℕ
hM : ∀ j ≥ M, ∀ k ≥ M, |HSub.hSub (α := α) (∑ n ∈ range j, abv (f n)) (∑ n ∈ range k, abv (f n))| < ε / (4 * Q)
K : ℕ
hK : K ≥ 2 * (max N M + 1)
h₁ :
  Eq.{u_2 + 1} (α := β) (∑ m ∈ range K, ∑ k ∈ range (m + 1), f k * g (m - k))
    (∑ m ∈ range K, ∑ n ∈ range (K - m), f m * g n)
h₂ :
  Eq.{u_2 + 1} (α := (i : ℕ) → β) (fun (i : ℕ) ↦ ∑ k ∈ range (K - i), f i * g k) fun (i : ℕ) ↦
    f i * ∑ k ∈ range (K - i), g k
h₃ :
  ∑ i ∈ range K, f i * ∑ k ∈ range (K - i), g k =
    HAdd.hAdd (α := β) (∑ i ∈ range K, f i * HSub.hSub (α := β) (∑ k ∈ range (K - i), g k) (∑ k ∈ range K, g k))
      (∑ i ∈ range K, f i * ∑ k ∈ range K, g k)
two_mul_two : 4 = HMul.hMul (α := α) 2 2
hQ0 : Q ≠ 0
h2Q0 : 2 * Q ≠ 0
hε : ε / (2 * P) * P + ε / (4 * Q) * (2 * Q) = ε
hNMK : max N M + 1 < K
hKN : N < K
hsumlesum :
  LE.le.{u_1} (α := α)
    (∑ i ∈ range (max N M + 1), abv (f i) * abv (HSub.hSub (α := β) (∑ k ∈ range (K - i), g k) (∑ k ∈ range K, g k)))
    (∑ i ∈ range (max N M + 1), abv (f i) * (ε / (2 * P)))
hsumltP : ∑ n ∈ range (max N M + 1), abv (f n) < P
i :
  LE.le.{u_1} (α := α)
    (∑ i ∈ range K with max N M + 1 ≤ i,
      abv (f i) * abv (HSub.hSub (α := β) (∑ k ∈ range (K - i), g k) (∑ k ∈ range K, g k)))
    (∑ i ∈ range K with max N M + 1 ≤ i, abv (f i) * (2 * Q))
i₁ : ∑ i ∈ range K with max N M + 1 ≤ i, abv (f i) * (2 * Q) < ε / (4 * Q) * (2 * Q)
⊢ ∑ k ∈ range K with max N M + 1 ≤ k,
      abv (f k) * abv (HSub.hSub (α := β) (∑ k ∈ range (K - k), g k) (∑ k ∈ range K, g k)) <
    ε / (4 * Q) * (2 * Q)

Tactic:
calc
    (∑ i ∈ range K with max N M + 1 ≤ i,
          abv (f i) * abv ((∑ k ∈ range (K - i), g k) - ∑ k ∈ range K, g k)) ≤
        ∑ i ∈ range K with max N M + 1 ≤ i, abv (f i) * (2 * Q) := by
        gcongr
        rw [sub_eq_add_neg]
        grw [abv_add abv]
        rw [two_mul, abv_neg abv]
        gcongr <;> exact le_of_lt (hQ _)
    _ < ε / (4 * Q) * (2 * Q) := by
        rw [← sum_mul, ← sum_range_sub_sum_range (le_of_lt hNMK)]
        have := lt_of_le_of_lt (abv_nonneg _ _) (hQ 0)
        gcongr
        exact (le_abs_self _).trans_lt <|
          hM _ ((Nat.le_succ_of_le (le_max_right _ _)).trans hNMK.le) _ <|
            Nat.le_succ_of_le <| le_max_right _ _

Premises used: HMul.hMul, HSub.hSub, LE.le, Finset.range, HAdd.hAdd, Max.max, OfNat.ofNat, Finset.filter, Finset.sum
-- Module: Mathlib.Algebra.Order.CauSeq.BigOperators
Goal:
α : Type u_1
inst : Field α
inst_1 : LinearOrder α
inst_2 : IsStrictOrderedRing α
inst_3 : Archimedean α
f : ℕ → α
a : α
m : ℕ
ham : ∀ n ≥ m, |f n| ≤ a
hnm : ∀ n ≥ m, f n.succ ≤ f n
ε : α
ε0 : ε > 0
let : ∀ (k : ℕ) (hk : a ≤ k • ε), ∃ (i : ℕ), ∀ j ≥ i, |f j - f i| < ε
⊢ ∃ (i : ℕ), ∀ j ≥ i, |f j - f i| < ε

Tactic:
let ⟨k, hk⟩ := Archimedean.arch a ε0
-- Module: Mathlib.Algebra.Order.CauSeq.BigOperators
Goal:
α : Type u_1
inst : Field α
inst_1 : LinearOrder α
inst_2 : IsStrictOrderedRing α
inst_3 : Archimedean α
f : ℕ → α
a : α
m : ℕ
ham : ∀ n ≥ m, |f n| ≤ a
hnm_1 : ∀ n ≥ m, f n.succ ≤ f n
ε : α
ε0 : ε > 0
k : ℕ
hk : a ≤ k • ε
n : ℕ
hnm : n ≥ m
rw : a + a < k • ε + (k • ε + ε)
⊢ a < -(a - (k + (k + 1)) • ε)

Tactic:
rw [neg_sub, lt_sub_iff_add_lt, add_nsmul, add_nsmul, one_nsmul]

Premises used: neg_sub, lt_sub_iff_add_lt, one_nsmul, add_nsmul
-- Module: Mathlib.Algebra.Order.CauSeq.BigOperators
Goal:
α : Type u_1
inst : Field α
inst_1 : LinearOrder α
inst_2 : IsStrictOrderedRing α
inst_3 : Archimedean α
f : ℕ → α
a : α
m : ℕ
ham : ∀ n ≥ m, |f n| ≤ a
hnm_1 : ∀ n ≥ m, f n.succ ≤ f n
ε : α
ε0 : ε > 0
k : ℕ
hk : a ≤ k • ε
n : ℕ
hnm : n ≥ m
⊢ a + a < k • ε + (k • ε + ε)

Tactic:
add_lt_add_of_le_of_lt hk (lt_of_le_of_lt hk (lt_add_of_pos_right _ ε0))

Premises used: lt_of_le_of_lt, lt_add_of_pos_right, add_lt_add_of_le_of_lt
-- Module: Mathlib.Algebra.Order.CauSeq.BigOperators
Goal:
α : Type u_1
inst : Field α
inst_1 : LinearOrder α
inst_2 : IsStrictOrderedRing α
inst_3 : Archimedean α
f : ℕ → α
a : α
m : ℕ
ham : ∀ n ≥ m, |f n| ≤ a
hnm_1 : ∀ n ≥ m, f n.succ ≤ f n
ε : α
ε0 : ε > 0
k : ℕ
hk : a ≤ k • ε
n : ℕ
hnm : n ≥ m
⊢ a + a < k • ε + (k • ε + ε)

Tactic:
exact add_lt_add_of_le_of_lt hk (lt_of_le_of_lt hk (lt_add_of_pos_right _ ε0))

Premises used: lt_of_le_of_lt, lt_add_of_pos_right, add_lt_add_of_le_of_lt
-- Module: Mathlib.Algebra.Order.CauSeq.BigOperators
Goal:
α : Type u_1
inst : Field α
inst_1 : LinearOrder α
inst_2 : IsStrictOrderedRing α
inst_3 : Archimedean α
f : ℕ → α
a : α
m : ℕ
ham : ∀ n ≥ m, |f n| ≤ a
hnm : ∀ n ≥ m, f n.succ ≤ f n
ε : α
ε0 : ε > 0
k : ℕ
hk : a ≤ k • ε
⊢ ∃ (l : ℕ), ∀ n ≥ m, a - l • ε < f n

Tactic:
have h : ∃ l, ∀ n ≥ m, a - l • ε < f n :=
    ⟨k + k + 1, fun n hnm ↦
      lt_of_lt_of_le (show a - (k + (k + 1)) • ε < -|f n| from
          lt_neg.1 <| (ham n hnm).trans_lt
              (by
                rw [neg_sub, lt_sub_iff_add_lt, add_nsmul, add_nsmul, one_nsmul]
                exact add_lt_add_of_le_of_lt hk (lt_of_le_of_lt hk (lt_add_of_pos_right _ ε0))))
        (neg_le.2 <| abs_neg (f n) ▸ le_abs_self _)⟩
-- Module: Mathlib.Algebra.Order.CauSeq.BigOperators
Goal:
α : Type u_1
inst : Field α
inst_1 : LinearOrder α
inst_2 : IsStrictOrderedRing α
inst_3 : Archimedean α
f : ℕ → α
a : α
m : ℕ
ham : ∀ n ≥ m, |f n| ≤ a
hnm : ∀ n ≥ m, f n.succ ≤ f n
ε : α
ε0 : ε > 0
k : ℕ
hk : a ≤ k • ε
h : ∃ (l : ℕ), ∀ n ≥ m, a - l • ε < f n
l : ℕ := Nat.find (p := fun (n : ℕ) ↦ ∀ n_1 ≥ m, a - n • ε < f n_1) h
⊢ ∀ n ≥ m, f n > a - l • ε

Tactic:
have hl : ∀ n : ℕ, n ≥ m → f n > a - l • ε := Nat.find_spec h
-- Module: Mathlib.Algebra.Order.CauSeq.BigOperators
Goal:
α : Type u_1
inst : Field α
inst_1 : LinearOrder α
inst_2 : IsStrictOrderedRing α
inst_3 : Archimedean α
f : ℕ → α
a : α
m : ℕ
ham : ∀ n ≥ m, |f n| ≤ a
hnm : ∀ n ≥ m, f n.succ ≤ f n
ε : α
ε0 : ε > 0
k : ℕ
hk : a ≤ k • ε
h : ∃ (l : ℕ), ∀ n ≥ m, a - l • ε < f n
l : ℕ := Nat.find (p := fun (n : ℕ) ↦ ∀ n_1 ≥ m, a - n • ε < f n_1) h
hl : ∀ n ≥ m, f n > a - l • ε
hl0 : l = 0
⊢ f m > a - l • ε

Tactic:
have := hl m (le_refl m)
-- Module: Mathlib.Algebra.Order.CauSeq.BigOperators
Goal:
α : Type u_1
inst : Field α
inst_1 : LinearOrder α
inst_2 : IsStrictOrderedRing α
inst_3 : Archimedean α
f : ℕ → α
a : α
m : ℕ
ham : ∀ n ≥ m, |f n| ≤ a
hnm : ∀ n ≥ m, f n.succ ≤ f n
ε : α
ε0 : ε > 0
k : ℕ
hk : a ≤ k • ε
h : ∃ (l : ℕ), ∀ n ≥ m, a - l • ε < f n
l : ℕ := Nat.find (p := fun (n : ℕ) ↦ ∀ n_1 ≥ m, a - n • ε < f n_1) h
hl : ∀ n ≥ m, f n > a - l • ε
hl0 : l = 0
this : f m > a - l • ε
⊢ a < f m

Tactic:
simpa [hl0] using this
-- Module: Mathlib.Algebra.Order.CauSeq.BigOperators
Goal:
α : Type u_1
inst : Field α
inst_1 : LinearOrder α
inst_2 : IsStrictOrderedRing α
inst_3 : Archimedean α
f : ℕ → α
a : α
m : ℕ
ham : ∀ n ≥ m, |f n| ≤ a
hnm : ∀ n ≥ m, f n.succ ≤ f n
ε : α
ε0 : ε > 0
k : ℕ
hk : a ≤ k • ε
h : ∃ (l : ℕ), ∀ n ≥ m, a - l • ε < f n
l : ℕ := Nat.find (p := fun (n : ℕ) ↦ ∀ n_1 ≥ m, a - n • ε < f n_1) h
hl : ∀ n ≥ m, f n > a - l • ε
⊢ l ≠ 0

Tactic:
have hl0 : l ≠ 0 := fun hl0 ↦
    not_lt_of_ge (ham m le_rfl)
      (lt_of_lt_of_le (by have := hl m (le_refl m); simpa [hl0] using this) (le_abs_self (f m)))
-- Module: Mathlib.Algebra.Order.CauSeq.BigOperators
Goal:
α : Type u_1
inst : Field α
inst_1 : LinearOrder α
inst_2 : IsStrictOrderedRing α
inst_3 : Archimedean α
f : ℕ → α
a : α
m : ℕ
ham : ∀ n ≥ m, |f n| ≤ a
hnm : ∀ n ≥ m, f n.succ ≤ f n
ε : α
ε0 : ε > 0
k : ℕ
hk : a ≤ k • ε
h : ∃ (l : ℕ), ∀ n ≥ m, a - l • ε < f n
l : ℕ := Nat.find (p := fun (n : ℕ) ↦ ∀ n_1 ≥ m, a - n • ε < f n_1) h
hl : ∀ n ≥ m, f n > a - l • ε
hl0 : l ≠ 0
obtain :
  ∀ (i : ℕ) (hi : ¬(i ≥ m → a - (Nat.find (p := fun (n : ℕ) ↦ ∀ n_1 ≥ m, a - n • ε < f n_1) h).pred • ε < f i)),
    ∃ (i : ℕ), ∀ j ≥ i, |f j - f i| < ε
⊢ ∃ (i : ℕ), ∀ j ≥ i, |f j - f i| < ε

Tactic:
obtain ⟨i, hi⟩ := not_forall.1 (Nat.find_min h (Nat.pred_lt hl0))

Premises used: Nat.find_min, Nat.pred_lt, Iff.mp, Classical.not_forall
-- Module: Mathlib.Algebra.Order.CauSeq.BigOperators
Goal:
α : Type u_1
inst : Field α
inst_1 : LinearOrder α
inst_2 : IsStrictOrderedRing α
inst_3 : Archimedean α
f : ℕ → α
a : α
m : ℕ
ham : ∀ n ≥ m, |f n| ≤ a
hnm : ∀ n ≥ m, f n.succ ≤ f n
ε : α
ε0 : ε > 0
k : ℕ
hk : a ≤ k • ε
h : ∃ (l : ℕ), ∀ n ≥ m, a - l • ε < f n
l : ℕ := Nat.find (p := fun (n : ℕ) ↦ ∀ n_1 ≥ m, a - n • ε < f n_1) h
hl : ∀ n ≥ m, f n > a - l • ε
hl0 : l ≠ 0
i : ℕ
hi : ¬(i ≥ m → a - (Nat.find (p := fun (n : ℕ) ↦ ∀ n_1 ≥ m, a - n • ε < f n_1) h).pred • ε < f i)
⊢ i ≥ m ∧ f i ≤ a - (Nat.find (p := fun (n : ℕ) ↦ ∀ n_1 ≥ m, a - n • ε < f n_1) h).pred • ε

Tactic:
rw [Classical.not_imp, not_lt] at hi

Premises used: not_lt, Classical.not_imp
-- Module: Mathlib.Algebra.Order.CauSeq.BigOperators
Goal:
α : Type u_1
inst : Field α
inst_1 : LinearOrder α
inst_2 : IsStrictOrderedRing α
inst_3 : Archimedean α
f : ℕ → α
a : α
m : ℕ
ham : ∀ n ≥ m, |f n| ≤ a
hnm : ∀ n ≥ m, f n.succ ≤ f n
ε : α
ε0 : ε > 0
k : ℕ
hk : a ≤ k • ε
h : ∃ (l : ℕ), ∀ n ≥ m, a - l • ε < f n
l : ℕ := Nat.find (p := fun (n : ℕ) ↦ ∀ n_1 ≥ m, a - n • ε < f n_1) h
hl : ∀ n ≥ m, f n > a - l • ε
hl0 : l ≠ 0
i : ℕ
hi : i ≥ m ∧ f i ≤ a - (Nat.find (p := fun (n : ℕ) ↦ ∀ n_1 ≥ m, a - n • ε < f n_1) h).pred • ε
exists : ∀ j ≥ i, |f j - f i| < ε
⊢ ∃ (i : ℕ), ∀ j ≥ i, |f j - f i| < ε

Tactic:
exists i
-- Module: Mathlib.Algebra.Order.CauSeq.BigOperators
Goal:
α : Type u_1
inst : Field α
inst_1 : LinearOrder α
inst_2 : IsStrictOrderedRing α
inst_3 : Archimedean α
f : ℕ → α
a : α
m : ℕ
ham : ∀ n ≥ m, |f n| ≤ a
hnm : ∀ n ≥ m, f n.succ ≤ f n
ε : α
ε0 : ε > 0
k : ℕ
hk : a ≤ k • ε
h : ∃ (l : ℕ), ∀ n ≥ m, a - l • ε < f n
l : ℕ := Nat.find (p := fun (n : ℕ) ↦ ∀ n_1 ≥ m, a - n • ε < f n_1) h
hl : ∀ n ≥ m, f n > a - l • ε
hl0 : l ≠ 0
i : ℕ
hi : i ≥ m ∧ f i ≤ a - (Nat.find (p := fun (n : ℕ) ↦ ∀ n_1 ≥ m, a - n • ε < f n_1) h).pred • ε
j : ℕ
hj : j ≥ i
⊢ f j ≤ f i

Tactic:
have hfij : f j ≤ f i := (Nat.rel_of_forall_rel_succ_of_le_of_le (· ≥ ·) hnm hi.1 hj).le
-- Module: Mathlib.Algebra.Order.CauSeq.BigOperators
Goal:
α : Type u_1
inst : Field α
inst_1 : LinearOrder α
inst_2 : IsStrictOrderedRing α
inst_3 : Archimedean α
f : ℕ → α
a : α
m : ℕ
ham : ∀ n ≥ m, |f n| ≤ a
hnm : ∀ n ≥ m, f n.succ ≤ f n
ε : α
ε0 : ε > 0
k : ℕ
hk : a ≤ k • ε
h : ∃ (l : ℕ), ∀ n ≥ m, a - l • ε < f n
l : ℕ := Nat.find (p := fun (n : ℕ) ↦ ∀ n_1 ≥ m, a - n • ε < f n_1) h
hl : ∀ n ≥ m, f n > a - l • ε
hl0 : l ≠ 0
i : ℕ
hi : i ≥ m ∧ f i ≤ a - (Nat.find (p := fun (n : ℕ) ↦ ∀ n_1 ≥ m, a - n • ε < f n_1) h).pred • ε
j : ℕ
hj : j ≥ i
hfij : f j ≤ f i
rw : f i < f j + ε
⊢ |f j - f i| < ε

Tactic:
rw [abs_of_nonpos (sub_nonpos.2 hfij), neg_sub, sub_lt_iff_lt_add']

Premises used: Iff.mpr, neg_sub, sub_lt_iff_lt_add', abs_of_nonpos, sub_nonpos
-- Module: Mathlib.Algebra.Order.CauSeq.BigOperators
Goal:
α : Type u_1
inst : Field α
inst_1 : LinearOrder α
inst_2 : IsStrictOrderedRing α
inst_3 : Archimedean α
f : ℕ → α
a : α
m : ℕ
ham : ∀ n ≥ m, |f n| ≤ a
hnm : ∀ n ≥ m, f n.succ ≤ f n
ε : α
ε0 : ε > 0
k : ℕ
hk : a ≤ k • ε
h : ∃ (l : ℕ), ∀ n ≥ m, a - l • ε < f n
l : ℕ := Nat.find (p := fun (n : ℕ) ↦ ∀ n_1 ≥ m, a - n • ε < f n_1) h
hl : ∀ n ≥ m, f n > a - l • ε
hl0 : l ≠ 0
i : ℕ
hi : i ≥ m ∧ f i ≤ a - (Nat.find (p := fun (n : ℕ) ↦ ∀ n_1 ≥ m, a - n • ε < f n_1) h).pred • ε
j : ℕ
hj : j ≥ i
hfij : f j ≤ f i
⊢ f i ≤ a - l.pred • ε

Tactic:
hi.2

Premises used: And.right
-- Module: Mathlib.Algebra.Order.CauSeq.BigOperators
Goal:
α : Type u_1
inst : Field α
inst_1 : LinearOrder α
inst_2 : IsStrictOrderedRing α
inst_3 : Archimedean α
f : ℕ → α
a : α
m : ℕ
ham : ∀ n ≥ m, |f n| ≤ a
hnm : ∀ n ≥ m, f n.succ ≤ f n
ε : α
ε0 : ε > 0
k : ℕ
hk : a ≤ k • ε
h : ∃ (l : ℕ), ∀ n ≥ m, a - l • ε < f n
l : ℕ := Nat.find (p := fun (n : ℕ) ↦ ∀ n_1 ≥ m, a - n • ε < f n_1) h
hl : ∀ n ≥ m, f n > a - l • ε
hl0 : l ≠ 0
i : ℕ
hi : i ≥ m ∧ f i ≤ a - (Nat.find (p := fun (n : ℕ) ↦ ∀ n_1 ≥ m, a - n • ε < f n_1) h).pred • ε
j : ℕ
hj : j ≥ i
hfij : f j ≤ f i
rhs : a - l • ε + ε
| a - l.pred • ε = a - l • ε + ε

Tactic:
rhs
-- Module: Mathlib.Algebra.Order.CauSeq.BigOperators
Goal:
α : Type u_1
inst : Field α
inst_1 : LinearOrder α
inst_2 : IsStrictOrderedRing α
inst_3 : Archimedean α
f : ℕ → α
a : α
m : ℕ
ham : ∀ n ≥ m, |f n| ≤ a
hnm : ∀ n ≥ m, f n.succ ≤ f n
ε : α
ε0 : ε > 0
k : ℕ
hk : a ≤ k • ε
h : ∃ (l : ℕ), ∀ n ≥ m, a - l • ε < f n
l : ℕ := Nat.find (p := fun (n : ℕ) ↦ ∀ n_1 ≥ m, a - n • ε < f n_1) h
hl : ∀ n ≥ m, f n > a - l • ε
hl0 : l ≠ 0
i : ℕ
hi : i ≥ m ∧ f i ≤ a - (Nat.find (p := fun (n : ℕ) ↦ ∀ n_1 ≥ m, a - n • ε < f n_1) h).pred • ε
j : ℕ
hj : j ≥ i
hfij : f j ≤ f i
rw : a - l.pred • ε
| a - l • ε + ε

Tactic:
rw [← Nat.succ_pred_eq_of_pos (Nat.pos_of_ne_zero hl0), succ_nsmul, sub_add,
          add_sub_cancel_right]

Premises used: sub_add, Nat.succ_pred_eq_of_pos, Nat.pos_of_ne_zero, add_sub_cancel_right, succ_nsmul
-- Module: Mathlib.Algebra.Order.CauSeq.BigOperators
Goal:
α : Type u_1
inst : Field α
inst_1 : LinearOrder α
inst_2 : IsStrictOrderedRing α
inst_3 : Archimedean α
f : ℕ → α
a : α
m : ℕ
ham : ∀ n ≥ m, |f n| ≤ a
hnm : ∀ n ≥ m, f n.succ ≤ f n
ε : α
ε0 : ε > 0
k : ℕ
hk : a ≤ k • ε
h : ∃ (l : ℕ), ∀ n ≥ m, a - l • ε < f n
l : ℕ := Nat.find (p := fun (n : ℕ) ↦ ∀ n_1 ≥ m, a - n • ε < f n_1) h
hl : ∀ n ≥ m, f n > a - l • ε
hl0 : l ≠ 0
i : ℕ
hi : i ≥ m ∧ f i ≤ a - (Nat.find (p := fun (n : ℕ) ↦ ∀ n_1 ≥ m, a - n • ε < f n_1) h).pred • ε
j : ℕ
hj : j ≥ i
hfij : f j ≤ f i
rw : a - l.pred • ε
| a - l.pred • ε = a - l • ε + ε

Tactic:
rhs
        rw [← Nat.succ_pred_eq_of_pos (Nat.pos_of_ne_zero hl0), succ_nsmul, sub_add,
          add_sub_cancel_right]

Premises used: sub_add, Nat.succ_pred_eq_of_pos, Nat.pos_of_ne_zero, add_sub_cancel_right, succ_nsmul
-- Module: Mathlib.Algebra.Order.CauSeq.BigOperators
Goal:
α : Type u_1
inst : Field α
inst_1 : LinearOrder α
inst_2 : IsStrictOrderedRing α
inst_3 : Archimedean α
f : ℕ → α
a : α
m : ℕ
ham : ∀ n ≥ m, |f n| ≤ a
hnm : ∀ n ≥ m, f n.succ ≤ f n
ε : α
ε0 : ε > 0
k : ℕ
hk : a ≤ k • ε
h : ∃ (l : ℕ), ∀ n ≥ m, a - l • ε < f n
l : ℕ := Nat.find (p := fun (n : ℕ) ↦ ∀ n_1 ≥ m, a - n • ε < f n_1) h
hl : ∀ n ≥ m, f n > a - l • ε
hl0 : l ≠ 0
i : ℕ
hi : i ≥ m ∧ f i ≤ a - (Nat.find (p := fun (n : ℕ) ↦ ∀ n_1 ≥ m, a - n • ε < f n_1) h).pred • ε
j : ℕ
hj : j ≥ i
hfij : f j ≤ f i
conv : a - l.pred • ε = a - l • ε + ε
conv₁ : a - l.pred • ε = a - l.pred • ε
⊢ a - l.pred • ε = a - l • ε + ε

Tactic:
conv =>
        rhs
        rw [← Nat.succ_pred_eq_of_pos (Nat.pos_of_ne_zero hl0), succ_nsmul, sub_add,
          add_sub_cancel_right]

Premises used: sub_add, Nat.succ_pred_eq_of_pos, Nat.pos_of_ne_zero, add_sub_cancel_right, succ_nsmul
-- Module: Mathlib.Algebra.Order.CauSeq.BigOperators
Goal:
α : Type u_1
inst : Field α
inst_1 : LinearOrder α
inst_2 : IsStrictOrderedRing α
inst_3 : Archimedean α
f : ℕ → α
a : α
m : ℕ
ham : ∀ n ≥ m, |f n| ≤ a
hnm : ∀ n ≥ m, f n.succ ≤ f n
ε : α
ε0 : ε > 0
k : ℕ
hk : a ≤ k • ε
h : ∃ (l : ℕ), ∀ n ≥ m, a - l • ε < f n
l : ℕ := Nat.find (p := fun (n : ℕ) ↦ ∀ n_1 ≥ m, a - n • ε < f n_1) h
hl : ∀ n ≥ m, f n > a - l • ε
hl0 : l ≠ 0
i : ℕ
hi : i ≥ m ∧ f i ≤ a - (Nat.find (p := fun (n : ℕ) ↦ ∀ n_1 ≥ m, a - n • ε < f n_1) h).pred • ε
j : ℕ
hj : j ≥ i
hfij : f j ≤ f i
bc : a - l • ε < f j
⊢ a - l • ε + ε < f j + ε

Tactic:
gcongr
-- Module: Mathlib.Algebra.Order.CauSeq.BigOperators
Goal:
α : Type u_1
inst : Field α
inst_1 : LinearOrder α
inst_2 : IsStrictOrderedRing α
inst_3 : Archimedean α
f : ℕ → α
a : α
m : ℕ
ham : ∀ n ≥ m, |f n| ≤ a
hnm : ∀ n ≥ m, f n.succ ≤ f n
ε : α
ε0 : ε > 0
k : ℕ
hk : a ≤ k • ε
h : ∃ (l : ℕ), ∀ n ≥ m, a - l • ε < f n
l : ℕ := Nat.find (p := fun (n : ℕ) ↦ ∀ n_1 ≥ m, a - n • ε < f n_1) h
hl : ∀ n ≥ m, f n > a - l • ε
hl0 : l ≠ 0
i : ℕ
hi : i ≥ m ∧ f i ≤ a - (Nat.find (p := fun (n : ℕ) ↦ ∀ n_1 ≥ m, a - n • ε < f n_1) h).pred • ε
j : ℕ
hj : j ≥ i
hfij : f j ≤ f i
⊢ a - l • ε < f j

Tactic:
hl _ <| hi.1.trans hj

Premises used: And.left, LE.le.trans
-- Module: Mathlib.Algebra.Order.CauSeq.BigOperators
Goal:
α : Type u_1
inst : Field α
inst_1 : LinearOrder α
inst_2 : IsStrictOrderedRing α
inst_3 : Archimedean α
f : ℕ → α
a : α
m : ℕ
ham : ∀ n ≥ m, |f n| ≤ a
hnm : ∀ n ≥ m, f n.succ ≤ f n
ε : α
ε0 : ε > 0
k : ℕ
hk : a ≤ k • ε
h : ∃ (l : ℕ), ∀ n ≥ m, a - l • ε < f n
l : ℕ := Nat.find (p := fun (n : ℕ) ↦ ∀ n_1 ≥ m, a - n • ε < f n_1) h
hl : ∀ n ≥ m, f n > a - l • ε
hl0 : l ≠ 0
i : ℕ
hi : i ≥ m ∧ f i ≤ a - (Nat.find (p := fun (n : ℕ) ↦ ∀ n_1 ≥ m, a - n • ε < f n_1) h).pred • ε
j : ℕ
hj : j ≥ i
hfij : f j ≤ f i
⊢ a - l • ε < f j

Tactic:
exact hl _ <| hi.1.trans hj

Premises used: And.left, LE.le.trans
-- Module: Mathlib.Algebra.Order.CauSeq.BigOperators
Goal:
α : Type u_1
inst : Field α
inst_1 : LinearOrder α
inst_2 : IsStrictOrderedRing α
inst_3 : Archimedean α
f : ℕ → α
a : α
m : ℕ
ham : ∀ n ≥ m, |f n| ≤ a
hnm : ∀ n ≥ m, f n.succ ≤ f n
ε : α
ε0 : ε > 0
k : ℕ
hk : a ≤ k • ε
h : ∃ (l : ℕ), ∀ n ≥ m, a - l • ε < f n
l : ℕ := Nat.find (p := fun (n : ℕ) ↦ ∀ n_1 ≥ m, a - n • ε < f n_1) h
hl : ∀ n ≥ m, f n > a - l • ε
hl0 : l ≠ 0
i : ℕ
hi : i ≥ m ∧ f i ≤ a - (Nat.find (p := fun (n : ℕ) ↦ ∀ n_1 ≥ m, a - n • ε < f n_1) h).pred • ε
j : ℕ
hj : j ≥ i
hfij : f j ≤ f i
f₁ : a - l.pred • ε = a - l • ε + ε
f₂ : a - l • ε + ε < f j + ε
⊢ f i < f j + ε

Tactic:
calc
    f i ≤ a - Nat.pred l • ε := hi.2
    _ = a - l • ε + ε := by
      conv =>
        rhs
        rw [← Nat.succ_pred_eq_of_pos (Nat.pos_of_ne_zero hl0), succ_nsmul, sub_add,
          add_sub_cancel_right]
    _ < f j + ε := by gcongr; exact hl _ <| hi.1.trans hj

Premises used: And.right, Nat.pred
-- Module: Mathlib.Algebra.Order.CauSeq.BigOperators
Goal:
α : Type u_1
inst : Field α
inst_1 : LinearOrder α
inst_2 : IsStrictOrderedRing α
inst_3 : Archimedean α
f : ℕ → α
a : α
m : ℕ
ham : ∀ n ≥ m, |f n| ≤ a
hnm : ∀ n ≥ m, f n ≤ f n.succ
⊢ ∀ n ≥ m, |(-f) n| ≤ a

Tactic:
simpa using ham
-- Module: Mathlib.Algebra.Order.CauSeq.BigOperators
Goal:
α : Type u_1
inst : Field α
inst_1 : LinearOrder α
inst_2 : IsStrictOrderedRing α
inst_3 : Archimedean α
f : ℕ → α
a : α
m : ℕ
ham : ∀ n ≥ m, |f n| ≤ a
hnm : ∀ n ≥ m, f n ≤ f n.succ
⊢ ∀ n ≥ m, (-f) n.succ ≤ (-f) n

Tactic:
simpa using hnm
-- Module: Mathlib.Algebra.Order.CauSeq.BigOperators
Goal:
α : Type u_1
β : Type u_2
inst : Field α
inst_1 : LinearOrder α
inst_2 : IsStrictOrderedRing α
inst_3 : Ring β
abv : β → α
inst_4 : IsAbsoluteValue abv
inst_5 : Archimedean α
inst_6 : Nontrivial β
x : β
hx1 : abv x < 1
h : abv x = 1
⊢ False

Tactic:
simp [h] at hx1
-- Module: Mathlib.Algebra.Order.CauSeq.BigOperators
Goal:
α : Type u_1
β : Type u_2
inst : Field α
inst_1 : LinearOrder α
inst_2 : IsStrictOrderedRing α
inst_3 : Ring β
abv : β → α
inst_4 : IsAbsoluteValue abv
inst_5 : Archimedean α
inst_6 : Nontrivial β
x : β
hx1 : abv x < 1
⊢ abv x ≠ 1

Tactic:
have hx1' : abv x ≠ 1 := fun h ↦ by simp [h] at hx1
-- Module: Mathlib.Algebra.Order.CauSeq.BigOperators
Goal:
α : Type u_1
β : Type u_2
inst : Field α
inst_1 : LinearOrder α
inst_2 : IsStrictOrderedRing α
inst_3 : Ring β
abv : β → α
inst_4 : IsAbsoluteValue abv
inst_5 : Archimedean α
inst_6 : Nontrivial β
x : β
hx1 : abv x < 1
hx1' : abv x ≠ 1
⊢ IsCauSeq abv fun (n : ℕ) ↦ ∑ m ∈ range n, x ^ m

Tactic:
of_abv ?_

Premises used: IsCauSeq.of_abv
-- Module: Mathlib.Algebra.Order.CauSeq.BigOperators
Goal:
α : Type u_1
β : Type u_2
inst : Field α
inst_1 : LinearOrder α
inst_2 : IsStrictOrderedRing α
inst_3 : Ring β
abv : β → α
inst_4 : IsAbsoluteValue abv
inst_5 : Archimedean α
inst_6 : Nontrivial β
x : β
hx1 : abv x < 1
hx1' : abv x ≠ 1
refine : IsCauSeq.{u_1, u_1} (α := α) abs fun (m : ℕ) ↦ ∑ n ∈ range m, abv (x ^ n)
⊢ IsCauSeq abv fun (n : ℕ) ↦ ∑ m ∈ range n, x ^ m

Tactic:
refine of_abv ?_

Premises used: IsCauSeq.of_abv
-- Module: Mathlib.Algebra.Order.CauSeq.BigOperators
Goal:
α : Type u_1
β : Type u_2
inst : Field α
inst_1 : LinearOrder α
inst_2 : IsStrictOrderedRing α
inst_3 : Ring β
abv : β → α
inst_4 : IsAbsoluteValue abv
inst_5 : Archimedean α
inst_6 : Nontrivial β
x : β
hx1 : abv x < 1
hx1' : abv x ≠ 1
simp : IsCauSeq.{u_1, u_1} (α := α) abs fun (m : ℕ) ↦ (abv x ^ m - 1) / (abv x - 1)
⊢ IsCauSeq.{u_1, u_1} (α := α) abs fun (m : ℕ) ↦ ∑ n ∈ range m, abv (x ^ n)

Tactic:
simp only [abv_pow abv, geom_sum_eq hx1']

Premises used: geom_sum_eq, IsAbsoluteValue.abv_pow
-- Module: Mathlib.Algebra.Order.CauSeq.BigOperators
Goal:
α : Type u_1
β : Type u_2
inst : Field α
inst_1 : LinearOrder α
inst_2 : IsStrictOrderedRing α
inst_3 : Ring β
abv : β → α
inst_4 : IsAbsoluteValue abv
inst_5 : Archimedean α
inst_6 : Nontrivial β
x : β
hx1 : abv x < 1
hx1' : abv x ≠ 1
m : ℕ
rw : (1 - abv x ^ m) / (1 - abv x)
| (abv x ^ m - 1) / (abv x - 1)

Tactic:
rw [← neg_div_neg_eq, neg_sub, neg_sub]

Premises used: neg_sub, neg_div_neg_eq
-- Module: Mathlib.Algebra.Order.CauSeq.BigOperators
Goal:
α : Type u_1
β : Type u_2
inst : Field α
inst_1 : LinearOrder α
inst_2 : IsStrictOrderedRing α
inst_3 : Ring β
abv : β → α
inst_4 : IsAbsoluteValue abv
inst_5 : Archimedean α
inst_6 : Nontrivial β
x : β
hx1 : abv x < 1
hx1' : abv x ≠ 1
conv : IsCauSeq.{u_1, u_1} (α := α) abs fun (m : ℕ) ↦ (1 - abv x ^ m) / (1 - abv x)
⊢ IsCauSeq.{u_1, u_1} (α := α) abs fun (m : ℕ) ↦ (abv x ^ m - 1) / (abv x - 1)

Tactic:
conv in _ / _ => rw [← neg_div_neg_eq, neg_sub, neg_sub]

Premises used: neg_sub, neg_div_neg_eq
-- Module: Mathlib.Algebra.Order.CauSeq.BigOperators
Goal:
α : Type u_1
β : Type u_2
inst : Field α
inst_1 : LinearOrder α
inst_2 : IsStrictOrderedRing α
inst_3 : Ring β
abv : β → α
inst_4 : IsAbsoluteValue abv
inst_5 : Archimedean α
inst_6 : Nontrivial β
x : β
hx1 : abv x < 1
hx1' : abv x ≠ 1
⊢ 0 < 1 - abv x

Tactic:
have : 0 < 1 - abv x := sub_pos.2 hx1
-- Module: Mathlib.Algebra.Order.CauSeq.BigOperators
Goal:
α : Type u_1
β : Type u_2
inst : Field α
inst_1 : LinearOrder α
inst_2 : IsStrictOrderedRing α
inst_3 : Ring β
abv : β → α
inst_4 : IsAbsoluteValue abv
inst_5 : Archimedean α
inst_6 : Nontrivial β
x : β
hx1 : abv x < 1
hx1' : abv x ≠ 1
this : 0 < 1 - abv x
⊢ IsCauSeq.{u_1, u_1} (α := α) abs fun (m : ℕ) ↦ (1 - abv x ^ m) / (1 - abv x)

Tactic:
of_mono_bounded _ (a := (1 : α) / (1 - abv x)) (m := 0) ?_ ?_

Premises used: IsCauSeq.of_mono_bounded
-- Module: Mathlib.Algebra.Order.CauSeq.BigOperators
Goal:
α : Type u_1
β : Type u_2
inst : Field α
inst_1 : LinearOrder α
inst_2 : IsStrictOrderedRing α
inst_3 : Ring β
abv : β → α
inst_4 : IsAbsoluteValue abv
inst_5 : Archimedean α
inst_6 : Nontrivial β
x : β
hx1 : abv x < 1
hx1' : abv x ≠ 1
this : 0 < 1 - abv x
refine_1 : ∀ n ≥ 0, |(1 - abv x ^ n) / (1 - abv x)| ≤ 1 / (1 - abv x)
refine_2 : ∀ n ≥ 0, (1 - abv x ^ n) / (1 - abv x) ≤ (1 - abv x ^ n.succ) / (1 - abv x)
⊢ IsCauSeq.{u_1, u_1} (α := α) abs fun (m : ℕ) ↦ (1 - abv x ^ m) / (1 - abv x)

Tactic:
refine of_mono_bounded _ (a := (1 : α) / (1 - abv x)) (m := 0) ?_ ?_

Premises used: IsCauSeq.of_mono_bounded
-- Module: Mathlib.Algebra.Order.CauSeq.BigOperators
Goal:
α : Type u_1
β : Type u_2
inst : Field α
inst_1 : LinearOrder α
inst_2 : IsStrictOrderedRing α
inst_3 : Ring β
abv : β → α
inst_4 : IsAbsoluteValue abv
inst_5 : Archimedean α
inst_6 : Nontrivial β
x : β
hx1 : abv x < 1
hx1' : abv x ≠ 1
this : 0 < 1 - abv x
n : ℕ
refine_1 : n ≥ 0 → |(1 - abv x ^ n) / (1 - abv x)| ≤ 1 / (1 - abv x)
⊢ n ≥ 0 → |(1 - abv x ^ n) / (1 - abv x)| ≤ 1 / (1 - abv x)

Tactic:
_
-- Module: Mathlib.Algebra.Order.CauSeq.BigOperators
Goal:
α : Type u_1
β : Type u_2
inst : Field α
inst_1 : LinearOrder α
inst_2 : IsStrictOrderedRing α
inst_3 : Ring β
abv : β → α
inst_4 : IsAbsoluteValue abv
inst_5 : Archimedean α
inst_6 : Nontrivial β
x : β
hx1 : abv x < 1
hx1' : abv x ≠ 1
this : 0 < 1 - abv x
n : ℕ
h : n ≥ 0
refine_1 : (1 - abv x ^ n) / (1 - abv x) ≤ 1 / (1 - abv x)
refine_1₁ : 0 ≤ (1 - abv x ^ n) / (1 - abv x)
⊢ |(1 - abv x ^ n) / (1 - abv x)| ≤ 1 / (1 - abv x)

Tactic:
rw [abs_of_nonneg]

Premises used: abs_of_nonneg