Theorem: isCauSeq_of_decreasing_bounded
File: Mathlib/Data/Complex/Exponential.lean

tactic: let ⟨k, hk⟩ := Archimedean.arch a ε0
state_before: α : Type u_1
β : Type ?u.7193
inst✝³ : Ring β
inst✝² : LinearOrderedField α
inst✝¹ : Archimedean α
abv : β → α
inst✝ : IsAbsoluteValue abv
f : ℕ → α
a : α
m : ℕ
ham : ∀ (n : ℕ), n ≥ m → abs' (f n) ≤ a
hnm : ∀ (n : ℕ), n ≥ m → f (Nat.succ n) ≤ f n
ε : α
ε0 : ε > 0
⊢ ∃ i, ∀ (j : ℕ), j ≥ i → abs' (f j - f i) < ε

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 <|
          lt_of_le_of_lt (ham n hnm)
            (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 _)⟩
state_before: α : Type u_1
β : Type ?u.7193
inst✝³ : Ring β
inst✝² : LinearOrderedField α
inst✝¹ : Archimedean α
abv : β → α
inst✝ : IsAbsoluteValue abv
f : ℕ → α
a : α
m : ℕ
ham : ∀ (n : ℕ), n ≥ m → abs' (f n) ≤ a
hnm : ∀ (n : ℕ), n ≥ m → f (Nat.succ n) ≤ f n
ε : α
ε0 : ε > 0
k : ℕ
hk : a ≤ k • ε
⊢ ∃ i, ∀ (j : ℕ), j ≥ i → abs' (f j - f i) < ε

tactic: let l := Nat.find h
state_before: α : Type u_1
β : Type ?u.7193
inst✝³ : Ring β
inst✝² : LinearOrderedField α
inst✝¹ : Archimedean α
abv : β → α
inst✝ : IsAbsoluteValue abv
f : ℕ → α
a : α
m : ℕ
ham : ∀ (n : ℕ), n ≥ m → abs' (f n) ≤ a
hnm : ∀ (n : ℕ), n ≥ m → f (Nat.succ n) ≤ f n
ε : α
ε0 : ε > 0
k : ℕ
hk : a ≤ k • ε
h : ∃ l, ∀ (n : ℕ), n ≥ m → a - l • ε < f n
⊢ ∃ i, ∀ (j : ℕ), j ≥ i → abs' (f j - f i) < ε

tactic: have hl : ∀ n : ℕ, n ≥ m → f n > a - l • ε := Nat.find_spec h
state_before: α : Type u_1
β : Type ?u.7193
inst✝³ : Ring β
inst✝² : LinearOrderedField α
inst✝¹ : Archimedean α
abv : β → α
inst✝ : IsAbsoluteValue abv
f : ℕ → α
a : α
m : ℕ
ham : ∀ (n : ℕ), n ≥ m → abs' (f n) ≤ a
hnm : ∀ (n : ℕ), n ≥ m → f (Nat.succ n) ≤ f n
ε : α
ε0 : ε > 0
k : ℕ
hk : a ≤ k • ε
h : ∃ l, ∀ (n : ℕ), n ≥ m → a - l • ε < f n
l : ℕ := Nat.find h
⊢ ∃ i, ∀ (j : ℕ), j ≥ i → abs' (f j - f i) < ε

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)))
state_before: α : Type u_1
β : Type ?u.7193
inst✝³ : Ring β
inst✝² : LinearOrderedField α
inst✝¹ : Archimedean α
abv : β → α
inst✝ : IsAbsoluteValue abv
f : ℕ → α
a : α
m : ℕ
ham : ∀ (n : ℕ), n ≥ m → abs' (f n) ≤ a
hnm : ∀ (n : ℕ), n ≥ m → f (Nat.succ n) ≤ f n
ε : α
ε0 : ε > 0
k : ℕ
hk : a ≤ k • ε
h : ∃ l, ∀ (n : ℕ), n ≥ m → a - l • ε < f n
l : ℕ := Nat.find h
hl : ∀ (n : ℕ), n ≥ m → f n > a - l • ε
⊢ ∃ i, ∀ (j : ℕ), j ≥ i → abs' (f j - f i) < ε

tactic: cases' not_forall.1 (Nat.find_min h (Nat.pred_lt hl0)) with i hi
state_before: α : Type u_1
β : Type ?u.7193
inst✝³ : Ring β
inst✝² : LinearOrderedField α
inst✝¹ : Archimedean α
abv : β → α
inst✝ : IsAbsoluteValue abv
f : ℕ → α
a : α
m : ℕ
ham : ∀ (n : ℕ), n ≥ m → abs' (f n) ≤ a
hnm : ∀ (n : ℕ), n ≥ m → f (Nat.succ n) ≤ f n
ε : α
ε0 : ε > 0
k : ℕ
hk : a ≤ k • ε
h : ∃ l, ∀ (n : ℕ), n ≥ m → a - l • ε < f n
l : ℕ := Nat.find h
hl : ∀ (n : ℕ), n ≥ m → f n > a - l • ε
hl0 : l ≠ 0
⊢ ∃ i, ∀ (j : ℕ), j ≥ i → abs' (f j - f i) < ε

