Theorem: Complex.equiv_limAux
File: Mathlib/Data/Complex/Basic.lean

tactic: cases' H _ ij with H₁ H₂
state_before: f : CauSeq ℂ ↑abs
ε : ℝ
ε0 : ε > 0
i : ℕ
H :
  ∀ (j : ℕ),
    j ≥ i →
      abs'
            (↑({ val := fun n => (↑f n).re, property := (_ : IsCauSeq abs' fun n => (↑f n).re) } -
                  CauSeq.const abs'
                    (CauSeq.lim { val := fun n => (↑f n).re, property := (_ : IsCauSeq abs' fun n => (↑f n).re) }))
              j) <
          ε / 2 ∧
        abs'
            (↑({ val := fun n => (↑f n).im, property := (_ : IsCauSeq abs' fun n => (↑f n).im) } -
                  CauSeq.const abs'
                    (CauSeq.lim { val := fun n => (↑f n).im, property := (_ : IsCauSeq abs' fun n => (↑f n).im) }))
              j) <
          ε / 2
j : ℕ
ij : j ≥ i
⊢ ↑abs (↑(f - CauSeq.const (↑abs) (limAux f)) j) < ε

tactic: apply lt_of_le_of_lt (abs_le_abs_re_add_abs_im _)
state_before: case intro
f : CauSeq ℂ ↑abs
ε : ℝ
ε0 : ε > 0
i : ℕ
H :
  ∀ (j : ℕ),
    j ≥ i →
      abs'
            (↑({ val := fun n => (↑f n).re, property := (_ : IsCauSeq abs' fun n => (↑f n).re) } -
                  CauSeq.const abs'
                    (CauSeq.lim { val := fun n => (↑f n).re, property := (_ : IsCauSeq abs' fun n => (↑f n).re) }))
              j) <
          ε / 2 ∧
        abs'
            (↑({ val := fun n => (↑f n).im, property := (_ : IsCauSeq abs' fun n => (↑f n).im) } -
                  CauSeq.const abs'
                    (CauSeq.lim { val := fun n => (↑f n).im, property := (_ : IsCauSeq abs' fun n => (↑f n).im) }))
              j) <
          ε / 2
j : ℕ
ij : j ≥ i
H₁ :
  abs'
      (↑({ val := fun n => (↑f n).re, property := (_ : IsCauSeq abs' fun n => (↑f n).re) } -
            CauSeq.const abs'
              (CauSeq.lim { val := fun n => (↑f n).re, property := (_ : IsCauSeq abs' fun n => (↑f n).re) }))
        j) <
    ε / 2
H₂ :
  abs'
      (↑({ val := fun n => (↑f n).im, property := (_ : IsCauSeq abs' fun n => (↑f n).im) } -
            CauSeq.const abs'
              (CauSeq.lim { val := fun n => (↑f n).im, property := (_ : IsCauSeq abs' fun n => (↑f n).im) }))
        j) <
    ε / 2
⊢ ↑abs (↑(f - CauSeq.const (↑abs) (limAux f)) j) < ε

tactic: dsimp [limAux] at *
state_before: case intro
f : CauSeq ℂ ↑abs
ε : ℝ
ε0 : ε > 0
i : ℕ
H :
  ∀ (j : ℕ),
    j ≥ i →
      abs'
            (↑({ val := fun n => (↑f n).re, property := (_ : IsCauSeq abs' fun n => (↑f n).re) } -
                  CauSeq.const abs'
                    (CauSeq.lim { val := fun n => (↑f n).re, property := (_ : IsCauSeq abs' fun n => (↑f n).re) }))
              j) <
          ε / 2 ∧
        abs'
            (↑({ val := fun n => (↑f n).im, property := (_ : IsCauSeq abs' fun n => (↑f n).im) } -
                  CauSeq.const abs'
                    (CauSeq.lim { val := fun n => (↑f n).im, property := (_ : IsCauSeq abs' fun n => (↑f n).im) }))
              j) <
          ε / 2
j : ℕ
ij : j ≥ i
H₁ :
  abs'
      (↑({ val := fun n => (↑f n).re, property := (_ : IsCauSeq abs' fun n => (↑f n).re) } -
            CauSeq.const abs'
              (CauSeq.lim { val := fun n => (↑f n).re, property := (_ : IsCauSeq abs' fun n => (↑f n).re) }))
        j) <
    ε / 2
H₂ :
  abs'
      (↑({ val := fun n => (↑f n).im, property := (_ : IsCauSeq abs' fun n => (↑f n).im) } -
            CauSeq.const abs'
              (CauSeq.lim { val := fun n => (↑f n).im, property := (_ : IsCauSeq abs' fun n => (↑f n).im) }))
        j) <
    ε / 2
⊢ abs' (↑(f - CauSeq.const (↑abs) (limAux f)) j).re + abs' (↑(f - CauSeq.const (↑abs) (limAux f)) j).im < ε

tactic: have := add_lt_add H₁ H₂
state_before: case intro
f : CauSeq ℂ ↑abs
ε : ℝ
ε0 : ε > 0
i : ℕ
H :
  ∀ (j : ℕ),
    j ≥ i →
      abs' ((↑f j).re - CauSeq.lim { val := fun n => (↑f n).re, property := (_ : IsCauSeq abs' fun n => (↑f n).re) }) <
          ε / 2 ∧
        abs'
            ((↑f j).im - CauSeq.lim { val := fun n => (↑f n).im, property := (_ : IsCauSeq abs' fun n => (↑f n).im) }) <
          ε / 2
j : ℕ
ij : j ≥ i
H₁ :
  abs' ((↑f j).re - CauSeq.lim { val := fun n => (↑f n).re, property := (_ : IsCauSeq abs' fun n => (↑f n).re) }) <
    ε / 2
H₂ :
  abs' ((↑f j).im - CauSeq.lim { val := fun n => (↑f n).im, property := (_ : IsCauSeq abs' fun n => (↑f n).im) }) <
    ε / 2
⊢ abs' ((↑f j).re - CauSeq.lim (cauSeqRe f)) + abs' ((↑f j).im - CauSeq.lim (cauSeqIm f)) < ε

tactic: rwa [add_halves] at this
state_before: case intro
f : CauSeq ℂ ↑abs
ε : ℝ
ε0 : ε > 0
i : ℕ
H :
  ∀ (j : ℕ),
    j ≥ i →
      abs' ((↑f j).re - CauSeq.lim { val := fun n => (↑f n).re, property := (_ : IsCauSeq abs' fun n => (↑f n).re) }) <
          ε / 2 ∧
        abs'
            ((↑f j).im - CauSeq.lim { val := fun n => (↑f n).im, property := (_ : IsCauSeq abs' fun n => (↑f n).im) }) <
          ε / 2
j : ℕ
ij : j ≥ i
H₁ :
  abs' ((↑f j).re - CauSeq.lim { val := fun n => (↑f n).re, property := (_ : IsCauSeq abs' fun n => (↑f n).re) }) <
    ε / 2
H₂ :
  abs' ((↑f j).im - CauSeq.lim { val := fun n => (↑f n).im, property := (_ : IsCauSeq abs' fun n => (↑f n).im) }) <
    ε / 2
this :
  abs' ((↑f j).re - CauSeq.lim { val := fun n => (↑f n).re, property := (_ : IsCauSeq abs' fun n => (↑f n).re) }) +
      abs' ((↑f j).im - CauSeq.lim { val := fun n => (↑f n).im, property := (_ : IsCauSeq abs' fun n => (↑f n).im) }) <
    ε / 2 + ε / 2
⊢ abs' ((↑f j).re - CauSeq.lim (cauSeqRe f)) + abs' ((↑f j).im - CauSeq.lim (cauSeqIm f)) < ε