tactic: rw [not_imp, not_lt] at hi
state_before: case intro
α : Type u_1
β : Type ?u.7193
inst✝³ : Ring β
inst✝² : LinearOrderedField α
inst✝¹ : Archimedean α
abv : β → α
inst✝ : IsAbsoluteValue abv
f : ℕ → α
a : α
m : ℕ
ham : ∀ (n : ℕ), n ≥ m → abs' (f n) ≤ a
hnm : ∀ (n : ℕ), n ≥ m → f (Nat.succ n) ≤ f n
ε : α
ε0 : ε > 0
k : ℕ
hk : a ≤ k • ε
h : ∃ l, ∀ (n : ℕ), n ≥ m → a - l • ε < f n
l : ℕ := Nat.find h
hl : ∀ (n : ℕ), n ≥ m → f n > a - l • ε
hl0 : l ≠ 0
i : ℕ
hi : ¬(i ≥ m → a - Nat.pred (Nat.find h) • ε < f i)
⊢ ∃ i, ∀ (j : ℕ), j ≥ i → abs' (f j - f i) < ε

tactic: exists i
state_before: case intro
α : Type u_1
β : Type ?u.7193
inst✝³ : Ring β
inst✝² : LinearOrderedField α
inst✝¹ : Archimedean α
abv : β → α
inst✝ : IsAbsoluteValue abv
f : ℕ → α
a : α
m : ℕ
ham : ∀ (n : ℕ), n ≥ m → abs' (f n) ≤ a
hnm : ∀ (n : ℕ), n ≥ m → f (Nat.succ n) ≤ f n
ε : α
ε0 : ε > 0
k : ℕ
hk : a ≤ k • ε
h : ∃ l, ∀ (n : ℕ), n ≥ m → a - l • ε < f n
l : ℕ := Nat.find h
hl : ∀ (n : ℕ), n ≥ m → f n > a - l • ε
hl0 : l ≠ 0
i : ℕ
hi : i ≥ m ∧ f i ≤ a - Nat.pred (Nat.find h) • ε
⊢ ∃ i, ∀ (j : ℕ), j ≥ i → abs' (f j - f i) < ε

tactic: intro j hj
state_before: case intro
α : Type u_1
β : Type ?u.7193
inst✝³ : Ring β
inst✝² : LinearOrderedField α
inst✝¹ : Archimedean α
abv : β → α
inst✝ : IsAbsoluteValue abv
f : ℕ → α
a : α
m : ℕ
ham : ∀ (n : ℕ), n ≥ m → abs' (f n) ≤ a
hnm : ∀ (n : ℕ), n ≥ m → f (Nat.succ n) ≤ f n
ε : α
ε0 : ε > 0
k : ℕ
hk : a ≤ k • ε
h : ∃ l, ∀ (n : ℕ), n ≥ m → a - l • ε < f n
l : ℕ := Nat.find h
hl : ∀ (n : ℕ), n ≥ m → f n > a - l • ε
hl0 : l ≠ 0
i : ℕ
hi : i ≥ m ∧ f i ≤ a - Nat.pred (Nat.find h) • ε
⊢ ∀ (j : ℕ), j ≥ i → abs' (f j - f i) < ε

tactic: rw [abs_of_nonpos (sub_nonpos.2 hfij), neg_sub, sub_lt_iff_lt_add']
state_before: case intro
α : Type u_1
β : Type ?u.7193
inst✝³ : Ring β
inst✝² : LinearOrderedField α
inst✝¹ : Archimedean α
abv : β → α
inst✝ : IsAbsoluteValue abv
f : ℕ → α
a : α
m : ℕ
ham : ∀ (n : ℕ), n ≥ m → abs' (f n) ≤ a
hnm : ∀ (n : ℕ), n ≥ m → f (Nat.succ n) ≤ f n
ε : α
ε0 : ε > 0
k : ℕ
hk : a ≤ k • ε
h : ∃ l, ∀ (n : ℕ), n ≥ m → a - l • ε < f n
l : ℕ := Nat.find h
hl : ∀ (n : ℕ), n ≥ m → f n > a - l • ε
hl0 : l ≠ 0
i : ℕ
hi : i ≥ m ∧ f i ≤ a - Nat.pred (Nat.find h) • ε
j : ℕ
hj : j ≥ i
hfij : f j ≤ f i
⊢ abs' (f j - f i) < ε

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]
  _ < f j + ε := add_lt_add_right (hl j (le_trans hi.1 hj)) _
state_before: case intro
α : Type u_1
β : Type ?u.7193
inst✝³ : Ring β
inst✝² : LinearOrderedField α
inst✝¹ : Archimedean α
abv : β → α
inst✝ : IsAbsoluteValue abv
f : ℕ → α
a : α
m : ℕ
ham : ∀ (n : ℕ), n ≥ m → abs' (f n) ≤ a
hnm : ∀ (n : ℕ), n ≥ m → f (Nat.succ n) ≤ f n
ε : α
ε0 : ε > 0
k : ℕ
hk : a ≤ k • ε
h : ∃ l, ∀ (n : ℕ), n ≥ m → a - l • ε < f n
l : ℕ := Nat.find h
hl : ∀ (n : ℕ), n ≥ m → f n > a - l • ε
hl0 : l ≠ 0
i : ℕ
hi : i ≥ m ∧ f i ≤ a - Nat.pred (Nat.find h) • ε
j : ℕ
hj : j ≥ i
hfij : f j ≤ f i
⊢ f i < f j + ε

tactic: rw [neg_sub, lt_sub_iff_add_lt, add_nsmul, add_nsmul, one_nsmul]
state_before: α : Type u_1
β : Type ?u.7193
inst✝³ : Ring β
inst✝² : LinearOrderedField α
inst✝¹ : Archimedean α
abv : β → α
inst✝ : IsAbsoluteValue abv
f : ℕ → α
a : α
m : ℕ
ham : ∀ (n : ℕ), n ≥ m → abs' (f n) ≤ a
hnm✝ : ∀ (n : ℕ), n ≥ m → f (Nat.succ n) ≤ f n
ε : α
ε0 : ε > 0
k : ℕ
hk : a ≤ k • ε
n : ℕ
hnm : n ≥ m
⊢ a < -(a - (k + (k + 1)) • ε)

tactic: exact add_lt_add_of_le_of_lt hk (lt_of_le_of_lt hk (lt_add_of_pos_right _ ε0))
state_before: α : Type u_1
β : Type ?u.7193
inst✝³ : Ring β
inst✝² : LinearOrderedField α
inst✝¹ : Archimedean α
abv : β → α
inst✝ : IsAbsoluteValue abv
f : ℕ → α
a : α
m : ℕ
ham : ∀ (n : ℕ), n ≥ m → abs' (f n) ≤ a
hnm✝ : ∀ (n : ℕ), n ≥ m → f (Nat.succ n) ≤ f n
ε : α
ε0 : ε > 0
k : ℕ
hk : a ≤ k • ε
n : ℕ
hnm : n ≥ m
⊢ a + a < k • ε + (k • ε + ε)

tactic: have := hl m (le_refl m)
state_before: α : Type u_1
β : Type ?u.7193
inst✝³ : Ring β
inst✝² : LinearOrderedField α
inst✝¹ : Archimedean α
abv : β → α
inst✝ : IsAbsoluteValue abv
f : ℕ → α
a : α
m : ℕ
ham : ∀ (n : ℕ), n ≥ m → abs' (f n) ≤ a
hnm : ∀ (n : ℕ), n ≥ m → f (Nat.succ n) ≤ f n
ε : α
ε0 : ε > 0
k : ℕ
hk : a ≤ k • ε
h : ∃ l, ∀ (n : ℕ), n ≥ m → a - l • ε < f n
l : ℕ := Nat.find h
hl : ∀ (n : ℕ), n ≥ m → f n > a - l • ε
hl0 : l = 0
⊢ a < f m

tactic: simpa [hl0] using this
state_before: α : Type u_1
β : Type ?u.7193
inst✝³ : Ring β
inst✝² : LinearOrderedField α
inst✝¹ : Archimedean α
abv : β → α
inst✝ : IsAbsoluteValue abv
f : ℕ → α
a : α
m : ℕ
ham : ∀ (n : ℕ), n ≥ m → abs' (f n) ≤ a
hnm : ∀ (n : ℕ), n ≥ m → f (Nat.succ n) ≤ f n
ε : α
ε0 : ε > 0
k : ℕ
hk : a ≤ k • ε
h : ∃ l, ∀ (n : ℕ), n ≥ m → a - l • ε < f n
l : ℕ := Nat.find h
hl : ∀ (n : ℕ), n ≥ m → f n > a - l • ε
hl0 : l = 0
this : f m > a - l • ε
⊢ a < f m

tactic: conv =>
  rhs
  rw [← Nat.succ_pred_eq_of_pos (Nat.pos_of_ne_zero hl0), succ_nsmul', sub_add,
    add_sub_cancel]
state_before: α : Type u_1
β : Type ?u.7193
inst✝³ : Ring β
inst✝² : LinearOrderedField α
inst✝¹ : Archimedean α
abv : β → α
inst✝ : IsAbsoluteValue abv
f : ℕ → α
a : α
m : ℕ
ham : ∀ (n : ℕ), n ≥ m → abs' (f n) ≤ a
hnm : ∀ (n : ℕ), n ≥ m → f (Nat.succ n) ≤ f n
ε : α
ε0 : ε > 0
k : ℕ
hk : a ≤ k • ε
h : ∃ l, ∀ (n : ℕ), n ≥ m → a - l • ε < f n
l : ℕ := Nat.find h
hl : ∀ (n : ℕ), n ≥ m → f n > a - l • ε
hl0 : l ≠ 0
i : ℕ
hi : i ≥ m ∧ f i ≤ a - Nat.pred (Nat.find h) • ε
j : ℕ
hj : j ≥ i
hfij : f j ≤ f i
⊢ a - Nat.pred l • ε = a - l • ε + ε