[GOAL]
ι : Type u_1
l : Filter ι
E : Type u_2
inst✝⁴ : NormedAddCommGroup E
𝕜 : Type u_3
inst✝³ : IsROrC 𝕜
inst✝² : NormedSpace 𝕜 E
G : Type u_4
inst✝¹ : NormedAddCommGroup G
inst✝ : NormedSpace 𝕜 G
f : ι → E → G
g : E → G
f' : ι → E → E →L[𝕜] G
g' : E → E →L[𝕜] G
x : E
hf' : UniformCauchySeqOnFilter f' l (𝓝 x)
hf : ∀ᶠ (n : ι × E) in l ×ˢ 𝓝 x, HasFDerivAt (f n.fst) (f' n.fst n.snd) n.snd
hfg : Cauchy (map (fun n => f n x) l)
⊢ UniformCauchySeqOnFilter f l (𝓝 x)
[PROOFSTEP]
letI : NormedSpace ℝ E := NormedSpace.restrictScalars ℝ 𝕜 _
[GOAL]
ι : Type u_1
l : Filter ι
E : Type u_2
inst✝⁴ : NormedAddCommGroup E
𝕜 : Type u_3
inst✝³ : IsROrC 𝕜
inst✝² : NormedSpace 𝕜 E
G : Type u_4
inst✝¹ : NormedAddCommGroup G
inst✝ : NormedSpace 𝕜 G
f : ι → E → G
g : E → G
f' : ι → E → E →L[𝕜] G
g' : E → E →L[𝕜] G
x : E
hf' : UniformCauchySeqOnFilter f' l (𝓝 x)
hf : ∀ᶠ (n : ι × E) in l ×ˢ 𝓝 x, HasFDerivAt (f n.fst) (f' n.fst n.snd) n.snd
hfg : Cauchy (map (fun n => f n x) l)
this : NormedSpace ℝ E := NormedSpace.restrictScalars ℝ 𝕜 E
⊢ UniformCauchySeqOnFilter f l (𝓝 x)
[PROOFSTEP]
rw [SeminormedAddGroup.uniformCauchySeqOnFilter_iff_tendstoUniformlyOnFilter_zero] at hf' ⊢
[GOAL]
ι : Type u_1
l : Filter ι
E : Type u_2
inst✝⁴ : NormedAddCommGroup E
𝕜 : Type u_3
inst✝³ : IsROrC 𝕜
inst✝² : NormedSpace 𝕜 E
G : Type u_4
inst✝¹ : NormedAddCommGroup G
inst✝ : NormedSpace 𝕜 G
f : ι → E → G
g : E → G
f' : ι → E → E →L[𝕜] G
g' : E → E →L[𝕜] G
x : E
hf' : TendstoUniformlyOnFilter (fun n z => f' n.fst z - f' n.snd z) 0 (l ×ˢ l) (𝓝 x)
hf : ∀ᶠ (n : ι × E) in l ×ˢ 𝓝 x, HasFDerivAt (f n.fst) (f' n.fst n.snd) n.snd
hfg : Cauchy (map (fun n => f n x) l)
this : NormedSpace ℝ E := NormedSpace.restrictScalars ℝ 𝕜 E
⊢ TendstoUniformlyOnFilter (fun n z => f n.fst z - f n.snd z) 0 (l ×ˢ l) (𝓝 x)
[PROOFSTEP]
suffices
  TendstoUniformlyOnFilter (fun (n : ι × ι) (z : E) => f n.1 z - f n.2 z - (f n.1 x - f n.2 x)) 0 (l ×ˢ l) (𝓝 x) ∧
    TendstoUniformlyOnFilter (fun (n : ι × ι) (_ : E) => f n.1 x - f n.2 x) 0 (l ×ˢ l) (𝓝 x)
  by
  have := this.1.add this.2
  rw [add_zero] at this
  exact this.congr (by simp)
[GOAL]
ι : Type u_1
l : Filter ι
E : Type u_2
inst✝⁴ : NormedAddCommGroup E
𝕜 : Type u_3
inst✝³ : IsROrC 𝕜
inst✝² : NormedSpace 𝕜 E
G : Type u_4
inst✝¹ : NormedAddCommGroup G
inst✝ : NormedSpace 𝕜 G
f : ι → E → G
g : E → G
f' : ι → E → E →L[𝕜] G
g' : E → E →L[𝕜] G
x : E
hf' : TendstoUniformlyOnFilter (fun n z => f' n.fst z - f' n.snd z) 0 (l ×ˢ l) (𝓝 x)
hf : ∀ᶠ (n : ι × E) in l ×ˢ 𝓝 x, HasFDerivAt (f n.fst) (f' n.fst n.snd) n.snd
hfg : Cauchy (map (fun n => f n x) l)
this✝ : NormedSpace ℝ E := NormedSpace.restrictScalars ℝ 𝕜 E
this :
  TendstoUniformlyOnFilter (fun n z => f n.fst z - f n.snd z - (f n.fst x - f n.snd x)) 0 (l ×ˢ l) (𝓝 x) ∧
    TendstoUniformlyOnFilter (fun n x_1 => f n.fst x - f n.snd x) 0 (l ×ˢ l) (𝓝 x)
⊢ TendstoUniformlyOnFilter (fun n z => f n.fst z - f n.snd z) 0 (l ×ˢ l) (𝓝 x)
[PROOFSTEP]
have := this.1.add this.2
[GOAL]
ι : Type u_1
l : Filter ι
E : Type u_2
inst✝⁴ : NormedAddCommGroup E
𝕜 : Type u_3
inst✝³ : IsROrC 𝕜
inst✝² : NormedSpace 𝕜 E
G : Type u_4
inst✝¹ : NormedAddCommGroup G
inst✝ : NormedSpace 𝕜 G
f : ι → E → G
g : E → G
f' : ι → E → E →L[𝕜] G
g' : E → E →L[𝕜] G
x : E
hf' : TendstoUniformlyOnFilter (fun n z => f' n.fst z - f' n.snd z) 0 (l ×ˢ l) (𝓝 x)
hf : ∀ᶠ (n : ι × E) in l ×ˢ 𝓝 x, HasFDerivAt (f n.fst) (f' n.fst n.snd) n.snd
hfg : Cauchy (map (fun n => f n x) l)
this✝¹ : NormedSpace ℝ E := NormedSpace.restrictScalars ℝ 𝕜 E
this✝ :
  TendstoUniformlyOnFilter (fun n z => f n.fst z - f n.snd z - (f n.fst x - f n.snd x)) 0 (l ×ˢ l) (𝓝 x) ∧
    TendstoUniformlyOnFilter (fun n x_1 => f n.fst x - f n.snd x) 0 (l ×ˢ l) (𝓝 x)
this :
  TendstoUniformlyOnFilter
    ((fun n z => f n.fst z - f n.snd z - (f n.fst x - f n.snd x)) + fun n x_1 => f n.fst x - f n.snd x) (0 + 0) (l ×ˢ l)
    (𝓝 x)
⊢ TendstoUniformlyOnFilter (fun n z => f n.fst z - f n.snd z) 0 (l ×ˢ l) (𝓝 x)
[PROOFSTEP]
rw [add_zero] at this
[GOAL]
ι : Type u_1
l : Filter ι
E : Type u_2
inst✝⁴ : NormedAddCommGroup E
𝕜 : Type u_3
inst✝³ : IsROrC 𝕜
inst✝² : NormedSpace 𝕜 E
G : Type u_4
inst✝¹ : NormedAddCommGroup G
inst✝ : NormedSpace 𝕜 G
f : ι → E → G
g : E → G
f' : ι → E → E →L[𝕜] G
g' : E → E →L[𝕜] G
x : E
hf' : TendstoUniformlyOnFilter (fun n z => f' n.fst z - f' n.snd z) 0 (l ×ˢ l) (𝓝 x)
hf : ∀ᶠ (n : ι × E) in l ×ˢ 𝓝 x, HasFDerivAt (f n.fst) (f' n.fst n.snd) n.snd
hfg : Cauchy (map (fun n => f n x) l)
this✝¹ : NormedSpace ℝ E := NormedSpace.restrictScalars ℝ 𝕜 E
this✝ :
  TendstoUniformlyOnFilter (fun n z => f n.fst z - f n.snd z - (f n.fst x - f n.snd x)) 0 (l ×ˢ l) (𝓝 x) ∧
    TendstoUniformlyOnFilter (fun n x_1 => f n.fst x - f n.snd x) 0 (l ×ˢ l) (𝓝 x)
this :
  TendstoUniformlyOnFilter
    ((fun n z => f n.fst z - f n.snd z - (f n.fst x - f n.snd x)) + fun n x_1 => f n.fst x - f n.snd x) 0 (l ×ˢ l) (𝓝 x)
⊢ TendstoUniformlyOnFilter (fun n z => f n.fst z - f n.snd z) 0 (l ×ˢ l) (𝓝 x)
[PROOFSTEP]
exact this.congr (by simp)
[GOAL]
ι : Type u_1
l : Filter ι
E : Type u_2
inst✝⁴ : NormedAddCommGroup E
𝕜 : Type u_3
inst✝³ : IsROrC 𝕜
inst✝² : NormedSpace 𝕜 E
G : Type u_4
inst✝¹ : NormedAddCommGroup G
inst✝ : NormedSpace 𝕜 G
f : ι → E → G
g : E → G
f' : ι → E → E →L[𝕜] G
g' : E → E →L[𝕜] G
x : E
hf' : TendstoUniformlyOnFilter (fun n z => f' n.fst z - f' n.snd z) 0 (l ×ˢ l) (𝓝 x)
hf : ∀ᶠ (n : ι × E) in l ×ˢ 𝓝 x, HasFDerivAt (f n.fst) (f' n.fst n.snd) n.snd
hfg : Cauchy (map (fun n => f n x) l)
this✝¹ : NormedSpace ℝ E := NormedSpace.restrictScalars ℝ 𝕜 E
this✝ :
  TendstoUniformlyOnFilter (fun n z => f n.fst z - f n.snd z - (f n.fst x - f n.snd x)) 0 (l ×ˢ l) (𝓝 x) ∧
    TendstoUniformlyOnFilter (fun n x_1 => f n.fst x - f n.snd x) 0 (l ×ˢ l) (𝓝 x)
this :
  TendstoUniformlyOnFilter
    ((fun n z => f n.fst z - f n.snd z - (f n.fst x - f n.snd x)) + fun n x_1 => f n.fst x - f n.snd x) 0 (l ×ˢ l) (𝓝 x)
⊢ ∀ᶠ (n : (ι × ι) × E) in (l ×ˢ l) ×ˢ 𝓝 x,
    ((fun n z => f n.fst z - f n.snd z - (f n.fst x - f n.snd x)) + fun n x_1 => f n.fst x - f n.snd x) n.fst n.snd =
      f n.fst.fst n.snd - f n.fst.snd n.snd
[PROOFSTEP]
simp
[GOAL]
ι : Type u_1
l : Filter ι
E : Type u_2
inst✝⁴ : NormedAddCommGroup E
𝕜 : Type u_3
inst✝³ : IsROrC 𝕜
inst✝² : NormedSpace 𝕜 E
G : Type u_4
inst✝¹ : NormedAddCommGroup G
inst✝ : NormedSpace 𝕜 G
f : ι → E → G
g : E → G
f' : ι → E → E →L[𝕜] G
g' : E → E →L[𝕜] G
x : E
hf' : TendstoUniformlyOnFilter (fun n z => f' n.fst z - f' n.snd z) 0 (l ×ˢ l) (𝓝 x)
hf : ∀ᶠ (n : ι × E) in l ×ˢ 𝓝 x, HasFDerivAt (f n.fst) (f' n.fst n.snd) n.snd
hfg : Cauchy (map (fun n => f n x) l)
this : NormedSpace ℝ E := NormedSpace.restrictScalars ℝ 𝕜 E
⊢ TendstoUniformlyOnFilter (fun n z => f n.fst z - f n.snd z - (f n.fst x - f n.snd x)) 0 (l ×ˢ l) (𝓝 x) ∧
    TendstoUniformlyOnFilter (fun n x_1 => f n.fst x - f n.snd x) 0 (l ×ˢ l) (𝓝 x)
[PROOFSTEP]
constructor
[GOAL]
case left
ι : Type u_1
l : Filter ι
E : Type u_2
inst✝⁴ : NormedAddCommGroup E
𝕜 : Type u_3
inst✝³ : IsROrC 𝕜
inst✝² : NormedSpace 𝕜 E
G : Type u_4
inst✝¹ : NormedAddCommGroup G
inst✝ : NormedSpace 𝕜 G
f : ι → E → G
g : E → G
f' : ι → E → E →L[𝕜] G
g' : E → E →L[𝕜] G
x : E
hf' : TendstoUniformlyOnFilter (fun n z => f' n.fst z - f' n.snd z) 0 (l ×ˢ l) (𝓝 x)
hf : ∀ᶠ (n : ι × E) in l ×ˢ 𝓝 x, HasFDerivAt (f n.fst) (f' n.fst n.snd) n.snd
hfg : Cauchy (map (fun n => f n x) l)
this : NormedSpace ℝ E := NormedSpace.restrictScalars ℝ 𝕜 E
⊢ TendstoUniformlyOnFilter (fun n z => f n.fst z - f n.snd z - (f n.fst x - f n.snd x)) 0 (l ×ˢ l) (𝓝 x)
[PROOFSTEP]
rw [Metric.tendstoUniformlyOnFilter_iff] at hf' ⊢
[GOAL]
case left
ι : Type u_1
l : Filter ι
E : Type u_2
inst✝⁴ : NormedAddCommGroup E
𝕜 : Type u_3
inst✝³ : IsROrC 𝕜
inst✝² : NormedSpace 𝕜 E
G : Type u_4
inst✝¹ : NormedAddCommGroup G
inst✝ : NormedSpace 𝕜 G
f : ι → E → G
g : E → G
f' : ι → E → E →L[𝕜] G
g' : E → E →L[𝕜] G
x : E
hf' :
  ∀ (ε : ℝ),
    ε > 0 →
      ∀ᶠ (n : (ι × ι) × E) in (l ×ˢ l) ×ˢ 𝓝 x, dist (OfNat.ofNat 0 n.snd) (f' n.fst.fst n.snd - f' n.fst.snd n.snd) < ε
hf : ∀ᶠ (n : ι × E) in l ×ˢ 𝓝 x, HasFDerivAt (f n.fst) (f' n.fst n.snd) n.snd
hfg : Cauchy (map (fun n => f n x) l)
this : NormedSpace ℝ E := NormedSpace.restrictScalars ℝ 𝕜 E
⊢ ∀ (ε : ℝ),
    ε > 0 →
      ∀ᶠ (n : (ι × ι) × E) in (l ×ˢ l) ×ˢ 𝓝 x,
        dist (OfNat.ofNat 0 n.snd) (f n.fst.fst n.snd - f n.fst.snd n.snd - (f n.fst.fst x - f n.fst.snd x)) < ε
[PROOFSTEP]
intro ε hε
[GOAL]
case left
ι : Type u_1
l : Filter ι
E : Type u_2
inst✝⁴ : NormedAddCommGroup E
𝕜 : Type u_3
inst✝³ : IsROrC 𝕜
inst✝² : NormedSpace 𝕜 E
G : Type u_4
inst✝¹ : NormedAddCommGroup G
inst✝ : NormedSpace 𝕜 G
f : ι → E → G
g : E → G
f' : ι → E → E →L[𝕜] G
g' : E → E →L[𝕜] G
x : E
hf' :
  ∀ (ε : ℝ),
    ε > 0 →
      ∀ᶠ (n : (ι × ι) × E) in (l ×ˢ l) ×ˢ 𝓝 x, dist (OfNat.ofNat 0 n.snd) (f' n.fst.fst n.snd - f' n.fst.snd n.snd) < ε
hf : ∀ᶠ (n : ι × E) in l ×ˢ 𝓝 x, HasFDerivAt (f n.fst) (f' n.fst n.snd) n.snd
hfg : Cauchy (map (fun n => f n x) l)
this : NormedSpace ℝ E := NormedSpace.restrictScalars ℝ 𝕜 E
ε : ℝ
hε : ε > 0
⊢ ∀ᶠ (n : (ι × ι) × E) in (l ×ˢ l) ×ˢ 𝓝 x,
    dist (OfNat.ofNat 0 n.snd) (f n.fst.fst n.snd - f n.fst.snd n.snd - (f n.fst.fst x - f n.fst.snd x)) < ε
[PROOFSTEP]
have := (tendsto_swap4_prod.eventually (hf.prod_mk hf)).diag_of_prod_right
[GOAL]
case left
ι : Type u_1
l : Filter ι
E : Type u_2
inst✝⁴ : NormedAddCommGroup E
𝕜 : Type u_3
inst✝³ : IsROrC 𝕜
inst✝² : NormedSpace 𝕜 E
G : Type u_4
inst✝¹ : NormedAddCommGroup G
inst✝ : NormedSpace 𝕜 G
f : ι → E → G
g : E → G
f' : ι → E → E →L[𝕜] G
g' : E → E →L[𝕜] G
x : E
hf' :
  ∀ (ε : ℝ),
    ε > 0 →
      ∀ᶠ (n : (ι × ι) × E) in (l ×ˢ l) ×ˢ 𝓝 x, dist (OfNat.ofNat 0 n.snd) (f' n.fst.fst n.snd - f' n.fst.snd n.snd) < ε
hf : ∀ᶠ (n : ι × E) in l ×ˢ 𝓝 x, HasFDerivAt (f n.fst) (f' n.fst n.snd) n.snd
hfg : Cauchy (map (fun n => f n x) l)
this✝ : NormedSpace ℝ E := NormedSpace.restrictScalars ℝ 𝕜 E
ε : ℝ
hε : ε > 0
this :
  ∀ᶠ (x : (ι × ι) × E) in (l ×ˢ l) ×ˢ 𝓝 x,
    HasFDerivAt
        (f
          (((x.fst, x.snd, x.snd).fst.fst, (x.fst, x.snd, x.snd).snd.fst), (x.fst, x.snd, x.snd).fst.snd,
                (x.fst, x.snd, x.snd).snd.snd).fst.fst)
        (f'
          (((x.fst, x.snd, x.snd).fst.fst, (x.fst, x.snd, x.snd).snd.fst), (x.fst, x.snd, x.snd).fst.snd,
                (x.fst, x.snd, x.snd).snd.snd).fst.fst
          (((x.fst, x.snd, x.snd).fst.fst, (x.fst, x.snd, x.snd).snd.fst), (x.fst, x.snd, x.snd).fst.snd,
                (x.fst, x.snd, x.snd).snd.snd).fst.snd)
        (((x.fst, x.snd, x.snd).fst.fst, (x.fst, x.snd, x.snd).snd.fst), (x.fst, x.snd, x.snd).fst.snd,
              (x.fst, x.snd, x.snd).snd.snd).fst.snd ∧
      HasFDerivAt
        (f
          (((x.fst, x.snd, x.snd).fst.fst, (x.fst, x.snd, x.snd).snd.fst), (x.fst, x.snd, x.snd).fst.snd,
                (x.fst, x.snd, x.snd).snd.snd).snd.fst)
        (f'
          (((x.fst, x.snd, x.snd).fst.fst, (x.fst, x.snd, x.snd).snd.fst), (x.fst, x.snd, x.snd).fst.snd,
                (x.fst, x.snd, x.snd).snd.snd).snd.fst
          (((x.fst, x.snd, x.snd).fst.fst, (x.fst, x.snd, x.snd).snd.fst), (x.fst, x.snd, x.snd).fst.snd,
                (x.fst, x.snd, x.snd).snd.snd).snd.snd)
        (((x.fst, x.snd, x.snd).fst.fst, (x.fst, x.snd, x.snd).snd.fst), (x.fst, x.snd, x.snd).fst.snd,
              (x.fst, x.snd, x.snd).snd.snd).snd.snd
⊢ ∀ᶠ (n : (ι × ι) × E) in (l ×ˢ l) ×ˢ 𝓝 x,
    dist (OfNat.ofNat 0 n.snd) (f n.fst.fst n.snd - f n.fst.snd n.snd - (f n.fst.fst x - f n.fst.snd x)) < ε
[PROOFSTEP]
obtain ⟨a, b, c, d, e⟩ := eventually_prod_iff.1 ((hf' ε hε).and this)
[GOAL]
case left.intro.intro.intro.intro
ι : Type u_1
l : Filter ι
E : Type u_2
inst✝⁴ : NormedAddCommGroup E
𝕜 : Type u_3
inst✝³ : IsROrC 𝕜
inst✝² : NormedSpace 𝕜 E
G : Type u_4
inst✝¹ : NormedAddCommGroup G
inst✝ : NormedSpace 𝕜 G
f : ι → E → G
g : E → G
f' : ι → E → E →L[𝕜] G
g' : E → E →L[𝕜] G
x : E
hf' :
  ∀ (ε : ℝ),
    ε > 0 →
      ∀ᶠ (n : (ι × ι) × E) in (l ×ˢ l) ×ˢ 𝓝 x, dist (OfNat.ofNat 0 n.snd) (f' n.fst.fst n.snd - f' n.fst.snd n.snd) < ε
hf : ∀ᶠ (n : ι × E) in l ×ˢ 𝓝 x, HasFDerivAt (f n.fst) (f' n.fst n.snd) n.snd
hfg : Cauchy (map (fun n => f n x) l)
this✝ : NormedSpace ℝ E := NormedSpace.restrictScalars ℝ 𝕜 E
ε : ℝ
hε : ε > 0
this :
  ∀ᶠ (x : (ι × ι) × E) in (l ×ˢ l) ×ˢ 𝓝 x,
    HasFDerivAt
        (f
          (((x.fst, x.snd, x.snd).fst.fst, (x.fst, x.snd, x.snd).snd.fst), (x.fst, x.snd, x.snd).fst.snd,
                (x.fst, x.snd, x.snd).snd.snd).fst.fst)
        (f'
          (((x.fst, x.snd, x.snd).fst.fst, (x.fst, x.snd, x.snd).snd.fst), (x.fst, x.snd, x.snd).fst.snd,
                (x.fst, x.snd, x.snd).snd.snd).fst.fst
          (((x.fst, x.snd, x.snd).fst.fst, (x.fst, x.snd, x.snd).snd.fst), (x.fst, x.snd, x.snd).fst.snd,
                (x.fst, x.snd, x.snd).snd.snd).fst.snd)
        (((x.fst, x.snd, x.snd).fst.fst, (x.fst, x.snd, x.snd).snd.fst), (x.fst, x.snd, x.snd).fst.snd,
              (x.fst, x.snd, x.snd).snd.snd).fst.snd ∧
      HasFDerivAt
        (f
          (((x.fst, x.snd, x.snd).fst.fst, (x.fst, x.snd, x.snd).snd.fst), (x.fst, x.snd, x.snd).fst.snd,
                (x.fst, x.snd, x.snd).snd.snd).snd.fst)
        (f'
          (((x.fst, x.snd, x.snd).fst.fst, (x.fst, x.snd, x.snd).snd.fst), (x.fst, x.snd, x.snd).fst.snd,
                (x.fst, x.snd, x.snd).snd.snd).snd.fst
          (((x.fst, x.snd, x.snd).fst.fst, (x.fst, x.snd, x.snd).snd.fst), (x.fst, x.snd, x.snd).fst.snd,
                (x.fst, x.snd, x.snd).snd.snd).snd.snd)
        (((x.fst, x.snd, x.snd).fst.fst, (x.fst, x.snd, x.snd).snd.fst), (x.fst, x.snd, x.snd).fst.snd,
              (x.fst, x.snd, x.snd).snd.snd).snd.snd
a : ι × ι → Prop
b : ∀ᶠ (x : ι × ι) in l ×ˢ l, a x
c : E → Prop
d : ∀ᶠ (y : E) in 𝓝 x, c y
e :
  ∀ {x : ι × ι},
    a x →
      ∀ {y : E},
        c y →
          dist (OfNat.ofNat 0 (x, y).snd) (f' (x, y).fst.fst (x, y).snd - f' (x, y).fst.snd (x, y).snd) < ε ∧
            HasFDerivAt
                (f
                  ((((x, y).fst, (x, y).snd, (x, y).snd).fst.fst, ((x, y).fst, (x, y).snd, (x, y).snd).snd.fst),
                        ((x, y).fst, (x, y).snd, (x, y).snd).fst.snd,
                        ((x, y).fst, (x, y).snd, (x, y).snd).snd.snd).fst.fst)
                (f'
                  ((((x, y).fst, (x, y).snd, (x, y).snd).fst.fst, ((x, y).fst, (x, y).snd, (x, y).snd).snd.fst),
                        ((x, y).fst, (x, y).snd, (x, y).snd).fst.snd,
                        ((x, y).fst, (x, y).snd, (x, y).snd).snd.snd).fst.fst
                  ((((x, y).fst, (x, y).snd, (x, y).snd).fst.fst, ((x, y).fst, (x, y).snd, (x, y).snd).snd.fst),
                        ((x, y).fst, (x, y).snd, (x, y).snd).fst.snd,
                        ((x, y).fst, (x, y).snd, (x, y).snd).snd.snd).fst.snd)
                ((((x, y).fst, (x, y).snd, (x, y).snd).fst.fst, ((x, y).fst, (x, y).snd, (x, y).snd).snd.fst),
                      ((x, y).fst, (x, y).snd, (x, y).snd).fst.snd,
                      ((x, y).fst, (x, y).snd, (x, y).snd).snd.snd).fst.snd ∧
              HasFDerivAt
                (f
                  ((((x, y).fst, (x, y).snd, (x, y).snd).fst.fst, ((x, y).fst, (x, y).snd, (x, y).snd).snd.fst),
                        ((x, y).fst, (x, y).snd, (x, y).snd).fst.snd,
                        ((x, y).fst, (x, y).snd, (x, y).snd).snd.snd).snd.fst)
                (f'
                  ((((x, y).fst, (x, y).snd, (x, y).snd).fst.fst, ((x, y).fst, (x, y).snd, (x, y).snd).snd.fst),
                        ((x, y).fst, (x, y).snd, (x, y).snd).fst.snd,
                        ((x, y).fst, (x, y).snd, (x, y).snd).snd.snd).snd.fst
                  ((((x, y).fst, (x, y).snd, (x, y).snd).fst.fst, ((x, y).fst, (x, y).snd, (x, y).snd).snd.fst),
                        ((x, y).fst, (x, y).snd, (x, y).snd).fst.snd,
                        ((x, y).fst, (x, y).snd, (x, y).snd).snd.snd).snd.snd)
                ((((x, y).fst, (x, y).snd, (x, y).snd).fst.fst, ((x, y).fst, (x, y).snd, (x, y).snd).snd.fst),
                      ((x, y).fst, (x, y).snd, (x, y).snd).fst.snd,
                      ((x, y).fst, (x, y).snd, (x, y).snd).snd.snd).snd.snd
⊢ ∀ᶠ (n : (ι × ι) × E) in (l ×ˢ l) ×ˢ 𝓝 x,
    dist (OfNat.ofNat 0 n.snd) (f n.fst.fst n.snd - f n.fst.snd n.snd - (f n.fst.fst x - f n.fst.snd x)) < ε
[PROOFSTEP]
obtain ⟨R, hR, hR'⟩ := Metric.nhds_basis_ball.eventually_iff.mp d
[GOAL]
case left.intro.intro.intro.intro.intro.intro
ι : Type u_1
l : Filter ι
E : Type u_2
inst✝⁴ : NormedAddCommGroup E
𝕜 : Type u_3
inst✝³ : IsROrC 𝕜
inst✝² : NormedSpace 𝕜 E
G : Type u_4
inst✝¹ : NormedAddCommGroup G
inst✝ : NormedSpace 𝕜 G
f : ι → E → G
g : E → G
f' : ι → E → E →L[𝕜] G
g' : E → E →L[𝕜] G
x : E
hf' :
  ∀ (ε : ℝ),
    ε > 0 →
      ∀ᶠ (n : (ι × ι) × E) in (l ×ˢ l) ×ˢ 𝓝 x, dist (OfNat.ofNat 0 n.snd) (f' n.fst.fst n.snd - f' n.fst.snd n.snd) < ε
hf : ∀ᶠ (n : ι × E) in l ×ˢ 𝓝 x, HasFDerivAt (f n.fst) (f' n.fst n.snd) n.snd
hfg : Cauchy (map (fun n => f n x) l)
this✝ : NormedSpace ℝ E := NormedSpace.restrictScalars ℝ 𝕜 E
ε : ℝ
hε : ε > 0
this :
  ∀ᶠ (x : (ι × ι) × E) in (l ×ˢ l) ×ˢ 𝓝 x,
    HasFDerivAt
        (f
          (((x.fst, x.snd, x.snd).fst.fst, (x.fst, x.snd, x.snd).snd.fst), (x.fst, x.snd, x.snd).fst.snd,
                (x.fst, x.snd, x.snd).snd.snd).fst.fst)
        (f'
          (((x.fst, x.snd, x.snd).fst.fst, (x.fst, x.snd, x.snd).snd.fst), (x.fst, x.snd, x.snd).fst.snd,
                (x.fst, x.snd, x.snd).snd.snd).fst.fst
          (((x.fst, x.snd, x.snd).fst.fst, (x.fst, x.snd, x.snd).snd.fst), (x.fst, x.snd, x.snd).fst.snd,
                (x.fst, x.snd, x.snd).snd.snd).fst.snd)
        (((x.fst, x.snd, x.snd).fst.fst, (x.fst, x.snd, x.snd).snd.fst), (x.fst, x.snd, x.snd).fst.snd,
              (x.fst, x.snd, x.snd).snd.snd).fst.snd ∧
      HasFDerivAt
        (f
          (((x.fst, x.snd, x.snd).fst.fst, (x.fst, x.snd, x.snd).snd.fst), (x.fst, x.snd, x.snd).fst.snd,
                (x.fst, x.snd, x.snd).snd.snd).snd.fst)
        (f'
          (((x.fst, x.snd, x.snd).fst.fst, (x.fst, x.snd, x.snd).snd.fst), (x.fst, x.snd, x.snd).fst.snd,
                (x.fst, x.snd, x.snd).snd.snd).snd.fst
          (((x.fst, x.snd, x.snd).fst.fst, (x.fst, x.snd, x.snd).snd.fst), (x.fst, x.snd, x.snd).fst.snd,
                (x.fst, x.snd, x.snd).snd.snd).snd.snd)
        (((x.fst, x.snd, x.snd).fst.fst, (x.fst, x.snd, x.snd).snd.fst), (x.fst, x.snd, x.snd).fst.snd,
              (x.fst, x.snd, x.snd).snd.snd).snd.snd
a : ι × ι → Prop
b : ∀ᶠ (x : ι × ι) in l ×ˢ l, a x
c : E → Prop
d : ∀ᶠ (y : E) in 𝓝 x, c y
e :
  ∀ {x : ι × ι},
    a x →
      ∀ {y : E},
        c y →
          dist (OfNat.ofNat 0 (x, y).snd) (f' (x, y).fst.fst (x, y).snd - f' (x, y).fst.snd (x, y).snd) < ε ∧
            HasFDerivAt
                (f
                  ((((x, y).fst, (x, y).snd, (x, y).snd).fst.fst, ((x, y).fst, (x, y).snd, (x, y).snd).snd.fst),
                        ((x, y).fst, (x, y).snd, (x, y).snd).fst.snd,
                        ((x, y).fst, (x, y).snd, (x, y).snd).snd.snd).fst.fst)
                (f'
                  ((((x, y).fst, (x, y).snd, (x, y).snd).fst.fst, ((x, y).fst, (x, y).snd, (x, y).snd).snd.fst),
                        ((x, y).fst, (x, y).snd, (x, y).snd).fst.snd,
                        ((x, y).fst, (x, y).snd, (x, y).snd).snd.snd).fst.fst
                  ((((x, y).fst, (x, y).snd, (x, y).snd).fst.fst, ((x, y).fst, (x, y).snd, (x, y).snd).snd.fst),
                        ((x, y).fst, (x, y).snd, (x, y).snd).fst.snd,
                        ((x, y).fst, (x, y).snd, (x, y).snd).snd.snd).fst.snd)
                ((((x, y).fst, (x, y).snd, (x, y).snd).fst.fst, ((x, y).fst, (x, y).snd, (x, y).snd).snd.fst),
                      ((x, y).fst, (x, y).snd, (x, y).snd).fst.snd,
                      ((x, y).fst, (x, y).snd, (x, y).snd).snd.snd).fst.snd ∧
              HasFDerivAt
                (f
                  ((((x, y).fst, (x, y).snd, (x, y).snd).fst.fst, ((x, y).fst, (x, y).snd, (x, y).snd).snd.fst),
                        ((x, y).fst, (x, y).snd, (x, y).snd).fst.snd,
                        ((x, y).fst, (x, y).snd, (x, y).snd).snd.snd).snd.fst)
                (f'
                  ((((x, y).fst, (x, y).snd, (x, y).snd).fst.fst, ((x, y).fst, (x, y).snd, (x, y).snd).snd.fst),
                        ((x, y).fst, (x, y).snd, (x, y).snd).fst.snd,
                        ((x, y).fst, (x, y).snd, (x, y).snd).snd.snd).snd.fst
                  ((((x, y).fst, (x, y).snd, (x, y).snd).fst.fst, ((x, y).fst, (x, y).snd, (x, y).snd).snd.fst),
                        ((x, y).fst, (x, y).snd, (x, y).snd).fst.snd,
                        ((x, y).fst, (x, y).snd, (x, y).snd).snd.snd).snd.snd)
                ((((x, y).fst, (x, y).snd, (x, y).snd).fst.fst, ((x, y).fst, (x, y).snd, (x, y).snd).snd.fst),
                      ((x, y).fst, (x, y).snd, (x, y).snd).fst.snd,
                      ((x, y).fst, (x, y).snd, (x, y).snd).snd.snd).snd.snd
R : ℝ
hR : 0 < R
hR' : ∀ ⦃x_1 : E⦄, x_1 ∈ Metric.ball x R → c x_1
⊢ ∀ᶠ (n : (ι × ι) × E) in (l ×ˢ l) ×ˢ 𝓝 x,
    dist (OfNat.ofNat 0 n.snd) (f n.fst.fst n.snd - f n.fst.snd n.snd - (f n.fst.fst x - f n.fst.snd x)) < ε
[PROOFSTEP]
let r := min 1 R
[GOAL]
case left.intro.intro.intro.intro.intro.intro
ι : Type u_1
l : Filter ι
E : Type u_2
inst✝⁴ : NormedAddCommGroup E
𝕜 : Type u_3
inst✝³ : IsROrC 𝕜
inst✝² : NormedSpace 𝕜 E
G : Type u_4
inst✝¹ : NormedAddCommGroup G
inst✝ : NormedSpace 𝕜 G
f : ι → E → G
g : E → G
f' : ι → E → E →L[𝕜] G
g' : E → E →L[𝕜] G
x : E
hf' :
  ∀ (ε : ℝ),
    ε > 0 →
      ∀ᶠ (n : (ι × ι) × E) in (l ×ˢ l) ×ˢ 𝓝 x, dist (OfNat.ofNat 0 n.snd) (f' n.fst.fst n.snd - f' n.fst.snd n.snd) < ε
hf : ∀ᶠ (n : ι × E) in l ×ˢ 𝓝 x, HasFDerivAt (f n.fst) (f' n.fst n.snd) n.snd
hfg : Cauchy (map (fun n => f n x) l)
this✝ : NormedSpace ℝ E := NormedSpace.restrictScalars ℝ 𝕜 E
ε : ℝ
hε : ε > 0
this :
  ∀ᶠ (x : (ι × ι) × E) in (l ×ˢ l) ×ˢ 𝓝 x,
    HasFDerivAt
        (f
          (((x.fst, x.snd, x.snd).fst.fst, (x.fst, x.snd, x.snd).snd.fst), (x.fst, x.snd, x.snd).fst.snd,
                (x.fst, x.snd, x.snd).snd.snd).fst.fst)
        (f'
          (((x.fst, x.snd, x.snd).fst.fst, (x.fst, x.snd, x.snd).snd.fst), (x.fst, x.snd, x.snd).fst.snd,
                (x.fst, x.snd, x.snd).snd.snd).fst.fst
          (((x.fst, x.snd, x.snd).fst.fst, (x.fst, x.snd, x.snd).snd.fst), (x.fst, x.snd, x.snd).fst.snd,
                (x.fst, x.snd, x.snd).snd.snd).fst.snd)
        (((x.fst, x.snd, x.snd).fst.fst, (x.fst, x.snd, x.snd).snd.fst), (x.fst, x.snd, x.snd).fst.snd,
              (x.fst, x.snd, x.snd).snd.snd).fst.snd ∧
      HasFDerivAt
        (f
          (((x.fst, x.snd, x.snd).fst.fst, (x.fst, x.snd, x.snd).snd.fst), (x.fst, x.snd, x.snd).fst.snd,
                (x.fst, x.snd, x.snd).snd.snd).snd.fst)
        (f'
          (((x.fst, x.snd, x.snd).fst.fst, (x.fst, x.snd, x.snd).snd.fst), (x.fst, x.snd, x.snd).fst.snd,
                (x.fst, x.snd, x.snd).snd.snd).snd.fst
          (((x.fst, x.snd, x.snd).fst.fst, (x.fst, x.snd, x.snd).snd.fst), (x.fst, x.snd, x.snd).fst.snd,
                (x.fst, x.snd, x.snd).snd.snd).snd.snd)
        (((x.fst, x.snd, x.snd).fst.fst, (x.fst, x.snd, x.snd).snd.fst), (x.fst, x.snd, x.snd).fst.snd,
              (x.fst, x.snd, x.snd).snd.snd).snd.snd
a : ι × ι → Prop
b : ∀ᶠ (x : ι × ι) in l ×ˢ l, a x
c : E → Prop
d : ∀ᶠ (y : E) in 𝓝 x, c y
e :
  ∀ {x : ι × ι},
    a x →
      ∀ {y : E},
        c y →
          dist (OfNat.ofNat 0 (x, y).snd) (f' (x, y).fst.fst (x, y).snd - f' (x, y).fst.snd (x, y).snd) < ε ∧
            HasFDerivAt
                (f
                  ((((x, y).fst, (x, y).snd, (x, y).snd).fst.fst, ((x, y).fst, (x, y).snd, (x, y).snd).snd.fst),
                        ((x, y).fst, (x, y).snd, (x, y).snd).fst.snd,
                        ((x, y).fst, (x, y).snd, (x, y).snd).snd.snd).fst.fst)
                (f'
                  ((((x, y).fst, (x, y).snd, (x, y).snd).fst.fst, ((x, y).fst, (x, y).snd, (x, y).snd).snd.fst),
                        ((x, y).fst, (x, y).snd, (x, y).snd).fst.snd,
                        ((x, y).fst, (x, y).snd, (x, y).snd).snd.snd).fst.fst
                  ((((x, y).fst, (x, y).snd, (x, y).snd).fst.fst, ((x, y).fst, (x, y).snd, (x, y).snd).snd.fst),
                        ((x, y).fst, (x, y).snd, (x, y).snd).fst.snd,
                        ((x, y).fst, (x, y).snd, (x, y).snd).snd.snd).fst.snd)
                ((((x, y).fst, (x, y).snd, (x, y).snd).fst.fst, ((x, y).fst, (x, y).snd, (x, y).snd).snd.fst),
                      ((x, y).fst, (x, y).snd, (x, y).snd).fst.snd,
                      ((x, y).fst, (x, y).snd, (x, y).snd).snd.snd).fst.snd ∧
              HasFDerivAt
                (f
                  ((((x, y).fst, (x, y).snd, (x, y).snd).fst.fst, ((x, y).fst, (x, y).snd, (x, y).snd).snd.fst),
                        ((x, y).fst, (x, y).snd, (x, y).snd).fst.snd,
                        ((x, y).fst, (x, y).snd, (x, y).snd).snd.snd).snd.fst)
                (f'
                  ((((x, y).fst, (x, y).snd, (x, y).snd).fst.fst, ((x, y).fst, (x, y).snd, (x, y).snd).snd.fst),
                        ((x, y).fst, (x, y).snd, (x, y).snd).fst.snd,
                        ((x, y).fst, (x, y).snd, (x, y).snd).snd.snd).snd.fst
                  ((((x, y).fst, (x, y).snd, (x, y).snd).fst.fst, ((x, y).fst, (x, y).snd, (x, y).snd).snd.fst),
                        ((x, y).fst, (x, y).snd, (x, y).snd).fst.snd,
                        ((x, y).fst, (x, y).snd, (x, y).snd).snd.snd).snd.snd)
                ((((x, y).fst, (x, y).snd, (x, y).snd).fst.fst, ((x, y).fst, (x, y).snd, (x, y).snd).snd.fst),
                      ((x, y).fst, (x, y).snd, (x, y).snd).fst.snd,
                      ((x, y).fst, (x, y).snd, (x, y).snd).snd.snd).snd.snd
R : ℝ
hR : 0 < R
hR' : ∀ ⦃x_1 : E⦄, x_1 ∈ Metric.ball x R → c x_1
r : ℝ := min 1 R
⊢ ∀ᶠ (n : (ι × ι) × E) in (l ×ˢ l) ×ˢ 𝓝 x,
    dist (OfNat.ofNat 0 n.snd) (f n.fst.fst n.snd - f n.fst.snd n.snd - (f n.fst.fst x - f n.fst.snd x)) < ε
[PROOFSTEP]
have hr : 0 < r := by simp [hR]
[GOAL]
ι : Type u_1
l : Filter ι
E : Type u_2
inst✝⁴ : NormedAddCommGroup E
𝕜 : Type u_3
inst✝³ : IsROrC 𝕜
inst✝² : NormedSpace 𝕜 E
G : Type u_4
inst✝¹ : NormedAddCommGroup G
inst✝ : NormedSpace 𝕜 G
f : ι → E → G
g : E → G
f' : ι → E → E →L[𝕜] G
g' : E → E →L[𝕜] G
x : E
hf' :
  ∀ (ε : ℝ),
    ε > 0 →
      ∀ᶠ (n : (ι × ι) × E) in (l ×ˢ l) ×ˢ 𝓝 x, dist (OfNat.ofNat 0 n.snd) (f' n.fst.fst n.snd - f' n.fst.snd n.snd) < ε
hf : ∀ᶠ (n : ι × E) in l ×ˢ 𝓝 x, HasFDerivAt (f n.fst) (f' n.fst n.snd) n.snd
hfg : Cauchy (map (fun n => f n x) l)
this✝ : NormedSpace ℝ E := NormedSpace.restrictScalars ℝ 𝕜 E
ε : ℝ
hε : ε > 0
this :
  ∀ᶠ (x : (ι × ι) × E) in (l ×ˢ l) ×ˢ 𝓝 x,
    HasFDerivAt
        (f
          (((x.fst, x.snd, x.snd).fst.fst, (x.fst, x.snd, x.snd).snd.fst), (x.fst, x.snd, x.snd).fst.snd,
                (x.fst, x.snd, x.snd).snd.snd).fst.fst)
        (f'
          (((x.fst, x.snd, x.snd).fst.fst, (x.fst, x.snd, x.snd).snd.fst), (x.fst, x.snd, x.snd).fst.snd,
                (x.fst, x.snd, x.snd).snd.snd).fst.fst
          (((x.fst, x.snd, x.snd).fst.fst, (x.fst, x.snd, x.snd).snd.fst), (x.fst, x.snd, x.snd).fst.snd,
                (x.fst, x.snd, x.snd).snd.snd).fst.snd)
        (((x.fst, x.snd, x.snd).fst.fst, (x.fst, x.snd, x.snd).snd.fst), (x.fst, x.snd, x.snd).fst.snd,
              (x.fst, x.snd, x.snd).snd.snd).fst.snd ∧
      HasFDerivAt
        (f
          (((x.fst, x.snd, x.snd).fst.fst, (x.fst, x.snd, x.snd).snd.fst), (x.fst, x.snd, x.snd).fst.snd,
                (x.fst, x.snd, x.snd).snd.snd).snd.fst)
        (f'
          (((x.fst, x.snd, x.snd).fst.fst, (x.fst, x.snd, x.snd).snd.fst), (x.fst, x.snd, x.snd).fst.snd,
                (x.fst, x.snd, x.snd).snd.snd).snd.fst
          (((x.fst, x.snd, x.snd).fst.fst, (x.fst, x.snd, x.snd).snd.fst), (x.fst, x.snd, x.snd).fst.snd,
                (x.fst, x.snd, x.snd).snd.snd).snd.snd)
        (((x.fst, x.snd, x.snd).fst.fst, (x.fst, x.snd, x.snd).snd.fst), (x.fst, x.snd, x.snd).fst.snd,
              (x.fst, x.snd, x.snd).snd.snd).snd.snd
a : ι × ι → Prop
b : ∀ᶠ (x : ι × ι) in l ×ˢ l, a x
c : E → Prop
d : ∀ᶠ (y : E) in 𝓝 x, c y
e :
  ∀ {x : ι × ι},
    a x →
      ∀ {y : E},
        c y →
          dist (OfNat.ofNat 0 (x, y).snd) (f' (x, y).fst.fst (x, y).snd - f' (x, y).fst.snd (x, y).snd) < ε ∧
            HasFDerivAt
                (f
                  ((((x, y).fst, (x, y).snd, (x, y).snd).fst.fst, ((x, y).fst, (x, y).snd, (x, y).snd).snd.fst),
                        ((x, y).fst, (x, y).snd, (x, y).snd).fst.snd,
                        ((x, y).fst, (x, y).snd, (x, y).snd).snd.snd).fst.fst)
                (f'
                  ((((x, y).fst, (x, y).snd, (x, y).snd).fst.fst, ((x, y).fst, (x, y).snd, (x, y).snd).snd.fst),
                        ((x, y).fst, (x, y).snd, (x, y).snd).fst.snd,
                        ((x, y).fst, (x, y).snd, (x, y).snd).snd.snd).fst.fst
                  ((((x, y).fst, (x, y).snd, (x, y).snd).fst.fst, ((x, y).fst, (x, y).snd, (x, y).snd).snd.fst),
                        ((x, y).fst, (x, y).snd, (x, y).snd).fst.snd,
                        ((x, y).fst, (x, y).snd, (x, y).snd).snd.snd).fst.snd)
                ((((x, y).fst, (x, y).snd, (x, y).snd).fst.fst, ((x, y).fst, (x, y).snd, (x, y).snd).snd.fst),
                      ((x, y).fst, (x, y).snd, (x, y).snd).fst.snd,
                      ((x, y).fst, (x, y).snd, (x, y).snd).snd.snd).fst.snd ∧
              HasFDerivAt
                (f
                  ((((x, y).fst, (x, y).snd, (x, y).snd).fst.fst, ((x, y).fst, (x, y).snd, (x, y).snd).snd.fst),
                        ((x, y).fst, (x, y).snd, (x, y).snd).fst.snd,
                        ((x, y).fst, (x, y).snd, (x, y).snd).snd.snd).snd.fst)
                (f'
                  ((((x, y).fst, (x, y).snd, (x, y).snd).fst.fst, ((x, y).fst, (x, y).snd, (x, y).snd).snd.fst),
                        ((x, y).fst, (x, y).snd, (x, y).snd).fst.snd,
                        ((x, y).fst, (x, y).snd, (x, y).snd).snd.snd).snd.fst
                  ((((x, y).fst, (x, y).snd, (x, y).snd).fst.fst, ((x, y).fst, (x, y).snd, (x, y).snd).snd.fst),
                        ((x, y).fst, (x, y).snd, (x, y).snd).fst.snd,
                        ((x, y).fst, (x, y).snd, (x, y).snd).snd.snd).snd.snd)
                ((((x, y).fst, (x, y).snd, (x, y).snd).fst.fst, ((x, y).fst, (x, y).snd, (x, y).snd).snd.fst),
                      ((x, y).fst, (x, y).snd, (x, y).snd).fst.snd,
                      ((x, y).fst, (x, y).snd, (x, y).snd).snd.snd).snd.snd
R : ℝ
hR : 0 < R
hR' : ∀ ⦃x_1 : E⦄, x_1 ∈ Metric.ball x R → c x_1
r : ℝ := min 1 R
⊢ 0 < r
[PROOFSTEP]
simp [hR]
[GOAL]
case left.intro.intro.intro.intro.intro.intro
ι : Type u_1
l : Filter ι
E : Type u_2
inst✝⁴ : NormedAddCommGroup E
𝕜 : Type u_3
inst✝³ : IsROrC 𝕜
inst✝² : NormedSpace 𝕜 E
G : Type u_4
inst✝¹ : NormedAddCommGroup G
inst✝ : NormedSpace 𝕜 G
f : ι → E → G
g : E → G
f' : ι → E → E →L[𝕜] G
g' : E → E →L[𝕜] G
x : E
hf' :
  ∀ (ε : ℝ),
    ε > 0 →
      ∀ᶠ (n : (ι × ι) × E) in (l ×ˢ l) ×ˢ 𝓝 x, dist (OfNat.ofNat 0 n.snd) (f' n.fst.fst n.snd - f' n.fst.snd n.snd) < ε
hf : ∀ᶠ (n : ι × E) in l ×ˢ 𝓝 x, HasFDerivAt (f n.fst) (f' n.fst n.snd) n.snd
hfg : Cauchy (map (fun n => f n x) l)
this✝ : NormedSpace ℝ E := NormedSpace.restrictScalars ℝ 𝕜 E
ε : ℝ
hε : ε > 0
this :
  ∀ᶠ (x : (ι × ι) × E) in (l ×ˢ l) ×ˢ 𝓝 x,
    HasFDerivAt
        (f
          (((x.fst, x.snd, x.snd).fst.fst, (x.fst, x.snd, x.snd).snd.fst), (x.fst, x.snd, x.snd).fst.snd,
                (x.fst, x.snd, x.snd).snd.snd).fst.fst)
        (f'
          (((x.fst, x.snd, x.snd).fst.fst, (x.fst, x.snd, x.snd).snd.fst), (x.fst, x.snd, x.snd).fst.snd,
                (x.fst, x.snd, x.snd).snd.snd).fst.fst
          (((x.fst, x.snd, x.snd).fst.fst, (x.fst, x.snd, x.snd).snd.fst), (x.fst, x.snd, x.snd).fst.snd,
                (x.fst, x.snd, x.snd).snd.snd).fst.snd)
        (((x.fst, x.snd, x.snd).fst.fst, (x.fst, x.snd, x.snd).snd.fst), (x.fst, x.snd, x.snd).fst.snd,
              (x.fst, x.snd, x.snd).snd.snd).fst.snd ∧
      HasFDerivAt
        (f
          (((x.fst, x.snd, x.snd).fst.fst, (x.fst, x.snd, x.snd).snd.fst), (x.fst, x.snd, x.snd).fst.snd,
                (x.fst, x.snd, x.snd).snd.snd).snd.fst)
        (f'
          (((x.fst, x.snd, x.snd).fst.fst, (x.fst, x.snd, x.snd).snd.fst), (x.fst, x.snd, x.snd).fst.snd,
                (x.fst, x.snd, x.snd).snd.snd).snd.fst
          (((x.fst, x.snd, x.snd).fst.fst, (x.fst, x.snd, x.snd).snd.fst), (x.fst, x.snd, x.snd).fst.snd,
                (x.fst, x.snd, x.snd).snd.snd).snd.snd)
        (((x.fst, x.snd, x.snd).fst.fst, (x.fst, x.snd, x.snd).snd.fst), (x.fst, x.snd, x.snd).fst.snd,
              (x.fst, x.snd, x.snd).snd.snd).snd.snd
a : ι × ι → Prop
b : ∀ᶠ (x : ι × ι) in l ×ˢ l, a x
c : E → Prop
d : ∀ᶠ (y : E) in 𝓝 x, c y
e :
  ∀ {x : ι × ι},
    a x →
      ∀ {y : E},
        c y →
          dist (OfNat.ofNat 0 (x, y).snd) (f' (x, y).fst.fst (x, y).snd - f' (x, y).fst.snd (x, y).snd) < ε ∧
            HasFDerivAt
                (f
                  ((((x, y).fst, (x, y).snd, (x, y).snd).fst.fst, ((x, y).fst, (x, y).snd, (x, y).snd).snd.fst),
                        ((x, y).fst, (x, y).snd, (x, y).snd).fst.snd,
                        ((x, y).fst, (x, y).snd, (x, y).snd).snd.snd).fst.fst)
                (f'
                  ((((x, y).fst, (x, y).snd, (x, y).snd).fst.fst, ((x, y).fst, (x, y).snd, (x, y).snd).snd.fst),
                        ((x, y).fst, (x, y).snd, (x, y).snd).fst.snd,
                        ((x, y).fst, (x, y).snd, (x, y).snd).snd.snd).fst.fst
                  ((((x, y).fst, (x, y).snd, (x, y).snd).fst.fst, ((x, y).fst, (x, y).snd, (x, y).snd).snd.fst),
                        ((x, y).fst, (x, y).snd, (x, y).snd).fst.snd,
                        ((x, y).fst, (x, y).snd, (x, y).snd).snd.snd).fst.snd)
                ((((x, y).fst, (x, y).snd, (x, y).snd).fst.fst, ((x, y).fst, (x, y).snd, (x, y).snd).snd.fst),
                      ((x, y).fst, (x, y).snd, (x, y).snd).fst.snd,
                      ((x, y).fst, (x, y).snd, (x, y).snd).snd.snd).fst.snd ∧
              HasFDerivAt
                (f
                  ((((x, y).fst, (x, y).snd, (x, y).snd).fst.fst, ((x, y).fst, (x, y).snd, (x, y).snd).snd.fst),
                        ((x, y).fst, (x, y).snd, (x, y).snd).fst.snd,
                        ((x, y).fst, (x, y).snd, (x, y).snd).snd.snd).snd.fst)
                (f'
                  ((((x, y).fst, (x, y).snd, (x, y).snd).fst.fst, ((x, y).fst, (x, y).snd, (x, y).snd).snd.fst),
                        ((x, y).fst, (x, y).snd, (x, y).snd).fst.snd,
                        ((x, y).fst, (x, y).snd, (x, y).snd).snd.snd).snd.fst
                  ((((x, y).fst, (x, y).snd, (x, y).snd).fst.fst, ((x, y).fst, (x, y).snd, (x, y).snd).snd.fst),
                        ((x, y).fst, (x, y).snd, (x, y).snd).fst.snd,
                        ((x, y).fst, (x, y).snd, (x, y).snd).snd.snd).snd.snd)
                ((((x, y).fst, (x, y).snd, (x, y).snd).fst.fst, ((x, y).fst, (x, y).snd, (x, y).snd).snd.fst),
                      ((x, y).fst, (x, y).snd, (x, y).snd).fst.snd,
                      ((x, y).fst, (x, y).snd, (x, y).snd).snd.snd).snd.snd
R : ℝ
hR : 0 < R
hR' : ∀ ⦃x_1 : E⦄, x_1 ∈ Metric.ball x R → c x_1
r : ℝ := min 1 R
hr : 0 < r
⊢ ∀ᶠ (n : (ι × ι) × E) in (l ×ˢ l) ×ˢ 𝓝 x,
    dist (OfNat.ofNat 0 n.snd) (f n.fst.fst n.snd - f n.fst.snd n.snd - (f n.fst.fst x - f n.fst.snd x)) < ε
[PROOFSTEP]
have hr' : ∀ ⦃y : E⦄, y ∈ Metric.ball x r → c y := fun y hy =>
  hR' (lt_of_lt_of_le (Metric.mem_ball.mp hy) (min_le_right _ _))
[GOAL]
case left.intro.intro.intro.intro.intro.intro
ι : Type u_1
l : Filter ι
E : Type u_2
inst✝⁴ : NormedAddCommGroup E
𝕜 : Type u_3
inst✝³ : IsROrC 𝕜
inst✝² : NormedSpace 𝕜 E
G : Type u_4
inst✝¹ : NormedAddCommGroup G
inst✝ : NormedSpace 𝕜 G
f : ι → E → G
g : E → G
f' : ι → E → E →L[𝕜] G
g' : E → E →L[𝕜] G
x : E
hf' :
  ∀ (ε : ℝ),
    ε > 0 →
      ∀ᶠ (n : (ι × ι) × E) in (l ×ˢ l) ×ˢ 𝓝 x, dist (OfNat.ofNat 0 n.snd) (f' n.fst.fst n.snd - f' n.fst.snd n.snd) < ε
hf : ∀ᶠ (n : ι × E) in l ×ˢ 𝓝 x, HasFDerivAt (f n.fst) (f' n.fst n.snd) n.snd
hfg : Cauchy (map (fun n => f n x) l)
this✝ : NormedSpace ℝ E := NormedSpace.restrictScalars ℝ 𝕜 E
ε : ℝ
hε : ε > 0
this :
  ∀ᶠ (x : (ι × ι) × E) in (l ×ˢ l) ×ˢ 𝓝 x,
    HasFDerivAt
        (f
          (((x.fst, x.snd, x.snd).fst.fst, (x.fst, x.snd, x.snd).snd.fst), (x.fst, x.snd, x.snd).fst.snd,
                (x.fst, x.snd, x.snd).snd.snd).fst.fst)
        (f'
          (((x.fst, x.snd, x.snd).fst.fst, (x.fst, x.snd, x.snd).snd.fst), (x.fst, x.snd, x.snd).fst.snd,
                (x.fst, x.snd, x.snd).snd.snd).fst.fst
          (((x.fst, x.snd, x.snd).fst.fst, (x.fst, x.snd, x.snd).snd.fst), (x.fst, x.snd, x.snd).fst.snd,
                (x.fst, x.snd, x.snd).snd.snd).fst.snd)
        (((x.fst, x.snd, x.snd).fst.fst, (x.fst, x.snd, x.snd).snd.fst), (x.fst, x.snd, x.snd).fst.snd,
              (x.fst, x.snd, x.snd).snd.snd).fst.snd ∧
      HasFDerivAt
        (f
          (((x.fst, x.snd, x.snd).fst.fst, (x.fst, x.snd, x.snd).snd.fst), (x.fst, x.snd, x.snd).fst.snd,
                (x.fst, x.snd, x.snd).snd.snd).snd.fst)
        (f'
          (((x.fst, x.snd, x.snd).fst.fst, (x.fst, x.snd, x.snd).snd.fst), (x.fst, x.snd, x.snd).fst.snd,
                (x.fst, x.snd, x.snd).snd.snd).snd.fst
          (((x.fst, x.snd, x.snd).fst.fst, (x.fst, x.snd, x.snd).snd.fst), (x.fst, x.snd, x.snd).fst.snd,
                (x.fst, x.snd, x.snd).snd.snd).snd.snd)
        (((x.fst, x.snd, x.snd).fst.fst, (x.fst, x.snd, x.snd).snd.fst), (x.fst, x.snd, x.snd).fst.snd,
              (x.fst, x.snd, x.snd).snd.snd).snd.snd
a : ι × ι → Prop
b : ∀ᶠ (x : ι × ι) in l ×ˢ l, a x
c : E → Prop
d : ∀ᶠ (y : E) in 𝓝 x, c y
e :
  ∀ {x : ι × ι},
    a x →
      ∀ {y : E},
        c y →
          dist (OfNat.ofNat 0 (x, y).snd) (f' (x, y).fst.fst (x, y).snd - f' (x, y).fst.snd (x, y).snd) < ε ∧
            HasFDerivAt
                (f
                  ((((x, y).fst, (x, y).snd, (x, y).snd).fst.fst, ((x, y).fst, (x, y).snd, (x, y).snd).snd.fst),
                        ((x, y).fst, (x, y).snd, (x, y).snd).fst.snd,
                        ((x, y).fst, (x, y).snd, (x, y).snd).snd.snd).fst.fst)
                (f'
                  ((((x, y).fst, (x, y).snd, (x, y).snd).fst.fst, ((x, y).fst, (x, y).snd, (x, y).snd).snd.fst),
                        ((x, y).fst, (x, y).snd, (x, y).snd).fst.snd,
                        ((x, y).fst, (x, y).snd, (x, y).snd).snd.snd).fst.fst
                  ((((x, y).fst, (x, y).snd, (x, y).snd).fst.fst, ((x, y).fst, (x, y).snd, (x, y).snd).snd.fst),
                        ((x, y).fst, (x, y).snd, (x, y).snd).fst.snd,
                        ((x, y).fst, (x, y).snd, (x, y).snd).snd.snd).fst.snd)
                ((((x, y).fst, (x, y).snd, (x, y).snd).fst.fst, ((x, y).fst, (x, y).snd, (x, y).snd).snd.fst),
                      ((x, y).fst, (x, y).snd, (x, y).snd).fst.snd,
                      ((x, y).fst, (x, y).snd, (x, y).snd).snd.snd).fst.snd ∧
              HasFDerivAt
                (f
                  ((((x, y).fst, (x, y).snd, (x, y).snd).fst.fst, ((x, y).fst, (x, y).snd, (x, y).snd).snd.fst),
                        ((x, y).fst, (x, y).snd, (x, y).snd).fst.snd,
                        ((x, y).fst, (x, y).snd, (x, y).snd).snd.snd).snd.fst)
                (f'
                  ((((x, y).fst, (x, y).snd, (x, y).snd).fst.fst, ((x, y).fst, (x, y).snd, (x, y).snd).snd.fst),
                        ((x, y).fst, (x, y).snd, (x, y).snd).fst.snd,
                        ((x, y).fst, (x, y).snd, (x, y).snd).snd.snd).snd.fst
                  ((((x, y).fst, (x, y).snd, (x, y).snd).fst.fst, ((x, y).fst, (x, y).snd, (x, y).snd).snd.fst),
                        ((x, y).fst, (x, y).snd, (x, y).snd).fst.snd,
                        ((x, y).fst, (x, y).snd, (x, y).snd).snd.snd).snd.snd)
                ((((x, y).fst, (x, y).snd, (x, y).snd).fst.fst, ((x, y).fst, (x, y).snd, (x, y).snd).snd.fst),
                      ((x, y).fst, (x, y).snd, (x, y).snd).fst.snd,
                      ((x, y).fst, (x, y).snd, (x, y).snd).snd.snd).snd.snd
R : ℝ
hR : 0 < R
hR' : ∀ ⦃x_1 : E⦄, x_1 ∈ Metric.ball x R → c x_1
r : ℝ := min 1 R
hr : 0 < r
hr' : ∀ ⦃y : E⦄, y ∈ Metric.ball x r → c y
⊢ ∀ᶠ (n : (ι × ι) × E) in (l ×ˢ l) ×ˢ 𝓝 x,
    dist (OfNat.ofNat 0 n.snd) (f n.fst.fst n.snd - f n.fst.snd n.snd - (f n.fst.fst x - f n.fst.snd x)) < ε
[PROOFSTEP]
have hxy : ∀ y : E, y ∈ Metric.ball x r → ‖y - x‖ < 1 :=
  by
  intro y hy
  rw [Metric.mem_ball, dist_eq_norm] at hy
  exact lt_of_lt_of_le hy (min_le_left _ _)
[GOAL]
ι : Type u_1
l : Filter ι
E : Type u_2
inst✝⁴ : NormedAddCommGroup E
𝕜 : Type u_3
inst✝³ : IsROrC 𝕜
inst✝² : NormedSpace 𝕜 E
G : Type u_4
inst✝¹ : NormedAddCommGroup G
inst✝ : NormedSpace 𝕜 G
f : ι → E → G
g : E → G
f' : ι → E → E →L[𝕜] G
g' : E → E →L[𝕜] G
x : E
hf' :
  ∀ (ε : ℝ),
    ε > 0 →
      ∀ᶠ (n : (ι × ι) × E) in (l ×ˢ l) ×ˢ 𝓝 x, dist (OfNat.ofNat 0 n.snd) (f' n.fst.fst n.snd - f' n.fst.snd n.snd) < ε
hf : ∀ᶠ (n : ι × E) in l ×ˢ 𝓝 x, HasFDerivAt (f n.fst) (f' n.fst n.snd) n.snd
hfg : Cauchy (map (fun n => f n x) l)
this✝ : NormedSpace ℝ E := NormedSpace.restrictScalars ℝ 𝕜 E
ε : ℝ
hε : ε > 0
this :
  ∀ᶠ (x : (ι × ι) × E) in (l ×ˢ l) ×ˢ 𝓝 x,
    HasFDerivAt
        (f
          (((x.fst, x.snd, x.snd).fst.fst, (x.fst, x.snd, x.snd).snd.fst), (x.fst, x.snd, x.snd).fst.snd,
                (x.fst, x.snd, x.snd).snd.snd).fst.fst)
        (f'
          (((x.fst, x.snd, x.snd).fst.fst, (x.fst, x.snd, x.snd).snd.fst), (x.fst, x.snd, x.snd).fst.snd,
                (x.fst, x.snd, x.snd).snd.snd).fst.fst
          (((x.fst, x.snd, x.snd).fst.fst, (x.fst, x.snd, x.snd).snd.fst), (x.fst, x.snd, x.snd).fst.snd,
                (x.fst, x.snd, x.snd).snd.snd).fst.snd)
        (((x.fst, x.snd, x.snd).fst.fst, (x.fst, x.snd, x.snd).snd.fst), (x.fst, x.snd, x.snd).fst.snd,
              (x.fst, x.snd, x.snd).snd.snd).fst.snd ∧
      HasFDerivAt
        (f
          (((x.fst, x.snd, x.snd).fst.fst, (x.fst, x.snd, x.snd).snd.fst), (x.fst, x.snd, x.snd).fst.snd,
                (x.fst, x.snd, x.snd).snd.snd).snd.fst)
        (f'
          (((x.fst, x.snd, x.snd).fst.fst, (x.fst, x.snd, x.snd).snd.fst), (x.fst, x.snd, x.snd).fst.snd,
                (x.fst, x.snd, x.snd).snd.snd).snd.fst
          (((x.fst, x.snd, x.snd).fst.fst, (x.fst, x.snd, x.snd).snd.fst), (x.fst, x.snd, x.snd).fst.snd,
                (x.fst, x.snd, x.snd).snd.snd).snd.snd)
        (((x.fst, x.snd, x.snd).fst.fst, (x.fst, x.snd, x.snd).snd.fst), (x.fst, x.snd, x.snd).fst.snd,
              (x.fst, x.snd, x.snd).snd.snd).snd.snd
a : ι × ι → Prop
b : ∀ᶠ (x : ι × ι) in l ×ˢ l, a x
c : E → Prop
d : ∀ᶠ (y : E) in 𝓝 x, c y
e :
  ∀ {x : ι × ι},
    a x →
      ∀ {y : E},
        c y →
          dist (OfNat.ofNat 0 (x, y).snd) (f' (x, y).fst.fst (x, y).snd - f' (x, y).fst.snd (x, y).snd) < ε ∧
            HasFDerivAt
                (f
                  ((((x, y).fst, (x, y).snd, (x, y).snd).fst.fst, ((x, y).fst, (x, y).snd, (x, y).snd).snd.fst),
                        ((x, y).fst, (x, y).snd, (x, y).snd).fst.snd,
                        ((x, y).fst, (x, y).snd, (x, y).snd).snd.snd).fst.fst)
                (f'
                  ((((x, y).fst, (x, y).snd, (x, y).snd).fst.fst, ((x, y).fst, (x, y).snd, (x, y).snd).snd.fst),
                        ((x, y).fst, (x, y).snd, (x, y).snd).fst.snd,
                        ((x, y).fst, (x, y).snd, (x, y).snd).snd.snd).fst.fst
                  ((((x, y).fst, (x, y).snd, (x, y).snd).fst.fst, ((x, y).fst, (x, y).snd, (x, y).snd).snd.fst),
                        ((x, y).fst, (x, y).snd, (x, y).snd).fst.snd,
                        ((x, y).fst, (x, y).snd, (x, y).snd).snd.snd).fst.snd)
                ((((x, y).fst, (x, y).snd, (x, y).snd).fst.fst, ((x, y).fst, (x, y).snd, (x, y).snd).snd.fst),
                      ((x, y).fst, (x, y).snd, (x, y).snd).fst.snd,
                      ((x, y).fst, (x, y).snd, (x, y).snd).snd.snd).fst.snd ∧
              HasFDerivAt
                (f
                  ((((x, y).fst, (x, y).snd, (x, y).snd).fst.fst, ((x, y).fst, (x, y).snd, (x, y).snd).snd.fst),
                        ((x, y).fst, (x, y).snd, (x, y).snd).fst.snd,
                        ((x, y).fst, (x, y).snd, (x, y).snd).snd.snd).snd.fst)
                (f'
                  ((((x, y).fst, (x, y).snd, (x, y).snd).fst.fst, ((x, y).fst, (x, y).snd, (x, y).snd).snd.fst),
                        ((x, y).fst, (x, y).snd, (x, y).snd).fst.snd,
                        ((x, y).fst, (x, y).snd, (x, y).snd).snd.snd).snd.fst
                  ((((x, y).fst, (x, y).snd, (x, y).snd).fst.fst, ((x, y).fst, (x, y).snd, (x, y).snd).snd.fst),
                        ((x, y).fst, (x, y).snd, (x, y).snd).fst.snd,
                        ((x, y).fst, (x, y).snd, (x, y).snd).snd.snd).snd.snd)
                ((((x, y).fst, (x, y).snd, (x, y).snd).fst.fst, ((x, y).fst, (x, y).snd, (x, y).snd).snd.fst),
                      ((x, y).fst, (x, y).snd, (x, y).snd).fst.snd,
                      ((x, y).fst, (x, y).snd, (x, y).snd).snd.snd).snd.snd
R : ℝ
hR : 0 < R
hR' : ∀ ⦃x_1 : E⦄, x_1 ∈ Metric.ball x R → c x_1
r : ℝ := min 1 R
hr : 0 < r
hr' : ∀ ⦃y : E⦄, y ∈ Metric.ball x r → c y
⊢ ∀ (y : E), y ∈ Metric.ball x r → ‖y - x‖ < 1
[PROOFSTEP]
intro y hy
[GOAL]
ι : Type u_1
l : Filter ι
E : Type u_2
inst✝⁴ : NormedAddCommGroup E
𝕜 : Type u_3
inst✝³ : IsROrC 𝕜
inst✝² : NormedSpace 𝕜 E
G : Type u_4
inst✝¹ : NormedAddCommGroup G
inst✝ : NormedSpace 𝕜 G
f : ι → E → G
g : E → G
f' : ι → E → E →L[𝕜] G
g' : E → E →L[𝕜] G
x : E
hf' :
  ∀ (ε : ℝ),
    ε > 0 →
      ∀ᶠ (n : (ι × ι) × E) in (l ×ˢ l) ×ˢ 𝓝 x, dist (OfNat.ofNat 0 n.snd) (f' n.fst.fst n.snd - f' n.fst.snd n.snd) < ε
hf : ∀ᶠ (n : ι × E) in l ×ˢ 𝓝 x, HasFDerivAt (f n.fst) (f' n.fst n.snd) n.snd
hfg : Cauchy (map (fun n => f n x) l)
this✝ : NormedSpace ℝ E := NormedSpace.restrictScalars ℝ 𝕜 E
ε : ℝ
hε : ε > 0
this :
  ∀ᶠ (x : (ι × ι) × E) in (l ×ˢ l) ×ˢ 𝓝 x,
    HasFDerivAt
        (f
          (((x.fst, x.snd, x.snd).fst.fst, (x.fst, x.snd, x.snd).snd.fst), (x.fst, x.snd, x.snd).fst.snd,
                (x.fst, x.snd, x.snd).snd.snd).fst.fst)
        (f'
          (((x.fst, x.snd, x.snd).fst.fst, (x.fst, x.snd, x.snd).snd.fst), (x.fst, x.snd, x.snd).fst.snd,
                (x.fst, x.snd, x.snd).snd.snd).fst.fst
          (((x.fst, x.snd, x.snd).fst.fst, (x.fst, x.snd, x.snd).snd.fst), (x.fst, x.snd, x.snd).fst.snd,
                (x.fst, x.snd, x.snd).snd.snd).fst.snd)
        (((x.fst, x.snd, x.snd).fst.fst, (x.fst, x.snd, x.snd).snd.fst), (x.fst, x.snd, x.snd).fst.snd,
              (x.fst, x.snd, x.snd).snd.snd).fst.snd ∧
      HasFDerivAt
        (f
          (((x.fst, x.snd, x.snd).fst.fst, (x.fst, x.snd, x.snd).snd.fst), (x.fst, x.snd, x.snd).fst.snd,
                (x.fst, x.snd, x.snd).snd.snd).snd.fst)
        (f'
          (((x.fst, x.snd, x.snd).fst.fst, (x.fst, x.snd, x.snd).snd.fst), (x.fst, x.snd, x.snd).fst.snd,
                (x.fst, x.snd, x.snd).snd.snd).snd.fst
          (((x.fst, x.snd, x.snd).fst.fst, (x.fst, x.snd, x.snd).snd.fst), (x.fst, x.snd, x.snd).fst.snd,
                (x.fst, x.snd, x.snd).snd.snd).snd.snd)
        (((x.fst, x.snd, x.snd).fst.fst, (x.fst, x.snd, x.snd).snd.fst), (x.fst, x.snd, x.snd).fst.snd,
              (x.fst, x.snd, x.snd).snd.snd).snd.snd
a : ι × ι → Prop
b : ∀ᶠ (x : ι × ι) in l ×ˢ l, a x
c : E → Prop
d : ∀ᶠ (y : E) in 𝓝 x, c y
e :
  ∀ {x : ι × ι},
    a x →
      ∀ {y : E},
        c y →
          dist (OfNat.ofNat 0 (x, y).snd) (f' (x, y).fst.fst (x, y).snd - f' (x, y).fst.snd (x, y).snd) < ε ∧
            HasFDerivAt
                (f
                  ((((x, y).fst, (x, y).snd, (x, y).snd).fst.fst, ((x, y).fst, (x, y).snd, (x, y).snd).snd.fst),
                        ((x, y).fst, (x, y).snd, (x, y).snd).fst.snd,
                        ((x, y).fst, (x, y).snd, (x, y).snd).snd.snd).fst.fst)
                (f'
                  ((((x, y).fst, (x, y).snd, (x, y).snd).fst.fst, ((x, y).fst, (x, y).snd, (x, y).snd).snd.fst),
                        ((x, y).fst, (x, y).snd, (x, y).snd).fst.snd,
                        ((x, y).fst, (x, y).snd, (x, y).snd).snd.snd).fst.fst
                  ((((x, y).fst, (x, y).snd, (x, y).snd).fst.fst, ((x, y).fst, (x, y).snd, (x, y).snd).snd.fst),
                        ((x, y).fst, (x, y).snd, (x, y).snd).fst.snd,
                        ((x, y).fst, (x, y).snd, (x, y).snd).snd.snd).fst.snd)
                ((((x, y).fst, (x, y).snd, (x, y).snd).fst.fst, ((x, y).fst, (x, y).snd, (x, y).snd).snd.fst),
                      ((x, y).fst, (x, y).snd, (x, y).snd).fst.snd,
                      ((x, y).fst, (x, y).snd, (x, y).snd).snd.snd).fst.snd ∧
              HasFDerivAt
                (f
                  ((((x, y).fst, (x, y).snd, (x, y).snd).fst.fst, ((x, y).fst, (x, y).snd, (x, y).snd).snd.fst),
                        ((x, y).fst, (x, y).snd, (x, y).snd).fst.snd,
                        ((x, y).fst, (x, y).snd, (x, y).snd).snd.snd).snd.fst)
                (f'
                  ((((x, y).fst, (x, y).snd, (x, y).snd).fst.fst, ((x, y).fst, (x, y).snd, (x, y).snd).snd.fst),
                        ((x, y).fst, (x, y).snd, (x, y).snd).fst.snd,
                        ((x, y).fst, (x, y).snd, (x, y).snd).snd.snd).snd.fst
                  ((((x, y).fst, (x, y).snd, (x, y).snd).fst.fst, ((x, y).fst, (x, y).snd, (x, y).snd).snd.fst),
                        ((x, y).fst, (x, y).snd, (x, y).snd).fst.snd,
                        ((x, y).fst, (x, y).snd, (x, y).snd).snd.snd).snd.snd)
                ((((x, y).fst, (x, y).snd, (x, y).snd).fst.fst, ((x, y).fst, (x, y).snd, (x, y).snd).snd.fst),
                      ((x, y).fst, (x, y).snd, (x, y).snd).fst.snd,
                      ((x, y).fst, (x, y).snd, (x, y).snd).snd.snd).snd.snd
R : ℝ
hR : 0 < R
hR' : ∀ ⦃x_1 : E⦄, x_1 ∈ Metric.ball x R → c x_1
r : ℝ := min 1 R
hr : 0 < r
hr' : ∀ ⦃y : E⦄, y ∈ Metric.ball x r → c y
y : E
hy : y ∈ Metric.ball x r
⊢ ‖y - x‖ < 1
[PROOFSTEP]
rw [Metric.mem_ball, dist_eq_norm] at hy
[GOAL]
ι : Type u_1
l : Filter ι
E : Type u_2
inst✝⁴ : NormedAddCommGroup E
𝕜 : Type u_3
inst✝³ : IsROrC 𝕜
inst✝² : NormedSpace 𝕜 E
G : Type u_4
inst✝¹ : NormedAddCommGroup G
inst✝ : NormedSpace 𝕜 G
f : ι → E → G
g : E → G
f' : ι → E → E →L[𝕜] G
g' : E → E →L[𝕜] G
x : E
hf' :
  ∀ (ε : ℝ),
    ε > 0 →
      ∀ᶠ (n : (ι × ι) × E) in (l ×ˢ l) ×ˢ 𝓝 x, dist (OfNat.ofNat 0 n.snd) (f' n.fst.fst n.snd - f' n.fst.snd n.snd) < ε
hf : ∀ᶠ (n : ι × E) in l ×ˢ 𝓝 x, HasFDerivAt (f n.fst) (f' n.fst n.snd) n.snd
hfg : Cauchy (map (fun n => f n x) l)
this✝ : NormedSpace ℝ E := NormedSpace.restrictScalars ℝ 𝕜 E
ε : ℝ
hε : ε > 0
this :
  ∀ᶠ (x : (ι × ι) × E) in (l ×ˢ l) ×ˢ 𝓝 x,
    HasFDerivAt
        (f
          (((x.fst, x.snd, x.snd).fst.fst, (x.fst, x.snd, x.snd).snd.fst), (x.fst, x.snd, x.snd).fst.snd,
                (x.fst, x.snd, x.snd).snd.snd).fst.fst)
        (f'
          (((x.fst, x.snd, x.snd).fst.fst, (x.fst, x.snd, x.snd).snd.fst), (x.fst, x.snd, x.snd).fst.snd,
                (x.fst, x.snd, x.snd).snd.snd).fst.fst
          (((x.fst, x.snd, x.snd).fst.fst, (x.fst, x.snd, x.snd).snd.fst), (x.fst, x.snd, x.snd).fst.snd,
                (x.fst, x.snd, x.snd).snd.snd).fst.snd)
        (((x.fst, x.snd, x.snd).fst.fst, (x.fst, x.snd, x.snd).snd.fst), (x.fst, x.snd, x.snd).fst.snd,
              (x.fst, x.snd, x.snd).snd.snd).fst.snd ∧
      HasFDerivAt
        (f
          (((x.fst, x.snd, x.snd).fst.fst, (x.fst, x.snd, x.snd).snd.fst), (x.fst, x.snd, x.snd).fst.snd,
                (x.fst, x.snd, x.snd).snd.snd).snd.fst)
        (f'
          (((x.fst, x.snd, x.snd).fst.fst, (x.fst, x.snd, x.snd).snd.fst), (x.fst, x.snd, x.snd).fst.snd,
                (x.fst, x.snd, x.snd).snd.snd).snd.fst
          (((x.fst, x.snd, x.snd).fst.fst, (x.fst, x.snd, x.snd).snd.fst), (x.fst, x.snd, x.snd).fst.snd,
                (x.fst, x.snd, x.snd).snd.snd).snd.snd)
        (((x.fst, x.snd, x.snd).fst.fst, (x.fst, x.snd, x.snd).snd.fst), (x.fst, x.snd, x.snd).fst.snd,
              (x.fst, x.snd, x.snd).snd.snd).snd.snd
a : ι × ι → Prop
b : ∀ᶠ (x : ι × ι) in l ×ˢ l, a x
c : E → Prop
d : ∀ᶠ (y : E) in 𝓝 x, c y
e :
  ∀ {x : ι × ι},
    a x →
      ∀ {y : E},
        c y →
          dist (OfNat.ofNat 0 (x, y).snd) (f' (x, y).fst.fst (x, y).snd - f' (x, y).fst.snd (x, y).snd) < ε ∧
            HasFDerivAt
                (f
                  ((((x, y).fst, (x, y).snd, (x, y).snd).fst.fst, ((x, y).fst, (x, y).snd, (x, y).snd).snd.fst),
                        ((x, y).fst, (x, y).snd, (x, y).snd).fst.snd,
                        ((x, y).fst, (x, y).snd, (x, y).snd).snd.snd).fst.fst)
                (f'
                  ((((x, y).fst, (x, y).snd, (x, y).snd).fst.fst, ((x, y).fst, (x, y).snd, (x, y).snd).snd.fst),
                        ((x, y).fst, (x, y).snd, (x, y).snd).fst.snd,
                        ((x, y).fst, (x, y).snd, (x, y).snd).snd.snd).fst.fst
                  ((((x, y).fst, (x, y).snd, (x, y).snd).fst.fst, ((x, y).fst, (x, y).snd, (x, y).snd).snd.fst),
                        ((x, y).fst, (x, y).snd, (x, y).snd).fst.snd,
                        ((x, y).fst, (x, y).snd, (x, y).snd).snd.snd).fst.snd)
                ((((x, y).fst, (x, y).snd, (x, y).snd).fst.fst, ((x, y).fst, (x, y).snd, (x, y).snd).snd.fst),
                      ((x, y).fst, (x, y).snd, (x, y).snd).fst.snd,
                      ((x, y).fst, (x, y).snd, (x, y).snd).snd.snd).fst.snd ∧
              HasFDerivAt
                (f
                  ((((x, y).fst, (x, y).snd, (x, y).snd).fst.fst, ((x, y).fst, (x, y).snd, (x, y).snd).snd.fst),
                        ((x, y).fst, (x, y).snd, (x, y).snd).fst.snd,
                        ((x, y).fst, (x, y).snd, (x, y).snd).snd.snd).snd.fst)
                (f'
                  ((((x, y).fst, (x, y).snd, (x, y).snd).fst.fst, ((x, y).fst, (x, y).snd, (x, y).snd).snd.fst),
                        ((x, y).fst, (x, y).snd, (x, y).snd).fst.snd,
                        ((x, y).fst, (x, y).snd, (x, y).snd).snd.snd).snd.fst
                  ((((x, y).fst, (x, y).snd, (x, y).snd).fst.fst, ((x, y).fst, (x, y).snd, (x, y).snd).snd.fst),
                        ((x, y).fst, (x, y).snd, (x, y).snd).fst.snd,
                        ((x, y).fst, (x, y).snd, (x, y).snd).snd.snd).snd.snd)
                ((((x, y).fst, (x, y).snd, (x, y).snd).fst.fst, ((x, y).fst, (x, y).snd, (x, y).snd).snd.fst),
                      ((x, y).fst, (x, y).snd, (x, y).snd).fst.snd,
                      ((x, y).fst, (x, y).snd, (x, y).snd).snd.snd).snd.snd
R : ℝ
hR : 0 < R
hR' : ∀ ⦃x_1 : E⦄, x_1 ∈ Metric.ball x R → c x_1
r : ℝ := min 1 R
hr : 0 < r
hr' : ∀ ⦃y : E⦄, y ∈ Metric.ball x r → c y
y : E
hy : ‖y - x‖ < r
⊢ ‖y - x‖ < 1
[PROOFSTEP]
exact lt_of_lt_of_le hy (min_le_left _ _)
[GOAL]
case left.intro.intro.intro.intro.intro.intro
ι : Type u_1
l : Filter ι
E : Type u_2
inst✝⁴ : NormedAddCommGroup E
𝕜 : Type u_3
inst✝³ : IsROrC 𝕜
inst✝² : NormedSpace 𝕜 E
G : Type u_4
inst✝¹ : NormedAddCommGroup G
inst✝ : NormedSpace 𝕜 G
f : ι → E → G
g : E → G
f' : ι → E → E →L[𝕜] G
g' : E → E →L[𝕜] G
x : E
hf' :
  ∀ (ε : ℝ),
    ε > 0 →
      ∀ᶠ (n : (ι × ι) × E) in (l ×ˢ l) ×ˢ 𝓝 x, dist (OfNat.ofNat 0 n.snd) (f' n.fst.fst n.snd - f' n.fst.snd n.snd) < ε
hf : ∀ᶠ (n : ι × E) in l ×ˢ 𝓝 x, HasFDerivAt (f n.fst) (f' n.fst n.snd) n.snd
hfg : Cauchy (map (fun n => f n x) l)
this✝ : NormedSpace ℝ E := NormedSpace.restrictScalars ℝ 𝕜 E
ε : ℝ
hε : ε > 0
this :
  ∀ᶠ (x : (ι × ι) × E) in (l ×ˢ l) ×ˢ 𝓝 x,
    HasFDerivAt
        (f
          (((x.fst, x.snd, x.snd).fst.fst, (x.fst, x.snd, x.snd).snd.fst), (x.fst, x.snd, x.snd).fst.snd,
                (x.fst, x.snd, x.snd).snd.snd).fst.fst)
        (f'
          (((x.fst, x.snd, x.snd).fst.fst, (x.fst, x.snd, x.snd).snd.fst), (x.fst, x.snd, x.snd).fst.snd,
                (x.fst, x.snd, x.snd).snd.snd).fst.fst
          (((x.fst, x.snd, x.snd).fst.fst, (x.fst, x.snd, x.snd).snd.fst), (x.fst, x.snd, x.snd).fst.snd,
                (x.fst, x.snd, x.snd).snd.snd).fst.snd)
        (((x.fst, x.snd, x.snd).fst.fst, (x.fst, x.snd, x.snd).snd.fst), (x.fst, x.snd, x.snd).fst.snd,
              (x.fst, x.snd, x.snd).snd.snd).fst.snd ∧
      HasFDerivAt
        (f
          (((x.fst, x.snd, x.snd).fst.fst, (x.fst, x.snd, x.snd).snd.fst), (x.fst, x.snd, x.snd).fst.snd,
                (x.fst, x.snd, x.snd).snd.snd).snd.fst)
        (f'
          (((x.fst, x.snd, x.snd).fst.fst, (x.fst, x.snd, x.snd).snd.fst), (x.fst, x.snd, x.snd).fst.snd,
                (x.fst, x.snd, x.snd).snd.snd).snd.fst
          (((x.fst, x.snd, x.snd).fst.fst, (x.fst, x.snd, x.snd).snd.fst), (x.fst, x.snd, x.snd).fst.snd,
                (x.fst, x.snd, x.snd).snd.snd).snd.snd)
        (((x.fst, x.snd, x.snd).fst.fst, (x.fst, x.snd, x.snd).snd.fst), (x.fst, x.snd, x.snd).fst.snd,
              (x.fst, x.snd, x.snd).snd.snd).snd.snd
a : ι × ι → Prop
b : ∀ᶠ (x : ι × ι) in l ×ˢ l, a x
c : E → Prop
d : ∀ᶠ (y : E) in 𝓝 x, c y
e :
  ∀ {x : ι × ι},
    a x →
      ∀ {y : E},
        c y →
          dist (OfNat.ofNat 0 (x, y).snd) (f' (x, y).fst.fst (x, y).snd - f' (x, y).fst.snd (x, y).snd) < ε ∧
            HasFDerivAt
                (f
                  ((((x, y).fst, (x, y).snd, (x, y).snd).fst.fst, ((x, y).fst, (x, y).snd, (x, y).snd).snd.fst),
                        ((x, y).fst, (x, y).snd, (x, y).snd).fst.snd,
                        ((x, y).fst, (x, y).snd, (x, y).snd).snd.snd).fst.fst)
                (f'
                  ((((x, y).fst, (x, y).snd, (x, y).snd).fst.fst, ((x, y).fst, (x, y).snd, (x, y).snd).snd.fst),
                        ((x, y).fst, (x, y).snd, (x, y).snd).fst.snd,
                        ((x, y).fst, (x, y).snd, (x, y).snd).snd.snd).fst.fst
                  ((((x, y).fst, (x, y).snd, (x, y).snd).fst.fst, ((x, y).fst, (x, y).snd, (x, y).snd).snd.fst),
                        ((x, y).fst, (x, y).snd, (x, y).snd).fst.snd,
                        ((x, y).fst, (x, y).snd, (x, y).snd).snd.snd).fst.snd)
                ((((x, y).fst, (x, y).snd, (x, y).snd).fst.fst, ((x, y).fst, (x, y).snd, (x, y).snd).snd.fst),
                      ((x, y).fst, (x, y).snd, (x, y).snd).fst.snd,
                      ((x, y).fst, (x, y).snd, (x, y).snd).snd.snd).fst.snd ∧
              HasFDerivAt
                (f
                  ((((x, y).fst, (x, y).snd, (x, y).snd).fst.fst, ((x, y).fst, (x, y).snd, (x, y).snd).snd.fst),
                        ((x, y).fst, (x, y).snd, (x, y).snd).fst.snd,
                        ((x, y).fst, (x, y).snd, (x, y).snd).snd.snd).snd.fst)
                (f'
                  ((((x, y).fst, (x, y).snd, (x, y).snd).fst.fst, ((x, y).fst, (x, y).snd, (x, y).snd).snd.fst),
                        ((x, y).fst, (x, y).snd, (x, y).snd).fst.snd,
                        ((x, y).fst, (x, y).snd, (x, y).snd).snd.snd).snd.fst
                  ((((x, y).fst, (x, y).snd, (x, y).snd).fst.fst, ((x, y).fst, (x, y).snd, (x, y).snd).snd.fst),
                        ((x, y).fst, (x, y).snd, (x, y).snd).fst.snd,
                        ((x, y).fst, (x, y).snd, (x, y).snd).snd.snd).snd.snd)
                ((((x, y).fst, (x, y).snd, (x, y).snd).fst.fst, ((x, y).fst, (x, y).snd, (x, y).snd).snd.fst),
                      ((x, y).fst, (x, y).snd, (x, y).snd).fst.snd,
                      ((x, y).fst, (x, y).snd, (x, y).snd).snd.snd).snd.snd
R : ℝ
hR : 0 < R
hR' : ∀ ⦃x_1 : E⦄, x_1 ∈ Metric.ball x R → c x_1
r : ℝ := min 1 R
hr : 0 < r
hr' : ∀ ⦃y : E⦄, y ∈ Metric.ball x r → c y
hxy : ∀ (y : E), y ∈ Metric.ball x r → ‖y - x‖ < 1
⊢ ∀ᶠ (n : (ι × ι) × E) in (l ×ˢ l) ×ˢ 𝓝 x,
    dist (OfNat.ofNat 0 n.snd) (f n.fst.fst n.snd - f n.fst.snd n.snd - (f n.fst.fst x - f n.fst.snd x)) < ε
[PROOFSTEP]
have hxyε : ∀ y : E, y ∈ Metric.ball x r → ε * ‖y - x‖ < ε :=
  by
  intro y hy
  exact
    (mul_lt_iff_lt_one_right hε.lt).mpr
      (hxy y hy)
        -- With a small ball in hand, apply the mean value theorem
[GOAL]
ι : Type u_1
l : Filter ι
E : Type u_2
inst✝⁴ : NormedAddCommGroup E
𝕜 : Type u_3
inst✝³ : IsROrC 𝕜
inst✝² : NormedSpace 𝕜 E
G : Type u_4
inst✝¹ : NormedAddCommGroup G
inst✝ : NormedSpace 𝕜 G
f : ι → E → G
g : E → G
f' : ι → E → E →L[𝕜] G
g' : E → E →L[𝕜] G
x : E
hf' :
  ∀ (ε : ℝ),
    ε > 0 →
      ∀ᶠ (n : (ι × ι) × E) in (l ×ˢ l) ×ˢ 𝓝 x, dist (OfNat.ofNat 0 n.snd) (f' n.fst.fst n.snd - f' n.fst.snd n.snd) < ε
hf : ∀ᶠ (n : ι × E) in l ×ˢ 𝓝 x, HasFDerivAt (f n.fst) (f' n.fst n.snd) n.snd
hfg : Cauchy (map (fun n => f n x) l)
this✝ : NormedSpace ℝ E := NormedSpace.restrictScalars ℝ 𝕜 E
ε : ℝ
hε : ε > 0
this :
  ∀ᶠ (x : (ι × ι) × E) in (l ×ˢ l) ×ˢ 𝓝 x,
    HasFDerivAt
        (f
          (((x.fst, x.snd, x.snd).fst.fst, (x.fst, x.snd, x.snd).snd.fst), (x.fst, x.snd, x.snd).fst.snd,
                (x.fst, x.snd, x.snd).snd.snd).fst.fst)
        (f'
          (((x.fst, x.snd, x.snd).fst.fst, (x.fst, x.snd, x.snd).snd.fst), (x.fst, x.snd, x.snd).fst.snd,
                (x.fst, x.snd, x.snd).snd.snd).fst.fst
          (((x.fst, x.snd, x.snd).fst.fst, (x.fst, x.snd, x.snd).snd.fst), (x.fst, x.snd, x.snd).fst.snd,
                (x.fst, x.snd, x.snd).snd.snd).fst.snd)
        (((x.fst, x.snd, x.snd).fst.fst, (x.fst, x.snd, x.snd).snd.fst), (x.fst, x.snd, x.snd).fst.snd,
              (x.fst, x.snd, x.snd).snd.snd).fst.snd ∧
      HasFDerivAt
        (f
          (((x.fst, x.snd, x.snd).fst.fst, (x.fst, x.snd, x.snd).snd.fst), (x.fst, x.snd, x.snd).fst.snd,
                (x.fst, x.snd, x.snd).snd.snd).snd.fst)
        (f'
          (((x.fst, x.snd, x.snd).fst.fst, (x.fst, x.snd, x.snd).snd.fst), (x.fst, x.snd, x.snd).fst.snd,
                (x.fst, x.snd, x.snd).snd.snd).snd.fst
          (((x.fst, x.snd, x.snd).fst.fst, (x.fst, x.snd, x.snd).snd.fst), (x.fst, x.snd, x.snd).fst.snd,
                (x.fst, x.snd, x.snd).snd.snd).snd.snd)
        (((x.fst, x.snd, x.snd).fst.fst, (x.fst, x.snd, x.snd).snd.fst), (x.fst, x.snd, x.snd).fst.snd,
              (x.fst, x.snd, x.snd).snd.snd).snd.snd
a : ι × ι → Prop
b : ∀ᶠ (x : ι × ι) in l ×ˢ l, a x
c : E → Prop
d : ∀ᶠ (y : E) in 𝓝 x, c y
e :
  ∀ {x : ι × ι},
    a x →
      ∀ {y : E},
        c y →
          dist (OfNat.ofNat 0 (x, y).snd) (f' (x, y).fst.fst (x, y).snd - f' (x, y).fst.snd (x, y).snd) < ε ∧
            HasFDerivAt
                (f
                  ((((x, y).fst, (x, y).snd, (x, y).snd).fst.fst, ((x, y).fst, (x, y).snd, (x, y).snd).snd.fst),
                        ((x, y).fst, (x, y).snd, (x, y).snd).fst.snd,
                        ((x, y).fst, (x, y).snd, (x, y).snd).snd.snd).fst.fst)
                (f'
                  ((((x, y).fst, (x, y).snd, (x, y).snd).fst.fst, ((x, y).fst, (x, y).snd, (x, y).snd).snd.fst),
                        ((x, y).fst, (x, y).snd, (x, y).snd).fst.snd,
                        ((x, y).fst, (x, y).snd, (x, y).snd).snd.snd).fst.fst
                  ((((x, y).fst, (x, y).snd, (x, y).snd).fst.fst, ((x, y).fst, (x, y).snd, (x, y).snd).snd.fst),
                        ((x, y).fst, (x, y).snd, (x, y).snd).fst.snd,
                        ((x, y).fst, (x, y).snd, (x, y).snd).snd.snd).fst.snd)
                ((((x, y).fst, (x, y).snd, (x, y).snd).fst.fst, ((x, y).fst, (x, y).snd, (x, y).snd).snd.fst),
                      ((x, y).fst, (x, y).snd, (x, y).snd).fst.snd,
                      ((x, y).fst, (x, y).snd, (x, y).snd).snd.snd).fst.snd ∧
              HasFDerivAt
                (f
                  ((((x, y).fst, (x, y).snd, (x, y).snd).fst.fst, ((x, y).fst, (x, y).snd, (x, y).snd).snd.fst),
                        ((x, y).fst, (x, y).snd, (x, y).snd).fst.snd,
                        ((x, y).fst, (x, y).snd, (x, y).snd).snd.snd).snd.fst)
                (f'
                  ((((x, y).fst, (x, y).snd, (x, y).snd).fst.fst, ((x, y).fst, (x, y).snd, (x, y).snd).snd.fst),
                        ((x, y).fst, (x, y).snd, (x, y).snd).fst.snd,
                        ((x, y).fst, (x, y).snd, (x, y).snd).snd.snd).snd.fst
                  ((((x, y).fst, (x, y).snd, (x, y).snd).fst.fst, ((x, y).fst, (x, y).snd, (x, y).snd).snd.fst),
                        ((x, y).fst, (x, y).snd, (x, y).snd).fst.snd,
                        ((x, y).fst, (x, y).snd, (x, y).snd).snd.snd).snd.snd)
                ((((x, y).fst, (x, y).snd, (x, y).snd).fst.fst, ((x, y).fst, (x, y).snd, (x, y).snd).snd.fst),
                      ((x, y).fst, (x, y).snd, (x, y).snd).fst.snd,
                      ((x, y).fst, (x, y).snd, (x, y).snd).snd.snd).snd.snd
R : ℝ
hR : 0 < R
hR' : ∀ ⦃x_1 : E⦄, x_1 ∈ Metric.ball x R → c x_1
r : ℝ := min 1 R
hr : 0 < r
hr' : ∀ ⦃y : E⦄, y ∈ Metric.ball x r → c y
hxy : ∀ (y : E), y ∈ Metric.ball x r → ‖y - x‖ < 1
⊢ ∀ (y : E), y ∈ Metric.ball x r → ε * ‖y - x‖ < ε
[PROOFSTEP]
intro y hy
[GOAL]
ι : Type u_1
l : Filter ι
E : Type u_2
inst✝⁴ : NormedAddCommGroup E
𝕜 : Type u_3
inst✝³ : IsROrC 𝕜
inst✝² : NormedSpace 𝕜 E
G : Type u_4
inst✝¹ : NormedAddCommGroup G
inst✝ : NormedSpace 𝕜 G
f : ι → E → G
g : E → G
f' : ι → E → E →L[𝕜] G
g' : E → E →L[𝕜] G
x : E
hf' :
  ∀ (ε : ℝ),
    ε > 0 →
      ∀ᶠ (n : (ι × ι) × E) in (l ×ˢ l) ×ˢ 𝓝 x, dist (OfNat.ofNat 0 n.snd) (f' n.fst.fst n.snd - f' n.fst.snd n.snd) < ε
hf : ∀ᶠ (n : ι × E) in l ×ˢ 𝓝 x, HasFDerivAt (f n.fst) (f' n.fst n.snd) n.snd
hfg : Cauchy (map (fun n => f n x) l)
this✝ : NormedSpace ℝ E := NormedSpace.restrictScalars ℝ 𝕜 E
ε : ℝ
hε : ε > 0
this :
  ∀ᶠ (x : (ι × ι) × E) in (l ×ˢ l) ×ˢ 𝓝 x,
    HasFDerivAt
        (f
          (((x.fst, x.snd, x.snd).fst.fst, (x.fst, x.snd, x.snd).snd.fst), (x.fst, x.snd, x.snd).fst.snd,
                (x.fst, x.snd, x.snd).snd.snd).fst.fst)
        (f'
          (((x.fst, x.snd, x.snd).fst.fst, (x.fst, x.snd, x.snd).snd.fst), (x.fst, x.snd, x.snd).fst.snd,
                (x.fst, x.snd, x.snd).snd.snd).fst.fst
          (((x.fst, x.snd, x.snd).fst.fst, (x.fst, x.snd, x.snd).snd.fst), (x.fst, x.snd, x.snd).fst.snd,
                (x.fst, x.snd, x.snd).snd.snd).fst.snd)
        (((x.fst, x.snd, x.snd).fst.fst, (x.fst, x.snd, x.snd).snd.fst), (x.fst, x.snd, x.snd).fst.snd,
              (x.fst, x.snd, x.snd).snd.snd).fst.snd ∧
      HasFDerivAt
        (f
          (((x.fst, x.snd, x.snd).fst.fst, (x.fst, x.snd, x.snd).snd.fst), (x.fst, x.snd, x.snd).fst.snd,
                (x.fst, x.snd, x.snd).snd.snd).snd.fst)
        (f'
          (((x.fst, x.snd, x.snd).fst.fst, (x.fst, x.snd, x.snd).snd.fst), (x.fst, x.snd, x.snd).fst.snd,
                (x.fst, x.snd, x.snd).snd.snd).snd.fst
          (((x.fst, x.snd, x.snd).fst.fst, (x.fst, x.snd, x.snd).snd.fst), (x.fst, x.snd, x.snd).fst.snd,
                (x.fst, x.snd, x.snd).snd.snd).snd.snd)
        (((x.fst, x.snd, x.snd).fst.fst, (x.fst, x.snd, x.snd).snd.fst), (x.fst, x.snd, x.snd).fst.snd,
              (x.fst, x.snd, x.snd).snd.snd).snd.snd
a : ι × ι → Prop
b : ∀ᶠ (x : ι × ι) in l ×ˢ l, a x
c : E → Prop
d : ∀ᶠ (y : E) in 𝓝 x, c y
e :
  ∀ {x : ι × ι},
    a x →
      ∀ {y : E},
        c y →
          dist (OfNat.ofNat 0 (x, y).snd) (f' (x, y).fst.fst (x, y).snd - f' (x, y).fst.snd (x, y).snd) < ε ∧
            HasFDerivAt
                (f
                  ((((x, y).fst, (x, y).snd, (x, y).snd).fst.fst, ((x, y).fst, (x, y).snd, (x, y).snd).snd.fst),
                        ((x, y).fst, (x, y).snd, (x, y).snd).fst.snd,
                        ((x, y).fst, (x, y).snd, (x, y).snd).snd.snd).fst.fst)
                (f'
                  ((((x, y).fst, (x, y).snd, (x, y).snd).fst.fst, ((x, y).fst, (x, y).snd, (x, y).snd).snd.fst),
                        ((x, y).fst, (x, y).snd, (x, y).snd).fst.snd,
                        ((x, y).fst, (x, y).snd, (x, y).snd).snd.snd).fst.fst
                  ((((x, y).fst, (x, y).snd, (x, y).snd).fst.fst, ((x, y).fst, (x, y).snd, (x, y).snd).snd.fst),
                        ((x, y).fst, (x, y).snd, (x, y).snd).fst.snd,
                        ((x, y).fst, (x, y).snd, (x, y).snd).snd.snd).fst.snd)
                ((((x, y).fst, (x, y).snd, (x, y).snd).fst.fst, ((x, y).fst, (x, y).snd, (x, y).snd).snd.fst),
                      ((x, y).fst, (x, y).snd, (x, y).snd).fst.snd,
                      ((x, y).fst, (x, y).snd, (x, y).snd).snd.snd).fst.snd ∧
              HasFDerivAt
                (f
                  ((((x, y).fst, (x, y).snd, (x, y).snd).fst.fst, ((x, y).fst, (x, y).snd, (x, y).snd).snd.fst),
                        ((x, y).fst, (x, y).snd, (x, y).snd).fst.snd,
                        ((x, y).fst, (x, y).snd, (x, y).snd).snd.snd).snd.fst)
                (f'
                  ((((x, y).fst, (x, y).snd, (x, y).snd).fst.fst, ((x, y).fst, (x, y).snd, (x, y).snd).snd.fst),
                        ((x, y).fst, (x, y).snd, (x, y).snd).fst.snd,
                        ((x, y).fst, (x, y).snd, (x, y).snd).snd.snd).snd.fst
                  ((((x, y).fst, (x, y).snd, (x, y).snd).fst.fst, ((x, y).fst, (x, y).snd, (x, y).snd).snd.fst),
                        ((x, y).fst, (x, y).snd, (x, y).snd).fst.snd,
                        ((x, y).fst, (x, y).snd, (x, y).snd).snd.snd).snd.snd)
                ((((x, y).fst, (x, y).snd, (x, y).snd).fst.fst, ((x, y).fst, (x, y).snd, (x, y).snd).snd.fst),
                      ((x, y).fst, (x, y).snd, (x, y).snd).fst.snd,
                      ((x, y).fst, (x, y).snd, (x, y).snd).snd.snd).snd.snd
R : ℝ
hR : 0 < R
hR' : ∀ ⦃x_1 : E⦄, x_1 ∈ Metric.ball x R → c x_1
r : ℝ := min 1 R
hr : 0 < r
hr' : ∀ ⦃y : E⦄, y ∈ Metric.ball x r → c y
hxy : ∀ (y : E), y ∈ Metric.ball x r → ‖y - x‖ < 1
y : E
hy : y ∈ Metric.ball x r
⊢ ε * ‖y - x‖ < ε
[PROOFSTEP]
exact
  (mul_lt_iff_lt_one_right hε.lt).mpr
    (hxy y hy)
      -- With a small ball in hand, apply the mean value theorem
[GOAL]
case left.intro.intro.intro.intro.intro.intro
ι : Type u_1
l : Filter ι
E : Type u_2
inst✝⁴ : NormedAddCommGroup E
𝕜 : Type u_3
inst✝³ : IsROrC 𝕜
inst✝² : NormedSpace 𝕜 E
G : Type u_4
inst✝¹ : NormedAddCommGroup G
inst✝ : NormedSpace 𝕜 G
f : ι → E → G
g : E → G
f' : ι → E → E →L[𝕜] G
g' : E → E →L[𝕜] G
x : E
hf' :
  ∀ (ε : ℝ),
    ε > 0 →
      ∀ᶠ (n : (ι × ι) × E) in (l ×ˢ l) ×ˢ 𝓝 x, dist (OfNat.ofNat 0 n.snd) (f' n.fst.fst n.snd - f' n.fst.snd n.snd) < ε
hf : ∀ᶠ (n : ι × E) in l ×ˢ 𝓝 x, HasFDerivAt (f n.fst) (f' n.fst n.snd) n.snd
hfg : Cauchy (map (fun n => f n x) l)
this✝ : NormedSpace ℝ E := NormedSpace.restrictScalars ℝ 𝕜 E
ε : ℝ
hε : ε > 0
this :
  ∀ᶠ (x : (ι × ι) × E) in (l ×ˢ l) ×ˢ 𝓝 x,
    HasFDerivAt
        (f
          (((x.fst, x.snd, x.snd).fst.fst, (x.fst, x.snd, x.snd).snd.fst), (x.fst, x.snd, x.snd).fst.snd,
                (x.fst, x.snd, x.snd).snd.snd).fst.fst)
        (f'
          (((x.fst, x.snd, x.snd).fst.fst, (x.fst, x.snd, x.snd).snd.fst), (x.fst, x.snd, x.snd).fst.snd,
                (x.fst, x.snd, x.snd).snd.snd).fst.fst
          (((x.fst, x.snd, x.snd).fst.fst, (x.fst, x.snd, x.snd).snd.fst), (x.fst, x.snd, x.snd).fst.snd,
                (x.fst, x.snd, x.snd).snd.snd).fst.snd)
        (((x.fst, x.snd, x.snd).fst.fst, (x.fst, x.snd, x.snd).snd.fst), (x.fst, x.snd, x.snd).fst.snd,
              (x.fst, x.snd, x.snd).snd.snd).fst.snd ∧
      HasFDerivAt
        (f
          (((x.fst, x.snd, x.snd).fst.fst, (x.fst, x.snd, x.snd).snd.fst), (x.fst, x.snd, x.snd).fst.snd,
                (x.fst, x.snd, x.snd).snd.snd).snd.fst)
        (f'
          (((x.fst, x.snd, x.snd).fst.fst, (x.fst, x.snd, x.snd).snd.fst), (x.fst, x.snd, x.snd).fst.snd,
                (x.fst, x.snd, x.snd).snd.snd).snd.fst
          (((x.fst, x.snd, x.snd).fst.fst, (x.fst, x.snd, x.snd).snd.fst), (x.fst, x.snd, x.snd).fst.snd,
                (x.fst, x.snd, x.snd).snd.snd).snd.snd)
        (((x.fst, x.snd, x.snd).fst.fst, (x.fst, x.snd, x.snd).snd.fst), (x.fst, x.snd, x.snd).fst.snd,
              (x.fst, x.snd, x.snd).snd.snd).snd.snd
a : ι × ι → Prop
b : ∀ᶠ (x : ι × ι) in l ×ˢ l, a x
c : E → Prop
d : ∀ᶠ (y : E) in 𝓝 x, c y
e :
  ∀ {x : ι × ι},
    a x →
      ∀ {y : E},
        c y →
          dist (OfNat.ofNat 0 (x, y).snd) (f' (x, y).fst.fst (x, y).snd - f' (x, y).fst.snd (x, y).snd) < ε ∧
            HasFDerivAt
                (f
                  ((((x, y).fst, (x, y).snd, (x, y).snd).fst.fst, ((x, y).fst, (x, y).snd, (x, y).snd).snd.fst),
                        ((x, y).fst, (x, y).snd, (x, y).snd).fst.snd,
                        ((x, y).fst, (x, y).snd, (x, y).snd).snd.snd).fst.fst)
                (f'
                  ((((x, y).fst, (x, y).snd, (x, y).snd).fst.fst, ((x, y).fst, (x, y).snd, (x, y).snd).snd.fst),
                        ((x, y).fst, (x, y).snd, (x, y).snd).fst.snd,
                        ((x, y).fst, (x, y).snd, (x, y).snd).snd.snd).fst.fst
                  ((((x, y).fst, (x, y).snd, (x, y).snd).fst.fst, ((x, y).fst, (x, y).snd, (x, y).snd).snd.fst),
                        ((x, y).fst, (x, y).snd, (x, y).snd).fst.snd,
                        ((x, y).fst, (x, y).snd, (x, y).snd).snd.snd).fst.snd)
                ((((x, y).fst, (x, y).snd, (x, y).snd).fst.fst, ((x, y).fst, (x, y).snd, (x, y).snd).snd.fst),
                      ((x, y).fst, (x, y).snd, (x, y).snd).fst.snd,
                      ((x, y).fst, (x, y).snd, (x, y).snd).snd.snd).fst.snd ∧
              HasFDerivAt
                (f
                  ((((x, y).fst, (x, y).snd, (x, y).snd).fst.fst, ((x, y).fst, (x, y).snd, (x, y).snd).snd.fst),
                        ((x, y).fst, (x, y).snd, (x, y).snd).fst.snd,
                        ((x, y).fst, (x, y).snd, (x, y).snd).snd.snd).snd.fst)
                (f'
                  ((((x, y).fst, (x, y).snd, (x, y).snd).fst.fst, ((x, y).fst, (x, y).snd, (x, y).snd).snd.fst),
                        ((x, y).fst, (x, y).snd, (x, y).snd).fst.snd,
                        ((x, y).fst, (x, y).snd, (x, y).snd).snd.snd).snd.fst
                  ((((x, y).fst, (x, y).snd, (x, y).snd).fst.fst, ((x, y).fst, (x, y).snd, (x, y).snd).snd.fst),
                        ((x, y).fst, (x, y).snd, (x, y).snd).fst.snd,
                        ((x, y).fst, (x, y).snd, (x, y).snd).snd.snd).snd.snd)
                ((((x, y).fst, (x, y).snd, (x, y).snd).fst.fst, ((x, y).fst, (x, y).snd, (x, y).snd).snd.fst),
                      ((x, y).fst, (x, y).snd, (x, y).snd).fst.snd,
                      ((x, y).fst, (x, y).snd, (x, y).snd).snd.snd).snd.snd
R : ℝ
hR : 0 < R
hR' : ∀ ⦃x_1 : E⦄, x_1 ∈ Metric.ball x R → c x_1
r : ℝ := min 1 R
hr : 0 < r
hr' : ∀ ⦃y : E⦄, y ∈ Metric.ball x r → c y
hxy : ∀ (y : E), y ∈ Metric.ball x r → ‖y - x‖ < 1
hxyε : ∀ (y : E), y ∈ Metric.ball x r → ε * ‖y - x‖ < ε
⊢ ∀ᶠ (n : (ι × ι) × E) in (l ×ˢ l) ×ˢ 𝓝 x,
    dist (OfNat.ofNat 0 n.snd) (f n.fst.fst n.snd - f n.fst.snd n.snd - (f n.fst.fst x - f n.fst.snd x)) < ε
[PROOFSTEP]
refine'
  eventually_prod_iff.mpr
    ⟨_, b, fun e : E => Metric.ball x r e, eventually_mem_set.mpr (Metric.nhds_basis_ball.mem_of_mem hr),
      fun {n} hn {y} hy => _⟩
[GOAL]
case left.intro.intro.intro.intro.intro.intro
ι : Type u_1
l : Filter ι
E : Type u_2
inst✝⁴ : NormedAddCommGroup E
𝕜 : Type u_3
inst✝³ : IsROrC 𝕜
inst✝² : NormedSpace 𝕜 E
G : Type u_4
inst✝¹ : NormedAddCommGroup G
inst✝ : NormedSpace 𝕜 G
f : ι → E → G
g : E → G
f' : ι → E → E →L[𝕜] G
g' : E → E →L[𝕜] G
x : E
hf' :
  ∀ (ε : ℝ),
    ε > 0 →
      ∀ᶠ (n : (ι × ι) × E) in (l ×ˢ l) ×ˢ 𝓝 x, dist (OfNat.ofNat 0 n.snd) (f' n.fst.fst n.snd - f' n.fst.snd n.snd) < ε
hf : ∀ᶠ (n : ι × E) in l ×ˢ 𝓝 x, HasFDerivAt (f n.fst) (f' n.fst n.snd) n.snd
hfg : Cauchy (map (fun n => f n x) l)
this✝ : NormedSpace ℝ E := NormedSpace.restrictScalars ℝ 𝕜 E
ε : ℝ
hε : ε > 0
this :
  ∀ᶠ (x : (ι × ι) × E) in (l ×ˢ l) ×ˢ 𝓝 x,
    HasFDerivAt
        (f
          (((x.fst, x.snd, x.snd).fst.fst, (x.fst, x.snd, x.snd).snd.fst), (x.fst, x.snd, x.snd).fst.snd,
                (x.fst, x.snd, x.snd).snd.snd).fst.fst)
        (f'
          (((x.fst, x.snd, x.snd).fst.fst, (x.fst, x.snd, x.snd).snd.fst), (x.fst, x.snd, x.snd).fst.snd,
                (x.fst, x.snd, x.snd).snd.snd).fst.fst
          (((x.fst, x.snd, x.snd).fst.fst, (x.fst, x.snd, x.snd).snd.fst), (x.fst, x.snd, x.snd).fst.snd,
                (x.fst, x.snd, x.snd).snd.snd).fst.snd)
        (((x.fst, x.snd, x.snd).fst.fst, (x.fst, x.snd, x.snd).snd.fst), (x.fst, x.snd, x.snd).fst.snd,
              (x.fst, x.snd, x.snd).snd.snd).fst.snd ∧
      HasFDerivAt
        (f
          (((x.fst, x.snd, x.snd).fst.fst, (x.fst, x.snd, x.snd).snd.fst), (x.fst, x.snd, x.snd).fst.snd,
                (x.fst, x.snd, x.snd).snd.snd).snd.fst)
        (f'
          (((x.fst, x.snd, x.snd).fst.fst, (x.fst, x.snd, x.snd).snd.fst), (x.fst, x.snd, x.snd).fst.snd,
                (x.fst, x.snd, x.snd).snd.snd).snd.fst
          (((x.fst, x.snd, x.snd).fst.fst, (x.fst, x.snd, x.snd).snd.fst), (x.fst, x.snd, x.snd).fst.snd,
                (x.fst, x.snd, x.snd).snd.snd).snd.snd)
        (((x.fst, x.snd, x.snd).fst.fst, (x.fst, x.snd, x.snd).snd.fst), (x.fst, x.snd, x.snd).fst.snd,
              (x.fst, x.snd, x.snd).snd.snd).snd.snd
a : ι × ι → Prop
b : ∀ᶠ (x : ι × ι) in l ×ˢ l, a x
c : E → Prop
d : ∀ᶠ (y : E) in 𝓝 x, c y
e :
  ∀ {x : ι × ι},
    a x →
      ∀ {y : E},
        c y →
          dist (OfNat.ofNat 0 (x, y).snd) (f' (x, y).fst.fst (x, y).snd - f' (x, y).fst.snd (x, y).snd) < ε ∧
            HasFDerivAt
                (f
                  ((((x, y).fst, (x, y).snd, (x, y).snd).fst.fst, ((x, y).fst, (x, y).snd, (x, y).snd).snd.fst),
                        ((x, y).fst, (x, y).snd, (x, y).snd).fst.snd,
                        ((x, y).fst, (x, y).snd, (x, y).snd).snd.snd).fst.fst)
                (f'
                  ((((x, y).fst, (x, y).snd, (x, y).snd).fst.fst, ((x, y).fst, (x, y).snd, (x, y).snd).snd.fst),
                        ((x, y).fst, (x, y).snd, (x, y).snd).fst.snd,
                        ((x, y).fst, (x, y).snd, (x, y).snd).snd.snd).fst.fst
                  ((((x, y).fst, (x, y).snd, (x, y).snd).fst.fst, ((x, y).fst, (x, y).snd, (x, y).snd).snd.fst),
                        ((x, y).fst, (x, y).snd, (x, y).snd).fst.snd,
                        ((x, y).fst, (x, y).snd, (x, y).snd).snd.snd).fst.snd)
                ((((x, y).fst, (x, y).snd, (x, y).snd).fst.fst, ((x, y).fst, (x, y).snd, (x, y).snd).snd.fst),
                      ((x, y).fst, (x, y).snd, (x, y).snd).fst.snd,
                      ((x, y).fst, (x, y).snd, (x, y).snd).snd.snd).fst.snd ∧
              HasFDerivAt
                (f
                  ((((x, y).fst, (x, y).snd, (x, y).snd).fst.fst, ((x, y).fst, (x, y).snd, (x, y).snd).snd.fst),
                        ((x, y).fst, (x, y).snd, (x, y).snd).fst.snd,
                        ((x, y).fst, (x, y).snd, (x, y).snd).snd.snd).snd.fst)
                (f'
                  ((((x, y).fst, (x, y).snd, (x, y).snd).fst.fst, ((x, y).fst, (x, y).snd, (x, y).snd).snd.fst),
                        ((x, y).fst, (x, y).snd, (x, y).snd).fst.snd,
                        ((x, y).fst, (x, y).snd, (x, y).snd).snd.snd).snd.fst
                  ((((x, y).fst, (x, y).snd, (x, y).snd).fst.fst, ((x, y).fst, (x, y).snd, (x, y).snd).snd.fst),
                        ((x, y).fst, (x, y).snd, (x, y).snd).fst.snd,
                        ((x, y).fst, (x, y).snd, (x, y).snd).snd.snd).snd.snd)
                ((((x, y).fst, (x, y).snd, (x, y).snd).fst.fst, ((x, y).fst, (x, y).snd, (x, y).snd).snd.fst),
                      ((x, y).fst, (x, y).snd, (x, y).snd).fst.snd,
                      ((x, y).fst, (x, y).snd, (x, y).snd).snd.snd).snd.snd
R : ℝ
hR : 0 < R
hR' : ∀ ⦃x_1 : E⦄, x_1 ∈ Metric.ball x R → c x_1
r : ℝ := min 1 R
hr : 0 < r
hr' : ∀ ⦃y : E⦄, y ∈ Metric.ball x r → c y
hxy : ∀ (y : E), y ∈ Metric.ball x r → ‖y - x‖ < 1
hxyε : ∀ (y : E), y ∈ Metric.ball x r → ε * ‖y - x‖ < ε
n : ι × ι
hn : a n
y : E
hy : (fun e => Metric.ball x r e) y
⊢ dist (OfNat.ofNat 0 (n, y).snd)
      (f (n, y).fst.fst (n, y).snd - f (n, y).fst.snd (n, y).snd - (f (n, y).fst.fst x - f (n, y).fst.snd x)) <
    ε
[PROOFSTEP]
simp only [Pi.zero_apply, dist_zero_left] at e ⊢
[GOAL]
case left.intro.intro.intro.intro.intro.intro
ι : Type u_1
l : Filter ι
E : Type u_2
inst✝⁴ : NormedAddCommGroup E
𝕜 : Type u_3
inst✝³ : IsROrC 𝕜
inst✝² : NormedSpace 𝕜 E
G : Type u_4
inst✝¹ : NormedAddCommGroup G
inst✝ : NormedSpace 𝕜 G
f : ι → E → G
g : E → G
f' : ι → E → E →L[𝕜] G
g' : E → E →L[𝕜] G
x : E
hf' :
  ∀ (ε : ℝ),
    ε > 0 →
      ∀ᶠ (n : (ι × ι) × E) in (l ×ˢ l) ×ˢ 𝓝 x, dist (OfNat.ofNat 0 n.snd) (f' n.fst.fst n.snd - f' n.fst.snd n.snd) < ε
hf : ∀ᶠ (n : ι × E) in l ×ˢ 𝓝 x, HasFDerivAt (f n.fst) (f' n.fst n.snd) n.snd
hfg : Cauchy (map (fun n => f n x) l)
this✝ : NormedSpace ℝ E := NormedSpace.restrictScalars ℝ 𝕜 E
ε : ℝ
hε : ε > 0
this :
  ∀ᶠ (x : (ι × ι) × E) in (l ×ˢ l) ×ˢ 𝓝 x,
    HasFDerivAt
        (f
          (((x.fst, x.snd, x.snd).fst.fst, (x.fst, x.snd, x.snd).snd.fst), (x.fst, x.snd, x.snd).fst.snd,
                (x.fst, x.snd, x.snd).snd.snd).fst.fst)
        (f'
          (((x.fst, x.snd, x.snd).fst.fst, (x.fst, x.snd, x.snd).snd.fst), (x.fst, x.snd, x.snd).fst.snd,
                (x.fst, x.snd, x.snd).snd.snd).fst.fst
          (((x.fst, x.snd, x.snd).fst.fst, (x.fst, x.snd, x.snd).snd.fst), (x.fst, x.snd, x.snd).fst.snd,
                (x.fst, x.snd, x.snd).snd.snd).fst.snd)
        (((x.fst, x.snd, x.snd).fst.fst, (x.fst, x.snd, x.snd).snd.fst), (x.fst, x.snd, x.snd).fst.snd,
              (x.fst, x.snd, x.snd).snd.snd).fst.snd ∧
      HasFDerivAt
        (f
          (((x.fst, x.snd, x.snd).fst.fst, (x.fst, x.snd, x.snd).snd.fst), (x.fst, x.snd, x.snd).fst.snd,
                (x.fst, x.snd, x.snd).snd.snd).snd.fst)
        (f'
          (((x.fst, x.snd, x.snd).fst.fst, (x.fst, x.snd, x.snd).snd.fst), (x.fst, x.snd, x.snd).fst.snd,
                (x.fst, x.snd, x.snd).snd.snd).snd.fst
          (((x.fst, x.snd, x.snd).fst.fst, (x.fst, x.snd, x.snd).snd.fst), (x.fst, x.snd, x.snd).fst.snd,
                (x.fst, x.snd, x.snd).snd.snd).snd.snd)
        (((x.fst, x.snd, x.snd).fst.fst, (x.fst, x.snd, x.snd).snd.fst), (x.fst, x.snd, x.snd).fst.snd,
              (x.fst, x.snd, x.snd).snd.snd).snd.snd
a : ι × ι → Prop
b : ∀ᶠ (x : ι × ι) in l ×ˢ l, a x
c : E → Prop
d : ∀ᶠ (y : E) in 𝓝 x, c y
R : ℝ
hR : 0 < R
hR' : ∀ ⦃x_1 : E⦄, x_1 ∈ Metric.ball x R → c x_1
r : ℝ := min 1 R
hr : 0 < r
hr' : ∀ ⦃y : E⦄, y ∈ Metric.ball x r → c y
hxy : ∀ (y : E), y ∈ Metric.ball x r → ‖y - x‖ < 1
hxyε : ∀ (y : E), y ∈ Metric.ball x r → ε * ‖y - x‖ < ε
n : ι × ι
hn : a n
y : E
hy : (fun e => Metric.ball x r e) y
e :
  ∀ {x : ι × ι},
    a x →
      ∀ {y : E},
        c y →
          ‖f' x.fst y - f' x.snd y‖ < ε ∧ HasFDerivAt (f x.fst) (f' x.fst y) y ∧ HasFDerivAt (f x.snd) (f' x.snd y) y
⊢ ‖f n.fst y - f n.snd y - (f n.fst x - f n.snd x)‖ < ε
[PROOFSTEP]
refine' lt_of_le_of_lt _ (hxyε y hy)
[GOAL]
case left.intro.intro.intro.intro.intro.intro
ι : Type u_1
l : Filter ι
E : Type u_2
inst✝⁴ : NormedAddCommGroup E
𝕜 : Type u_3
inst✝³ : IsROrC 𝕜
inst✝² : NormedSpace 𝕜 E
G : Type u_4
inst✝¹ : NormedAddCommGroup G
inst✝ : NormedSpace 𝕜 G
f : ι → E → G
g : E → G
f' : ι → E → E →L[𝕜] G
g' : E → E →L[𝕜] G
x : E
hf' :
  ∀ (ε : ℝ),
    ε > 0 →
      ∀ᶠ (n : (ι × ι) × E) in (l ×ˢ l) ×ˢ 𝓝 x, dist (OfNat.ofNat 0 n.snd) (f' n.fst.fst n.snd - f' n.fst.snd n.snd) < ε
hf : ∀ᶠ (n : ι × E) in l ×ˢ 𝓝 x, HasFDerivAt (f n.fst) (f' n.fst n.snd) n.snd
hfg : Cauchy (map (fun n => f n x) l)
this✝ : NormedSpace ℝ E := NormedSpace.restrictScalars ℝ 𝕜 E
ε : ℝ
hε : ε > 0
this :
  ∀ᶠ (x : (ι × ι) × E) in (l ×ˢ l) ×ˢ 𝓝 x,
    HasFDerivAt
        (f
          (((x.fst, x.snd, x.snd).fst.fst, (x.fst, x.snd, x.snd).snd.fst), (x.fst, x.snd, x.snd).fst.snd,
                (x.fst, x.snd, x.snd).snd.snd).fst.fst)
        (f'
          (((x.fst, x.snd, x.snd).fst.fst, (x.fst, x.snd, x.snd).snd.fst), (x.fst, x.snd, x.snd).fst.snd,
                (x.fst, x.snd, x.snd).snd.snd).fst.fst
          (((x.fst, x.snd, x.snd).fst.fst, (x.fst, x.snd, x.snd).snd.fst), (x.fst, x.snd, x.snd).fst.snd,
                (x.fst, x.snd, x.snd).snd.snd).fst.snd)
        (((x.fst, x.snd, x.snd).fst.fst, (x.fst, x.snd, x.snd).snd.fst), (x.fst, x.snd, x.snd).fst.snd,
              (x.fst, x.snd, x.snd).snd.snd).fst.snd ∧
      HasFDerivAt
        (f
          (((x.fst, x.snd, x.snd).fst.fst, (x.fst, x.snd, x.snd).snd.fst), (x.fst, x.snd, x.snd).fst.snd,
                (x.fst, x.snd, x.snd).snd.snd).snd.fst)
        (f'
          (((x.fst, x.snd, x.snd).fst.fst, (x.fst, x.snd, x.snd).snd.fst), (x.fst, x.snd, x.snd).fst.snd,
                (x.fst, x.snd, x.snd).snd.snd).snd.fst
          (((x.fst, x.snd, x.snd).fst.fst, (x.fst, x.snd, x.snd).snd.fst), (x.fst, x.snd, x.snd).fst.snd,
                (x.fst, x.snd, x.snd).snd.snd).snd.snd)
        (((x.fst, x.snd, x.snd).fst.fst, (x.fst, x.snd, x.snd).snd.fst), (x.fst, x.snd, x.snd).fst.snd,
              (x.fst, x.snd, x.snd).snd.snd).snd.snd
a : ι × ι → Prop
b : ∀ᶠ (x : ι × ι) in l ×ˢ l, a x
c : E → Prop
d : ∀ᶠ (y : E) in 𝓝 x, c y
R : ℝ
hR : 0 < R
hR' : ∀ ⦃x_1 : E⦄, x_1 ∈ Metric.ball x R → c x_1
r : ℝ := min 1 R
hr : 0 < r
hr' : ∀ ⦃y : E⦄, y ∈ Metric.ball x r → c y
hxy : ∀ (y : E), y ∈ Metric.ball x r → ‖y - x‖ < 1
hxyε : ∀ (y : E), y ∈ Metric.ball x r → ε * ‖y - x‖ < ε
n : ι × ι
hn : a n
y : E
hy : (fun e => Metric.ball x r e) y
e :
  ∀ {x : ι × ι},
    a x →
      ∀ {y : E},
        c y →
          ‖f' x.fst y - f' x.snd y‖ < ε ∧ HasFDerivAt (f x.fst) (f' x.fst y) y ∧ HasFDerivAt (f x.snd) (f' x.snd y) y
⊢ ‖f n.fst y - f n.snd y - (f n.fst x - f n.snd x)‖ ≤ ε * ‖y - x‖
[PROOFSTEP]
exact
  Convex.norm_image_sub_le_of_norm_hasFDerivWithin_le
    (fun y hy => ((e hn (hr' hy)).2.1.sub (e hn (hr' hy)).2.2).hasFDerivWithinAt) (fun y hy => (e hn (hr' hy)).1.le)
    (convex_ball x r) (Metric.mem_ball_self hr) hy
[GOAL]
case right
ι : Type u_1
l : Filter ι
E : Type u_2
inst✝⁴ : NormedAddCommGroup E
𝕜 : Type u_3
inst✝³ : IsROrC 𝕜
inst✝² : NormedSpace 𝕜 E
G : Type u_4
inst✝¹ : NormedAddCommGroup G
inst✝ : NormedSpace 𝕜 G
f : ι → E → G
g : E → G
f' : ι → E → E →L[𝕜] G
g' : E → E →L[𝕜] G
x : E
hf' : TendstoUniformlyOnFilter (fun n z => f' n.fst z - f' n.snd z) 0 (l ×ˢ l) (𝓝 x)
hf : ∀ᶠ (n : ι × E) in l ×ˢ 𝓝 x, HasFDerivAt (f n.fst) (f' n.fst n.snd) n.snd
hfg : Cauchy (map (fun n => f n x) l)
this : NormedSpace ℝ E := NormedSpace.restrictScalars ℝ 𝕜 E
⊢ TendstoUniformlyOnFilter (fun n x_1 => f n.fst x - f n.snd x) 0 (l ×ˢ l) (𝓝 x)
[PROOFSTEP]
refine' Metric.tendstoUniformlyOnFilter_iff.mpr fun ε hε => _
[GOAL]
case right
ι : Type u_1
l : Filter ι
E : Type u_2
inst✝⁴ : NormedAddCommGroup E
𝕜 : Type u_3
inst✝³ : IsROrC 𝕜
inst✝² : NormedSpace 𝕜 E
G : Type u_4
inst✝¹ : NormedAddCommGroup G
inst✝ : NormedSpace 𝕜 G
f : ι → E → G
g : E → G
f' : ι → E → E →L[𝕜] G
g' : E → E →L[𝕜] G
x : E
hf' : TendstoUniformlyOnFilter (fun n z => f' n.fst z - f' n.snd z) 0 (l ×ˢ l) (𝓝 x)
hf : ∀ᶠ (n : ι × E) in l ×ˢ 𝓝 x, HasFDerivAt (f n.fst) (f' n.fst n.snd) n.snd
hfg : Cauchy (map (fun n => f n x) l)
this : NormedSpace ℝ E := NormedSpace.restrictScalars ℝ 𝕜 E
ε : ℝ
hε : ε > 0
⊢ ∀ᶠ (n : (ι × ι) × E) in (l ×ˢ l) ×ˢ 𝓝 x, dist (OfNat.ofNat 0 n.snd) (f n.fst.fst x - f n.fst.snd x) < ε
[PROOFSTEP]
obtain ⟨t, ht, ht'⟩ := (Metric.cauchy_iff.mp hfg).2 ε hε
[GOAL]
case right.intro.intro
ι : Type u_1
l : Filter ι
E : Type u_2
inst✝⁴ : NormedAddCommGroup E
𝕜 : Type u_3
inst✝³ : IsROrC 𝕜
inst✝² : NormedSpace 𝕜 E
G : Type u_4
inst✝¹ : NormedAddCommGroup G
inst✝ : NormedSpace 𝕜 G
f : ι → E → G
g : E → G
f' : ι → E → E →L[𝕜] G
g' : E → E →L[𝕜] G
x : E
hf' : TendstoUniformlyOnFilter (fun n z => f' n.fst z - f' n.snd z) 0 (l ×ˢ l) (𝓝 x)
hf : ∀ᶠ (n : ι × E) in l ×ˢ 𝓝 x, HasFDerivAt (f n.fst) (f' n.fst n.snd) n.snd
hfg : Cauchy (map (fun n => f n x) l)
this : NormedSpace ℝ E := NormedSpace.restrictScalars ℝ 𝕜 E
ε : ℝ
hε : ε > 0
t : Set G
ht : t ∈ map (fun n => f n x) l
ht' : ∀ (x : G), x ∈ t → ∀ (y : G), y ∈ t → dist x y < ε
⊢ ∀ᶠ (n : (ι × ι) × E) in (l ×ˢ l) ×ˢ 𝓝 x, dist (OfNat.ofNat 0 n.snd) (f n.fst.fst x - f n.fst.snd x) < ε
[PROOFSTEP]
exact
  eventually_prod_iff.mpr
    ⟨fun n : ι × ι => f n.1 x ∈ t ∧ f n.2 x ∈ t,
      eventually_prod_iff.mpr ⟨_, ht, _, ht, fun {n} hn {n'} hn' => ⟨hn, hn'⟩⟩, fun _ => True, by simp,
      fun {n} hn {y} _ => by simpa [norm_sub_rev, dist_eq_norm] using ht' _ hn.1 _ hn.2⟩
[GOAL]
ι : Type u_1
l : Filter ι
E : Type u_2
inst✝⁴ : NormedAddCommGroup E
𝕜 : Type u_3
inst✝³ : IsROrC 𝕜
inst✝² : NormedSpace 𝕜 E
G : Type u_4
inst✝¹ : NormedAddCommGroup G
inst✝ : NormedSpace 𝕜 G
f : ι → E → G
g : E → G
f' : ι → E → E →L[𝕜] G
g' : E → E →L[𝕜] G
x : E
hf' : TendstoUniformlyOnFilter (fun n z => f' n.fst z - f' n.snd z) 0 (l ×ˢ l) (𝓝 x)
hf : ∀ᶠ (n : ι × E) in l ×ˢ 𝓝 x, HasFDerivAt (f n.fst) (f' n.fst n.snd) n.snd
hfg : Cauchy (map (fun n => f n x) l)
this : NormedSpace ℝ E := NormedSpace.restrictScalars ℝ 𝕜 E
ε : ℝ
hε : ε > 0
t : Set G
ht : t ∈ map (fun n => f n x) l
ht' : ∀ (x : G), x ∈ t → ∀ (y : G), y ∈ t → dist x y < ε
⊢ ∀ᶠ (y : E) in 𝓝 x, (fun x => True) y
[PROOFSTEP]
simp
[GOAL]
ι : Type u_1
l : Filter ι
E : Type u_2
inst✝⁴ : NormedAddCommGroup E
𝕜 : Type u_3
inst✝³ : IsROrC 𝕜
inst✝² : NormedSpace 𝕜 E
G : Type u_4
inst✝¹ : NormedAddCommGroup G
inst✝ : NormedSpace 𝕜 G
f : ι → E → G
g : E → G
f' : ι → E → E →L[𝕜] G
g' : E → E →L[𝕜] G
x : E
hf' : TendstoUniformlyOnFilter (fun n z => f' n.fst z - f' n.snd z) 0 (l ×ˢ l) (𝓝 x)
hf : ∀ᶠ (n : ι × E) in l ×ˢ 𝓝 x, HasFDerivAt (f n.fst) (f' n.fst n.snd) n.snd
hfg : Cauchy (map (fun n => f n x) l)
this : NormedSpace ℝ E := NormedSpace.restrictScalars ℝ 𝕜 E
ε : ℝ
hε : ε > 0
t : Set G
ht : t ∈ map (fun n => f n x) l
ht' : ∀ (x : G), x ∈ t → ∀ (y : G), y ∈ t → dist x y < ε
n : ι × ι
hn : (fun n => f n.fst x ∈ t ∧ f n.snd x ∈ t) n
y : E
x✝ : (fun x => True) y
⊢ dist (OfNat.ofNat 0 (n, y).snd) (f (n, y).fst.fst x - f (n, y).fst.snd x) < ε
[PROOFSTEP]
simpa [norm_sub_rev, dist_eq_norm] using ht' _ hn.1 _ hn.2
[GOAL]
ι : Type u_1
l : Filter ι
E : Type u_2
inst✝⁴ : NormedAddCommGroup E
𝕜 : Type u_3
inst✝³ : IsROrC 𝕜
inst✝² : NormedSpace 𝕜 E
G : Type u_4
inst✝¹ : NormedAddCommGroup G
inst✝ : NormedSpace 𝕜 G
f : ι → E → G
g : E → G
f' : ι → E → E →L[𝕜] G
g' : E → E →L[𝕜] G
x : E
r : ℝ
hf' : UniformCauchySeqOn f' l (Metric.ball x r)
hf : ∀ (n : ι) (y : E), y ∈ Metric.ball x r → HasFDerivAt (f n) (f' n y) y
hfg : Cauchy (map (fun n => f n x) l)
⊢ UniformCauchySeqOn f l (Metric.ball x r)
[PROOFSTEP]
letI : NormedSpace ℝ E := NormedSpace.restrictScalars ℝ 𝕜 _
[GOAL]
ι : Type u_1
l : Filter ι
E : Type u_2
inst✝⁴ : NormedAddCommGroup E
𝕜 : Type u_3
inst✝³ : IsROrC 𝕜
inst✝² : NormedSpace 𝕜 E
G : Type u_4
inst✝¹ : NormedAddCommGroup G
inst✝ : NormedSpace 𝕜 G
f : ι → E → G
g : E → G
f' : ι → E → E →L[𝕜] G
g' : E → E →L[𝕜] G
x : E
r : ℝ
hf' : UniformCauchySeqOn f' l (Metric.ball x r)
hf : ∀ (n : ι) (y : E), y ∈ Metric.ball x r → HasFDerivAt (f n) (f' n y) y
hfg : Cauchy (map (fun n => f n x) l)
this : NormedSpace ℝ E := NormedSpace.restrictScalars ℝ 𝕜 E
⊢ UniformCauchySeqOn f l (Metric.ball x r)
[PROOFSTEP]
have : NeBot l := (cauchy_map_iff.1 hfg).1
[GOAL]
ι : Type u_1
l : Filter ι
E : Type u_2
inst✝⁴ : NormedAddCommGroup E
𝕜 : Type u_3
inst✝³ : IsROrC 𝕜
inst✝² : NormedSpace 𝕜 E
G : Type u_4
inst✝¹ : NormedAddCommGroup G
inst✝ : NormedSpace 𝕜 G
f : ι → E → G
g : E → G
f' : ι → E → E →L[𝕜] G
g' : E → E →L[𝕜] G
x : E
r : ℝ
hf' : UniformCauchySeqOn f' l (Metric.ball x r)
hf : ∀ (n : ι) (y : E), y ∈ Metric.ball x r → HasFDerivAt (f n) (f' n y) y
hfg : Cauchy (map (fun n => f n x) l)
this✝ : NormedSpace ℝ E := NormedSpace.restrictScalars ℝ 𝕜 E
this : NeBot l
⊢ UniformCauchySeqOn f l (Metric.ball x r)
[PROOFSTEP]
rcases le_or_lt r 0 with (hr | hr)
[GOAL]
case inl
ι : Type u_1
l : Filter ι
E : Type u_2
inst✝⁴ : NormedAddCommGroup E
𝕜 : Type u_3
inst✝³ : IsROrC 𝕜
inst✝² : NormedSpace 𝕜 E
G : Type u_4
inst✝¹ : NormedAddCommGroup G
inst✝ : NormedSpace 𝕜 G
f : ι → E → G
g : E → G
f' : ι → E → E →L[𝕜] G
g' : E → E →L[𝕜] G
x : E
r : ℝ
hf' : UniformCauchySeqOn f' l (Metric.ball x r)
hf : ∀ (n : ι) (y : E), y ∈ Metric.ball x r → HasFDerivAt (f n) (f' n y) y
hfg : Cauchy (map (fun n => f n x) l)
this✝ : NormedSpace ℝ E := NormedSpace.restrictScalars ℝ 𝕜 E
this : NeBot l
hr : r ≤ 0
⊢ UniformCauchySeqOn f l (Metric.ball x r)
[PROOFSTEP]
simp only [Metric.ball_eq_empty.2 hr, UniformCauchySeqOn, Set.mem_empty_iff_false, IsEmpty.forall_iff, eventually_const,
  imp_true_iff]
[GOAL]
case inr
ι : Type u_1
l : Filter ι
E : Type u_2
inst✝⁴ : NormedAddCommGroup E
𝕜 : Type u_3
inst✝³ : IsROrC 𝕜
inst✝² : NormedSpace 𝕜 E
G : Type u_4
inst✝¹ : NormedAddCommGroup G
inst✝ : NormedSpace 𝕜 G
f : ι → E → G
g : E → G
f' : ι → E → E →L[𝕜] G
g' : E → E →L[𝕜] G
x : E
r : ℝ
hf' : UniformCauchySeqOn f' l (Metric.ball x r)
hf : ∀ (n : ι) (y : E), y ∈ Metric.ball x r → HasFDerivAt (f n) (f' n y) y
hfg : Cauchy (map (fun n => f n x) l)
this✝ : NormedSpace ℝ E := NormedSpace.restrictScalars ℝ 𝕜 E
this : NeBot l
hr : 0 < r
⊢ UniformCauchySeqOn f l (Metric.ball x r)
[PROOFSTEP]
rw [SeminormedAddGroup.uniformCauchySeqOn_iff_tendstoUniformlyOn_zero] at hf' ⊢
[GOAL]
case inr
ι : Type u_1
l : Filter ι
E : Type u_2
inst✝⁴ : NormedAddCommGroup E
𝕜 : Type u_3
inst✝³ : IsROrC 𝕜
inst✝² : NormedSpace 𝕜 E
G : Type u_4
inst✝¹ : NormedAddCommGroup G
inst✝ : NormedSpace 𝕜 G
f : ι → E → G
g : E → G
f' : ι → E → E →L[𝕜] G
g' : E → E →L[𝕜] G
x : E
r : ℝ
hf' : TendstoUniformlyOn (fun n z => f' n.fst z - f' n.snd z) 0 (l ×ˢ l) (Metric.ball x r)
hf : ∀ (n : ι) (y : E), y ∈ Metric.ball x r → HasFDerivAt (f n) (f' n y) y
hfg : Cauchy (map (fun n => f n x) l)
this✝ : NormedSpace ℝ E := NormedSpace.restrictScalars ℝ 𝕜 E
this : NeBot l
hr : 0 < r
⊢ TendstoUniformlyOn (fun n z => f n.fst z - f n.snd z) 0 (l ×ˢ l) (Metric.ball x r)
[PROOFSTEP]
suffices
  TendstoUniformlyOn (fun (n : ι × ι) (z : E) => f n.1 z - f n.2 z - (f n.1 x - f n.2 x)) 0 (l ×ˢ l) (Metric.ball x r) ∧
    TendstoUniformlyOn (fun (n : ι × ι) (_ : E) => f n.1 x - f n.2 x) 0 (l ×ˢ l) (Metric.ball x r)
  by
  have := this.1.add this.2
  rw [add_zero] at this
  refine' this.congr _
  apply eventually_of_forall
  intro n z _
  simp
[GOAL]
ι : Type u_1
l : Filter ι
E : Type u_2
inst✝⁴ : NormedAddCommGroup E
𝕜 : Type u_3
inst✝³ : IsROrC 𝕜
inst✝² : NormedSpace 𝕜 E
G : Type u_4
inst✝¹ : NormedAddCommGroup G
inst✝ : NormedSpace 𝕜 G
f : ι → E → G
g : E → G
f' : ι → E → E →L[𝕜] G
g' : E → E →L[𝕜] G
x : E
r : ℝ
hf' : TendstoUniformlyOn (fun n z => f' n.fst z - f' n.snd z) 0 (l ×ˢ l) (Metric.ball x r)
hf : ∀ (n : ι) (y : E), y ∈ Metric.ball x r → HasFDerivAt (f n) (f' n y) y
hfg : Cauchy (map (fun n => f n x) l)
this✝¹ : NormedSpace ℝ E := NormedSpace.restrictScalars ℝ 𝕜 E
this✝ : NeBot l
hr : 0 < r
this :
  TendstoUniformlyOn (fun n z => f n.fst z - f n.snd z - (f n.fst x - f n.snd x)) 0 (l ×ˢ l) (Metric.ball x r) ∧
    TendstoUniformlyOn (fun n x_1 => f n.fst x - f n.snd x) 0 (l ×ˢ l) (Metric.ball x r)
⊢ TendstoUniformlyOn (fun n z => f n.fst z - f n.snd z) 0 (l ×ˢ l) (Metric.ball x r)
[PROOFSTEP]
have := this.1.add this.2
[GOAL]
ι : Type u_1
l : Filter ι
E : Type u_2
inst✝⁴ : NormedAddCommGroup E
𝕜 : Type u_3
inst✝³ : IsROrC 𝕜
inst✝² : NormedSpace 𝕜 E
G : Type u_4
inst✝¹ : NormedAddCommGroup G
inst✝ : NormedSpace 𝕜 G
f : ι → E → G
g : E → G
f' : ι → E → E →L[𝕜] G
g' : E → E →L[𝕜] G
x : E
r : ℝ
hf' : TendstoUniformlyOn (fun n z => f' n.fst z - f' n.snd z) 0 (l ×ˢ l) (Metric.ball x r)
hf : ∀ (n : ι) (y : E), y ∈ Metric.ball x r → HasFDerivAt (f n) (f' n y) y
hfg : Cauchy (map (fun n => f n x) l)
this✝² : NormedSpace ℝ E := NormedSpace.restrictScalars ℝ 𝕜 E
this✝¹ : NeBot l
hr : 0 < r
this✝ :
  TendstoUniformlyOn (fun n z => f n.fst z - f n.snd z - (f n.fst x - f n.snd x)) 0 (l ×ˢ l) (Metric.ball x r) ∧
    TendstoUniformlyOn (fun n x_1 => f n.fst x - f n.snd x) 0 (l ×ˢ l) (Metric.ball x r)
this :
  TendstoUniformlyOn ((fun n z => f n.fst z - f n.snd z - (f n.fst x - f n.snd x)) + fun n x_1 => f n.fst x - f n.snd x)
    (0 + 0) (l ×ˢ l) (Metric.ball x r)
⊢ TendstoUniformlyOn (fun n z => f n.fst z - f n.snd z) 0 (l ×ˢ l) (Metric.ball x r)
[PROOFSTEP]
rw [add_zero] at this
[GOAL]
ι : Type u_1
l : Filter ι
E : Type u_2
inst✝⁴ : NormedAddCommGroup E
𝕜 : Type u_3
inst✝³ : IsROrC 𝕜
inst✝² : NormedSpace 𝕜 E
G : Type u_4
inst✝¹ : NormedAddCommGroup G
inst✝ : NormedSpace 𝕜 G
f : ι → E → G
g : E → G
f' : ι → E → E →L[𝕜] G
g' : E → E →L[𝕜] G
x : E
r : ℝ
hf' : TendstoUniformlyOn (fun n z => f' n.fst z - f' n.snd z) 0 (l ×ˢ l) (Metric.ball x r)
hf : ∀ (n : ι) (y : E), y ∈ Metric.ball x r → HasFDerivAt (f n) (f' n y) y
hfg : Cauchy (map (fun n => f n x) l)
this✝² : NormedSpace ℝ E := NormedSpace.restrictScalars ℝ 𝕜 E
this✝¹ : NeBot l
hr : 0 < r
this✝ :
  TendstoUniformlyOn (fun n z => f n.fst z - f n.snd z - (f n.fst x - f n.snd x)) 0 (l ×ˢ l) (Metric.ball x r) ∧
    TendstoUniformlyOn (fun n x_1 => f n.fst x - f n.snd x) 0 (l ×ˢ l) (Metric.ball x r)
this :
  TendstoUniformlyOn ((fun n z => f n.fst z - f n.snd z - (f n.fst x - f n.snd x)) + fun n x_1 => f n.fst x - f n.snd x)
    0 (l ×ˢ l) (Metric.ball x r)
⊢ TendstoUniformlyOn (fun n z => f n.fst z - f n.snd z) 0 (l ×ˢ l) (Metric.ball x r)
[PROOFSTEP]
refine' this.congr _
[GOAL]
ι : Type u_1
l : Filter ι
E : Type u_2
inst✝⁴ : NormedAddCommGroup E
𝕜 : Type u_3
inst✝³ : IsROrC 𝕜
inst✝² : NormedSpace 𝕜 E
G : Type u_4
inst✝¹ : NormedAddCommGroup G
inst✝ : NormedSpace 𝕜 G
f : ι → E → G
g : E → G
f' : ι → E → E →L[𝕜] G
g' : E → E →L[𝕜] G
x : E
r : ℝ
hf' : TendstoUniformlyOn (fun n z => f' n.fst z - f' n.snd z) 0 (l ×ˢ l) (Metric.ball x r)
hf : ∀ (n : ι) (y : E), y ∈ Metric.ball x r → HasFDerivAt (f n) (f' n y) y
hfg : Cauchy (map (fun n => f n x) l)
this✝² : NormedSpace ℝ E := NormedSpace.restrictScalars ℝ 𝕜 E
this✝¹ : NeBot l
hr : 0 < r
this✝ :
  TendstoUniformlyOn (fun n z => f n.fst z - f n.snd z - (f n.fst x - f n.snd x)) 0 (l ×ˢ l) (Metric.ball x r) ∧
    TendstoUniformlyOn (fun n x_1 => f n.fst x - f n.snd x) 0 (l ×ˢ l) (Metric.ball x r)
this :
  TendstoUniformlyOn ((fun n z => f n.fst z - f n.snd z - (f n.fst x - f n.snd x)) + fun n x_1 => f n.fst x - f n.snd x)
    0 (l ×ˢ l) (Metric.ball x r)
⊢ ∀ᶠ (n : ι × ι) in l ×ˢ l,
    Set.EqOn (((fun n z => f n.fst z - f n.snd z - (f n.fst x - f n.snd x)) + fun n x_1 => f n.fst x - f n.snd x) n)
      (fun z => f n.fst z - f n.snd z) (Metric.ball x r)
[PROOFSTEP]
apply eventually_of_forall
[GOAL]
case hp
ι : Type u_1
l : Filter ι
E : Type u_2
inst✝⁴ : NormedAddCommGroup E
𝕜 : Type u_3
inst✝³ : IsROrC 𝕜
inst✝² : NormedSpace 𝕜 E
G : Type u_4
inst✝¹ : NormedAddCommGroup G
inst✝ : NormedSpace 𝕜 G
f : ι → E → G
g : E → G
f' : ι → E → E →L[𝕜] G
g' : E → E →L[𝕜] G
x : E
r : ℝ
hf' : TendstoUniformlyOn (fun n z => f' n.fst z - f' n.snd z) 0 (l ×ˢ l) (Metric.ball x r)
hf : ∀ (n : ι) (y : E), y ∈ Metric.ball x r → HasFDerivAt (f n) (f' n y) y
hfg : Cauchy (map (fun n => f n x) l)
this✝² : NormedSpace ℝ E := NormedSpace.restrictScalars ℝ 𝕜 E
this✝¹ : NeBot l
hr : 0 < r
this✝ :
  TendstoUniformlyOn (fun n z => f n.fst z - f n.snd z - (f n.fst x - f n.snd x)) 0 (l ×ˢ l) (Metric.ball x r) ∧
    TendstoUniformlyOn (fun n x_1 => f n.fst x - f n.snd x) 0 (l ×ˢ l) (Metric.ball x r)
this :
  TendstoUniformlyOn ((fun n z => f n.fst z - f n.snd z - (f n.fst x - f n.snd x)) + fun n x_1 => f n.fst x - f n.snd x)
    0 (l ×ˢ l) (Metric.ball x r)
⊢ ∀ (x_1 : ι × ι),
    Set.EqOn (((fun n z => f n.fst z - f n.snd z - (f n.fst x - f n.snd x)) + fun n x_2 => f n.fst x - f n.snd x) x_1)
      (fun z => f x_1.fst z - f x_1.snd z) (Metric.ball x r)
[PROOFSTEP]
intro n z _
[GOAL]
case hp
ι : Type u_1
l : Filter ι
E : Type u_2
inst✝⁴ : NormedAddCommGroup E
𝕜 : Type u_3
inst✝³ : IsROrC 𝕜
inst✝² : NormedSpace 𝕜 E
G : Type u_4
inst✝¹ : NormedAddCommGroup G
inst✝ : NormedSpace 𝕜 G
f : ι → E → G
g : E → G
f' : ι → E → E →L[𝕜] G
g' : E → E →L[𝕜] G
x : E
r : ℝ
hf' : TendstoUniformlyOn (fun n z => f' n.fst z - f' n.snd z) 0 (l ×ˢ l) (Metric.ball x r)
hf : ∀ (n : ι) (y : E), y ∈ Metric.ball x r → HasFDerivAt (f n) (f' n y) y
hfg : Cauchy (map (fun n => f n x) l)
this✝² : NormedSpace ℝ E := NormedSpace.restrictScalars ℝ 𝕜 E
this✝¹ : NeBot l
hr : 0 < r
this✝ :
  TendstoUniformlyOn (fun n z => f n.fst z - f n.snd z - (f n.fst x - f n.snd x)) 0 (l ×ˢ l) (Metric.ball x r) ∧
    TendstoUniformlyOn (fun n x_1 => f n.fst x - f n.snd x) 0 (l ×ˢ l) (Metric.ball x r)
this :
  TendstoUniformlyOn ((fun n z => f n.fst z - f n.snd z - (f n.fst x - f n.snd x)) + fun n x_1 => f n.fst x - f n.snd x)
    0 (l ×ˢ l) (Metric.ball x r)
n : ι × ι
z : E
a✝ : z ∈ Metric.ball x r
⊢ ((fun n z => f n.fst z - f n.snd z - (f n.fst x - f n.snd x)) + fun n x_1 => f n.fst x - f n.snd x) n z =
    (fun z => f n.fst z - f n.snd z) z
[PROOFSTEP]
simp
[GOAL]
case inr
ι : Type u_1
l : Filter ι
E : Type u_2
inst✝⁴ : NormedAddCommGroup E
𝕜 : Type u_3
inst✝³ : IsROrC 𝕜
inst✝² : NormedSpace 𝕜 E
G : Type u_4
inst✝¹ : NormedAddCommGroup G
inst✝ : NormedSpace 𝕜 G
f : ι → E → G
g : E → G
f' : ι → E → E →L[𝕜] G
g' : E → E →L[𝕜] G
x : E
r : ℝ
hf' : TendstoUniformlyOn (fun n z => f' n.fst z - f' n.snd z) 0 (l ×ˢ l) (Metric.ball x r)
hf : ∀ (n : ι) (y : E), y ∈ Metric.ball x r → HasFDerivAt (f n) (f' n y) y
hfg : Cauchy (map (fun n => f n x) l)
this✝ : NormedSpace ℝ E := NormedSpace.restrictScalars ℝ 𝕜 E
this : NeBot l
hr : 0 < r
⊢ TendstoUniformlyOn (fun n z => f n.fst z - f n.snd z - (f n.fst x - f n.snd x)) 0 (l ×ˢ l) (Metric.ball x r) ∧
    TendstoUniformlyOn (fun n x_1 => f n.fst x - f n.snd x) 0 (l ×ˢ l) (Metric.ball x r)
[PROOFSTEP]
constructor
[GOAL]
case inr.left
ι : Type u_1
l : Filter ι
E : Type u_2
inst✝⁴ : NormedAddCommGroup E
𝕜 : Type u_3
inst✝³ : IsROrC 𝕜
inst✝² : NormedSpace 𝕜 E
G : Type u_4
inst✝¹ : NormedAddCommGroup G
inst✝ : NormedSpace 𝕜 G
f : ι → E → G
g : E → G
f' : ι → E → E →L[𝕜] G
g' : E → E →L[𝕜] G
x : E
r : ℝ
hf' : TendstoUniformlyOn (fun n z => f' n.fst z - f' n.snd z) 0 (l ×ˢ l) (Metric.ball x r)
hf : ∀ (n : ι) (y : E), y ∈ Metric.ball x r → HasFDerivAt (f n) (f' n y) y
hfg : Cauchy (map (fun n => f n x) l)
this✝ : NormedSpace ℝ E := NormedSpace.restrictScalars ℝ 𝕜 E
this : NeBot l
hr : 0 < r
⊢ TendstoUniformlyOn (fun n z => f n.fst z - f n.snd z - (f n.fst x - f n.snd x)) 0 (l ×ˢ l) (Metric.ball x r)
[PROOFSTEP]
rw [Metric.tendstoUniformlyOn_iff] at hf' ⊢
[GOAL]
case inr.left
ι : Type u_1
l : Filter ι
E : Type u_2
inst✝⁴ : NormedAddCommGroup E
𝕜 : Type u_3
inst✝³ : IsROrC 𝕜
inst✝² : NormedSpace 𝕜 E
G : Type u_4
inst✝¹ : NormedAddCommGroup G
inst✝ : NormedSpace 𝕜 G
f : ι → E → G
g : E → G
f' : ι → E → E →L[𝕜] G
g' : E → E →L[𝕜] G
x : E
r : ℝ
hf' :
  ∀ (ε : ℝ),
    ε > 0 →
      ∀ᶠ (n : ι × ι) in l ×ˢ l,
        ∀ (x_1 : E), x_1 ∈ Metric.ball x r → dist (OfNat.ofNat 0 x_1) (f' n.fst x_1 - f' n.snd x_1) < ε
hf : ∀ (n : ι) (y : E), y ∈ Metric.ball x r → HasFDerivAt (f n) (f' n y) y
hfg : Cauchy (map (fun n => f n x) l)
this✝ : NormedSpace ℝ E := NormedSpace.restrictScalars ℝ 𝕜 E
this : NeBot l
hr : 0 < r
⊢ ∀ (ε : ℝ),
    ε > 0 →
      ∀ᶠ (n : ι × ι) in l ×ˢ l,
        ∀ (x_1 : E),
          x_1 ∈ Metric.ball x r → dist (OfNat.ofNat 0 x_1) (f n.fst x_1 - f n.snd x_1 - (f n.fst x - f n.snd x)) < ε
[PROOFSTEP]
intro ε hε
[GOAL]
case inr.left
ι : Type u_1
l : Filter ι
E : Type u_2
inst✝⁴ : NormedAddCommGroup E
𝕜 : Type u_3
inst✝³ : IsROrC 𝕜
inst✝² : NormedSpace 𝕜 E
G : Type u_4
inst✝¹ : NormedAddCommGroup G
inst✝ : NormedSpace 𝕜 G
f : ι → E → G
g : E → G
f' : ι → E → E →L[𝕜] G
g' : E → E →L[𝕜] G
x : E
r : ℝ
hf' :
  ∀ (ε : ℝ),
    ε > 0 →
      ∀ᶠ (n : ι × ι) in l ×ˢ l,
        ∀ (x_1 : E), x_1 ∈ Metric.ball x r → dist (OfNat.ofNat 0 x_1) (f' n.fst x_1 - f' n.snd x_1) < ε
hf : ∀ (n : ι) (y : E), y ∈ Metric.ball x r → HasFDerivAt (f n) (f' n y) y
hfg : Cauchy (map (fun n => f n x) l)
this✝ : NormedSpace ℝ E := NormedSpace.restrictScalars ℝ 𝕜 E
this : NeBot l
hr : 0 < r
ε : ℝ
hε : ε > 0
⊢ ∀ᶠ (n : ι × ι) in l ×ˢ l,
    ∀ (x_1 : E),
      x_1 ∈ Metric.ball x r → dist (OfNat.ofNat 0 x_1) (f n.fst x_1 - f n.snd x_1 - (f n.fst x - f n.snd x)) < ε
[PROOFSTEP]
obtain ⟨q, hqpos, hq⟩ : ∃ q : ℝ, 0 < q ∧ q * r < ε :=
  by
  simp_rw [mul_comm]
  exact exists_pos_mul_lt hε.lt r
[GOAL]
ι : Type u_1
l : Filter ι
E : Type u_2
inst✝⁴ : NormedAddCommGroup E
𝕜 : Type u_3
inst✝³ : IsROrC 𝕜
inst✝² : NormedSpace 𝕜 E
G : Type u_4
inst✝¹ : NormedAddCommGroup G
inst✝ : NormedSpace 𝕜 G
f : ι → E → G
g : E → G
f' : ι → E → E →L[𝕜] G
g' : E → E →L[𝕜] G
x : E
r : ℝ
hf' :
  ∀ (ε : ℝ),
    ε > 0 →
      ∀ᶠ (n : ι × ι) in l ×ˢ l,
        ∀ (x_1 : E), x_1 ∈ Metric.ball x r → dist (OfNat.ofNat 0 x_1) (f' n.fst x_1 - f' n.snd x_1) < ε
hf : ∀ (n : ι) (y : E), y ∈ Metric.ball x r → HasFDerivAt (f n) (f' n y) y
hfg : Cauchy (map (fun n => f n x) l)
this✝ : NormedSpace ℝ E := NormedSpace.restrictScalars ℝ 𝕜 E
this : NeBot l
hr : 0 < r
ε : ℝ
hε : ε > 0
⊢ ∃ q, 0 < q ∧ q * r < ε
[PROOFSTEP]
simp_rw [mul_comm]
[GOAL]
ι : Type u_1
l : Filter ι
E : Type u_2
inst✝⁴ : NormedAddCommGroup E
𝕜 : Type u_3
inst✝³ : IsROrC 𝕜
inst✝² : NormedSpace 𝕜 E
G : Type u_4
inst✝¹ : NormedAddCommGroup G
inst✝ : NormedSpace 𝕜 G
f : ι → E → G
g : E → G
f' : ι → E → E →L[𝕜] G
g' : E → E →L[𝕜] G
x : E
r : ℝ
hf' :
  ∀ (ε : ℝ),
    ε > 0 →
      ∀ᶠ (n : ι × ι) in l ×ˢ l,
        ∀ (x_1 : E), x_1 ∈ Metric.ball x r → dist (OfNat.ofNat 0 x_1) (f' n.fst x_1 - f' n.snd x_1) < ε
hf : ∀ (n : ι) (y : E), y ∈ Metric.ball x r → HasFDerivAt (f n) (f' n y) y
hfg : Cauchy (map (fun n => f n x) l)
this✝ : NormedSpace ℝ E := NormedSpace.restrictScalars ℝ 𝕜 E
this : NeBot l
hr : 0 < r
ε : ℝ
hε : ε > 0
⊢ ∃ q, 0 < q ∧ r * q < ε
[PROOFSTEP]
exact exists_pos_mul_lt hε.lt r
[GOAL]
case inr.left.intro.intro
ι : Type u_1
l : Filter ι
E : Type u_2
inst✝⁴ : NormedAddCommGroup E
𝕜 : Type u_3
inst✝³ : IsROrC 𝕜
inst✝² : NormedSpace 𝕜 E
G : Type u_4
inst✝¹ : NormedAddCommGroup G
inst✝ : NormedSpace 𝕜 G
f : ι → E → G
g : E → G
f' : ι → E → E →L[𝕜] G
g' : E → E →L[𝕜] G
x : E
r : ℝ
hf' :
  ∀ (ε : ℝ),
    ε > 0 →
      ∀ᶠ (n : ι × ι) in l ×ˢ l,
        ∀ (x_1 : E), x_1 ∈ Metric.ball x r → dist (OfNat.ofNat 0 x_1) (f' n.fst x_1 - f' n.snd x_1) < ε
hf : ∀ (n : ι) (y : E), y ∈ Metric.ball x r → HasFDerivAt (f n) (f' n y) y
hfg : Cauchy (map (fun n => f n x) l)
this✝ : NormedSpace ℝ E := NormedSpace.restrictScalars ℝ 𝕜 E
this : NeBot l
hr : 0 < r
ε : ℝ
hε : ε > 0
q : ℝ
hqpos : 0 < q
hq : q * r < ε
⊢ ∀ᶠ (n : ι × ι) in l ×ˢ l,
    ∀ (x_1 : E),
      x_1 ∈ Metric.ball x r → dist (OfNat.ofNat 0 x_1) (f n.fst x_1 - f n.snd x_1 - (f n.fst x - f n.snd x)) < ε
[PROOFSTEP]
apply (hf' q hqpos.gt).mono
[GOAL]
case inr.left.intro.intro
ι : Type u_1
l : Filter ι
E : Type u_2
inst✝⁴ : NormedAddCommGroup E
𝕜 : Type u_3
inst✝³ : IsROrC 𝕜
inst✝² : NormedSpace 𝕜 E
G : Type u_4
inst✝¹ : NormedAddCommGroup G
inst✝ : NormedSpace 𝕜 G
f : ι → E → G
g : E → G
f' : ι → E → E →L[𝕜] G
g' : E → E →L[𝕜] G
x : E
r : ℝ
hf' :
  ∀ (ε : ℝ),
    ε > 0 →
      ∀ᶠ (n : ι × ι) in l ×ˢ l,
        ∀ (x_1 : E), x_1 ∈ Metric.ball x r → dist (OfNat.ofNat 0 x_1) (f' n.fst x_1 - f' n.snd x_1) < ε
hf : ∀ (n : ι) (y : E), y ∈ Metric.ball x r → HasFDerivAt (f n) (f' n y) y
hfg : Cauchy (map (fun n => f n x) l)
this✝ : NormedSpace ℝ E := NormedSpace.restrictScalars ℝ 𝕜 E
this : NeBot l
hr : 0 < r
ε : ℝ
hε : ε > 0
q : ℝ
hqpos : 0 < q
hq : q * r < ε
⊢ ∀ (x_1 : ι × ι),
    (∀ (x_2 : E), x_2 ∈ Metric.ball x r → dist (OfNat.ofNat 0 x_2) (f' x_1.fst x_2 - f' x_1.snd x_2) < q) →
      ∀ (x_2 : E),
        x_2 ∈ Metric.ball x r →
          dist (OfNat.ofNat 0 x_2) (f x_1.fst x_2 - f x_1.snd x_2 - (f x_1.fst x - f x_1.snd x)) < ε
[PROOFSTEP]
intro n hn y hy
[GOAL]
case inr.left.intro.intro
ι : Type u_1
l : Filter ι
E : Type u_2
inst✝⁴ : NormedAddCommGroup E
𝕜 : Type u_3
inst✝³ : IsROrC 𝕜
inst✝² : NormedSpace 𝕜 E
G : Type u_4
inst✝¹ : NormedAddCommGroup G
inst✝ : NormedSpace 𝕜 G
f : ι → E → G
g : E → G
f' : ι → E → E →L[𝕜] G
g' : E → E →L[𝕜] G
x : E
r : ℝ
hf' :
  ∀ (ε : ℝ),
    ε > 0 →
      ∀ᶠ (n : ι × ι) in l ×ˢ l,
        ∀ (x_1 : E), x_1 ∈ Metric.ball x r → dist (OfNat.ofNat 0 x_1) (f' n.fst x_1 - f' n.snd x_1) < ε
hf : ∀ (n : ι) (y : E), y ∈ Metric.ball x r → HasFDerivAt (f n) (f' n y) y
hfg : Cauchy (map (fun n => f n x) l)
this✝ : NormedSpace ℝ E := NormedSpace.restrictScalars ℝ 𝕜 E
this : NeBot l
hr : 0 < r
ε : ℝ
hε : ε > 0
q : ℝ
hqpos : 0 < q
hq : q * r < ε
n : ι × ι
hn : ∀ (x_1 : E), x_1 ∈ Metric.ball x r → dist (OfNat.ofNat 0 x_1) (f' n.fst x_1 - f' n.snd x_1) < q
y : E
hy : y ∈ Metric.ball x r
⊢ dist (OfNat.ofNat 0 y) (f n.fst y - f n.snd y - (f n.fst x - f n.snd x)) < ε
[PROOFSTEP]
simp_rw [dist_eq_norm, Pi.zero_apply, zero_sub, norm_neg] at hn ⊢
[GOAL]
case inr.left.intro.intro
ι : Type u_1
l : Filter ι
E : Type u_2
inst✝⁴ : NormedAddCommGroup E
𝕜 : Type u_3
inst✝³ : IsROrC 𝕜
inst✝² : NormedSpace 𝕜 E
G : Type u_4
inst✝¹ : NormedAddCommGroup G
inst✝ : NormedSpace 𝕜 G
f : ι → E → G
g : E → G
f' : ι → E → E →L[𝕜] G
g' : E → E →L[𝕜] G
x : E
r : ℝ
hf' :
  ∀ (ε : ℝ),
    ε > 0 →
      ∀ᶠ (n : ι × ι) in l ×ˢ l,
        ∀ (x_1 : E), x_1 ∈ Metric.ball x r → dist (OfNat.ofNat 0 x_1) (f' n.fst x_1 - f' n.snd x_1) < ε
hf : ∀ (n : ι) (y : E), y ∈ Metric.ball x r → HasFDerivAt (f n) (f' n y) y
hfg : Cauchy (map (fun n => f n x) l)
this✝ : NormedSpace ℝ E := NormedSpace.restrictScalars ℝ 𝕜 E
this : NeBot l
hr : 0 < r
ε : ℝ
hε : ε > 0
q : ℝ
hqpos : 0 < q
hq : q * r < ε
n : ι × ι
y : E
hy : y ∈ Metric.ball x r
hn : ∀ (x_1 : E), x_1 ∈ Metric.ball x r → ‖f' n.fst x_1 - f' n.snd x_1‖ < q
⊢ ‖f n.fst y - f n.snd y - (f n.fst x - f n.snd x)‖ < ε
[PROOFSTEP]
have mvt :=
  Convex.norm_image_sub_le_of_norm_hasFDerivWithin_le (fun z hz => ((hf n.1 z hz).sub (hf n.2 z hz)).hasFDerivWithinAt)
    (fun z hz => (hn z hz).le) (convex_ball x r) (Metric.mem_ball_self hr) hy
[GOAL]
case inr.left.intro.intro
ι : Type u_1
l : Filter ι
E : Type u_2
inst✝⁴ : NormedAddCommGroup E
𝕜 : Type u_3
inst✝³ : IsROrC 𝕜
inst✝² : NormedSpace 𝕜 E
G : Type u_4
inst✝¹ : NormedAddCommGroup G
inst✝ : NormedSpace 𝕜 G
f : ι → E → G
g : E → G
f' : ι → E → E →L[𝕜] G
g' : E → E →L[𝕜] G
x : E
r : ℝ
hf' :
  ∀ (ε : ℝ),
    ε > 0 →
      ∀ᶠ (n : ι × ι) in l ×ˢ l,
        ∀ (x_1 : E), x_1 ∈ Metric.ball x r → dist (OfNat.ofNat 0 x_1) (f' n.fst x_1 - f' n.snd x_1) < ε
hf : ∀ (n : ι) (y : E), y ∈ Metric.ball x r → HasFDerivAt (f n) (f' n y) y
hfg : Cauchy (map (fun n => f n x) l)
this✝ : NormedSpace ℝ E := NormedSpace.restrictScalars ℝ 𝕜 E
this : NeBot l
hr : 0 < r
ε : ℝ
hε : ε > 0
q : ℝ
hqpos : 0 < q
hq : q * r < ε
n : ι × ι
y : E
hy : y ∈ Metric.ball x r
hn : ∀ (x_1 : E), x_1 ∈ Metric.ball x r → ‖f' n.fst x_1 - f' n.snd x_1‖ < q
mvt : ‖f n.fst y - f n.snd y - (f n.fst x - f n.snd x)‖ ≤ q * ‖y - x‖
⊢ ‖f n.fst y - f n.snd y - (f n.fst x - f n.snd x)‖ < ε
[PROOFSTEP]
refine' lt_of_le_of_lt mvt _
[GOAL]
case inr.left.intro.intro
ι : Type u_1
l : Filter ι
E : Type u_2
inst✝⁴ : NormedAddCommGroup E
𝕜 : Type u_3
inst✝³ : IsROrC 𝕜
inst✝² : NormedSpace 𝕜 E
G : Type u_4
inst✝¹ : NormedAddCommGroup G
inst✝ : NormedSpace 𝕜 G
f : ι → E → G
g : E → G
f' : ι → E → E →L[𝕜] G
g' : E → E →L[𝕜] G
x : E
r : ℝ
hf' :
  ∀ (ε : ℝ),
    ε > 0 →
      ∀ᶠ (n : ι × ι) in l ×ˢ l,
        ∀ (x_1 : E), x_1 ∈ Metric.ball x r → dist (OfNat.ofNat 0 x_1) (f' n.fst x_1 - f' n.snd x_1) < ε
hf : ∀ (n : ι) (y : E), y ∈ Metric.ball x r → HasFDerivAt (f n) (f' n y) y
hfg : Cauchy (map (fun n => f n x) l)
this✝ : NormedSpace ℝ E := NormedSpace.restrictScalars ℝ 𝕜 E
this : NeBot l
hr : 0 < r
ε : ℝ
hε : ε > 0
q : ℝ
hqpos : 0 < q
hq : q * r < ε
n : ι × ι
y : E
hy : y ∈ Metric.ball x r
hn : ∀ (x_1 : E), x_1 ∈ Metric.ball x r → ‖f' n.fst x_1 - f' n.snd x_1‖ < q
mvt : ‖f n.fst y - f n.snd y - (f n.fst x - f n.snd x)‖ ≤ q * ‖y - x‖
⊢ q * ‖y - x‖ < ε
[PROOFSTEP]
have : q * ‖y - x‖ < q * r :=
  mul_lt_mul' rfl.le (by simpa only [dist_eq_norm] using Metric.mem_ball.mp hy) (norm_nonneg _) hqpos
[GOAL]
ι : Type u_1
l : Filter ι
E : Type u_2
inst✝⁴ : NormedAddCommGroup E
𝕜 : Type u_3
inst✝³ : IsROrC 𝕜
inst✝² : NormedSpace 𝕜 E
G : Type u_4
inst✝¹ : NormedAddCommGroup G
inst✝ : NormedSpace 𝕜 G
f : ι → E → G
g : E → G
f' : ι → E → E →L[𝕜] G
g' : E → E →L[𝕜] G
x : E
r : ℝ
hf' :
  ∀ (ε : ℝ),
    ε > 0 →
      ∀ᶠ (n : ι × ι) in l ×ˢ l,
        ∀ (x_1 : E), x_1 ∈ Metric.ball x r → dist (OfNat.ofNat 0 x_1) (f' n.fst x_1 - f' n.snd x_1) < ε
hf : ∀ (n : ι) (y : E), y ∈ Metric.ball x r → HasFDerivAt (f n) (f' n y) y
hfg : Cauchy (map (fun n => f n x) l)
this✝ : NormedSpace ℝ E := NormedSpace.restrictScalars ℝ 𝕜 E
this : NeBot l
hr : 0 < r
ε : ℝ
hε : ε > 0
q : ℝ
hqpos : 0 < q
hq : q * r < ε
n : ι × ι
y : E
hy : y ∈ Metric.ball x r
hn : ∀ (x_1 : E), x_1 ∈ Metric.ball x r → ‖f' n.fst x_1 - f' n.snd x_1‖ < q
mvt : ‖f n.fst y - f n.snd y - (f n.fst x - f n.snd x)‖ ≤ q * ‖y - x‖
⊢ ‖y - x‖ < r
[PROOFSTEP]
simpa only [dist_eq_norm] using Metric.mem_ball.mp hy
[GOAL]
case inr.left.intro.intro
ι : Type u_1
l : Filter ι
E : Type u_2
inst✝⁴ : NormedAddCommGroup E
𝕜 : Type u_3
inst✝³ : IsROrC 𝕜
inst✝² : NormedSpace 𝕜 E
G : Type u_4
inst✝¹ : NormedAddCommGroup G
inst✝ : NormedSpace 𝕜 G
f : ι → E → G
g : E → G
f' : ι → E → E →L[𝕜] G
g' : E → E →L[𝕜] G
x : E
r : ℝ
hf' :
  ∀ (ε : ℝ),
    ε > 0 →
      ∀ᶠ (n : ι × ι) in l ×ˢ l,
        ∀ (x_1 : E), x_1 ∈ Metric.ball x r → dist (OfNat.ofNat 0 x_1) (f' n.fst x_1 - f' n.snd x_1) < ε
hf : ∀ (n : ι) (y : E), y ∈ Metric.ball x r → HasFDerivAt (f n) (f' n y) y
hfg : Cauchy (map (fun n => f n x) l)
this✝¹ : NormedSpace ℝ E := NormedSpace.restrictScalars ℝ 𝕜 E
this✝ : NeBot l
hr : 0 < r
ε : ℝ
hε : ε > 0
q : ℝ
hqpos : 0 < q
hq : q * r < ε
n : ι × ι
y : E
hy : y ∈ Metric.ball x r
hn : ∀ (x_1 : E), x_1 ∈ Metric.ball x r → ‖f' n.fst x_1 - f' n.snd x_1‖ < q
mvt : ‖f n.fst y - f n.snd y - (f n.fst x - f n.snd x)‖ ≤ q * ‖y - x‖
this : q * ‖y - x‖ < q * r
⊢ q * ‖y - x‖ < ε
[PROOFSTEP]
exact this.trans hq
[GOAL]
case inr.right
ι : Type u_1
l : Filter ι
E : Type u_2
inst✝⁴ : NormedAddCommGroup E
𝕜 : Type u_3
inst✝³ : IsROrC 𝕜
inst✝² : NormedSpace 𝕜 E
G : Type u_4
inst✝¹ : NormedAddCommGroup G
inst✝ : NormedSpace 𝕜 G
f : ι → E → G
g : E → G
f' : ι → E → E →L[𝕜] G
g' : E → E →L[𝕜] G
x : E
r : ℝ
hf' : TendstoUniformlyOn (fun n z => f' n.fst z - f' n.snd z) 0 (l ×ˢ l) (Metric.ball x r)
hf : ∀ (n : ι) (y : E), y ∈ Metric.ball x r → HasFDerivAt (f n) (f' n y) y
hfg : Cauchy (map (fun n => f n x) l)
this✝ : NormedSpace ℝ E := NormedSpace.restrictScalars ℝ 𝕜 E
this : NeBot l
hr : 0 < r
⊢ TendstoUniformlyOn (fun n x_1 => f n.fst x - f n.snd x) 0 (l ×ˢ l) (Metric.ball x r)
[PROOFSTEP]
refine' Metric.tendstoUniformlyOn_iff.mpr fun ε hε => _
[GOAL]
case inr.right
ι : Type u_1
l : Filter ι
E : Type u_2
inst✝⁴ : NormedAddCommGroup E
𝕜 : Type u_3
inst✝³ : IsROrC 𝕜
inst✝² : NormedSpace 𝕜 E
G : Type u_4
inst✝¹ : NormedAddCommGroup G
inst✝ : NormedSpace 𝕜 G
f : ι → E → G
g : E → G
f' : ι → E → E →L[𝕜] G
g' : E → E →L[𝕜] G
x : E
r : ℝ
hf' : TendstoUniformlyOn (fun n z => f' n.fst z - f' n.snd z) 0 (l ×ˢ l) (Metric.ball x r)
hf : ∀ (n : ι) (y : E), y ∈ Metric.ball x r → HasFDerivAt (f n) (f' n y) y
hfg : Cauchy (map (fun n => f n x) l)
this✝ : NormedSpace ℝ E := NormedSpace.restrictScalars ℝ 𝕜 E
this : NeBot l
hr : 0 < r
ε : ℝ
hε : ε > 0
⊢ ∀ᶠ (n : ι × ι) in l ×ˢ l, ∀ (x_1 : E), x_1 ∈ Metric.ball x r → dist (OfNat.ofNat 0 x_1) (f n.fst x - f n.snd x) < ε
[PROOFSTEP]
obtain ⟨t, ht, ht'⟩ := (Metric.cauchy_iff.mp hfg).2 ε hε
[GOAL]
case inr.right.intro.intro
ι : Type u_1
l : Filter ι
E : Type u_2
inst✝⁴ : NormedAddCommGroup E
𝕜 : Type u_3
inst✝³ : IsROrC 𝕜
inst✝² : NormedSpace 𝕜 E
G : Type u_4
inst✝¹ : NormedAddCommGroup G
inst✝ : NormedSpace 𝕜 G
f : ι → E → G
g : E → G
f' : ι → E → E →L[𝕜] G
g' : E → E →L[𝕜] G
x : E
r : ℝ
hf' : TendstoUniformlyOn (fun n z => f' n.fst z - f' n.snd z) 0 (l ×ˢ l) (Metric.ball x r)
hf : ∀ (n : ι) (y : E), y ∈ Metric.ball x r → HasFDerivAt (f n) (f' n y) y
hfg : Cauchy (map (fun n => f n x) l)
this✝ : NormedSpace ℝ E := NormedSpace.restrictScalars ℝ 𝕜 E
this : NeBot l
hr : 0 < r
ε : ℝ
hε : ε > 0
t : Set G
ht : t ∈ map (fun n => f n x) l
ht' : ∀ (x : G), x ∈ t → ∀ (y : G), y ∈ t → dist x y < ε
⊢ ∀ᶠ (n : ι × ι) in l ×ˢ l, ∀ (x_1 : E), x_1 ∈ Metric.ball x r → dist (OfNat.ofNat 0 x_1) (f n.fst x - f n.snd x) < ε
[PROOFSTEP]
rw [eventually_prod_iff]
[GOAL]
case inr.right.intro.intro
ι : Type u_1
l : Filter ι
E : Type u_2
inst✝⁴ : NormedAddCommGroup E
𝕜 : Type u_3
inst✝³ : IsROrC 𝕜
inst✝² : NormedSpace 𝕜 E
G : Type u_4
inst✝¹ : NormedAddCommGroup G
inst✝ : NormedSpace 𝕜 G
f : ι → E → G
g : E → G
f' : ι → E → E →L[𝕜] G
g' : E → E →L[𝕜] G
x : E
r : ℝ
hf' : TendstoUniformlyOn (fun n z => f' n.fst z - f' n.snd z) 0 (l ×ˢ l) (Metric.ball x r)
hf : ∀ (n : ι) (y : E), y ∈ Metric.ball x r → HasFDerivAt (f n) (f' n y) y
hfg : Cauchy (map (fun n => f n x) l)
this✝ : NormedSpace ℝ E := NormedSpace.restrictScalars ℝ 𝕜 E
this : NeBot l
hr : 0 < r
ε : ℝ
hε : ε > 0
t : Set G
ht : t ∈ map (fun n => f n x) l
ht' : ∀ (x : G), x ∈ t → ∀ (y : G), y ∈ t → dist x y < ε
⊢ ∃ pa,
    (∀ᶠ (x : ι) in l, pa x) ∧
      ∃ pb,
        (∀ᶠ (y : ι) in l, pb y) ∧
          ∀ {x_1 : ι},
            pa x_1 →
              ∀ {y : ι},
                pb y →
                  ∀ (x_2 : E),
                    x_2 ∈ Metric.ball x r → dist (OfNat.ofNat 0 x_2) (f (x_1, y).fst x - f (x_1, y).snd x) < ε
[PROOFSTEP]
refine' ⟨fun n => f n x ∈ t, ht, fun n => f n x ∈ t, ht, _⟩
[GOAL]
case inr.right.intro.intro
ι : Type u_1
l : Filter ι
E : Type u_2
inst✝⁴ : NormedAddCommGroup E
𝕜 : Type u_3
inst✝³ : IsROrC 𝕜
inst✝² : NormedSpace 𝕜 E
G : Type u_4
inst✝¹ : NormedAddCommGroup G
inst✝ : NormedSpace 𝕜 G
f : ι → E → G
g : E → G
f' : ι → E → E →L[𝕜] G
g' : E → E →L[𝕜] G
x : E
r : ℝ
hf' : TendstoUniformlyOn (fun n z => f' n.fst z - f' n.snd z) 0 (l ×ˢ l) (Metric.ball x r)
hf : ∀ (n : ι) (y : E), y ∈ Metric.ball x r → HasFDerivAt (f n) (f' n y) y
hfg : Cauchy (map (fun n => f n x) l)
this✝ : NormedSpace ℝ E := NormedSpace.restrictScalars ℝ 𝕜 E
this : NeBot l
hr : 0 < r
ε : ℝ
hε : ε > 0
t : Set G
ht : t ∈ map (fun n => f n x) l
ht' : ∀ (x : G), x ∈ t → ∀ (y : G), y ∈ t → dist x y < ε
⊢ ∀ {x_1 : ι},
    (fun n => f n x ∈ t) x_1 →
      ∀ {y : ι},
        (fun n => f n x ∈ t) y →
          ∀ (x_2 : E), x_2 ∈ Metric.ball x r → dist (OfNat.ofNat 0 x_2) (f (x_1, y).fst x - f (x_1, y).snd x) < ε
[PROOFSTEP]
intro n hn n' hn' z _
[GOAL]
case inr.right.intro.intro
ι : Type u_1
l : Filter ι
E : Type u_2
inst✝⁴ : NormedAddCommGroup E
𝕜 : Type u_3
inst✝³ : IsROrC 𝕜
inst✝² : NormedSpace 𝕜 E
G : Type u_4
inst✝¹ : NormedAddCommGroup G
inst✝ : NormedSpace 𝕜 G
f : ι → E → G
g : E → G
f' : ι → E → E →L[𝕜] G
g' : E → E →L[𝕜] G
x : E
r : ℝ
hf' : TendstoUniformlyOn (fun n z => f' n.fst z - f' n.snd z) 0 (l ×ˢ l) (Metric.ball x r)
hf : ∀ (n : ι) (y : E), y ∈ Metric.ball x r → HasFDerivAt (f n) (f' n y) y
hfg : Cauchy (map (fun n => f n x) l)
this✝ : NormedSpace ℝ E := NormedSpace.restrictScalars ℝ 𝕜 E
this : NeBot l
hr : 0 < r
ε : ℝ
hε : ε > 0
t : Set G
ht : t ∈ map (fun n => f n x) l
ht' : ∀ (x : G), x ∈ t → ∀ (y : G), y ∈ t → dist x y < ε
n : ι
hn : f n x ∈ t
n' : ι
hn' : f n' x ∈ t
z : E
a✝ : z ∈ Metric.ball x r
⊢ dist (OfNat.ofNat 0 z) (f (n, n').fst x - f (n, n').snd x) < ε
[PROOFSTEP]
rw [dist_eq_norm, Pi.zero_apply, zero_sub, norm_neg, ← dist_eq_norm]
[GOAL]
case inr.right.intro.intro
ι : Type u_1
l : Filter ι
E : Type u_2
inst✝⁴ : NormedAddCommGroup E
𝕜 : Type u_3
inst✝³ : IsROrC 𝕜
inst✝² : NormedSpace 𝕜 E
G : Type u_4
inst✝¹ : NormedAddCommGroup G
inst✝ : NormedSpace 𝕜 G
f : ι → E → G
g : E → G
f' : ι → E → E →L[𝕜] G
g' : E → E →L[𝕜] G
x : E
r : ℝ
hf' : TendstoUniformlyOn (fun n z => f' n.fst z - f' n.snd z) 0 (l ×ˢ l) (Metric.ball x r)
hf : ∀ (n : ι) (y : E), y ∈ Metric.ball x r → HasFDerivAt (f n) (f' n y) y
hfg : Cauchy (map (fun n => f n x) l)
this✝ : NormedSpace ℝ E := NormedSpace.restrictScalars ℝ 𝕜 E
this : NeBot l
hr : 0 < r
ε : ℝ
hε : ε > 0
t : Set G
ht : t ∈ map (fun n => f n x) l
ht' : ∀ (x : G), x ∈ t → ∀ (y : G), y ∈ t → dist x y < ε
n : ι
hn : f n x ∈ t
n' : ι
hn' : f n' x ∈ t
z : E
a✝ : z ∈ Metric.ball x r
⊢ dist (f (n, n').fst x) (f (n, n').snd x) < ε
[PROOFSTEP]
exact ht' _ hn _ hn'
[GOAL]
ι : Type u_1
l : Filter ι
E : Type u_2
inst✝⁴ : NormedAddCommGroup E
𝕜 : Type u_3
inst✝³ : IsROrC 𝕜
inst✝² : NormedSpace 𝕜 E
G : Type u_4
inst✝¹ : NormedAddCommGroup G
inst✝ : NormedSpace 𝕜 G
f : ι → E → G
g : E → G
f' : ι → E → E →L[𝕜] G
g' : E → E →L[𝕜] G
x✝ : E
s : Set E
hs : IsOpen s
h's : IsPreconnected s
hf' : UniformCauchySeqOn f' l s
hf : ∀ (n : ι) (y : E), y ∈ s → HasFDerivAt (f n) (f' n y) y
x₀ x : E
hx₀ : x₀ ∈ s
hx : x ∈ s
hfg : Cauchy (map (fun n => f n x₀) l)
⊢ Cauchy (map (fun n => f n x) l)
[PROOFSTEP]
have : NeBot l := (cauchy_map_iff.1 hfg).1
[GOAL]
ι : Type u_1
l : Filter ι
E : Type u_2
inst✝⁴ : NormedAddCommGroup E
𝕜 : Type u_3
inst✝³ : IsROrC 𝕜
inst✝² : NormedSpace 𝕜 E
G : Type u_4
inst✝¹ : NormedAddCommGroup G
inst✝ : NormedSpace 𝕜 G
f : ι → E → G
g : E → G
f' : ι → E → E →L[𝕜] G
g' : E → E →L[𝕜] G
x✝ : E
s : Set E
hs : IsOpen s
h's : IsPreconnected s
hf' : UniformCauchySeqOn f' l s
hf : ∀ (n : ι) (y : E), y ∈ s → HasFDerivAt (f n) (f' n y) y
x₀ x : E
hx₀ : x₀ ∈ s
hx : x ∈ s
hfg : Cauchy (map (fun n => f n x₀) l)
this : NeBot l
⊢ Cauchy (map (fun n => f n x) l)
[PROOFSTEP]
let t := {y | y ∈ s ∧ Cauchy (map (fun n => f n y) l)}
[GOAL]
ι : Type u_1
l : Filter ι
E : Type u_2
inst✝⁴ : NormedAddCommGroup E
𝕜 : Type u_3
inst✝³ : IsROrC 𝕜
inst✝² : NormedSpace 𝕜 E
G : Type u_4
inst✝¹ : NormedAddCommGroup G
inst✝ : NormedSpace 𝕜 G
f : ι → E → G
g : E → G
f' : ι → E → E →L[𝕜] G
g' : E → E →L[𝕜] G
x✝ : E
s : Set E
hs : IsOpen s
h's : IsPreconnected s
hf' : UniformCauchySeqOn f' l s
hf : ∀ (n : ι) (y : E), y ∈ s → HasFDerivAt (f n) (f' n y) y
x₀ x : E
hx₀ : x₀ ∈ s
hx : x ∈ s
hfg : Cauchy (map (fun n => f n x₀) l)
this : NeBot l
t : Set E := {y | y ∈ s ∧ Cauchy (map (fun n => f n y) l)}
⊢ Cauchy (map (fun n => f n x) l)
[PROOFSTEP]
suffices H : s ⊆ t
[GOAL]
ι : Type u_1
l : Filter ι
E : Type u_2
inst✝⁴ : NormedAddCommGroup E
𝕜 : Type u_3
inst✝³ : IsROrC 𝕜
inst✝² : NormedSpace 𝕜 E
G : Type u_4
inst✝¹ : NormedAddCommGroup G
inst✝ : NormedSpace 𝕜 G
f : ι → E → G
g : E → G
f' : ι → E → E →L[𝕜] G
g' : E → E →L[𝕜] G
x✝ : E
s : Set E
hs : IsOpen s
h's : IsPreconnected s
hf' : UniformCauchySeqOn f' l s
hf : ∀ (n : ι) (y : E), y ∈ s → HasFDerivAt (f n) (f' n y) y
x₀ x : E
hx₀ : x₀ ∈ s
hx : x ∈ s
hfg : Cauchy (map (fun n => f n x₀) l)
this : NeBot l
t : Set E := {y | y ∈ s ∧ Cauchy (map (fun n => f n y) l)}
H : s ⊆ t
⊢ Cauchy (map (fun n => f n x) l)
case H
ι : Type u_1
l : Filter ι
E : Type u_2
inst✝⁴ : NormedAddCommGroup E
𝕜 : Type u_3
inst✝³ : IsROrC 𝕜
inst✝² : NormedSpace 𝕜 E
G : Type u_4
inst✝¹ : NormedAddCommGroup G
inst✝ : NormedSpace 𝕜 G
f : ι → E → G
g : E → G
f' : ι → E → E →L[𝕜] G
g' : E → E →L[𝕜] G
x✝ : E
s : Set E
hs : IsOpen s
h's : IsPreconnected s
hf' : UniformCauchySeqOn f' l s
hf : ∀ (n : ι) (y : E), y ∈ s → HasFDerivAt (f n) (f' n y) y
x₀ x : E
hx₀ : x₀ ∈ s
hx : x ∈ s
hfg : Cauchy (map (fun n => f n x₀) l)
this : NeBot l
t : Set E := {y | y ∈ s ∧ Cauchy (map (fun n => f n y) l)}
⊢ s ⊆ t
[PROOFSTEP]
exact (H hx).2
[GOAL]
case H
ι : Type u_1
l : Filter ι
E : Type u_2
inst✝⁴ : NormedAddCommGroup E
𝕜 : Type u_3
inst✝³ : IsROrC 𝕜
inst✝² : NormedSpace 𝕜 E
G : Type u_4
inst✝¹ : NormedAddCommGroup G
inst✝ : NormedSpace 𝕜 G
f : ι → E → G
g : E → G
f' : ι → E → E →L[𝕜] G
g' : E → E →L[𝕜] G
x✝ : E
s : Set E
hs : IsOpen s
h's : IsPreconnected s
hf' : UniformCauchySeqOn f' l s
hf : ∀ (n : ι) (y : E), y ∈ s → HasFDerivAt (f n) (f' n y) y
x₀ x : E
hx₀ : x₀ ∈ s
hx : x ∈ s
hfg : Cauchy (map (fun n => f n x₀) l)
this : NeBot l
t : Set E := {y | y ∈ s ∧ Cauchy (map (fun n => f n y) l)}
⊢ s ⊆ t
[PROOFSTEP]
have A : ∀ x ε, x ∈ t → Metric.ball x ε ⊆ s → Metric.ball x ε ⊆ t := fun x ε xt hx y hy =>
  ⟨hx hy, (uniformCauchySeqOn_ball_of_fderiv (hf'.mono hx) (fun n y hy => hf n y (hx hy)) xt.2).cauchy_map hy⟩
[GOAL]
case H
ι : Type u_1
l : Filter ι
E : Type u_2
inst✝⁴ : NormedAddCommGroup E
𝕜 : Type u_3
inst✝³ : IsROrC 𝕜
inst✝² : NormedSpace 𝕜 E
G : Type u_4
inst✝¹ : NormedAddCommGroup G
inst✝ : NormedSpace 𝕜 G
f : ι → E → G
g : E → G
f' : ι → E → E →L[𝕜] G
g' : E → E →L[𝕜] G
x✝ : E
s : Set E
hs : IsOpen s
h's : IsPreconnected s
hf' : UniformCauchySeqOn f' l s
hf : ∀ (n : ι) (y : E), y ∈ s → HasFDerivAt (f n) (f' n y) y
x₀ x : E
hx₀ : x₀ ∈ s
hx : x ∈ s
hfg : Cauchy (map (fun n => f n x₀) l)
this : NeBot l
t : Set E := {y | y ∈ s ∧ Cauchy (map (fun n => f n y) l)}
A : ∀ (x : E) (ε : ℝ), x ∈ t → Metric.ball x ε ⊆ s → Metric.ball x ε ⊆ t
⊢ s ⊆ t
[PROOFSTEP]
have open_t : IsOpen t := by
  rw [Metric.isOpen_iff]
  intro x hx
  rcases Metric.isOpen_iff.1 hs x hx.1 with ⟨ε, εpos, hε⟩
  exact ⟨ε, εpos, A x ε hx hε⟩
[GOAL]
ι : Type u_1
l : Filter ι
E : Type u_2
inst✝⁴ : NormedAddCommGroup E
𝕜 : Type u_3
inst✝³ : IsROrC 𝕜
inst✝² : NormedSpace 𝕜 E
G : Type u_4
inst✝¹ : NormedAddCommGroup G
inst✝ : NormedSpace 𝕜 G
f : ι → E → G
g : E → G
f' : ι → E → E →L[𝕜] G
g' : E → E →L[𝕜] G
x✝ : E
s : Set E
hs : IsOpen s
h's : IsPreconnected s
hf' : UniformCauchySeqOn f' l s
hf : ∀ (n : ι) (y : E), y ∈ s → HasFDerivAt (f n) (f' n y) y
x₀ x : E
hx₀ : x₀ ∈ s
hx : x ∈ s
hfg : Cauchy (map (fun n => f n x₀) l)
this : NeBot l
t : Set E := {y | y ∈ s ∧ Cauchy (map (fun n => f n y) l)}
A : ∀ (x : E) (ε : ℝ), x ∈ t → Metric.ball x ε ⊆ s → Metric.ball x ε ⊆ t
⊢ IsOpen t
[PROOFSTEP]
rw [Metric.isOpen_iff]
[GOAL]
ι : Type u_1
l : Filter ι
E : Type u_2
inst✝⁴ : NormedAddCommGroup E
𝕜 : Type u_3
inst✝³ : IsROrC 𝕜
inst✝² : NormedSpace 𝕜 E
G : Type u_4
inst✝¹ : NormedAddCommGroup G
inst✝ : NormedSpace 𝕜 G
f : ι → E → G
g : E → G
f' : ι → E → E →L[𝕜] G
g' : E → E →L[𝕜] G
x✝ : E
s : Set E
hs : IsOpen s
h's : IsPreconnected s
hf' : UniformCauchySeqOn f' l s
hf : ∀ (n : ι) (y : E), y ∈ s → HasFDerivAt (f n) (f' n y) y
x₀ x : E
hx₀ : x₀ ∈ s
hx : x ∈ s
hfg : Cauchy (map (fun n => f n x₀) l)
this : NeBot l
t : Set E := {y | y ∈ s ∧ Cauchy (map (fun n => f n y) l)}
A : ∀ (x : E) (ε : ℝ), x ∈ t → Metric.ball x ε ⊆ s → Metric.ball x ε ⊆ t
⊢ ∀ (x : E), x ∈ t → ∃ ε, ε > 0 ∧ Metric.ball x ε ⊆ t
[PROOFSTEP]
intro x hx
[GOAL]
ι : Type u_1
l : Filter ι
E : Type u_2
inst✝⁴ : NormedAddCommGroup E
𝕜 : Type u_3
inst✝³ : IsROrC 𝕜
inst✝² : NormedSpace 𝕜 E
G : Type u_4
inst✝¹ : NormedAddCommGroup G
inst✝ : NormedSpace 𝕜 G
f : ι → E → G
g : E → G
f' : ι → E → E →L[𝕜] G
g' : E → E →L[𝕜] G
x✝¹ : E
s : Set E
hs : IsOpen s
h's : IsPreconnected s
hf' : UniformCauchySeqOn f' l s
hf : ∀ (n : ι) (y : E), y ∈ s → HasFDerivAt (f n) (f' n y) y
x₀ x✝ : E
hx₀ : x₀ ∈ s
hx✝ : x✝ ∈ s
hfg : Cauchy (map (fun n => f n x₀) l)
this : NeBot l
t : Set E := {y | y ∈ s ∧ Cauchy (map (fun n => f n y) l)}
A : ∀ (x : E) (ε : ℝ), x ∈ t → Metric.ball x ε ⊆ s → Metric.ball x ε ⊆ t
x : E
hx : x ∈ t
⊢ ∃ ε, ε > 0 ∧ Metric.ball x ε ⊆ t
[PROOFSTEP]
rcases Metric.isOpen_iff.1 hs x hx.1 with ⟨ε, εpos, hε⟩
[GOAL]
case intro.intro
ι : Type u_1
l : Filter ι
E : Type u_2
inst✝⁴ : NormedAddCommGroup E
𝕜 : Type u_3
inst✝³ : IsROrC 𝕜
inst✝² : NormedSpace 𝕜 E
G : Type u_4
inst✝¹ : NormedAddCommGroup G
inst✝ : NormedSpace 𝕜 G
f : ι → E → G
g : E → G
f' : ι → E → E →L[𝕜] G
g' : E → E →L[𝕜] G
x✝¹ : E
s : Set E
hs : IsOpen s
h's : IsPreconnected s
hf' : UniformCauchySeqOn f' l s
hf : ∀ (n : ι) (y : E), y ∈ s → HasFDerivAt (f n) (f' n y) y
x₀ x✝ : E
hx₀ : x₀ ∈ s
hx✝ : x✝ ∈ s
hfg : Cauchy (map (fun n => f n x₀) l)
this : NeBot l
t : Set E := {y | y ∈ s ∧ Cauchy (map (fun n => f n y) l)}
A : ∀ (x : E) (ε : ℝ), x ∈ t → Metric.ball x ε ⊆ s → Metric.ball x ε ⊆ t
x : E
hx : x ∈ t
ε : ℝ
εpos : ε > 0
hε : Metric.ball x ε ⊆ s
⊢ ∃ ε, ε > 0 ∧ Metric.ball x ε ⊆ t
[PROOFSTEP]
exact ⟨ε, εpos, A x ε hx hε⟩
[GOAL]
case H
ι : Type u_1
l : Filter ι
E : Type u_2
inst✝⁴ : NormedAddCommGroup E
𝕜 : Type u_3
inst✝³ : IsROrC 𝕜
inst✝² : NormedSpace 𝕜 E
G : Type u_4
inst✝¹ : NormedAddCommGroup G
inst✝ : NormedSpace 𝕜 G
f : ι → E → G
g : E → G
f' : ι → E → E →L[𝕜] G
g' : E → E →L[𝕜] G
x✝ : E
s : Set E
hs : IsOpen s
h's : IsPreconnected s
hf' : UniformCauchySeqOn f' l s
hf : ∀ (n : ι) (y : E), y ∈ s → HasFDerivAt (f n) (f' n y) y
x₀ x : E
hx₀ : x₀ ∈ s
hx : x ∈ s
hfg : Cauchy (map (fun n => f n x₀) l)
this : NeBot l
t : Set E := {y | y ∈ s ∧ Cauchy (map (fun n => f n y) l)}
A : ∀ (x : E) (ε : ℝ), x ∈ t → Metric.ball x ε ⊆ s → Metric.ball x ε ⊆ t
open_t : IsOpen t
⊢ s ⊆ t
[PROOFSTEP]
have st_nonempty : (s ∩ t).Nonempty := ⟨x₀, hx₀, ⟨hx₀, hfg⟩⟩
[GOAL]
case H
ι : Type u_1
l : Filter ι
E : Type u_2
inst✝⁴ : NormedAddCommGroup E
𝕜 : Type u_3
inst✝³ : IsROrC 𝕜
inst✝² : NormedSpace 𝕜 E
G : Type u_4
inst✝¹ : NormedAddCommGroup G
inst✝ : NormedSpace 𝕜 G
f : ι → E → G
g : E → G
f' : ι → E → E →L[𝕜] G
g' : E → E →L[𝕜] G
x✝ : E
s : Set E
hs : IsOpen s
h's : IsPreconnected s
hf' : UniformCauchySeqOn f' l s
hf : ∀ (n : ι) (y : E), y ∈ s → HasFDerivAt (f n) (f' n y) y
x₀ x : E
hx₀ : x₀ ∈ s
hx : x ∈ s
hfg : Cauchy (map (fun n => f n x₀) l)
this : NeBot l
t : Set E := {y | y ∈ s ∧ Cauchy (map (fun n => f n y) l)}
A : ∀ (x : E) (ε : ℝ), x ∈ t → Metric.ball x ε ⊆ s → Metric.ball x ε ⊆ t
open_t : IsOpen t
st_nonempty : Set.Nonempty (s ∩ t)
⊢ s ⊆ t
[PROOFSTEP]
suffices H : closure t ∩ s ⊆ t
[GOAL]
case H
ι : Type u_1
l : Filter ι
E : Type u_2
inst✝⁴ : NormedAddCommGroup E
𝕜 : Type u_3
inst✝³ : IsROrC 𝕜
inst✝² : NormedSpace 𝕜 E
G : Type u_4
inst✝¹ : NormedAddCommGroup G
inst✝ : NormedSpace 𝕜 G
f : ι → E → G
g : E → G
f' : ι → E → E →L[𝕜] G
g' : E → E →L[𝕜] G
x✝ : E
s : Set E
hs : IsOpen s
h's : IsPreconnected s
hf' : UniformCauchySeqOn f' l s
hf : ∀ (n : ι) (y : E), y ∈ s → HasFDerivAt (f n) (f' n y) y
x₀ x : E
hx₀ : x₀ ∈ s
hx : x ∈ s
hfg : Cauchy (map (fun n => f n x₀) l)
this : NeBot l
t : Set E := {y | y ∈ s ∧ Cauchy (map (fun n => f n y) l)}
A : ∀ (x : E) (ε : ℝ), x ∈ t → Metric.ball x ε ⊆ s → Metric.ball x ε ⊆ t
open_t : IsOpen t
st_nonempty : Set.Nonempty (s ∩ t)
H : closure t ∩ s ⊆ t
⊢ s ⊆ t
case H
ι : Type u_1
l : Filter ι
E : Type u_2
inst✝⁴ : NormedAddCommGroup E
𝕜 : Type u_3
inst✝³ : IsROrC 𝕜
inst✝² : NormedSpace 𝕜 E
G : Type u_4
inst✝¹ : NormedAddCommGroup G
inst✝ : NormedSpace 𝕜 G
f : ι → E → G
g : E → G
f' : ι → E → E →L[𝕜] G
g' : E → E →L[𝕜] G
x✝ : E
s : Set E
hs : IsOpen s
h's : IsPreconnected s
hf' : UniformCauchySeqOn f' l s
hf : ∀ (n : ι) (y : E), y ∈ s → HasFDerivAt (f n) (f' n y) y
x₀ x : E
hx₀ : x₀ ∈ s
hx : x ∈ s
hfg : Cauchy (map (fun n => f n x₀) l)
this : NeBot l
t : Set E := {y | y ∈ s ∧ Cauchy (map (fun n => f n y) l)}
A : ∀ (x : E) (ε : ℝ), x ∈ t → Metric.ball x ε ⊆ s → Metric.ball x ε ⊆ t
open_t : IsOpen t
st_nonempty : Set.Nonempty (s ∩ t)
⊢ closure t ∩ s ⊆ t
[PROOFSTEP]
exact h's.subset_of_closure_inter_subset open_t st_nonempty H
[GOAL]
case H
ι : Type u_1
l : Filter ι
E : Type u_2
inst✝⁴ : NormedAddCommGroup E
𝕜 : Type u_3
inst✝³ : IsROrC 𝕜
inst✝² : NormedSpace 𝕜 E
G : Type u_4
inst✝¹ : NormedAddCommGroup G
inst✝ : NormedSpace 𝕜 G
f : ι → E → G
g : E → G
f' : ι → E → E →L[𝕜] G
g' : E → E →L[𝕜] G
x✝ : E
s : Set E
hs : IsOpen s
h's : IsPreconnected s
hf' : UniformCauchySeqOn f' l s
hf : ∀ (n : ι) (y : E), y ∈ s → HasFDerivAt (f n) (f' n y) y
x₀ x : E
hx₀ : x₀ ∈ s
hx : x ∈ s
hfg : Cauchy (map (fun n => f n x₀) l)
this : NeBot l
t : Set E := {y | y ∈ s ∧ Cauchy (map (fun n => f n y) l)}
A : ∀ (x : E) (ε : ℝ), x ∈ t → Metric.ball x ε ⊆ s → Metric.ball x ε ⊆ t
open_t : IsOpen t
st_nonempty : Set.Nonempty (s ∩ t)
⊢ closure t ∩ s ⊆ t
[PROOFSTEP]
rintro x ⟨xt, xs⟩
[GOAL]
case H.intro
ι : Type u_1
l : Filter ι
E : Type u_2
inst✝⁴ : NormedAddCommGroup E
𝕜 : Type u_3
inst✝³ : IsROrC 𝕜
inst✝² : NormedSpace 𝕜 E
G : Type u_4
inst✝¹ : NormedAddCommGroup G
inst✝ : NormedSpace 𝕜 G
f : ι → E → G
g : E → G
f' : ι → E → E →L[𝕜] G
g' : E → E →L[𝕜] G
x✝¹ : E
s : Set E
hs : IsOpen s
h's : IsPreconnected s
hf' : UniformCauchySeqOn f' l s
hf : ∀ (n : ι) (y : E), y ∈ s → HasFDerivAt (f n) (f' n y) y
x₀ x✝ : E
hx₀ : x₀ ∈ s
hx : x✝ ∈ s
hfg : Cauchy (map (fun n => f n x₀) l)
this : NeBot l
t : Set E := {y | y ∈ s ∧ Cauchy (map (fun n => f n y) l)}
A : ∀ (x : E) (ε : ℝ), x ∈ t → Metric.ball x ε ⊆ s → Metric.ball x ε ⊆ t
open_t : IsOpen t
st_nonempty : Set.Nonempty (s ∩ t)
x : E
xt : x ∈ closure t
xs : x ∈ s
⊢ x ∈ t
[PROOFSTEP]
obtain ⟨ε, εpos, hε⟩ : ∃ (ε : ℝ), ε > 0 ∧ Metric.ball x ε ⊆ s := Metric.isOpen_iff.1 hs x xs
[GOAL]
case H.intro.intro.intro
ι : Type u_1
l : Filter ι
E : Type u_2
inst✝⁴ : NormedAddCommGroup E
𝕜 : Type u_3
inst✝³ : IsROrC 𝕜
inst✝² : NormedSpace 𝕜 E
G : Type u_4
inst✝¹ : NormedAddCommGroup G
inst✝ : NormedSpace 𝕜 G
f : ι → E → G
g : E → G
f' : ι → E → E →L[𝕜] G
g' : E → E →L[𝕜] G
x✝¹ : E
s : Set E
hs : IsOpen s
h's : IsPreconnected s
hf' : UniformCauchySeqOn f' l s
hf : ∀ (n : ι) (y : E), y ∈ s → HasFDerivAt (f n) (f' n y) y
x₀ x✝ : E
hx₀ : x₀ ∈ s
hx : x✝ ∈ s
hfg : Cauchy (map (fun n => f n x₀) l)
this : NeBot l
t : Set E := {y | y ∈ s ∧ Cauchy (map (fun n => f n y) l)}
A : ∀ (x : E) (ε : ℝ), x ∈ t → Metric.ball x ε ⊆ s → Metric.ball x ε ⊆ t
open_t : IsOpen t
st_nonempty : Set.Nonempty (s ∩ t)
x : E
xt : x ∈ closure t
xs : x ∈ s
ε : ℝ
εpos : ε > 0
hε : Metric.ball x ε ⊆ s
⊢ x ∈ t
[PROOFSTEP]
obtain ⟨y, yt, hxy⟩ : ∃ (y : E), y ∈ t ∧ dist x y < ε / 2 := Metric.mem_closure_iff.1 xt _ (half_pos εpos)
[GOAL]
case H.intro.intro.intro.intro.intro
ι : Type u_1
l : Filter ι
E : Type u_2
inst✝⁴ : NormedAddCommGroup E
𝕜 : Type u_3
inst✝³ : IsROrC 𝕜
inst✝² : NormedSpace 𝕜 E
G : Type u_4
inst✝¹ : NormedAddCommGroup G
inst✝ : NormedSpace 𝕜 G
f : ι → E → G
g : E → G
f' : ι → E → E →L[𝕜] G
g' : E → E →L[𝕜] G
x✝¹ : E
s : Set E
hs : IsOpen s
h's : IsPreconnected s
hf' : UniformCauchySeqOn f' l s
hf : ∀ (n : ι) (y : E), y ∈ s → HasFDerivAt (f n) (f' n y) y
x₀ x✝ : E
hx₀ : x₀ ∈ s
hx : x✝ ∈ s
hfg : Cauchy (map (fun n => f n x₀) l)
this : NeBot l
t : Set E := {y | y ∈ s ∧ Cauchy (map (fun n => f n y) l)}
A : ∀ (x : E) (ε : ℝ), x ∈ t → Metric.ball x ε ⊆ s → Metric.ball x ε ⊆ t
open_t : IsOpen t
st_nonempty : Set.Nonempty (s ∩ t)
x : E
xt : x ∈ closure t
xs : x ∈ s
ε : ℝ
εpos : ε > 0
hε : Metric.ball x ε ⊆ s
y : E
yt : y ∈ t
hxy : dist x y < ε / 2
⊢ x ∈ t
[PROOFSTEP]
have B : Metric.ball y (ε / 2) ⊆ Metric.ball x ε := by apply Metric.ball_subset_ball'; rw [dist_comm]; linarith
[GOAL]
ι : Type u_1
l : Filter ι
E : Type u_2
inst✝⁴ : NormedAddCommGroup E
𝕜 : Type u_3
inst✝³ : IsROrC 𝕜
inst✝² : NormedSpace 𝕜 E
G : Type u_4
inst✝¹ : NormedAddCommGroup G
inst✝ : NormedSpace 𝕜 G
f : ι → E → G
g : E → G
f' : ι → E → E →L[𝕜] G
g' : E → E →L[𝕜] G
x✝¹ : E
s : Set E
hs : IsOpen s
h's : IsPreconnected s
hf' : UniformCauchySeqOn f' l s
hf : ∀ (n : ι) (y : E), y ∈ s → HasFDerivAt (f n) (f' n y) y
x₀ x✝ : E
hx₀ : x₀ ∈ s
hx : x✝ ∈ s
hfg : Cauchy (map (fun n => f n x₀) l)
this : NeBot l
t : Set E := {y | y ∈ s ∧ Cauchy (map (fun n => f n y) l)}
A : ∀ (x : E) (ε : ℝ), x ∈ t → Metric.ball x ε ⊆ s → Metric.ball x ε ⊆ t
open_t : IsOpen t
st_nonempty : Set.Nonempty (s ∩ t)
x : E
xt : x ∈ closure t
xs : x ∈ s
ε : ℝ
εpos : ε > 0
hε : Metric.ball x ε ⊆ s
y : E
yt : y ∈ t
hxy : dist x y < ε / 2
⊢ Metric.ball y (ε / 2) ⊆ Metric.ball x ε
[PROOFSTEP]
apply Metric.ball_subset_ball'
[GOAL]
case h
ι : Type u_1
l : Filter ι
E : Type u_2
inst✝⁴ : NormedAddCommGroup E
𝕜 : Type u_3
inst✝³ : IsROrC 𝕜
inst✝² : NormedSpace 𝕜 E
G : Type u_4
inst✝¹ : NormedAddCommGroup G
inst✝ : NormedSpace 𝕜 G
f : ι → E → G
g : E → G
f' : ι → E → E →L[𝕜] G
g' : E → E →L[𝕜] G
x✝¹ : E
s : Set E
hs : IsOpen s
h's : IsPreconnected s
hf' : UniformCauchySeqOn f' l s
hf : ∀ (n : ι) (y : E), y ∈ s → HasFDerivAt (f n) (f' n y) y
x₀ x✝ : E
hx₀ : x₀ ∈ s
hx : x✝ ∈ s
hfg : Cauchy (map (fun n => f n x₀) l)
this : NeBot l
t : Set E := {y | y ∈ s ∧ Cauchy (map (fun n => f n y) l)}
A : ∀ (x : E) (ε : ℝ), x ∈ t → Metric.ball x ε ⊆ s → Metric.ball x ε ⊆ t
open_t : IsOpen t
st_nonempty : Set.Nonempty (s ∩ t)
x : E
xt : x ∈ closure t
xs : x ∈ s
ε : ℝ
εpos : ε > 0
hε : Metric.ball x ε ⊆ s
y : E
yt : y ∈ t
hxy : dist x y < ε / 2
⊢ ε / 2 + dist y x ≤ ε
[PROOFSTEP]
rw [dist_comm]
[GOAL]
case h
ι : Type u_1
l : Filter ι
E : Type u_2
inst✝⁴ : NormedAddCommGroup E
𝕜 : Type u_3
inst✝³ : IsROrC 𝕜
inst✝² : NormedSpace 𝕜 E
G : Type u_4
inst✝¹ : NormedAddCommGroup G
inst✝ : NormedSpace 𝕜 G
f : ι → E → G
g : E → G
f' : ι → E → E →L[𝕜] G
g' : E → E →L[𝕜] G
x✝¹ : E
s : Set E
hs : IsOpen s
h's : IsPreconnected s
hf' : UniformCauchySeqOn f' l s
hf : ∀ (n : ι) (y : E), y ∈ s → HasFDerivAt (f n) (f' n y) y
x₀ x✝ : E
hx₀ : x₀ ∈ s
hx : x✝ ∈ s
hfg : Cauchy (map (fun n => f n x₀) l)
this : NeBot l
t : Set E := {y | y ∈ s ∧ Cauchy (map (fun n => f n y) l)}
A : ∀ (x : E) (ε : ℝ), x ∈ t → Metric.ball x ε ⊆ s → Metric.ball x ε ⊆ t
open_t : IsOpen t
st_nonempty : Set.Nonempty (s ∩ t)
x : E
xt : x ∈ closure t
xs : x ∈ s
ε : ℝ
εpos : ε > 0
hε : Metric.ball x ε ⊆ s
y : E
yt : y ∈ t
hxy : dist x y < ε / 2
⊢ ε / 2 + dist x y ≤ ε
[PROOFSTEP]
linarith
[GOAL]
case H.intro.intro.intro.intro.intro
ι : Type u_1
l : Filter ι
E : Type u_2
inst✝⁴ : NormedAddCommGroup E
𝕜 : Type u_3
inst✝³ : IsROrC 𝕜
inst✝² : NormedSpace 𝕜 E
G : Type u_4
inst✝¹ : NormedAddCommGroup G
inst✝ : NormedSpace 𝕜 G
f : ι → E → G
g : E → G
f' : ι → E → E →L[𝕜] G
g' : E → E →L[𝕜] G
x✝¹ : E
s : Set E
hs : IsOpen s
h's : IsPreconnected s
hf' : UniformCauchySeqOn f' l s
hf : ∀ (n : ι) (y : E), y ∈ s → HasFDerivAt (f n) (f' n y) y
x₀ x✝ : E
hx₀ : x₀ ∈ s
hx : x✝ ∈ s
hfg : Cauchy (map (fun n => f n x₀) l)
this : NeBot l
t : Set E := {y | y ∈ s ∧ Cauchy (map (fun n => f n y) l)}
A : ∀ (x : E) (ε : ℝ), x ∈ t → Metric.ball x ε ⊆ s → Metric.ball x ε ⊆ t
open_t : IsOpen t
st_nonempty : Set.Nonempty (s ∩ t)
x : E
xt : x ∈ closure t
xs : x ∈ s
ε : ℝ
εpos : ε > 0
hε : Metric.ball x ε ⊆ s
y : E
yt : y ∈ t
hxy : dist x y < ε / 2
B : Metric.ball y (ε / 2) ⊆ Metric.ball x ε
⊢ x ∈ t
[PROOFSTEP]
exact A y (ε / 2) yt (B.trans hε) (Metric.mem_ball.2 hxy)
[GOAL]
ι : Type u_1
l : Filter ι
E : Type u_2
inst✝⁴ : NormedAddCommGroup E
𝕜 : Type u_3
inst✝³ : IsROrC 𝕜
inst✝² : NormedSpace 𝕜 E
G : Type u_4
inst✝¹ : NormedAddCommGroup G
inst✝ : NormedSpace 𝕜 G
f : ι → E → G
g : E → G
f' : ι → E → E →L[𝕜] G
g' : E → E →L[𝕜] G
x : E
hf' : TendstoUniformlyOnFilter f' g' l (𝓝 x)
hf : ∀ᶠ (n : ι × E) in l ×ˢ 𝓝 x, HasFDerivAt (f n.fst) (f' n.fst n.snd) n.snd
hfg : ∀ᶠ (y : E) in 𝓝 x, Tendsto (fun n => f n y) l (𝓝 (g y))
⊢ TendstoUniformlyOnFilter (fun n y => (↑‖y - x‖)⁻¹ • (f n y - f n x)) (fun y => (↑‖y - x‖)⁻¹ • (g y - g x)) l (𝓝 x)
[PROOFSTEP]
let : NormedSpace ℝ E
[GOAL]
case this
ι : Type u_1
l : Filter ι
E : Type u_2
inst✝⁴ : NormedAddCommGroup E
𝕜 : Type u_3
inst✝³ : IsROrC 𝕜
inst✝² : NormedSpace 𝕜 E
G : Type u_4
inst✝¹ : NormedAddCommGroup G
inst✝ : NormedSpace 𝕜 G
f : ι → E → G
g : E → G
f' : ι → E → E →L[𝕜] G
g' : E → E →L[𝕜] G
x : E
hf' : TendstoUniformlyOnFilter f' g' l (𝓝 x)
hf : ∀ᶠ (n : ι × E) in l ×ˢ 𝓝 x, HasFDerivAt (f n.fst) (f' n.fst n.snd) n.snd
hfg : ∀ᶠ (y : E) in 𝓝 x, Tendsto (fun n => f n y) l (𝓝 (g y))
⊢ NormedSpace ℝ E
ι : Type u_1
l : Filter ι
E : Type u_2
inst✝⁴ : NormedAddCommGroup E
𝕜 : Type u_3
inst✝³ : IsROrC 𝕜
inst✝² : NormedSpace 𝕜 E
G : Type u_4
inst✝¹ : NormedAddCommGroup G
inst✝ : NormedSpace 𝕜 G
f : ι → E → G
g : E → G
f' : ι → E → E →L[𝕜] G
g' : E → E →L[𝕜] G
x : E
hf' : TendstoUniformlyOnFilter f' g' l (𝓝 x)
hf : ∀ᶠ (n : ι × E) in l ×ˢ 𝓝 x, HasFDerivAt (f n.fst) (f' n.fst n.snd) n.snd
hfg : ∀ᶠ (y : E) in 𝓝 x, Tendsto (fun n => f n y) l (𝓝 (g y))
this : NormedSpace ℝ E := ?this
⊢ TendstoUniformlyOnFilter (fun n y => (↑‖y - x‖)⁻¹ • (f n y - f n x)) (fun y => (↑‖y - x‖)⁻¹ • (g y - g x)) l (𝓝 x)
[PROOFSTEP]
exact NormedSpace.restrictScalars ℝ 𝕜 _
[GOAL]
ι : Type u_1
l : Filter ι
E : Type u_2
inst✝⁴ : NormedAddCommGroup E
𝕜 : Type u_3
inst✝³ : IsROrC 𝕜
inst✝² : NormedSpace 𝕜 E
G : Type u_4
inst✝¹ : NormedAddCommGroup G
inst✝ : NormedSpace 𝕜 G
f : ι → E → G
g : E → G
f' : ι → E → E →L[𝕜] G
g' : E → E →L[𝕜] G
x : E
hf' : TendstoUniformlyOnFilter f' g' l (𝓝 x)
hf : ∀ᶠ (n : ι × E) in l ×ˢ 𝓝 x, HasFDerivAt (f n.fst) (f' n.fst n.snd) n.snd
hfg : ∀ᶠ (y : E) in 𝓝 x, Tendsto (fun n => f n y) l (𝓝 (g y))
this : NormedSpace ℝ E := NormedSpace.restrictScalars ℝ 𝕜 E
⊢ TendstoUniformlyOnFilter (fun n y => (↑‖y - x‖)⁻¹ • (f n y - f n x)) (fun y => (↑‖y - x‖)⁻¹ • (g y - g x)) l (𝓝 x)
[PROOFSTEP]
rcases eq_or_ne l ⊥ with (hl | hl)
[GOAL]
case inl
ι : Type u_1
l : Filter ι
E : Type u_2
inst✝⁴ : NormedAddCommGroup E
𝕜 : Type u_3
inst✝³ : IsROrC 𝕜
inst✝² : NormedSpace 𝕜 E
G : Type u_4
inst✝¹ : NormedAddCommGroup G
inst✝ : NormedSpace 𝕜 G
f : ι → E → G
g : E → G
f' : ι → E → E →L[𝕜] G
g' : E → E →L[𝕜] G
x : E
hf' : TendstoUniformlyOnFilter f' g' l (𝓝 x)
hf : ∀ᶠ (n : ι × E) in l ×ˢ 𝓝 x, HasFDerivAt (f n.fst) (f' n.fst n.snd) n.snd
hfg : ∀ᶠ (y : E) in 𝓝 x, Tendsto (fun n => f n y) l (𝓝 (g y))
this : NormedSpace ℝ E := NormedSpace.restrictScalars ℝ 𝕜 E
hl : l = ⊥
⊢ TendstoUniformlyOnFilter (fun n y => (↑‖y - x‖)⁻¹ • (f n y - f n x)) (fun y => (↑‖y - x‖)⁻¹ • (g y - g x)) l (𝓝 x)
[PROOFSTEP]
simp only [hl, TendstoUniformlyOnFilter, bot_prod, eventually_bot, imp_true_iff]
[GOAL]
case inr
ι : Type u_1
l : Filter ι
E : Type u_2
inst✝⁴ : NormedAddCommGroup E
𝕜 : Type u_3
inst✝³ : IsROrC 𝕜
inst✝² : NormedSpace 𝕜 E
G : Type u_4
inst✝¹ : NormedAddCommGroup G
inst✝ : NormedSpace 𝕜 G
f : ι → E → G
g : E → G
f' : ι → E → E →L[𝕜] G
g' : E → E →L[𝕜] G
x : E
hf' : TendstoUniformlyOnFilter f' g' l (𝓝 x)
hf : ∀ᶠ (n : ι × E) in l ×ˢ 𝓝 x, HasFDerivAt (f n.fst) (f' n.fst n.snd) n.snd
hfg : ∀ᶠ (y : E) in 𝓝 x, Tendsto (fun n => f n y) l (𝓝 (g y))
this : NormedSpace ℝ E := NormedSpace.restrictScalars ℝ 𝕜 E
hl : l ≠ ⊥
⊢ TendstoUniformlyOnFilter (fun n y => (↑‖y - x‖)⁻¹ • (f n y - f n x)) (fun y => (↑‖y - x‖)⁻¹ • (g y - g x)) l (𝓝 x)
[PROOFSTEP]
haveI : NeBot l := ⟨hl⟩
[GOAL]
case inr
ι : Type u_1
l : Filter ι
E : Type u_2
inst✝⁴ : NormedAddCommGroup E
𝕜 : Type u_3
inst✝³ : IsROrC 𝕜
inst✝² : NormedSpace 𝕜 E
G : Type u_4
inst✝¹ : NormedAddCommGroup G
inst✝ : NormedSpace 𝕜 G
f : ι → E → G
g : E → G
f' : ι → E → E →L[𝕜] G
g' : E → E →L[𝕜] G
x : E
hf' : TendstoUniformlyOnFilter f' g' l (𝓝 x)
hf : ∀ᶠ (n : ι × E) in l ×ˢ 𝓝 x, HasFDerivAt (f n.fst) (f' n.fst n.snd) n.snd
hfg : ∀ᶠ (y : E) in 𝓝 x, Tendsto (fun n => f n y) l (𝓝 (g y))
this✝ : NormedSpace ℝ E := NormedSpace.restrictScalars ℝ 𝕜 E
hl : l ≠ ⊥
this : NeBot l
⊢ TendstoUniformlyOnFilter (fun n y => (↑‖y - x‖)⁻¹ • (f n y - f n x)) (fun y => (↑‖y - x‖)⁻¹ • (g y - g x)) l (𝓝 x)
[PROOFSTEP]
refine'
  UniformCauchySeqOnFilter.tendstoUniformlyOnFilter_of_tendsto _
    ((hfg.and (eventually_const.mpr hfg.self_of_nhds)).mono fun y hy => (hy.1.sub hy.2).const_smul _)
[GOAL]
case inr
ι : Type u_1
l : Filter ι
E : Type u_2
inst✝⁴ : NormedAddCommGroup E
𝕜 : Type u_3
inst✝³ : IsROrC 𝕜
inst✝² : NormedSpace 𝕜 E
G : Type u_4
inst✝¹ : NormedAddCommGroup G
inst✝ : NormedSpace 𝕜 G
f : ι → E → G
g : E → G
f' : ι → E → E →L[𝕜] G
g' : E → E →L[𝕜] G
x : E
hf' : TendstoUniformlyOnFilter f' g' l (𝓝 x)
hf : ∀ᶠ (n : ι × E) in l ×ˢ 𝓝 x, HasFDerivAt (f n.fst) (f' n.fst n.snd) n.snd
hfg : ∀ᶠ (y : E) in 𝓝 x, Tendsto (fun n => f n y) l (𝓝 (g y))
this✝ : NormedSpace ℝ E := NormedSpace.restrictScalars ℝ 𝕜 E
hl : l ≠ ⊥
this : NeBot l
⊢ UniformCauchySeqOnFilter (fun n y => (↑‖y - x‖)⁻¹ • (f n y - f n x)) l (𝓝 x)
[PROOFSTEP]
rw [SeminormedAddGroup.uniformCauchySeqOnFilter_iff_tendstoUniformlyOnFilter_zero]
[GOAL]
case inr
ι : Type u_1
l : Filter ι
E : Type u_2
inst✝⁴ : NormedAddCommGroup E
𝕜 : Type u_3
inst✝³ : IsROrC 𝕜
inst✝² : NormedSpace 𝕜 E
G : Type u_4
inst✝¹ : NormedAddCommGroup G
inst✝ : NormedSpace 𝕜 G
f : ι → E → G
g : E → G
f' : ι → E → E →L[𝕜] G
g' : E → E →L[𝕜] G
x : E
hf' : TendstoUniformlyOnFilter f' g' l (𝓝 x)
hf : ∀ᶠ (n : ι × E) in l ×ˢ 𝓝 x, HasFDerivAt (f n.fst) (f' n.fst n.snd) n.snd
hfg : ∀ᶠ (y : E) in 𝓝 x, Tendsto (fun n => f n y) l (𝓝 (g y))
this✝ : NormedSpace ℝ E := NormedSpace.restrictScalars ℝ 𝕜 E
hl : l ≠ ⊥
this : NeBot l
⊢ TendstoUniformlyOnFilter (fun n z => (↑‖z - x‖)⁻¹ • (f n.fst z - f n.fst x) - (↑‖z - x‖)⁻¹ • (f n.snd z - f n.snd x))
    0 (l ×ˢ l) (𝓝 x)
[PROOFSTEP]
rw [Metric.tendstoUniformlyOnFilter_iff]
[GOAL]
case inr
ι : Type u_1
l : Filter ι
E : Type u_2
inst✝⁴ : NormedAddCommGroup E
𝕜 : Type u_3
inst✝³ : IsROrC 𝕜
inst✝² : NormedSpace 𝕜 E
G : Type u_4
inst✝¹ : NormedAddCommGroup G
inst✝ : NormedSpace 𝕜 G
f : ι → E → G
g : E → G
f' : ι → E → E →L[𝕜] G
g' : E → E →L[𝕜] G
x : E
hf' : TendstoUniformlyOnFilter f' g' l (𝓝 x)
hf : ∀ᶠ (n : ι × E) in l ×ˢ 𝓝 x, HasFDerivAt (f n.fst) (f' n.fst n.snd) n.snd
hfg : ∀ᶠ (y : E) in 𝓝 x, Tendsto (fun n => f n y) l (𝓝 (g y))
this✝ : NormedSpace ℝ E := NormedSpace.restrictScalars ℝ 𝕜 E
hl : l ≠ ⊥
this : NeBot l
⊢ ∀ (ε : ℝ),
    ε > 0 →
      ∀ᶠ (n : (ι × ι) × E) in (l ×ˢ l) ×ˢ 𝓝 x,
        dist (OfNat.ofNat 0 n.snd)
            ((↑‖n.snd - x‖)⁻¹ • (f n.fst.fst n.snd - f n.fst.fst x) -
              (↑‖n.snd - x‖)⁻¹ • (f n.fst.snd n.snd - f n.fst.snd x)) <
          ε
[PROOFSTEP]
have hfg' := hf'.uniformCauchySeqOnFilter
[GOAL]
case inr
ι : Type u_1
l : Filter ι
E : Type u_2
inst✝⁴ : NormedAddCommGroup E
𝕜 : Type u_3
inst✝³ : IsROrC 𝕜
inst✝² : NormedSpace 𝕜 E
G : Type u_4
inst✝¹ : NormedAddCommGroup G
inst✝ : NormedSpace 𝕜 G
f : ι → E → G
g : E → G
f' : ι → E → E →L[𝕜] G
g' : E → E →L[𝕜] G
x : E
hf' : TendstoUniformlyOnFilter f' g' l (𝓝 x)
hf : ∀ᶠ (n : ι × E) in l ×ˢ 𝓝 x, HasFDerivAt (f n.fst) (f' n.fst n.snd) n.snd
hfg : ∀ᶠ (y : E) in 𝓝 x, Tendsto (fun n => f n y) l (𝓝 (g y))
this✝ : NormedSpace ℝ E := NormedSpace.restrictScalars ℝ 𝕜 E
hl : l ≠ ⊥
this : NeBot l
hfg' : UniformCauchySeqOnFilter f' l (𝓝 x)
⊢ ∀ (ε : ℝ),
    ε > 0 →
      ∀ᶠ (n : (ι × ι) × E) in (l ×ˢ l) ×ˢ 𝓝 x,
        dist (OfNat.ofNat 0 n.snd)
            ((↑‖n.snd - x‖)⁻¹ • (f n.fst.fst n.snd - f n.fst.fst x) -
              (↑‖n.snd - x‖)⁻¹ • (f n.fst.snd n.snd - f n.fst.snd x)) <
          ε
[PROOFSTEP]
rw [SeminormedAddGroup.uniformCauchySeqOnFilter_iff_tendstoUniformlyOnFilter_zero] at hfg'
[GOAL]
case inr
ι : Type u_1
l : Filter ι
E : Type u_2
inst✝⁴ : NormedAddCommGroup E
𝕜 : Type u_3
inst✝³ : IsROrC 𝕜
inst✝² : NormedSpace 𝕜 E
G : Type u_4
inst✝¹ : NormedAddCommGroup G
inst✝ : NormedSpace 𝕜 G
f : ι → E → G
g : E → G
f' : ι → E → E →L[𝕜] G
g' : E → E →L[𝕜] G
x : E
hf' : TendstoUniformlyOnFilter f' g' l (𝓝 x)
hf : ∀ᶠ (n : ι × E) in l ×ˢ 𝓝 x, HasFDerivAt (f n.fst) (f' n.fst n.snd) n.snd
hfg : ∀ᶠ (y : E) in 𝓝 x, Tendsto (fun n => f n y) l (𝓝 (g y))
this✝ : NormedSpace ℝ E := NormedSpace.restrictScalars ℝ 𝕜 E
hl : l ≠ ⊥
this : NeBot l
hfg' : TendstoUniformlyOnFilter (fun n z => f' n.fst z - f' n.snd z) 0 (l ×ˢ l) (𝓝 x)
⊢ ∀ (ε : ℝ),
    ε > 0 →
      ∀ᶠ (n : (ι × ι) × E) in (l ×ˢ l) ×ˢ 𝓝 x,
        dist (OfNat.ofNat 0 n.snd)
            ((↑‖n.snd - x‖)⁻¹ • (f n.fst.fst n.snd - f n.fst.fst x) -
              (↑‖n.snd - x‖)⁻¹ • (f n.fst.snd n.snd - f n.fst.snd x)) <
          ε
[PROOFSTEP]
rw [Metric.tendstoUniformlyOnFilter_iff] at hfg'
[GOAL]
case inr
ι : Type u_1
l : Filter ι
E : Type u_2
inst✝⁴ : NormedAddCommGroup E
𝕜 : Type u_3
inst✝³ : IsROrC 𝕜
inst✝² : NormedSpace 𝕜 E
G : Type u_4
inst✝¹ : NormedAddCommGroup G
inst✝ : NormedSpace 𝕜 G
f : ι → E → G
g : E → G
f' : ι → E → E →L[𝕜] G
g' : E → E →L[𝕜] G
x : E
hf' : TendstoUniformlyOnFilter f' g' l (𝓝 x)
hf : ∀ᶠ (n : ι × E) in l ×ˢ 𝓝 x, HasFDerivAt (f n.fst) (f' n.fst n.snd) n.snd
hfg : ∀ᶠ (y : E) in 𝓝 x, Tendsto (fun n => f n y) l (𝓝 (g y))
this✝ : NormedSpace ℝ E := NormedSpace.restrictScalars ℝ 𝕜 E
hl : l ≠ ⊥
this : NeBot l
hfg' :
  ∀ (ε : ℝ),
    ε > 0 →
      ∀ᶠ (n : (ι × ι) × E) in (l ×ˢ l) ×ˢ 𝓝 x, dist (OfNat.ofNat 0 n.snd) (f' n.fst.fst n.snd - f' n.fst.snd n.snd) < ε
⊢ ∀ (ε : ℝ),
    ε > 0 →
      ∀ᶠ (n : (ι × ι) × E) in (l ×ˢ l) ×ˢ 𝓝 x,
        dist (OfNat.ofNat 0 n.snd)
            ((↑‖n.snd - x‖)⁻¹ • (f n.fst.fst n.snd - f n.fst.fst x) -
              (↑‖n.snd - x‖)⁻¹ • (f n.fst.snd n.snd - f n.fst.snd x)) <
          ε
[PROOFSTEP]
intro ε hε
[GOAL]
case inr
ι : Type u_1
l : Filter ι
E : Type u_2
inst✝⁴ : NormedAddCommGroup E
𝕜 : Type u_3
inst✝³ : IsROrC 𝕜
inst✝² : NormedSpace 𝕜 E
G : Type u_4
inst✝¹ : NormedAddCommGroup G
inst✝ : NormedSpace 𝕜 G
f : ι → E → G
g : E → G
f' : ι → E → E →L[𝕜] G
g' : E → E →L[𝕜] G
x : E
hf' : TendstoUniformlyOnFilter f' g' l (𝓝 x)
hf : ∀ᶠ (n : ι × E) in l ×ˢ 𝓝 x, HasFDerivAt (f n.fst) (f' n.fst n.snd) n.snd
hfg : ∀ᶠ (y : E) in 𝓝 x, Tendsto (fun n => f n y) l (𝓝 (g y))
this✝ : NormedSpace ℝ E := NormedSpace.restrictScalars ℝ 𝕜 E
hl : l ≠ ⊥
this : NeBot l
hfg' :
  ∀ (ε : ℝ),
    ε > 0 →
      ∀ᶠ (n : (ι × ι) × E) in (l ×ˢ l) ×ˢ 𝓝 x, dist (OfNat.ofNat 0 n.snd) (f' n.fst.fst n.snd - f' n.fst.snd n.snd) < ε
ε : ℝ
hε : ε > 0
⊢ ∀ᶠ (n : (ι × ι) × E) in (l ×ˢ l) ×ˢ 𝓝 x,
    dist (OfNat.ofNat 0 n.snd)
        ((↑‖n.snd - x‖)⁻¹ • (f n.fst.fst n.snd - f n.fst.fst x) -
          (↑‖n.snd - x‖)⁻¹ • (f n.fst.snd n.snd - f n.fst.snd x)) <
      ε
[PROOFSTEP]
obtain ⟨q, hqpos, hqε⟩ := exists_pos_rat_lt hε
[GOAL]
case inr.intro.intro
ι : Type u_1
l : Filter ι
E : Type u_2
inst✝⁴ : NormedAddCommGroup E
𝕜 : Type u_3
inst✝³ : IsROrC 𝕜
inst✝² : NormedSpace 𝕜 E
G : Type u_4
inst✝¹ : NormedAddCommGroup G
inst✝ : NormedSpace 𝕜 G
f : ι → E → G
g : E → G
f' : ι → E → E →L[𝕜] G
g' : E → E →L[𝕜] G
x : E
hf' : TendstoUniformlyOnFilter f' g' l (𝓝 x)
hf : ∀ᶠ (n : ι × E) in l ×ˢ 𝓝 x, HasFDerivAt (f n.fst) (f' n.fst n.snd) n.snd
hfg : ∀ᶠ (y : E) in 𝓝 x, Tendsto (fun n => f n y) l (𝓝 (g y))
this✝ : NormedSpace ℝ E := NormedSpace.restrictScalars ℝ 𝕜 E
hl : l ≠ ⊥
this : NeBot l
hfg' :
  ∀ (ε : ℝ),
    ε > 0 →
      ∀ᶠ (n : (ι × ι) × E) in (l ×ˢ l) ×ˢ 𝓝 x, dist (OfNat.ofNat 0 n.snd) (f' n.fst.fst n.snd - f' n.fst.snd n.snd) < ε
ε : ℝ
hε : ε > 0
q : ℚ
hqpos : 0 < q
hqε : ↑q < ε
⊢ ∀ᶠ (n : (ι × ι) × E) in (l ×ˢ l) ×ˢ 𝓝 x,
    dist (OfNat.ofNat 0 n.snd)
        ((↑‖n.snd - x‖)⁻¹ • (f n.fst.fst n.snd - f n.fst.fst x) -
          (↑‖n.snd - x‖)⁻¹ • (f n.fst.snd n.snd - f n.fst.snd x)) <
      ε
[PROOFSTEP]
specialize hfg' (q : ℝ) (by simp [hqpos])
[GOAL]
ι : Type u_1
l : Filter ι
E : Type u_2
inst✝⁴ : NormedAddCommGroup E
𝕜 : Type u_3
inst✝³ : IsROrC 𝕜
inst✝² : NormedSpace 𝕜 E
G : Type u_4
inst✝¹ : NormedAddCommGroup G
inst✝ : NormedSpace 𝕜 G
f : ι → E → G
g : E → G
f' : ι → E → E →L[𝕜] G
g' : E → E →L[𝕜] G
x : E
hf' : TendstoUniformlyOnFilter f' g' l (𝓝 x)
hf : ∀ᶠ (n : ι × E) in l ×ˢ 𝓝 x, HasFDerivAt (f n.fst) (f' n.fst n.snd) n.snd
hfg : ∀ᶠ (y : E) in 𝓝 x, Tendsto (fun n => f n y) l (𝓝 (g y))
this✝ : NormedSpace ℝ E := NormedSpace.restrictScalars ℝ 𝕜 E
hl : l ≠ ⊥
this : NeBot l
hfg' :
  ∀ (ε : ℝ),
    ε > 0 →
      ∀ᶠ (n : (ι × ι) × E) in (l ×ˢ l) ×ˢ 𝓝 x, dist (OfNat.ofNat 0 n.snd) (f' n.fst.fst n.snd - f' n.fst.snd n.snd) < ε
ε : ℝ
hε : ε > 0
q : ℚ
hqpos : 0 < q
hqε : ↑q < ε
⊢ ↑q > 0
[PROOFSTEP]
simp [hqpos]
[GOAL]
case inr.intro.intro
ι : Type u_1
l : Filter ι
E : Type u_2
inst✝⁴ : NormedAddCommGroup E
𝕜 : Type u_3
inst✝³ : IsROrC 𝕜
inst✝² : NormedSpace 𝕜 E
G : Type u_4
inst✝¹ : NormedAddCommGroup G
inst✝ : NormedSpace 𝕜 G
f : ι → E → G
g : E → G
f' : ι → E → E →L[𝕜] G
g' : E → E →L[𝕜] G
x : E
hf' : TendstoUniformlyOnFilter f' g' l (𝓝 x)
hf : ∀ᶠ (n : ι × E) in l ×ˢ 𝓝 x, HasFDerivAt (f n.fst) (f' n.fst n.snd) n.snd
hfg : ∀ᶠ (y : E) in 𝓝 x, Tendsto (fun n => f n y) l (𝓝 (g y))
this✝ : NormedSpace ℝ E := NormedSpace.restrictScalars ℝ 𝕜 E
hl : l ≠ ⊥
this : NeBot l
ε : ℝ
hε : ε > 0
q : ℚ
hqpos : 0 < q
hqε : ↑q < ε
hfg' :
  ∀ᶠ (n : (ι × ι) × E) in (l ×ˢ l) ×ˢ 𝓝 x, dist (OfNat.ofNat 0 n.snd) (f' n.fst.fst n.snd - f' n.fst.snd n.snd) < ↑q
⊢ ∀ᶠ (n : (ι × ι) × E) in (l ×ˢ l) ×ˢ 𝓝 x,
    dist (OfNat.ofNat 0 n.snd)
        ((↑‖n.snd - x‖)⁻¹ • (f n.fst.fst n.snd - f n.fst.fst x) -
          (↑‖n.snd - x‖)⁻¹ • (f n.fst.snd n.snd - f n.fst.snd x)) <
      ε
[PROOFSTEP]
have := (tendsto_swap4_prod.eventually (hf.prod_mk hf)).diag_of_prod_right
[GOAL]
case inr.intro.intro
ι : Type u_1
l : Filter ι
E : Type u_2
inst✝⁴ : NormedAddCommGroup E
𝕜 : Type u_3
inst✝³ : IsROrC 𝕜
inst✝² : NormedSpace 𝕜 E
G : Type u_4
inst✝¹ : NormedAddCommGroup G
inst✝ : NormedSpace 𝕜 G
f : ι → E → G
g : E → G
f' : ι → E → E →L[𝕜] G
g' : E → E →L[𝕜] G
x : E
hf' : TendstoUniformlyOnFilter f' g' l (𝓝 x)
hf : ∀ᶠ (n : ι × E) in l ×ˢ 𝓝 x, HasFDerivAt (f n.fst) (f' n.fst n.snd) n.snd
hfg : ∀ᶠ (y : E) in 𝓝 x, Tendsto (fun n => f n y) l (𝓝 (g y))
this✝¹ : NormedSpace ℝ E := NormedSpace.restrictScalars ℝ 𝕜 E
hl : l ≠ ⊥
this✝ : NeBot l
ε : ℝ
hε : ε > 0
q : ℚ
hqpos : 0 < q
hqε : ↑q < ε
hfg' :
  ∀ᶠ (n : (ι × ι) × E) in (l ×ˢ l) ×ˢ 𝓝 x, dist (OfNat.ofNat 0 n.snd) (f' n.fst.fst n.snd - f' n.fst.snd n.snd) < ↑q
this :
  ∀ᶠ (x : (ι × ι) × E) in (l ×ˢ l) ×ˢ 𝓝 x,
    HasFDerivAt
        (f
          (((x.fst, x.snd, x.snd).fst.fst, (x.fst, x.snd, x.snd).snd.fst), (x.fst, x.snd, x.snd).fst.snd,
                (x.fst, x.snd, x.snd).snd.snd).fst.fst)
        (f'
          (((x.fst, x.snd, x.snd).fst.fst, (x.fst, x.snd, x.snd).snd.fst), (x.fst, x.snd, x.snd).fst.snd,
                (x.fst, x.snd, x.snd).snd.snd).fst.fst
          (((x.fst, x.snd, x.snd).fst.fst, (x.fst, x.snd, x.snd).snd.fst), (x.fst, x.snd, x.snd).fst.snd,
                (x.fst, x.snd, x.snd).snd.snd).fst.snd)
        (((x.fst, x.snd, x.snd).fst.fst, (x.fst, x.snd, x.snd).snd.fst), (x.fst, x.snd, x.snd).fst.snd,
              (x.fst, x.snd, x.snd).snd.snd).fst.snd ∧
      HasFDerivAt
        (f
          (((x.fst, x.snd, x.snd).fst.fst, (x.fst, x.snd, x.snd).snd.fst), (x.fst, x.snd, x.snd).fst.snd,
                (x.fst, x.snd, x.snd).snd.snd).snd.fst)
        (f'
          (((x.fst, x.snd, x.snd).fst.fst, (x.fst, x.snd, x.snd).snd.fst), (x.fst, x.snd, x.snd).fst.snd,
                (x.fst, x.snd, x.snd).snd.snd).snd.fst
          (((x.fst, x.snd, x.snd).fst.fst, (x.fst, x.snd, x.snd).snd.fst), (x.fst, x.snd, x.snd).fst.snd,
                (x.fst, x.snd, x.snd).snd.snd).snd.snd)
        (((x.fst, x.snd, x.snd).fst.fst, (x.fst, x.snd, x.snd).snd.fst), (x.fst, x.snd, x.snd).fst.snd,
              (x.fst, x.snd, x.snd).snd.snd).snd.snd
⊢ ∀ᶠ (n : (ι × ι) × E) in (l ×ˢ l) ×ˢ 𝓝 x,
    dist (OfNat.ofNat 0 n.snd)
        ((↑‖n.snd - x‖)⁻¹ • (f n.fst.fst n.snd - f n.fst.fst x) -
          (↑‖n.snd - x‖)⁻¹ • (f n.fst.snd n.snd - f n.fst.snd x)) <
      ε
[PROOFSTEP]
obtain ⟨a, b, c, d, e⟩ := eventually_prod_iff.1 (hfg'.and this)
[GOAL]
case inr.intro.intro.intro.intro.intro.intro
ι : Type u_1
l : Filter ι
E : Type u_2
inst✝⁴ : NormedAddCommGroup E
𝕜 : Type u_3
inst✝³ : IsROrC 𝕜
inst✝² : NormedSpace 𝕜 E
G : Type u_4
inst✝¹ : NormedAddCommGroup G
inst✝ : NormedSpace 𝕜 G
f : ι → E → G
g : E → G
f' : ι → E → E →L[𝕜] G
g' : E → E →L[𝕜] G
x : E
hf' : TendstoUniformlyOnFilter f' g' l (𝓝 x)
hf : ∀ᶠ (n : ι × E) in l ×ˢ 𝓝 x, HasFDerivAt (f n.fst) (f' n.fst n.snd) n.snd
hfg : ∀ᶠ (y : E) in 𝓝 x, Tendsto (fun n => f n y) l (𝓝 (g y))
this✝¹ : NormedSpace ℝ E := NormedSpace.restrictScalars ℝ 𝕜 E
hl : l ≠ ⊥
this✝ : NeBot l
ε : ℝ
hε : ε > 0
q : ℚ
hqpos : 0 < q
hqε : ↑q < ε
hfg' :
  ∀ᶠ (n : (ι × ι) × E) in (l ×ˢ l) ×ˢ 𝓝 x, dist (OfNat.ofNat 0 n.snd) (f' n.fst.fst n.snd - f' n.fst.snd n.snd) < ↑q
this :
  ∀ᶠ (x : (ι × ι) × E) in (l ×ˢ l) ×ˢ 𝓝 x,
    HasFDerivAt
        (f
          (((x.fst, x.snd, x.snd).fst.fst, (x.fst, x.snd, x.snd).snd.fst), (x.fst, x.snd, x.snd).fst.snd,
                (x.fst, x.snd, x.snd).snd.snd).fst.fst)
        (f'
          (((x.fst, x.snd, x.snd).fst.fst, (x.fst, x.snd, x.snd).snd.fst), (x.fst, x.snd, x.snd).fst.snd,
                (x.fst, x.snd, x.snd).snd.snd).fst.fst
          (((x.fst, x.snd, x.snd).fst.fst, (x.fst, x.snd, x.snd).snd.fst), (x.fst, x.snd, x.snd).fst.snd,
                (x.fst, x.snd, x.snd).snd.snd).fst.snd)
        (((x.fst, x.snd, x.snd).fst.fst, (x.fst, x.snd, x.snd).snd.fst), (x.fst, x.snd, x.snd).fst.snd,
              (x.fst, x.snd, x.snd).snd.snd).fst.snd ∧
      HasFDerivAt
        (f
          (((x.fst, x.snd, x.snd).fst.fst, (x.fst, x.snd, x.snd).snd.fst), (x.fst, x.snd, x.snd).fst.snd,
                (x.fst, x.snd, x.snd).snd.snd).snd.fst)
        (f'
          (((x.fst, x.snd, x.snd).fst.fst, (x.fst, x.snd, x.snd).snd.fst), (x.fst, x.snd, x.snd).fst.snd,
                (x.fst, x.snd, x.snd).snd.snd).snd.fst
          (((x.fst, x.snd, x.snd).fst.fst, (x.fst, x.snd, x.snd).snd.fst), (x.fst, x.snd, x.snd).fst.snd,
                (x.fst, x.snd, x.snd).snd.snd).snd.snd)
        (((x.fst, x.snd, x.snd).fst.fst, (x.fst, x.snd, x.snd).snd.fst), (x.fst, x.snd, x.snd).fst.snd,
              (x.fst, x.snd, x.snd).snd.snd).snd.snd
a : ι × ι → Prop
b : ∀ᶠ (x : ι × ι) in l ×ˢ l, a x
c : E → Prop
d : ∀ᶠ (y : E) in 𝓝 x, c y
e :
  ∀ {x : ι × ι},
    a x →
      ∀ {y : E},
        c y →
          dist (OfNat.ofNat 0 (x, y).snd) (f' (x, y).fst.fst (x, y).snd - f' (x, y).fst.snd (x, y).snd) < ↑q ∧
            HasFDerivAt
                (f
                  ((((x, y).fst, (x, y).snd, (x, y).snd).fst.fst, ((x, y).fst, (x, y).snd, (x, y).snd).snd.fst),
                        ((x, y).fst, (x, y).snd, (x, y).snd).fst.snd,
                        ((x, y).fst, (x, y).snd, (x, y).snd).snd.snd).fst.fst)
                (f'
                  ((((x, y).fst, (x, y).snd, (x, y).snd).fst.fst, ((x, y).fst, (x, y).snd, (x, y).snd).snd.fst),
                        ((x, y).fst, (x, y).snd, (x, y).snd).fst.snd,
                        ((x, y).fst, (x, y).snd, (x, y).snd).snd.snd).fst.fst
                  ((((x, y).fst, (x, y).snd, (x, y).snd).fst.fst, ((x, y).fst, (x, y).snd, (x, y).snd).snd.fst),
                        ((x, y).fst, (x, y).snd, (x, y).snd).fst.snd,
                        ((x, y).fst, (x, y).snd, (x, y).snd).snd.snd).fst.snd)
                ((((x, y).fst, (x, y).snd, (x, y).snd).fst.fst, ((x, y).fst, (x, y).snd, (x, y).snd).snd.fst),
                      ((x, y).fst, (x, y).snd, (x, y).snd).fst.snd,
                      ((x, y).fst, (x, y).snd, (x, y).snd).snd.snd).fst.snd ∧
              HasFDerivAt
                (f
                  ((((x, y).fst, (x, y).snd, (x, y).snd).fst.fst, ((x, y).fst, (x, y).snd, (x, y).snd).snd.fst),
                        ((x, y).fst, (x, y).snd, (x, y).snd).fst.snd,
                        ((x, y).fst, (x, y).snd, (x, y).snd).snd.snd).snd.fst)
                (f'
                  ((((x, y).fst, (x, y).snd, (x, y).snd).fst.fst, ((x, y).fst, (x, y).snd, (x, y).snd).snd.fst),
                        ((x, y).fst, (x, y).snd, (x, y).snd).fst.snd,
                        ((x, y).fst, (x, y).snd, (x, y).snd).snd.snd).snd.fst
                  ((((x, y).fst, (x, y).snd, (x, y).snd).fst.fst, ((x, y).fst, (x, y).snd, (x, y).snd).snd.fst),
                        ((x, y).fst, (x, y).snd, (x, y).snd).fst.snd,
                        ((x, y).fst, (x, y).snd, (x, y).snd).snd.snd).snd.snd)
                ((((x, y).fst, (x, y).snd, (x, y).snd).fst.fst, ((x, y).fst, (x, y).snd, (x, y).snd).snd.fst),
                      ((x, y).fst, (x, y).snd, (x, y).snd).fst.snd,
                      ((x, y).fst, (x, y).snd, (x, y).snd).snd.snd).snd.snd
⊢ ∀ᶠ (n : (ι × ι) × E) in (l ×ˢ l) ×ˢ 𝓝 x,
    dist (OfNat.ofNat 0 n.snd)
        ((↑‖n.snd - x‖)⁻¹ • (f n.fst.fst n.snd - f n.fst.fst x) -
          (↑‖n.snd - x‖)⁻¹ • (f n.fst.snd n.snd - f n.fst.snd x)) <
      ε
[PROOFSTEP]
obtain ⟨r, hr, hr'⟩ := Metric.nhds_basis_ball.eventually_iff.mp d
[GOAL]
case inr.intro.intro.intro.intro.intro.intro.intro.intro
ι : Type u_1
l : Filter ι
E : Type u_2
inst✝⁴ : NormedAddCommGroup E
𝕜 : Type u_3
inst✝³ : IsROrC 𝕜
inst✝² : NormedSpace 𝕜 E
G : Type u_4
inst✝¹ : NormedAddCommGroup G
inst✝ : NormedSpace 𝕜 G
f : ι → E → G
g : E → G
f' : ι → E → E →L[𝕜] G
g' : E → E →L[𝕜] G
x : E
hf' : TendstoUniformlyOnFilter f' g' l (𝓝 x)
hf : ∀ᶠ (n : ι × E) in l ×ˢ 𝓝 x, HasFDerivAt (f n.fst) (f' n.fst n.snd) n.snd
hfg : ∀ᶠ (y : E) in 𝓝 x, Tendsto (fun n => f n y) l (𝓝 (g y))
this✝¹ : NormedSpace ℝ E := NormedSpace.restrictScalars ℝ 𝕜 E
hl : l ≠ ⊥
this✝ : NeBot l
ε : ℝ
hε : ε > 0
q : ℚ
hqpos : 0 < q
hqε : ↑q < ε
hfg' :
  ∀ᶠ (n : (ι × ι) × E) in (l ×ˢ l) ×ˢ 𝓝 x, dist (OfNat.ofNat 0 n.snd) (f' n.fst.fst n.snd - f' n.fst.snd n.snd) < ↑q
this :
  ∀ᶠ (x : (ι × ι) × E) in (l ×ˢ l) ×ˢ 𝓝 x,
    HasFDerivAt
        (f
          (((x.fst, x.snd, x.snd).fst.fst, (x.fst, x.snd, x.snd).snd.fst), (x.fst, x.snd, x.snd).fst.snd,
                (x.fst, x.snd, x.snd).snd.snd).fst.fst)
        (f'
          (((x.fst, x.snd, x.snd).fst.fst, (x.fst, x.snd, x.snd).snd.fst), (x.fst, x.snd, x.snd).fst.snd,
                (x.fst, x.snd, x.snd).snd.snd).fst.fst
          (((x.fst, x.snd, x.snd).fst.fst, (x.fst, x.snd, x.snd).snd.fst), (x.fst, x.snd, x.snd).fst.snd,
                (x.fst, x.snd, x.snd).snd.snd).fst.snd)
        (((x.fst, x.snd, x.snd).fst.fst, (x.fst, x.snd, x.snd).snd.fst), (x.fst, x.snd, x.snd).fst.snd,
              (x.fst, x.snd, x.snd).snd.snd).fst.snd ∧
      HasFDerivAt
        (f
          (((x.fst, x.snd, x.snd).fst.fst, (x.fst, x.snd, x.snd).snd.fst), (x.fst, x.snd, x.snd).fst.snd,
                (x.fst, x.snd, x.snd).snd.snd).snd.fst)
        (f'
          (((x.fst, x.snd, x.snd).fst.fst, (x.fst, x.snd, x.snd).snd.fst), (x.fst, x.snd, x.snd).fst.snd,
                (x.fst, x.snd, x.snd).snd.snd).snd.fst
          (((x.fst, x.snd, x.snd).fst.fst, (x.fst, x.snd, x.snd).snd.fst), (x.fst, x.snd, x.snd).fst.snd,
                (x.fst, x.snd, x.snd).snd.snd).snd.snd)
        (((x.fst, x.snd, x.snd).fst.fst, (x.fst, x.snd, x.snd).snd.fst), (x.fst, x.snd, x.snd).fst.snd,
              (x.fst, x.snd, x.snd).snd.snd).snd.snd
a : ι × ι → Prop
b : ∀ᶠ (x : ι × ι) in l ×ˢ l, a x
c : E → Prop
d : ∀ᶠ (y : E) in 𝓝 x, c y
e :
  ∀ {x : ι × ι},
    a x →
      ∀ {y : E},
        c y →
          dist (OfNat.ofNat 0 (x, y).snd) (f' (x, y).fst.fst (x, y).snd - f' (x, y).fst.snd (x, y).snd) < ↑q ∧
            HasFDerivAt
                (f
                  ((((x, y).fst, (x, y).snd, (x, y).snd).fst.fst, ((x, y).fst, (x, y).snd, (x, y).snd).snd.fst),
                        ((x, y).fst, (x, y).snd, (x, y).snd).fst.snd,
                        ((x, y).fst, (x, y).snd, (x, y).snd).snd.snd).fst.fst)
                (f'
                  ((((x, y).fst, (x, y).snd, (x, y).snd).fst.fst, ((x, y).fst, (x, y).snd, (x, y).snd).snd.fst),
                        ((x, y).fst, (x, y).snd, (x, y).snd).fst.snd,
                        ((x, y).fst, (x, y).snd, (x, y).snd).snd.snd).fst.fst
                  ((((x, y).fst, (x, y).snd, (x, y).snd).fst.fst, ((x, y).fst, (x, y).snd, (x, y).snd).snd.fst),
                        ((x, y).fst, (x, y).snd, (x, y).snd).fst.snd,
                        ((x, y).fst, (x, y).snd, (x, y).snd).snd.snd).fst.snd)
                ((((x, y).fst, (x, y).snd, (x, y).snd).fst.fst, ((x, y).fst, (x, y).snd, (x, y).snd).snd.fst),
                      ((x, y).fst, (x, y).snd, (x, y).snd).fst.snd,
                      ((x, y).fst, (x, y).snd, (x, y).snd).snd.snd).fst.snd ∧
              HasFDerivAt
                (f
                  ((((x, y).fst, (x, y).snd, (x, y).snd).fst.fst, ((x, y).fst, (x, y).snd, (x, y).snd).snd.fst),
                        ((x, y).fst, (x, y).snd, (x, y).snd).fst.snd,
                        ((x, y).fst, (x, y).snd, (x, y).snd).snd.snd).snd.fst)
                (f'
                  ((((x, y).fst, (x, y).snd, (x, y).snd).fst.fst, ((x, y).fst, (x, y).snd, (x, y).snd).snd.fst),
                        ((x, y).fst, (x, y).snd, (x, y).snd).fst.snd,
                        ((x, y).fst, (x, y).snd, (x, y).snd).snd.snd).snd.fst
                  ((((x, y).fst, (x, y).snd, (x, y).snd).fst.fst, ((x, y).fst, (x, y).snd, (x, y).snd).snd.fst),
                        ((x, y).fst, (x, y).snd, (x, y).snd).fst.snd,
                        ((x, y).fst, (x, y).snd, (x, y).snd).snd.snd).snd.snd)
                ((((x, y).fst, (x, y).snd, (x, y).snd).fst.fst, ((x, y).fst, (x, y).snd, (x, y).snd).snd.fst),
                      ((x, y).fst, (x, y).snd, (x, y).snd).fst.snd,
                      ((x, y).fst, (x, y).snd, (x, y).snd).snd.snd).snd.snd
r : ℝ
hr : 0 < r
hr' : ∀ ⦃x_1 : E⦄, x_1 ∈ Metric.ball x r → c x_1
⊢ ∀ᶠ (n : (ι × ι) × E) in (l ×ˢ l) ×ˢ 𝓝 x,
    dist (OfNat.ofNat 0 n.snd)
        ((↑‖n.snd - x‖)⁻¹ • (f n.fst.fst n.snd - f n.fst.fst x) -
          (↑‖n.snd - x‖)⁻¹ • (f n.fst.snd n.snd - f n.fst.snd x)) <
      ε
[PROOFSTEP]
rw [eventually_prod_iff]
[GOAL]
case inr.intro.intro.intro.intro.intro.intro.intro.intro
ι : Type u_1
l : Filter ι
E : Type u_2
inst✝⁴ : NormedAddCommGroup E
𝕜 : Type u_3
inst✝³ : IsROrC 𝕜
inst✝² : NormedSpace 𝕜 E
G : Type u_4
inst✝¹ : NormedAddCommGroup G
inst✝ : NormedSpace 𝕜 G
f : ι → E → G
g : E → G
f' : ι → E → E →L[𝕜] G
g' : E → E →L[𝕜] G
x : E
hf' : TendstoUniformlyOnFilter f' g' l (𝓝 x)
hf : ∀ᶠ (n : ι × E) in l ×ˢ 𝓝 x, HasFDerivAt (f n.fst) (f' n.fst n.snd) n.snd
hfg : ∀ᶠ (y : E) in 𝓝 x, Tendsto (fun n => f n y) l (𝓝 (g y))
this✝¹ : NormedSpace ℝ E := NormedSpace.restrictScalars ℝ 𝕜 E
hl : l ≠ ⊥
this✝ : NeBot l
ε : ℝ
hε : ε > 0
q : ℚ
hqpos : 0 < q
hqε : ↑q < ε
hfg' :
  ∀ᶠ (n : (ι × ι) × E) in (l ×ˢ l) ×ˢ 𝓝 x, dist (OfNat.ofNat 0 n.snd) (f' n.fst.fst n.snd - f' n.fst.snd n.snd) < ↑q
this :
  ∀ᶠ (x : (ι × ι) × E) in (l ×ˢ l) ×ˢ 𝓝 x,
    HasFDerivAt
        (f
          (((x.fst, x.snd, x.snd).fst.fst, (x.fst, x.snd, x.snd).snd.fst), (x.fst, x.snd, x.snd).fst.snd,
                (x.fst, x.snd, x.snd).snd.snd).fst.fst)
        (f'
          (((x.fst, x.snd, x.snd).fst.fst, (x.fst, x.snd, x.snd).snd.fst), (x.fst, x.snd, x.snd).fst.snd,
                (x.fst, x.snd, x.snd).snd.snd).fst.fst
          (((x.fst, x.snd, x.snd).fst.fst, (x.fst, x.snd, x.snd).snd.fst), (x.fst, x.snd, x.snd).fst.snd,
                (x.fst, x.snd, x.snd).snd.snd).fst.snd)
        (((x.fst, x.snd, x.snd).fst.fst, (x.fst, x.snd, x.snd).snd.fst), (x.fst, x.snd, x.snd).fst.snd,
              (x.fst, x.snd, x.snd).snd.snd).fst.snd ∧
      HasFDerivAt
        (f
          (((x.fst, x.snd, x.snd).fst.fst, (x.fst, x.snd, x.snd).snd.fst), (x.fst, x.snd, x.snd).fst.snd,
                (x.fst, x.snd, x.snd).snd.snd).snd.fst)
        (f'
          (((x.fst, x.snd, x.snd).fst.fst, (x.fst, x.snd, x.snd).snd.fst), (x.fst, x.snd, x.snd).fst.snd,
                (x.fst, x.snd, x.snd).snd.snd).snd.fst
          (((x.fst, x.snd, x.snd).fst.fst, (x.fst, x.snd, x.snd).snd.fst), (x.fst, x.snd, x.snd).fst.snd,
                (x.fst, x.snd, x.snd).snd.snd).snd.snd)
        (((x.fst, x.snd, x.snd).fst.fst, (x.fst, x.snd, x.snd).snd.fst), (x.fst, x.snd, x.snd).fst.snd,
              (x.fst, x.snd, x.snd).snd.snd).snd.snd
a : ι × ι → Prop
b : ∀ᶠ (x : ι × ι) in l ×ˢ l, a x
c : E → Prop
d : ∀ᶠ (y : E) in 𝓝 x, c y
e :
  ∀ {x : ι × ι},
    a x →
      ∀ {y : E},
        c y →
          dist (OfNat.ofNat 0 (x, y).snd) (f' (x, y).fst.fst (x, y).snd - f' (x, y).fst.snd (x, y).snd) < ↑q ∧
            HasFDerivAt
                (f
                  ((((x, y).fst, (x, y).snd, (x, y).snd).fst.fst, ((x, y).fst, (x, y).snd, (x, y).snd).snd.fst),
                        ((x, y).fst, (x, y).snd, (x, y).snd).fst.snd,
                        ((x, y).fst, (x, y).snd, (x, y).snd).snd.snd).fst.fst)
                (f'
                  ((((x, y).fst, (x, y).snd, (x, y).snd).fst.fst, ((x, y).fst, (x, y).snd, (x, y).snd).snd.fst),
                        ((x, y).fst, (x, y).snd, (x, y).snd).fst.snd,
                        ((x, y).fst, (x, y).snd, (x, y).snd).snd.snd).fst.fst
                  ((((x, y).fst, (x, y).snd, (x, y).snd).fst.fst, ((x, y).fst, (x, y).snd, (x, y).snd).snd.fst),
                        ((x, y).fst, (x, y).snd, (x, y).snd).fst.snd,
                        ((x, y).fst, (x, y).snd, (x, y).snd).snd.snd).fst.snd)
                ((((x, y).fst, (x, y).snd, (x, y).snd).fst.fst, ((x, y).fst, (x, y).snd, (x, y).snd).snd.fst),
                      ((x, y).fst, (x, y).snd, (x, y).snd).fst.snd,
                      ((x, y).fst, (x, y).snd, (x, y).snd).snd.snd).fst.snd ∧
              HasFDerivAt
                (f
                  ((((x, y).fst, (x, y).snd, (x, y).snd).fst.fst, ((x, y).fst, (x, y).snd, (x, y).snd).snd.fst),
                        ((x, y).fst, (x, y).snd, (x, y).snd).fst.snd,
                        ((x, y).fst, (x, y).snd, (x, y).snd).snd.snd).snd.fst)
                (f'
                  ((((x, y).fst, (x, y).snd, (x, y).snd).fst.fst, ((x, y).fst, (x, y).snd, (x, y).snd).snd.fst),
                        ((x, y).fst, (x, y).snd, (x, y).snd).fst.snd,
                        ((x, y).fst, (x, y).snd, (x, y).snd).snd.snd).snd.fst
                  ((((x, y).fst, (x, y).snd, (x, y).snd).fst.fst, ((x, y).fst, (x, y).snd, (x, y).snd).snd.fst),
                        ((x, y).fst, (x, y).snd, (x, y).snd).fst.snd,
                        ((x, y).fst, (x, y).snd, (x, y).snd).snd.snd).snd.snd)
                ((((x, y).fst, (x, y).snd, (x, y).snd).fst.fst, ((x, y).fst, (x, y).snd, (x, y).snd).snd.fst),
                      ((x, y).fst, (x, y).snd, (x, y).snd).fst.snd,
                      ((x, y).fst, (x, y).snd, (x, y).snd).snd.snd).snd.snd
r : ℝ
hr : 0 < r
hr' : ∀ ⦃x_1 : E⦄, x_1 ∈ Metric.ball x r → c x_1
⊢ ∃ pa,
    (∀ᶠ (x : ι × ι) in l ×ˢ l, pa x) ∧
      ∃ pb,
        (∀ᶠ (y : E) in 𝓝 x, pb y) ∧
          ∀ {x_1 : ι × ι},
            pa x_1 →
              ∀ {y : E},
                pb y →
                  dist (OfNat.ofNat 0 (x_1, y).snd)
                      ((↑‖(x_1, y).snd - x‖)⁻¹ • (f (x_1, y).fst.fst (x_1, y).snd - f (x_1, y).fst.fst x) -
                        (↑‖(x_1, y).snd - x‖)⁻¹ • (f (x_1, y).fst.snd (x_1, y).snd - f (x_1, y).fst.snd x)) <
                    ε
[PROOFSTEP]
refine'
  ⟨_, b, fun e : E => Metric.ball x r e, eventually_mem_set.mpr (Metric.nhds_basis_ball.mem_of_mem hr),
    fun {n} hn {y} hy => _⟩
[GOAL]
case inr.intro.intro.intro.intro.intro.intro.intro.intro
ι : Type u_1
l : Filter ι
E : Type u_2
inst✝⁴ : NormedAddCommGroup E
𝕜 : Type u_3
inst✝³ : IsROrC 𝕜
inst✝² : NormedSpace 𝕜 E
G : Type u_4
inst✝¹ : NormedAddCommGroup G
inst✝ : NormedSpace 𝕜 G
f : ι → E → G
g : E → G
f' : ι → E → E →L[𝕜] G
g' : E → E →L[𝕜] G
x : E
hf' : TendstoUniformlyOnFilter f' g' l (𝓝 x)
hf : ∀ᶠ (n : ι × E) in l ×ˢ 𝓝 x, HasFDerivAt (f n.fst) (f' n.fst n.snd) n.snd
hfg : ∀ᶠ (y : E) in 𝓝 x, Tendsto (fun n => f n y) l (𝓝 (g y))
this✝¹ : NormedSpace ℝ E := NormedSpace.restrictScalars ℝ 𝕜 E
hl : l ≠ ⊥
this✝ : NeBot l
ε : ℝ
hε : ε > 0
q : ℚ
hqpos : 0 < q
hqε : ↑q < ε
hfg' :
  ∀ᶠ (n : (ι × ι) × E) in (l ×ˢ l) ×ˢ 𝓝 x, dist (OfNat.ofNat 0 n.snd) (f' n.fst.fst n.snd - f' n.fst.snd n.snd) < ↑q
this :
  ∀ᶠ (x : (ι × ι) × E) in (l ×ˢ l) ×ˢ 𝓝 x,
    HasFDerivAt
        (f
          (((x.fst, x.snd, x.snd).fst.fst, (x.fst, x.snd, x.snd).snd.fst), (x.fst, x.snd, x.snd).fst.snd,
                (x.fst, x.snd, x.snd).snd.snd).fst.fst)
        (f'
          (((x.fst, x.snd, x.snd).fst.fst, (x.fst, x.snd, x.snd).snd.fst), (x.fst, x.snd, x.snd).fst.snd,
                (x.fst, x.snd, x.snd).snd.snd).fst.fst
          (((x.fst, x.snd, x.snd).fst.fst, (x.fst, x.snd, x.snd).snd.fst), (x.fst, x.snd, x.snd).fst.snd,
                (x.fst, x.snd, x.snd).snd.snd).fst.snd)
        (((x.fst, x.snd, x.snd).fst.fst, (x.fst, x.snd, x.snd).snd.fst), (x.fst, x.snd, x.snd).fst.snd,
              (x.fst, x.snd, x.snd).snd.snd).fst.snd ∧
      HasFDerivAt
        (f
          (((x.fst, x.snd, x.snd).fst.fst, (x.fst, x.snd, x.snd).snd.fst), (x.fst, x.snd, x.snd).fst.snd,
                (x.fst, x.snd, x.snd).snd.snd).snd.fst)
        (f'
          (((x.fst, x.snd, x.snd).fst.fst, (x.fst, x.snd, x.snd).snd.fst), (x.fst, x.snd, x.snd).fst.snd,
                (x.fst, x.snd, x.snd).snd.snd).snd.fst
          (((x.fst, x.snd, x.snd).fst.fst, (x.fst, x.snd, x.snd).snd.fst), (x.fst, x.snd, x.snd).fst.snd,
                (x.fst, x.snd, x.snd).snd.snd).snd.snd)
        (((x.fst, x.snd, x.snd).fst.fst, (x.fst, x.snd, x.snd).snd.fst), (x.fst, x.snd, x.snd).fst.snd,
              (x.fst, x.snd, x.snd).snd.snd).snd.snd
a : ι × ι → Prop
b : ∀ᶠ (x : ι × ι) in l ×ˢ l, a x
c : E → Prop
d : ∀ᶠ (y : E) in 𝓝 x, c y
e :
  ∀ {x : ι × ι},
    a x →
      ∀ {y : E},
        c y →
          dist (OfNat.ofNat 0 (x, y).snd) (f' (x, y).fst.fst (x, y).snd - f' (x, y).fst.snd (x, y).snd) < ↑q ∧
            HasFDerivAt
                (f
                  ((((x, y).fst, (x, y).snd, (x, y).snd).fst.fst, ((x, y).fst, (x, y).snd, (x, y).snd).snd.fst),
                        ((x, y).fst, (x, y).snd, (x, y).snd).fst.snd,
                        ((x, y).fst, (x, y).snd, (x, y).snd).snd.snd).fst.fst)
                (f'
                  ((((x, y).fst, (x, y).snd, (x, y).snd).fst.fst, ((x, y).fst, (x, y).snd, (x, y).snd).snd.fst),
                        ((x, y).fst, (x, y).snd, (x, y).snd).fst.snd,
                        ((x, y).fst, (x, y).snd, (x, y).snd).snd.snd).fst.fst
                  ((((x, y).fst, (x, y).snd, (x, y).snd).fst.fst, ((x, y).fst, (x, y).snd, (x, y).snd).snd.fst),
                        ((x, y).fst, (x, y).snd, (x, y).snd).fst.snd,
                        ((x, y).fst, (x, y).snd, (x, y).snd).snd.snd).fst.snd)
                ((((x, y).fst, (x, y).snd, (x, y).snd).fst.fst, ((x, y).fst, (x, y).snd, (x, y).snd).snd.fst),
                      ((x, y).fst, (x, y).snd, (x, y).snd).fst.snd,
                      ((x, y).fst, (x, y).snd, (x, y).snd).snd.snd).fst.snd ∧
              HasFDerivAt
                (f
                  ((((x, y).fst, (x, y).snd, (x, y).snd).fst.fst, ((x, y).fst, (x, y).snd, (x, y).snd).snd.fst),
                        ((x, y).fst, (x, y).snd, (x, y).snd).fst.snd,
                        ((x, y).fst, (x, y).snd, (x, y).snd).snd.snd).snd.fst)
                (f'
                  ((((x, y).fst, (x, y).snd, (x, y).snd).fst.fst, ((x, y).fst, (x, y).snd, (x, y).snd).snd.fst),
                        ((x, y).fst, (x, y).snd, (x, y).snd).fst.snd,
                        ((x, y).fst, (x, y).snd, (x, y).snd).snd.snd).snd.fst
                  ((((x, y).fst, (x, y).snd, (x, y).snd).fst.fst, ((x, y).fst, (x, y).snd, (x, y).snd).snd.fst),
                        ((x, y).fst, (x, y).snd, (x, y).snd).fst.snd,
                        ((x, y).fst, (x, y).snd, (x, y).snd).snd.snd).snd.snd)
                ((((x, y).fst, (x, y).snd, (x, y).snd).fst.fst, ((x, y).fst, (x, y).snd, (x, y).snd).snd.fst),
                      ((x, y).fst, (x, y).snd, (x, y).snd).fst.snd,
                      ((x, y).fst, (x, y).snd, (x, y).snd).snd.snd).snd.snd
r : ℝ
hr : 0 < r
hr' : ∀ ⦃x_1 : E⦄, x_1 ∈ Metric.ball x r → c x_1
n : ι × ι
hn : a n
y : E
hy : (fun e => Metric.ball x r e) y
⊢ dist (OfNat.ofNat 0 (n, y).snd)
      ((↑‖(n, y).snd - x‖)⁻¹ • (f (n, y).fst.fst (n, y).snd - f (n, y).fst.fst x) -
        (↑‖(n, y).snd - x‖)⁻¹ • (f (n, y).fst.snd (n, y).snd - f (n, y).fst.snd x)) <
    ε
[PROOFSTEP]
simp only [Pi.zero_apply, dist_zero_left]
[GOAL]
case inr.intro.intro.intro.intro.intro.intro.intro.intro
ι : Type u_1
l : Filter ι
E : Type u_2
inst✝⁴ : NormedAddCommGroup E
𝕜 : Type u_3
inst✝³ : IsROrC 𝕜
inst✝² : NormedSpace 𝕜 E
G : Type u_4
inst✝¹ : NormedAddCommGroup G
inst✝ : NormedSpace 𝕜 G
f : ι → E → G
g : E → G
f' : ι → E → E →L[𝕜] G
g' : E → E →L[𝕜] G
x : E
hf' : TendstoUniformlyOnFilter f' g' l (𝓝 x)
hf : ∀ᶠ (n : ι × E) in l ×ˢ 𝓝 x, HasFDerivAt (f n.fst) (f' n.fst n.snd) n.snd
hfg : ∀ᶠ (y : E) in 𝓝 x, Tendsto (fun n => f n y) l (𝓝 (g y))
this✝¹ : NormedSpace ℝ E := NormedSpace.restrictScalars ℝ 𝕜 E
hl : l ≠ ⊥
this✝ : NeBot l
ε : ℝ
hε : ε > 0
q : ℚ
hqpos : 0 < q
hqε : ↑q < ε
hfg' :
  ∀ᶠ (n : (ι × ι) × E) in (l ×ˢ l) ×ˢ 𝓝 x, dist (OfNat.ofNat 0 n.snd) (f' n.fst.fst n.snd - f' n.fst.snd n.snd) < ↑q
this :
  ∀ᶠ (x : (ι × ι) × E) in (l ×ˢ l) ×ˢ 𝓝 x,
    HasFDerivAt
        (f
          (((x.fst, x.snd, x.snd).fst.fst, (x.fst, x.snd, x.snd).snd.fst), (x.fst, x.snd, x.snd).fst.snd,
                (x.fst, x.snd, x.snd).snd.snd).fst.fst)
        (f'
          (((x.fst, x.snd, x.snd).fst.fst, (x.fst, x.snd, x.snd).snd.fst), (x.fst, x.snd, x.snd).fst.snd,
                (x.fst, x.snd, x.snd).snd.snd).fst.fst
          (((x.fst, x.snd, x.snd).fst.fst, (x.fst, x.snd, x.snd).snd.fst), (x.fst, x.snd, x.snd).fst.snd,
                (x.fst, x.snd, x.snd).snd.snd).fst.snd)
        (((x.fst, x.snd, x.snd).fst.fst, (x.fst, x.snd, x.snd).snd.fst), (x.fst, x.snd, x.snd).fst.snd,
              (x.fst, x.snd, x.snd).snd.snd).fst.snd ∧
      HasFDerivAt
        (f
          (((x.fst, x.snd, x.snd).fst.fst, (x.fst, x.snd, x.snd).snd.fst), (x.fst, x.snd, x.snd).fst.snd,
                (x.fst, x.snd, x.snd).snd.snd).snd.fst)
        (f'
          (((x.fst, x.snd, x.snd).fst.fst, (x.fst, x.snd, x.snd).snd.fst), (x.fst, x.snd, x.snd).fst.snd,
                (x.fst, x.snd, x.snd).snd.snd).snd.fst
          (((x.fst, x.snd, x.snd).fst.fst, (x.fst, x.snd, x.snd).snd.fst), (x.fst, x.snd, x.snd).fst.snd,
                (x.fst, x.snd, x.snd).snd.snd).snd.snd)
        (((x.fst, x.snd, x.snd).fst.fst, (x.fst, x.snd, x.snd).snd.fst), (x.fst, x.snd, x.snd).fst.snd,
              (x.fst, x.snd, x.snd).snd.snd).snd.snd
a : ι × ι → Prop
b : ∀ᶠ (x : ι × ι) in l ×ˢ l, a x
c : E → Prop
d : ∀ᶠ (y : E) in 𝓝 x, c y
e :
  ∀ {x : ι × ι},
    a x →
      ∀ {y : E},
        c y →
          dist (OfNat.ofNat 0 (x, y).snd) (f' (x, y).fst.fst (x, y).snd - f' (x, y).fst.snd (x, y).snd) < ↑q ∧
            HasFDerivAt
                (f
                  ((((x, y).fst, (x, y).snd, (x, y).snd).fst.fst, ((x, y).fst, (x, y).snd, (x, y).snd).snd.fst),
                        ((x, y).fst, (x, y).snd, (x, y).snd).fst.snd,
                        ((x, y).fst, (x, y).snd, (x, y).snd).snd.snd).fst.fst)
                (f'
                  ((((x, y).fst, (x, y).snd, (x, y).snd).fst.fst, ((x, y).fst, (x, y).snd, (x, y).snd).snd.fst),
                        ((x, y).fst, (x, y).snd, (x, y).snd).fst.snd,
                        ((x, y).fst, (x, y).snd, (x, y).snd).snd.snd).fst.fst
                  ((((x, y).fst, (x, y).snd, (x, y).snd).fst.fst, ((x, y).fst, (x, y).snd, (x, y).snd).snd.fst),
                        ((x, y).fst, (x, y).snd, (x, y).snd).fst.snd,
                        ((x, y).fst, (x, y).snd, (x, y).snd).snd.snd).fst.snd)
                ((((x, y).fst, (x, y).snd, (x, y).snd).fst.fst, ((x, y).fst, (x, y).snd, (x, y).snd).snd.fst),
                      ((x, y).fst, (x, y).snd, (x, y).snd).fst.snd,
                      ((x, y).fst, (x, y).snd, (x, y).snd).snd.snd).fst.snd ∧
              HasFDerivAt
                (f
                  ((((x, y).fst, (x, y).snd, (x, y).snd).fst.fst, ((x, y).fst, (x, y).snd, (x, y).snd).snd.fst),
                        ((x, y).fst, (x, y).snd, (x, y).snd).fst.snd,
                        ((x, y).fst, (x, y).snd, (x, y).snd).snd.snd).snd.fst)
                (f'
                  ((((x, y).fst, (x, y).snd, (x, y).snd).fst.fst, ((x, y).fst, (x, y).snd, (x, y).snd).snd.fst),
                        ((x, y).fst, (x, y).snd, (x, y).snd).fst.snd,
                        ((x, y).fst, (x, y).snd, (x, y).snd).snd.snd).snd.fst
                  ((((x, y).fst, (x, y).snd, (x, y).snd).fst.fst, ((x, y).fst, (x, y).snd, (x, y).snd).snd.fst),
                        ((x, y).fst, (x, y).snd, (x, y).snd).fst.snd,
                        ((x, y).fst, (x, y).snd, (x, y).snd).snd.snd).snd.snd)
                ((((x, y).fst, (x, y).snd, (x, y).snd).fst.fst, ((x, y).fst, (x, y).snd, (x, y).snd).snd.fst),
                      ((x, y).fst, (x, y).snd, (x, y).snd).fst.snd,
                      ((x, y).fst, (x, y).snd, (x, y).snd).snd.snd).snd.snd
r : ℝ
hr : 0 < r
hr' : ∀ ⦃x_1 : E⦄, x_1 ∈ Metric.ball x r → c x_1
n : ι × ι
hn : a n
y : E
hy : (fun e => Metric.ball x r e) y
⊢ ‖(↑‖y - x‖)⁻¹ • (f n.fst y - f n.fst x) - (↑‖y - x‖)⁻¹ • (f n.snd y - f n.snd x)‖ < ε
[PROOFSTEP]
rw [← smul_sub, norm_smul, norm_inv, IsROrC.norm_coe_norm]
[GOAL]
case inr.intro.intro.intro.intro.intro.intro.intro.intro
ι : Type u_1
l : Filter ι
E : Type u_2
inst✝⁴ : NormedAddCommGroup E
𝕜 : Type u_3
inst✝³ : IsROrC 𝕜
inst✝² : NormedSpace 𝕜 E
G : Type u_4
inst✝¹ : NormedAddCommGroup G
inst✝ : NormedSpace 𝕜 G
f : ι → E → G
g : E → G
f' : ι → E → E →L[𝕜] G
g' : E → E →L[𝕜] G
x : E
hf' : TendstoUniformlyOnFilter f' g' l (𝓝 x)
hf : ∀ᶠ (n : ι × E) in l ×ˢ 𝓝 x, HasFDerivAt (f n.fst) (f' n.fst n.snd) n.snd
hfg : ∀ᶠ (y : E) in 𝓝 x, Tendsto (fun n => f n y) l (𝓝 (g y))
this✝¹ : NormedSpace ℝ E := NormedSpace.restrictScalars ℝ 𝕜 E
hl : l ≠ ⊥
this✝ : NeBot l
ε : ℝ
hε : ε > 0
q : ℚ
hqpos : 0 < q
hqε : ↑q < ε
hfg' :
  ∀ᶠ (n : (ι × ι) × E) in (l ×ˢ l) ×ˢ 𝓝 x, dist (OfNat.ofNat 0 n.snd) (f' n.fst.fst n.snd - f' n.fst.snd n.snd) < ↑q
this :
  ∀ᶠ (x : (ι × ι) × E) in (l ×ˢ l) ×ˢ 𝓝 x,
    HasFDerivAt
        (f
          (((x.fst, x.snd, x.snd).fst.fst, (x.fst, x.snd, x.snd).snd.fst), (x.fst, x.snd, x.snd).fst.snd,
                (x.fst, x.snd, x.snd).snd.snd).fst.fst)
        (f'
          (((x.fst, x.snd, x.snd).fst.fst, (x.fst, x.snd, x.snd).snd.fst), (x.fst, x.snd, x.snd).fst.snd,
                (x.fst, x.snd, x.snd).snd.snd).fst.fst
          (((x.fst, x.snd, x.snd).fst.fst, (x.fst, x.snd, x.snd).snd.fst), (x.fst, x.snd, x.snd).fst.snd,
                (x.fst, x.snd, x.snd).snd.snd).fst.snd)
        (((x.fst, x.snd, x.snd).fst.fst, (x.fst, x.snd, x.snd).snd.fst), (x.fst, x.snd, x.snd).fst.snd,
              (x.fst, x.snd, x.snd).snd.snd).fst.snd ∧
      HasFDerivAt
        (f
          (((x.fst, x.snd, x.snd).fst.fst, (x.fst, x.snd, x.snd).snd.fst), (x.fst, x.snd, x.snd).fst.snd,
                (x.fst, x.snd, x.snd).snd.snd).snd.fst)
        (f'
          (((x.fst, x.snd, x.snd).fst.fst, (x.fst, x.snd, x.snd).snd.fst), (x.fst, x.snd, x.snd).fst.snd,
                (x.fst, x.snd, x.snd).snd.snd).snd.fst
          (((x.fst, x.snd, x.snd).fst.fst, (x.fst, x.snd, x.snd).snd.fst), (x.fst, x.snd, x.snd).fst.snd,
                (x.fst, x.snd, x.snd).snd.snd).snd.snd)
        (((x.fst, x.snd, x.snd).fst.fst, (x.fst, x.snd, x.snd).snd.fst), (x.fst, x.snd, x.snd).fst.snd,
              (x.fst, x.snd, x.snd).snd.snd).snd.snd
a : ι × ι → Prop
b : ∀ᶠ (x : ι × ι) in l ×ˢ l, a x
c : E → Prop
d : ∀ᶠ (y : E) in 𝓝 x, c y
e :
  ∀ {x : ι × ι},
    a x →
      ∀ {y : E},
        c y →
          dist (OfNat.ofNat 0 (x, y).snd) (f' (x, y).fst.fst (x, y).snd - f' (x, y).fst.snd (x, y).snd) < ↑q ∧
            HasFDerivAt
                (f
                  ((((x, y).fst, (x, y).snd, (x, y).snd).fst.fst, ((x, y).fst, (x, y).snd, (x, y).snd).snd.fst),
                        ((x, y).fst, (x, y).snd, (x, y).snd).fst.snd,
                        ((x, y).fst, (x, y).snd, (x, y).snd).snd.snd).fst.fst)
                (f'
                  ((((x, y).fst, (x, y).snd, (x, y).snd).fst.fst, ((x, y).fst, (x, y).snd, (x, y).snd).snd.fst),
                        ((x, y).fst, (x, y).snd, (x, y).snd).fst.snd,
                        ((x, y).fst, (x, y).snd, (x, y).snd).snd.snd).fst.fst
                  ((((x, y).fst, (x, y).snd, (x, y).snd).fst.fst, ((x, y).fst, (x, y).snd, (x, y).snd).snd.fst),
                        ((x, y).fst, (x, y).snd, (x, y).snd).fst.snd,
                        ((x, y).fst, (x, y).snd, (x, y).snd).snd.snd).fst.snd)
                ((((x, y).fst, (x, y).snd, (x, y).snd).fst.fst, ((x, y).fst, (x, y).snd, (x, y).snd).snd.fst),
                      ((x, y).fst, (x, y).snd, (x, y).snd).fst.snd,
                      ((x, y).fst, (x, y).snd, (x, y).snd).snd.snd).fst.snd ∧
              HasFDerivAt
                (f
                  ((((x, y).fst, (x, y).snd, (x, y).snd).fst.fst, ((x, y).fst, (x, y).snd, (x, y).snd).snd.fst),
                        ((x, y).fst, (x, y).snd, (x, y).snd).fst.snd,
                        ((x, y).fst, (x, y).snd, (x, y).snd).snd.snd).snd.fst)
                (f'
                  ((((x, y).fst, (x, y).snd, (x, y).snd).fst.fst, ((x, y).fst, (x, y).snd, (x, y).snd).snd.fst),
                        ((x, y).fst, (x, y).snd, (x, y).snd).fst.snd,
                        ((x, y).fst, (x, y).snd, (x, y).snd).snd.snd).snd.fst
                  ((((x, y).fst, (x, y).snd, (x, y).snd).fst.fst, ((x, y).fst, (x, y).snd, (x, y).snd).snd.fst),
                        ((x, y).fst, (x, y).snd, (x, y).snd).fst.snd,
                        ((x, y).fst, (x, y).snd, (x, y).snd).snd.snd).snd.snd)
                ((((x, y).fst, (x, y).snd, (x, y).snd).fst.fst, ((x, y).fst, (x, y).snd, (x, y).snd).snd.fst),
                      ((x, y).fst, (x, y).snd, (x, y).snd).fst.snd,
                      ((x, y).fst, (x, y).snd, (x, y).snd).snd.snd).snd.snd
r : ℝ
hr : 0 < r
hr' : ∀ ⦃x_1 : E⦄, x_1 ∈ Metric.ball x r → c x_1
n : ι × ι
hn : a n
y : E
hy : (fun e => Metric.ball x r e) y
⊢ ‖y - x‖⁻¹ * ‖f n.fst y - f n.fst x - (f n.snd y - f n.snd x)‖ < ε
[PROOFSTEP]
refine' lt_of_le_of_lt _ hqε
[GOAL]
case inr.intro.intro.intro.intro.intro.intro.intro.intro
ι : Type u_1
l : Filter ι
E : Type u_2
inst✝⁴ : NormedAddCommGroup E
𝕜 : Type u_3
inst✝³ : IsROrC 𝕜
inst✝² : NormedSpace 𝕜 E
G : Type u_4
inst✝¹ : NormedAddCommGroup G
inst✝ : NormedSpace 𝕜 G
f : ι → E → G
g : E → G
f' : ι → E → E →L[𝕜] G
g' : E → E →L[𝕜] G
x : E
hf' : TendstoUniformlyOnFilter f' g' l (𝓝 x)
hf : ∀ᶠ (n : ι × E) in l ×ˢ 𝓝 x, HasFDerivAt (f n.fst) (f' n.fst n.snd) n.snd
hfg : ∀ᶠ (y : E) in 𝓝 x, Tendsto (fun n => f n y) l (𝓝 (g y))
this✝¹ : NormedSpace ℝ E := NormedSpace.restrictScalars ℝ 𝕜 E
hl : l ≠ ⊥
this✝ : NeBot l
ε : ℝ
hε : ε > 0
q : ℚ
hqpos : 0 < q
hqε : ↑q < ε
hfg' :
  ∀ᶠ (n : (ι × ι) × E) in (l ×ˢ l) ×ˢ 𝓝 x, dist (OfNat.ofNat 0 n.snd) (f' n.fst.fst n.snd - f' n.fst.snd n.snd) < ↑q
this :
  ∀ᶠ (x : (ι × ι) × E) in (l ×ˢ l) ×ˢ 𝓝 x,
    HasFDerivAt
        (f
          (((x.fst, x.snd, x.snd).fst.fst, (x.fst, x.snd, x.snd).snd.fst), (x.fst, x.snd, x.snd).fst.snd,
                (x.fst, x.snd, x.snd).snd.snd).fst.fst)
        (f'
          (((x.fst, x.snd, x.snd).fst.fst, (x.fst, x.snd, x.snd).snd.fst), (x.fst, x.snd, x.snd).fst.snd,
                (x.fst, x.snd, x.snd).snd.snd).fst.fst
          (((x.fst, x.snd, x.snd).fst.fst, (x.fst, x.snd, x.snd).snd.fst), (x.fst, x.snd, x.snd).fst.snd,
                (x.fst, x.snd, x.snd).snd.snd).fst.snd)
        (((x.fst, x.snd, x.snd).fst.fst, (x.fst, x.snd, x.snd).snd.fst), (x.fst, x.snd, x.snd).fst.snd,
              (x.fst, x.snd, x.snd).snd.snd).fst.snd ∧
      HasFDerivAt
        (f
          (((x.fst, x.snd, x.snd).fst.fst, (x.fst, x.snd, x.snd).snd.fst), (x.fst, x.snd, x.snd).fst.snd,
                (x.fst, x.snd, x.snd).snd.snd).snd.fst)
        (f'
          (((x.fst, x.snd, x.snd).fst.fst, (x.fst, x.snd, x.snd).snd.fst), (x.fst, x.snd, x.snd).fst.snd,
                (x.fst, x.snd, x.snd).snd.snd).snd.fst
          (((x.fst, x.snd, x.snd).fst.fst, (x.fst, x.snd, x.snd).snd.fst), (x.fst, x.snd, x.snd).fst.snd,
                (x.fst, x.snd, x.snd).snd.snd).snd.snd)
        (((x.fst, x.snd, x.snd).fst.fst, (x.fst, x.snd, x.snd).snd.fst), (x.fst, x.snd, x.snd).fst.snd,
              (x.fst, x.snd, x.snd).snd.snd).snd.snd
a : ι × ι → Prop
b : ∀ᶠ (x : ι × ι) in l ×ˢ l, a x
c : E → Prop
d : ∀ᶠ (y : E) in 𝓝 x, c y
e :
  ∀ {x : ι × ι},
    a x →
      ∀ {y : E},
        c y →
          dist (OfNat.ofNat 0 (x, y).snd) (f' (x, y).fst.fst (x, y).snd - f' (x, y).fst.snd (x, y).snd) < ↑q ∧
            HasFDerivAt
                (f
                  ((((x, y).fst, (x, y).snd, (x, y).snd).fst.fst, ((x, y).fst, (x, y).snd, (x, y).snd).snd.fst),
                        ((x, y).fst, (x, y).snd, (x, y).snd).fst.snd,
                        ((x, y).fst, (x, y).snd, (x, y).snd).snd.snd).fst.fst)
                (f'
                  ((((x, y).fst, (x, y).snd, (x, y).snd).fst.fst, ((x, y).fst, (x, y).snd, (x, y).snd).snd.fst),
                        ((x, y).fst, (x, y).snd, (x, y).snd).fst.snd,
                        ((x, y).fst, (x, y).snd, (x, y).snd).snd.snd).fst.fst
                  ((((x, y).fst, (x, y).snd, (x, y).snd).fst.fst, ((x, y).fst, (x, y).snd, (x, y).snd).snd.fst),
                        ((x, y).fst, (x, y).snd, (x, y).snd).fst.snd,
                        ((x, y).fst, (x, y).snd, (x, y).snd).snd.snd).fst.snd)
                ((((x, y).fst, (x, y).snd, (x, y).snd).fst.fst, ((x, y).fst, (x, y).snd, (x, y).snd).snd.fst),
                      ((x, y).fst, (x, y).snd, (x, y).snd).fst.snd,
                      ((x, y).fst, (x, y).snd, (x, y).snd).snd.snd).fst.snd ∧
              HasFDerivAt
                (f
                  ((((x, y).fst, (x, y).snd, (x, y).snd).fst.fst, ((x, y).fst, (x, y).snd, (x, y).snd).snd.fst),
                        ((x, y).fst, (x, y).snd, (x, y).snd).fst.snd,
                        ((x, y).fst, (x, y).snd, (x, y).snd).snd.snd).snd.fst)
                (f'
                  ((((x, y).fst, (x, y).snd, (x, y).snd).fst.fst, ((x, y).fst, (x, y).snd, (x, y).snd).snd.fst),
                        ((x, y).fst, (x, y).snd, (x, y).snd).fst.snd,
                        ((x, y).fst, (x, y).snd, (x, y).snd).snd.snd).snd.fst
                  ((((x, y).fst, (x, y).snd, (x, y).snd).fst.fst, ((x, y).fst, (x, y).snd, (x, y).snd).snd.fst),
                        ((x, y).fst, (x, y).snd, (x, y).snd).fst.snd,
                        ((x, y).fst, (x, y).snd, (x, y).snd).snd.snd).snd.snd)
                ((((x, y).fst, (x, y).snd, (x, y).snd).fst.fst, ((x, y).fst, (x, y).snd, (x, y).snd).snd.fst),
                      ((x, y).fst, (x, y).snd, (x, y).snd).fst.snd,
                      ((x, y).fst, (x, y).snd, (x, y).snd).snd.snd).snd.snd
r : ℝ
hr : 0 < r
hr' : ∀ ⦃x_1 : E⦄, x_1 ∈ Metric.ball x r → c x_1
n : ι × ι
hn : a n
y : E
hy : (fun e => Metric.ball x r e) y
⊢ ‖y - x‖⁻¹ * ‖f n.fst y - f n.fst x - (f n.snd y - f n.snd x)‖ ≤ ↑q
[PROOFSTEP]
by_cases hyz' : x = y
[GOAL]
case pos
ι : Type u_1
l : Filter ι
E : Type u_2
inst✝⁴ : NormedAddCommGroup E
𝕜 : Type u_3
inst✝³ : IsROrC 𝕜
inst✝² : NormedSpace 𝕜 E
G : Type u_4
inst✝¹ : NormedAddCommGroup G
inst✝ : NormedSpace 𝕜 G
f : ι → E → G
g : E → G
f' : ι → E → E →L[𝕜] G
g' : E → E →L[𝕜] G
x : E
hf' : TendstoUniformlyOnFilter f' g' l (𝓝 x)
hf : ∀ᶠ (n : ι × E) in l ×ˢ 𝓝 x, HasFDerivAt (f n.fst) (f' n.fst n.snd) n.snd
hfg : ∀ᶠ (y : E) in 𝓝 x, Tendsto (fun n => f n y) l (𝓝 (g y))
this✝¹ : NormedSpace ℝ E := NormedSpace.restrictScalars ℝ 𝕜 E
hl : l ≠ ⊥
this✝ : NeBot l
ε : ℝ
hε : ε > 0
q : ℚ
hqpos : 0 < q
hqε : ↑q < ε
hfg' :
  ∀ᶠ (n : (ι × ι) × E) in (l ×ˢ l) ×ˢ 𝓝 x, dist (OfNat.ofNat 0 n.snd) (f' n.fst.fst n.snd - f' n.fst.snd n.snd) < ↑q
this :
  ∀ᶠ (x : (ι × ι) × E) in (l ×ˢ l) ×ˢ 𝓝 x,
    HasFDerivAt
        (f
          (((x.fst, x.snd, x.snd).fst.fst, (x.fst, x.snd, x.snd).snd.fst), (x.fst, x.snd, x.snd).fst.snd,
                (x.fst, x.snd, x.snd).snd.snd).fst.fst)
        (f'
          (((x.fst, x.snd, x.snd).fst.fst, (x.fst, x.snd, x.snd).snd.fst), (x.fst, x.snd, x.snd).fst.snd,
                (x.fst, x.snd, x.snd).snd.snd).fst.fst
          (((x.fst, x.snd, x.snd).fst.fst, (x.fst, x.snd, x.snd).snd.fst), (x.fst, x.snd, x.snd).fst.snd,
                (x.fst, x.snd, x.snd).snd.snd).fst.snd)
        (((x.fst, x.snd, x.snd).fst.fst, (x.fst, x.snd, x.snd).snd.fst), (x.fst, x.snd, x.snd).fst.snd,
              (x.fst, x.snd, x.snd).snd.snd).fst.snd ∧
      HasFDerivAt
        (f
          (((x.fst, x.snd, x.snd).fst.fst, (x.fst, x.snd, x.snd).snd.fst), (x.fst, x.snd, x.snd).fst.snd,
                (x.fst, x.snd, x.snd).snd.snd).snd.fst)
        (f'
          (((x.fst, x.snd, x.snd).fst.fst, (x.fst, x.snd, x.snd).snd.fst), (x.fst, x.snd, x.snd).fst.snd,
                (x.fst, x.snd, x.snd).snd.snd).snd.fst
          (((x.fst, x.snd, x.snd).fst.fst, (x.fst, x.snd, x.snd).snd.fst), (x.fst, x.snd, x.snd).fst.snd,
                (x.fst, x.snd, x.snd).snd.snd).snd.snd)
        (((x.fst, x.snd, x.snd).fst.fst, (x.fst, x.snd, x.snd).snd.fst), (x.fst, x.snd, x.snd).fst.snd,
              (x.fst, x.snd, x.snd).snd.snd).snd.snd
a : ι × ι → Prop
b : ∀ᶠ (x : ι × ι) in l ×ˢ l, a x
c : E → Prop
d : ∀ᶠ (y : E) in 𝓝 x, c y
e :
  ∀ {x : ι × ι},
    a x →
      ∀ {y : E},
        c y →
          dist (OfNat.ofNat 0 (x, y).snd) (f' (x, y).fst.fst (x, y).snd - f' (x, y).fst.snd (x, y).snd) < ↑q ∧
            HasFDerivAt
                (f
                  ((((x, y).fst, (x, y).snd, (x, y).snd).fst.fst, ((x, y).fst, (x, y).snd, (x, y).snd).snd.fst),
                        ((x, y).fst, (x, y).snd, (x, y).snd).fst.snd,
                        ((x, y).fst, (x, y).snd, (x, y).snd).snd.snd).fst.fst)
                (f'
                  ((((x, y).fst, (x, y).snd, (x, y).snd).fst.fst, ((x, y).fst, (x, y).snd, (x, y).snd).snd.fst),
                        ((x, y).fst, (x, y).snd, (x, y).snd).fst.snd,
                        ((x, y).fst, (x, y).snd, (x, y).snd).snd.snd).fst.fst
                  ((((x, y).fst, (x, y).snd, (x, y).snd).fst.fst, ((x, y).fst, (x, y).snd, (x, y).snd).snd.fst),
                        ((x, y).fst, (x, y).snd, (x, y).snd).fst.snd,
                        ((x, y).fst, (x, y).snd, (x, y).snd).snd.snd).fst.snd)
                ((((x, y).fst, (x, y).snd, (x, y).snd).fst.fst, ((x, y).fst, (x, y).snd, (x, y).snd).snd.fst),
                      ((x, y).fst, (x, y).snd, (x, y).snd).fst.snd,
                      ((x, y).fst, (x, y).snd, (x, y).snd).snd.snd).fst.snd ∧
              HasFDerivAt
                (f
                  ((((x, y).fst, (x, y).snd, (x, y).snd).fst.fst, ((x, y).fst, (x, y).snd, (x, y).snd).snd.fst),
                        ((x, y).fst, (x, y).snd, (x, y).snd).fst.snd,
                        ((x, y).fst, (x, y).snd, (x, y).snd).snd.snd).snd.fst)
                (f'
                  ((((x, y).fst, (x, y).snd, (x, y).snd).fst.fst, ((x, y).fst, (x, y).snd, (x, y).snd).snd.fst),
                        ((x, y).fst, (x, y).snd, (x, y).snd).fst.snd,
                        ((x, y).fst, (x, y).snd, (x, y).snd).snd.snd).snd.fst
                  ((((x, y).fst, (x, y).snd, (x, y).snd).fst.fst, ((x, y).fst, (x, y).snd, (x, y).snd).snd.fst),
                        ((x, y).fst, (x, y).snd, (x, y).snd).fst.snd,
                        ((x, y).fst, (x, y).snd, (x, y).snd).snd.snd).snd.snd)
                ((((x, y).fst, (x, y).snd, (x, y).snd).fst.fst, ((x, y).fst, (x, y).snd, (x, y).snd).snd.fst),
                      ((x, y).fst, (x, y).snd, (x, y).snd).fst.snd,
                      ((x, y).fst, (x, y).snd, (x, y).snd).snd.snd).snd.snd
r : ℝ
hr : 0 < r
hr' : ∀ ⦃x_1 : E⦄, x_1 ∈ Metric.ball x r → c x_1
n : ι × ι
hn : a n
y : E
hy : (fun e => Metric.ball x r e) y
hyz' : x = y
⊢ ‖y - x‖⁻¹ * ‖f n.fst y - f n.fst x - (f n.snd y - f n.snd x)‖ ≤ ↑q
[PROOFSTEP]
simp [hyz', hqpos.le]
[GOAL]
case neg
ι : Type u_1
l : Filter ι
E : Type u_2
inst✝⁴ : NormedAddCommGroup E
𝕜 : Type u_3
inst✝³ : IsROrC 𝕜
inst✝² : NormedSpace 𝕜 E
G : Type u_4
inst✝¹ : NormedAddCommGroup G
inst✝ : NormedSpace 𝕜 G
f : ι → E → G
g : E → G
f' : ι → E → E →L[𝕜] G
g' : E → E →L[𝕜] G
x : E
hf' : TendstoUniformlyOnFilter f' g' l (𝓝 x)
hf : ∀ᶠ (n : ι × E) in l ×ˢ 𝓝 x, HasFDerivAt (f n.fst) (f' n.fst n.snd) n.snd
hfg : ∀ᶠ (y : E) in 𝓝 x, Tendsto (fun n => f n y) l (𝓝 (g y))
this✝¹ : NormedSpace ℝ E := NormedSpace.restrictScalars ℝ 𝕜 E
hl : l ≠ ⊥
this✝ : NeBot l
ε : ℝ
hε : ε > 0
q : ℚ
hqpos : 0 < q
hqε : ↑q < ε
hfg' :
  ∀ᶠ (n : (ι × ι) × E) in (l ×ˢ l) ×ˢ 𝓝 x, dist (OfNat.ofNat 0 n.snd) (f' n.fst.fst n.snd - f' n.fst.snd n.snd) < ↑q
this :
  ∀ᶠ (x : (ι × ι) × E) in (l ×ˢ l) ×ˢ 𝓝 x,
    HasFDerivAt
        (f
          (((x.fst, x.snd, x.snd).fst.fst, (x.fst, x.snd, x.snd).snd.fst), (x.fst, x.snd, x.snd).fst.snd,
                (x.fst, x.snd, x.snd).snd.snd).fst.fst)
        (f'
          (((x.fst, x.snd, x.snd).fst.fst, (x.fst, x.snd, x.snd).snd.fst), (x.fst, x.snd, x.snd).fst.snd,
                (x.fst, x.snd, x.snd).snd.snd).fst.fst
          (((x.fst, x.snd, x.snd).fst.fst, (x.fst, x.snd, x.snd).snd.fst), (x.fst, x.snd, x.snd).fst.snd,
                (x.fst, x.snd, x.snd).snd.snd).fst.snd)
        (((x.fst, x.snd, x.snd).fst.fst, (x.fst, x.snd, x.snd).snd.fst), (x.fst, x.snd, x.snd).fst.snd,
              (x.fst, x.snd, x.snd).snd.snd).fst.snd ∧
      HasFDerivAt
        (f
          (((x.fst, x.snd, x.snd).fst.fst, (x.fst, x.snd, x.snd).snd.fst), (x.fst, x.snd, x.snd).fst.snd,
                (x.fst, x.snd, x.snd).snd.snd).snd.fst)
        (f'
          (((x.fst, x.snd, x.snd).fst.fst, (x.fst, x.snd, x.snd).snd.fst), (x.fst, x.snd, x.snd).fst.snd,
                (x.fst, x.snd, x.snd).snd.snd).snd.fst
          (((x.fst, x.snd, x.snd).fst.fst, (x.fst, x.snd, x.snd).snd.fst), (x.fst, x.snd, x.snd).fst.snd,
                (x.fst, x.snd, x.snd).snd.snd).snd.snd)
        (((x.fst, x.snd, x.snd).fst.fst, (x.fst, x.snd, x.snd).snd.fst), (x.fst, x.snd, x.snd).fst.snd,
              (x.fst, x.snd, x.snd).snd.snd).snd.snd
a : ι × ι → Prop
b : ∀ᶠ (x : ι × ι) in l ×ˢ l, a x
c : E → Prop
d : ∀ᶠ (y : E) in 𝓝 x, c y
e :
  ∀ {x : ι × ι},
    a x →
      ∀ {y : E},
        c y →
          dist (OfNat.ofNat 0 (x, y).snd) (f' (x, y).fst.fst (x, y).snd - f' (x, y).fst.snd (x, y).snd) < ↑q ∧
            HasFDerivAt
                (f
                  ((((x, y).fst, (x, y).snd, (x, y).snd).fst.fst, ((x, y).fst, (x, y).snd, (x, y).snd).snd.fst),
                        ((x, y).fst, (x, y).snd, (x, y).snd).fst.snd,
                        ((x, y).fst, (x, y).snd, (x, y).snd).snd.snd).fst.fst)
                (f'
                  ((((x, y).fst, (x, y).snd, (x, y).snd).fst.fst, ((x, y).fst, (x, y).snd, (x, y).snd).snd.fst),
                        ((x, y).fst, (x, y).snd, (x, y).snd).fst.snd,
                        ((x, y).fst, (x, y).snd, (x, y).snd).snd.snd).fst.fst
                  ((((x, y).fst, (x, y).snd, (x, y).snd).fst.fst, ((x, y).fst, (x, y).snd, (x, y).snd).snd.fst),
                        ((x, y).fst, (x, y).snd, (x, y).snd).fst.snd,
                        ((x, y).fst, (x, y).snd, (x, y).snd).snd.snd).fst.snd)
                ((((x, y).fst, (x, y).snd, (x, y).snd).fst.fst, ((x, y).fst, (x, y).snd, (x, y).snd).snd.fst),
                      ((x, y).fst, (x, y).snd, (x, y).snd).fst.snd,
                      ((x, y).fst, (x, y).snd, (x, y).snd).snd.snd).fst.snd ∧
              HasFDerivAt
                (f
                  ((((x, y).fst, (x, y).snd, (x, y).snd).fst.fst, ((x, y).fst, (x, y).snd, (x, y).snd).snd.fst),
                        ((x, y).fst, (x, y).snd, (x, y).snd).fst.snd,
                        ((x, y).fst, (x, y).snd, (x, y).snd).snd.snd).snd.fst)
                (f'
                  ((((x, y).fst, (x, y).snd, (x, y).snd).fst.fst, ((x, y).fst, (x, y).snd, (x, y).snd).snd.fst),
                        ((x, y).fst, (x, y).snd, (x, y).snd).fst.snd,
                        ((x, y).fst, (x, y).snd, (x, y).snd).snd.snd).snd.fst
                  ((((x, y).fst, (x, y).snd, (x, y).snd).fst.fst, ((x, y).fst, (x, y).snd, (x, y).snd).snd.fst),
                        ((x, y).fst, (x, y).snd, (x, y).snd).fst.snd,
                        ((x, y).fst, (x, y).snd, (x, y).snd).snd.snd).snd.snd)
                ((((x, y).fst, (x, y).snd, (x, y).snd).fst.fst, ((x, y).fst, (x, y).snd, (x, y).snd).snd.fst),
                      ((x, y).fst, (x, y).snd, (x, y).snd).fst.snd,
                      ((x, y).fst, (x, y).snd, (x, y).snd).snd.snd).snd.snd
r : ℝ
hr : 0 < r
hr' : ∀ ⦃x_1 : E⦄, x_1 ∈ Metric.ball x r → c x_1
n : ι × ι
hn : a n
y : E
hy : (fun e => Metric.ball x r e) y
hyz' : ¬x = y
⊢ ‖y - x‖⁻¹ * ‖f n.fst y - f n.fst x - (f n.snd y - f n.snd x)‖ ≤ ↑q
[PROOFSTEP]
have hyz : 0 < ‖y - x‖ := by rw [norm_pos_iff]; intro hy'; exact hyz' (eq_of_sub_eq_zero hy').symm
[GOAL]
ι : Type u_1
l : Filter ι
E : Type u_2
inst✝⁴ : NormedAddCommGroup E
𝕜 : Type u_3
inst✝³ : IsROrC 𝕜
inst✝² : NormedSpace 𝕜 E
G : Type u_4
inst✝¹ : NormedAddCommGroup G
inst✝ : NormedSpace 𝕜 G
f : ι → E → G
g : E → G
f' : ι → E → E →L[𝕜] G
g' : E → E →L[𝕜] G
x : E
hf' : TendstoUniformlyOnFilter f' g' l (𝓝 x)
hf : ∀ᶠ (n : ι × E) in l ×ˢ 𝓝 x, HasFDerivAt (f n.fst) (f' n.fst n.snd) n.snd
hfg : ∀ᶠ (y : E) in 𝓝 x, Tendsto (fun n => f n y) l (𝓝 (g y))
this✝¹ : NormedSpace ℝ E := NormedSpace.restrictScalars ℝ 𝕜 E
hl : l ≠ ⊥
this✝ : NeBot l
ε : ℝ
hε : ε > 0
q : ℚ
hqpos : 0 < q
hqε : ↑q < ε
hfg' :
  ∀ᶠ (n : (ι × ι) × E) in (l ×ˢ l) ×ˢ 𝓝 x, dist (OfNat.ofNat 0 n.snd) (f' n.fst.fst n.snd - f' n.fst.snd n.snd) < ↑q
this :
  ∀ᶠ (x : (ι × ι) × E) in (l ×ˢ l) ×ˢ 𝓝 x,
    HasFDerivAt
        (f
          (((x.fst, x.snd, x.snd).fst.fst, (x.fst, x.snd, x.snd).snd.fst), (x.fst, x.snd, x.snd).fst.snd,
                (x.fst, x.snd, x.snd).snd.snd).fst.fst)
        (f'
          (((x.fst, x.snd, x.snd).fst.fst, (x.fst, x.snd, x.snd).snd.fst), (x.fst, x.snd, x.snd).fst.snd,
                (x.fst, x.snd, x.snd).snd.snd).fst.fst
          (((x.fst, x.snd, x.snd).fst.fst, (x.fst, x.snd, x.snd).snd.fst), (x.fst, x.snd, x.snd).fst.snd,
                (x.fst, x.snd, x.snd).snd.snd).fst.snd)
        (((x.fst, x.snd, x.snd).fst.fst, (x.fst, x.snd, x.snd).snd.fst), (x.fst, x.snd, x.snd).fst.snd,
              (x.fst, x.snd, x.snd).snd.snd).fst.snd ∧
      HasFDerivAt
        (f
          (((x.fst, x.snd, x.snd).fst.fst, (x.fst, x.snd, x.snd).snd.fst), (x.fst, x.snd, x.snd).fst.snd,
                (x.fst, x.snd, x.snd).snd.snd).snd.fst)
        (f'
          (((x.fst, x.snd, x.snd).fst.fst, (x.fst, x.snd, x.snd).snd.fst), (x.fst, x.snd, x.snd).fst.snd,
                (x.fst, x.snd, x.snd).snd.snd).snd.fst
          (((x.fst, x.snd, x.snd).fst.fst, (x.fst, x.snd, x.snd).snd.fst), (x.fst, x.snd, x.snd).fst.snd,
                (x.fst, x.snd, x.snd).snd.snd).snd.snd)
        (((x.fst, x.snd, x.snd).fst.fst, (x.fst, x.snd, x.snd).snd.fst), (x.fst, x.snd, x.snd).fst.snd,
              (x.fst, x.snd, x.snd).snd.snd).snd.snd
a : ι × ι → Prop
b : ∀ᶠ (x : ι × ι) in l ×ˢ l, a x
c : E → Prop
d : ∀ᶠ (y : E) in 𝓝 x, c y
e :
  ∀ {x : ι × ι},
    a x →
      ∀ {y : E},
        c y →
          dist (OfNat.ofNat 0 (x, y).snd) (f' (x, y).fst.fst (x, y).snd - f' (x, y).fst.snd (x, y).snd) < ↑q ∧
            HasFDerivAt
                (f
                  ((((x, y).fst, (x, y).snd, (x, y).snd).fst.fst, ((x, y).fst, (x, y).snd, (x, y).snd).snd.fst),
                        ((x, y).fst, (x, y).snd, (x, y).snd).fst.snd,
                        ((x, y).fst, (x, y).snd, (x, y).snd).snd.snd).fst.fst)
                (f'
                  ((((x, y).fst, (x, y).snd, (x, y).snd).fst.fst, ((x, y).fst, (x, y).snd, (x, y).snd).snd.fst),
                        ((x, y).fst, (x, y).snd, (x, y).snd).fst.snd,
                        ((x, y).fst, (x, y).snd, (x, y).snd).snd.snd).fst.fst
                  ((((x, y).fst, (x, y).snd, (x, y).snd).fst.fst, ((x, y).fst, (x, y).snd, (x, y).snd).snd.fst),
                        ((x, y).fst, (x, y).snd, (x, y).snd).fst.snd,
                        ((x, y).fst, (x, y).snd, (x, y).snd).snd.snd).fst.snd)
                ((((x, y).fst, (x, y).snd, (x, y).snd).fst.fst, ((x, y).fst, (x, y).snd, (x, y).snd).snd.fst),
                      ((x, y).fst, (x, y).snd, (x, y).snd).fst.snd,
                      ((x, y).fst, (x, y).snd, (x, y).snd).snd.snd).fst.snd ∧
              HasFDerivAt
                (f
                  ((((x, y).fst, (x, y).snd, (x, y).snd).fst.fst, ((x, y).fst, (x, y).snd, (x, y).snd).snd.fst),
                        ((x, y).fst, (x, y).snd, (x, y).snd).fst.snd,
                        ((x, y).fst, (x, y).snd, (x, y).snd).snd.snd).snd.fst)
                (f'
                  ((((x, y).fst, (x, y).snd, (x, y).snd).fst.fst, ((x, y).fst, (x, y).snd, (x, y).snd).snd.fst),
                        ((x, y).fst, (x, y).snd, (x, y).snd).fst.snd,
                        ((x, y).fst, (x, y).snd, (x, y).snd).snd.snd).snd.fst
                  ((((x, y).fst, (x, y).snd, (x, y).snd).fst.fst, ((x, y).fst, (x, y).snd, (x, y).snd).snd.fst),
                        ((x, y).fst, (x, y).snd, (x, y).snd).fst.snd,
                        ((x, y).fst, (x, y).snd, (x, y).snd).snd.snd).snd.snd)
                ((((x, y).fst, (x, y).snd, (x, y).snd).fst.fst, ((x, y).fst, (x, y).snd, (x, y).snd).snd.fst),
                      ((x, y).fst, (x, y).snd, (x, y).snd).fst.snd,
                      ((x, y).fst, (x, y).snd, (x, y).snd).snd.snd).snd.snd
r : ℝ
hr : 0 < r
hr' : ∀ ⦃x_1 : E⦄, x_1 ∈ Metric.ball x r → c x_1
n : ι × ι
hn : a n
y : E
hy : (fun e => Metric.ball x r e) y
hyz' : ¬x = y
⊢ 0 < ‖y - x‖
[PROOFSTEP]
rw [norm_pos_iff]
[GOAL]
ι : Type u_1
l : Filter ι
E : Type u_2
inst✝⁴ : NormedAddCommGroup E
𝕜 : Type u_3
inst✝³ : IsROrC 𝕜
inst✝² : NormedSpace 𝕜 E
G : Type u_4
inst✝¹ : NormedAddCommGroup G
inst✝ : NormedSpace 𝕜 G
f : ι → E → G
g : E → G
f' : ι → E → E →L[𝕜] G
g' : E → E →L[𝕜] G
x : E
hf' : TendstoUniformlyOnFilter f' g' l (𝓝 x)
hf : ∀ᶠ (n : ι × E) in l ×ˢ 𝓝 x, HasFDerivAt (f n.fst) (f' n.fst n.snd) n.snd
hfg : ∀ᶠ (y : E) in 𝓝 x, Tendsto (fun n => f n y) l (𝓝 (g y))
this✝¹ : NormedSpace ℝ E := NormedSpace.restrictScalars ℝ 𝕜 E
hl : l ≠ ⊥
this✝ : NeBot l
ε : ℝ
hε : ε > 0
q : ℚ
hqpos : 0 < q
hqε : ↑q < ε
hfg' :
  ∀ᶠ (n : (ι × ι) × E) in (l ×ˢ l) ×ˢ 𝓝 x, dist (OfNat.ofNat 0 n.snd) (f' n.fst.fst n.snd - f' n.fst.snd n.snd) < ↑q
this :
  ∀ᶠ (x : (ι × ι) × E) in (l ×ˢ l) ×ˢ 𝓝 x,
    HasFDerivAt
        (f
          (((x.fst, x.snd, x.snd).fst.fst, (x.fst, x.snd, x.snd).snd.fst), (x.fst, x.snd, x.snd).fst.snd,
                (x.fst, x.snd, x.snd).snd.snd).fst.fst)
        (f'
          (((x.fst, x.snd, x.snd).fst.fst, (x.fst, x.snd, x.snd).snd.fst), (x.fst, x.snd, x.snd).fst.snd,
                (x.fst, x.snd, x.snd).snd.snd).fst.fst
          (((x.fst, x.snd, x.snd).fst.fst, (x.fst, x.snd, x.snd).snd.fst), (x.fst, x.snd, x.snd).fst.snd,
                (x.fst, x.snd, x.snd).snd.snd).fst.snd)
        (((x.fst, x.snd, x.snd).fst.fst, (x.fst, x.snd, x.snd).snd.fst), (x.fst, x.snd, x.snd).fst.snd,
              (x.fst, x.snd, x.snd).snd.snd).fst.snd ∧
      HasFDerivAt
        (f
          (((x.fst, x.snd, x.snd).fst.fst, (x.fst, x.snd, x.snd).snd.fst), (x.fst, x.snd, x.snd).fst.snd,
                (x.fst, x.snd, x.snd).snd.snd).snd.fst)
        (f'
          (((x.fst, x.snd, x.snd).fst.fst, (x.fst, x.snd, x.snd).snd.fst), (x.fst, x.snd, x.snd).fst.snd,
                (x.fst, x.snd, x.snd).snd.snd).snd.fst
          (((x.fst, x.snd, x.snd).fst.fst, (x.fst, x.snd, x.snd).snd.fst), (x.fst, x.snd, x.snd).fst.snd,
                (x.fst, x.snd, x.snd).snd.snd).snd.snd)
        (((x.fst, x.snd, x.snd).fst.fst, (x.fst, x.snd, x.snd).snd.fst), (x.fst, x.snd, x.snd).fst.snd,
              (x.fst, x.snd, x.snd).snd.snd).snd.snd
a : ι × ι → Prop
b : ∀ᶠ (x : ι × ι) in l ×ˢ l, a x
c : E → Prop
d : ∀ᶠ (y : E) in 𝓝 x, c y
e :
  ∀ {x : ι × ι},
    a x →
      ∀ {y : E},
        c y →
          dist (OfNat.ofNat 0 (x, y).snd) (f' (x, y).fst.fst (x, y).snd - f' (x, y).fst.snd (x, y).snd) < ↑q ∧
            HasFDerivAt
                (f
                  ((((x, y).fst, (x, y).snd, (x, y).snd).fst.fst, ((x, y).fst, (x, y).snd, (x, y).snd).snd.fst),
                        ((x, y).fst, (x, y).snd, (x, y).snd).fst.snd,
                        ((x, y).fst, (x, y).snd, (x, y).snd).snd.snd).fst.fst)
                (f'
                  ((((x, y).fst, (x, y).snd, (x, y).snd).fst.fst, ((x, y).fst, (x, y).snd, (x, y).snd).snd.fst),
                        ((x, y).fst, (x, y).snd, (x, y).snd).fst.snd,
                        ((x, y).fst, (x, y).snd, (x, y).snd).snd.snd).fst.fst
                  ((((x, y).fst, (x, y).snd, (x, y).snd).fst.fst, ((x, y).fst, (x, y).snd, (x, y).snd).snd.fst),
                        ((x, y).fst, (x, y).snd, (x, y).snd).fst.snd,
                        ((x, y).fst, (x, y).snd, (x, y).snd).snd.snd).fst.snd)
                ((((x, y).fst, (x, y).snd, (x, y).snd).fst.fst, ((x, y).fst, (x, y).snd, (x, y).snd).snd.fst),
                      ((x, y).fst, (x, y).snd, (x, y).snd).fst.snd,
                      ((x, y).fst, (x, y).snd, (x, y).snd).snd.snd).fst.snd ∧
              HasFDerivAt
                (f
                  ((((x, y).fst, (x, y).snd, (x, y).snd).fst.fst, ((x, y).fst, (x, y).snd, (x, y).snd).snd.fst),
                        ((x, y).fst, (x, y).snd, (x, y).snd).fst.snd,
                        ((x, y).fst, (x, y).snd, (x, y).snd).snd.snd).snd.fst)
                (f'
                  ((((x, y).fst, (x, y).snd, (x, y).snd).fst.fst, ((x, y).fst, (x, y).snd, (x, y).snd).snd.fst),
                        ((x, y).fst, (x, y).snd, (x, y).snd).fst.snd,
                        ((x, y).fst, (x, y).snd, (x, y).snd).snd.snd).snd.fst
                  ((((x, y).fst, (x, y).snd, (x, y).snd).fst.fst, ((x, y).fst, (x, y).snd, (x, y).snd).snd.fst),
                        ((x, y).fst, (x, y).snd, (x, y).snd).fst.snd,
                        ((x, y).fst, (x, y).snd, (x, y).snd).snd.snd).snd.snd)
                ((((x, y).fst, (x, y).snd, (x, y).snd).fst.fst, ((x, y).fst, (x, y).snd, (x, y).snd).snd.fst),
                      ((x, y).fst, (x, y).snd, (x, y).snd).fst.snd,
                      ((x, y).fst, (x, y).snd, (x, y).snd).snd.snd).snd.snd
r : ℝ
hr : 0 < r
hr' : ∀ ⦃x_1 : E⦄, x_1 ∈ Metric.ball x r → c x_1
n : ι × ι
hn : a n
y : E
hy : (fun e => Metric.ball x r e) y
hyz' : ¬x = y
⊢ y - x ≠ 0
[PROOFSTEP]
intro hy'
[GOAL]
ι : Type u_1
l : Filter ι
E : Type u_2
inst✝⁴ : NormedAddCommGroup E
𝕜 : Type u_3
inst✝³ : IsROrC 𝕜
inst✝² : NormedSpace 𝕜 E
G : Type u_4
inst✝¹ : NormedAddCommGroup G
inst✝ : NormedSpace 𝕜 G
f : ι → E → G
g : E → G
f' : ι → E → E →L[𝕜] G
g' : E → E →L[𝕜] G
x : E
hf' : TendstoUniformlyOnFilter f' g' l (𝓝 x)
hf : ∀ᶠ (n : ι × E) in l ×ˢ 𝓝 x, HasFDerivAt (f n.fst) (f' n.fst n.snd) n.snd
hfg : ∀ᶠ (y : E) in 𝓝 x, Tendsto (fun n => f n y) l (𝓝 (g y))
this✝¹ : NormedSpace ℝ E := NormedSpace.restrictScalars ℝ 𝕜 E
hl : l ≠ ⊥
this✝ : NeBot l
ε : ℝ
hε : ε > 0
q : ℚ
hqpos : 0 < q
hqε : ↑q < ε
hfg' :
  ∀ᶠ (n : (ι × ι) × E) in (l ×ˢ l) ×ˢ 𝓝 x, dist (OfNat.ofNat 0 n.snd) (f' n.fst.fst n.snd - f' n.fst.snd n.snd) < ↑q
this :
  ∀ᶠ (x : (ι × ι) × E) in (l ×ˢ l) ×ˢ 𝓝 x,
    HasFDerivAt
        (f
          (((x.fst, x.snd, x.snd).fst.fst, (x.fst, x.snd, x.snd).snd.fst), (x.fst, x.snd, x.snd).fst.snd,
                (x.fst, x.snd, x.snd).snd.snd).fst.fst)
        (f'
          (((x.fst, x.snd, x.snd).fst.fst, (x.fst, x.snd, x.snd).snd.fst), (x.fst, x.snd, x.snd).fst.snd,
                (x.fst, x.snd, x.snd).snd.snd).fst.fst
          (((x.fst, x.snd, x.snd).fst.fst, (x.fst, x.snd, x.snd).snd.fst), (x.fst, x.snd, x.snd).fst.snd,
                (x.fst, x.snd, x.snd).snd.snd).fst.snd)
        (((x.fst, x.snd, x.snd).fst.fst, (x.fst, x.snd, x.snd).snd.fst), (x.fst, x.snd, x.snd).fst.snd,
              (x.fst, x.snd, x.snd).snd.snd).fst.snd ∧
      HasFDerivAt
        (f
          (((x.fst, x.snd, x.snd).fst.fst, (x.fst, x.snd, x.snd).snd.fst), (x.fst, x.snd, x.snd).fst.snd,
                (x.fst, x.snd, x.snd).snd.snd).snd.fst)
        (f'
          (((x.fst, x.snd, x.snd).fst.fst, (x.fst, x.snd, x.snd).snd.fst), (x.fst, x.snd, x.snd).fst.snd,
                (x.fst, x.snd, x.snd).snd.snd).snd.fst
          (((x.fst, x.snd, x.snd).fst.fst, (x.fst, x.snd, x.snd).snd.fst), (x.fst, x.snd, x.snd).fst.snd,
                (x.fst, x.snd, x.snd).snd.snd).snd.snd)
        (((x.fst, x.snd, x.snd).fst.fst, (x.fst, x.snd, x.snd).snd.fst), (x.fst, x.snd, x.snd).fst.snd,
              (x.fst, x.snd, x.snd).snd.snd).snd.snd
a : ι × ι → Prop
b : ∀ᶠ (x : ι × ι) in l ×ˢ l, a x
c : E → Prop
d : ∀ᶠ (y : E) in 𝓝 x, c y
e :
  ∀ {x : ι × ι},
    a x →
      ∀ {y : E},
        c y →
          dist (OfNat.ofNat 0 (x, y).snd) (f' (x, y).fst.fst (x, y).snd - f' (x, y).fst.snd (x, y).snd) < ↑q ∧
            HasFDerivAt
                (f
                  ((((x, y).fst, (x, y).snd, (x, y).snd).fst.fst, ((x, y).fst, (x, y).snd, (x, y).snd).snd.fst),
                        ((x, y).fst, (x, y).snd, (x, y).snd).fst.snd,
                        ((x, y).fst, (x, y).snd, (x, y).snd).snd.snd).fst.fst)
                (f'
                  ((((x, y).fst, (x, y).snd, (x, y).snd).fst.fst, ((x, y).fst, (x, y).snd, (x, y).snd).snd.fst),
                        ((x, y).fst, (x, y).snd, (x, y).snd).fst.snd,
                        ((x, y).fst, (x, y).snd, (x, y).snd).snd.snd).fst.fst
                  ((((x, y).fst, (x, y).snd, (x, y).snd).fst.fst, ((x, y).fst, (x, y).snd, (x, y).snd).snd.fst),
                        ((x, y).fst, (x, y).snd, (x, y).snd).fst.snd,
                        ((x, y).fst, (x, y).snd, (x, y).snd).snd.snd).fst.snd)
                ((((x, y).fst, (x, y).snd, (x, y).snd).fst.fst, ((x, y).fst, (x, y).snd, (x, y).snd).snd.fst),
                      ((x, y).fst, (x, y).snd, (x, y).snd).fst.snd,
                      ((x, y).fst, (x, y).snd, (x, y).snd).snd.snd).fst.snd ∧
              HasFDerivAt
                (f
                  ((((x, y).fst, (x, y).snd, (x, y).snd).fst.fst, ((x, y).fst, (x, y).snd, (x, y).snd).snd.fst),
                        ((x, y).fst, (x, y).snd, (x, y).snd).fst.snd,
                        ((x, y).fst, (x, y).snd, (x, y).snd).snd.snd).snd.fst)
                (f'
                  ((((x, y).fst, (x, y).snd, (x, y).snd).fst.fst, ((x, y).fst, (x, y).snd, (x, y).snd).snd.fst),
                        ((x, y).fst, (x, y).snd, (x, y).snd).fst.snd,
                        ((x, y).fst, (x, y).snd, (x, y).snd).snd.snd).snd.fst
                  ((((x, y).fst, (x, y).snd, (x, y).snd).fst.fst, ((x, y).fst, (x, y).snd, (x, y).snd).snd.fst),
                        ((x, y).fst, (x, y).snd, (x, y).snd).fst.snd,
                        ((x, y).fst, (x, y).snd, (x, y).snd).snd.snd).snd.snd)
                ((((x, y).fst, (x, y).snd, (x, y).snd).fst.fst, ((x, y).fst, (x, y).snd, (x, y).snd).snd.fst),
                      ((x, y).fst, (x, y).snd, (x, y).snd).fst.snd,
                      ((x, y).fst, (x, y).snd, (x, y).snd).snd.snd).snd.snd
r : ℝ
hr : 0 < r
hr' : ∀ ⦃x_1 : E⦄, x_1 ∈ Metric.ball x r → c x_1
n : ι × ι
hn : a n
y : E
hy : (fun e => Metric.ball x r e) y
hyz' : ¬x = y
hy' : y - x = 0
⊢ False
[PROOFSTEP]
exact hyz' (eq_of_sub_eq_zero hy').symm
[GOAL]
case neg
ι : Type u_1
l : Filter ι
E : Type u_2
inst✝⁴ : NormedAddCommGroup E
𝕜 : Type u_3
inst✝³ : IsROrC 𝕜
inst✝² : NormedSpace 𝕜 E
G : Type u_4
inst✝¹ : NormedAddCommGroup G
inst✝ : NormedSpace 𝕜 G
f : ι → E → G
g : E → G
f' : ι → E → E →L[𝕜] G
g' : E → E →L[𝕜] G
x : E
hf' : TendstoUniformlyOnFilter f' g' l (𝓝 x)
hf : ∀ᶠ (n : ι × E) in l ×ˢ 𝓝 x, HasFDerivAt (f n.fst) (f' n.fst n.snd) n.snd
hfg : ∀ᶠ (y : E) in 𝓝 x, Tendsto (fun n => f n y) l (𝓝 (g y))
this✝¹ : NormedSpace ℝ E := NormedSpace.restrictScalars ℝ 𝕜 E
hl : l ≠ ⊥
this✝ : NeBot l
ε : ℝ
hε : ε > 0
q : ℚ
hqpos : 0 < q
hqε : ↑q < ε
hfg' :
  ∀ᶠ (n : (ι × ι) × E) in (l ×ˢ l) ×ˢ 𝓝 x, dist (OfNat.ofNat 0 n.snd) (f' n.fst.fst n.snd - f' n.fst.snd n.snd) < ↑q
this :
  ∀ᶠ (x : (ι × ι) × E) in (l ×ˢ l) ×ˢ 𝓝 x,
    HasFDerivAt
        (f
          (((x.fst, x.snd, x.snd).fst.fst, (x.fst, x.snd, x.snd).snd.fst), (x.fst, x.snd, x.snd).fst.snd,
                (x.fst, x.snd, x.snd).snd.snd).fst.fst)
        (f'
          (((x.fst, x.snd, x.snd).fst.fst, (x.fst, x.snd, x.snd).snd.fst), (x.fst, x.snd, x.snd).fst.snd,
                (x.fst, x.snd, x.snd).snd.snd).fst.fst
          (((x.fst, x.snd, x.snd).fst.fst, (x.fst, x.snd, x.snd).snd.fst), (x.fst, x.snd, x.snd).fst.snd,
                (x.fst, x.snd, x.snd).snd.snd).fst.snd)
        (((x.fst, x.snd, x.snd).fst.fst, (x.fst, x.snd, x.snd).snd.fst), (x.fst, x.snd, x.snd).fst.snd,
              (x.fst, x.snd, x.snd).snd.snd).fst.snd ∧
      HasFDerivAt
        (f
          (((x.fst, x.snd, x.snd).fst.fst, (x.fst, x.snd, x.snd).snd.fst), (x.fst, x.snd, x.snd).fst.snd,
                (x.fst, x.snd, x.snd).snd.snd).snd.fst)
        (f'
          (((x.fst, x.snd, x.snd).fst.fst, (x.fst, x.snd, x.snd).snd.fst), (x.fst, x.snd, x.snd).fst.snd,
                (x.fst, x.snd, x.snd).snd.snd).snd.fst
          (((x.fst, x.snd, x.snd).fst.fst, (x.fst, x.snd, x.snd).snd.fst), (x.fst, x.snd, x.snd).fst.snd,
                (x.fst, x.snd, x.snd).snd.snd).snd.snd)
        (((x.fst, x.snd, x.snd).fst.fst, (x.fst, x.snd, x.snd).snd.fst), (x.fst, x.snd, x.snd).fst.snd,
              (x.fst, x.snd, x.snd).snd.snd).snd.snd
a : ι × ι → Prop
b : ∀ᶠ (x : ι × ι) in l ×ˢ l, a x
c : E → Prop
d : ∀ᶠ (y : E) in 𝓝 x, c y
e :
  ∀ {x : ι × ι},
    a x →
      ∀ {y : E},
        c y →
          dist (OfNat.ofNat 0 (x, y).snd) (f' (x, y).fst.fst (x, y).snd - f' (x, y).fst.snd (x, y).snd) < ↑q ∧
            HasFDerivAt
                (f
                  ((((x, y).fst, (x, y).snd, (x, y).snd).fst.fst, ((x, y).fst, (x, y).snd, (x, y).snd).snd.fst),
                        ((x, y).fst, (x, y).snd, (x, y).snd).fst.snd,
                        ((x, y).fst, (x, y).snd, (x, y).snd).snd.snd).fst.fst)
                (f'
                  ((((x, y).fst, (x, y).snd, (x, y).snd).fst.fst, ((x, y).fst, (x, y).snd, (x, y).snd).snd.fst),
                        ((x, y).fst, (x, y).snd, (x, y).snd).fst.snd,
                        ((x, y).fst, (x, y).snd, (x, y).snd).snd.snd).fst.fst
                  ((((x, y).fst, (x, y).snd, (x, y).snd).fst.fst, ((x, y).fst, (x, y).snd, (x, y).snd).snd.fst),
                        ((x, y).fst, (x, y).snd, (x, y).snd).fst.snd,
                        ((x, y).fst, (x, y).snd, (x, y).snd).snd.snd).fst.snd)
                ((((x, y).fst, (x, y).snd, (x, y).snd).fst.fst, ((x, y).fst, (x, y).snd, (x, y).snd).snd.fst),
                      ((x, y).fst, (x, y).snd, (x, y).snd).fst.snd,
                      ((x, y).fst, (x, y).snd, (x, y).snd).snd.snd).fst.snd ∧
              HasFDerivAt
                (f
                  ((((x, y).fst, (x, y).snd, (x, y).snd).fst.fst, ((x, y).fst, (x, y).snd, (x, y).snd).snd.fst),
                        ((x, y).fst, (x, y).snd, (x, y).snd).fst.snd,
                        ((x, y).fst, (x, y).snd, (x, y).snd).snd.snd).snd.fst)
                (f'
                  ((((x, y).fst, (x, y).snd, (x, y).snd).fst.fst, ((x, y).fst, (x, y).snd, (x, y).snd).snd.fst),
                        ((x, y).fst, (x, y).snd, (x, y).snd).fst.snd,
                        ((x, y).fst, (x, y).snd, (x, y).snd).snd.snd).snd.fst
                  ((((x, y).fst, (x, y).snd, (x, y).snd).fst.fst, ((x, y).fst, (x, y).snd, (x, y).snd).snd.fst),
                        ((x, y).fst, (x, y).snd, (x, y).snd).fst.snd,
                        ((x, y).fst, (x, y).snd, (x, y).snd).snd.snd).snd.snd)
                ((((x, y).fst, (x, y).snd, (x, y).snd).fst.fst, ((x, y).fst, (x, y).snd, (x, y).snd).snd.fst),
                      ((x, y).fst, (x, y).snd, (x, y).snd).fst.snd,
                      ((x, y).fst, (x, y).snd, (x, y).snd).snd.snd).snd.snd
r : ℝ
hr : 0 < r
hr' : ∀ ⦃x_1 : E⦄, x_1 ∈ Metric.ball x r → c x_1
n : ι × ι
hn : a n
y : E
hy : (fun e => Metric.ball x r e) y
hyz' : ¬x = y
hyz : 0 < ‖y - x‖
⊢ ‖y - x‖⁻¹ * ‖f n.fst y - f n.fst x - (f n.snd y - f n.snd x)‖ ≤ ↑q
[PROOFSTEP]
rw [inv_mul_le_iff hyz, mul_comm, sub_sub_sub_comm]
[GOAL]
case neg
ι : Type u_1
l : Filter ι
E : Type u_2
inst✝⁴ : NormedAddCommGroup E
𝕜 : Type u_3
inst✝³ : IsROrC 𝕜
inst✝² : NormedSpace 𝕜 E
G : Type u_4
inst✝¹ : NormedAddCommGroup G
inst✝ : NormedSpace 𝕜 G
f : ι → E → G
g : E → G
f' : ι → E → E →L[𝕜] G
g' : E → E →L[𝕜] G
x : E
hf' : TendstoUniformlyOnFilter f' g' l (𝓝 x)
hf : ∀ᶠ (n : ι × E) in l ×ˢ 𝓝 x, HasFDerivAt (f n.fst) (f' n.fst n.snd) n.snd
hfg : ∀ᶠ (y : E) in 𝓝 x, Tendsto (fun n => f n y) l (𝓝 (g y))
this✝¹ : NormedSpace ℝ E := NormedSpace.restrictScalars ℝ 𝕜 E
hl : l ≠ ⊥
this✝ : NeBot l
ε : ℝ
hε : ε > 0
q : ℚ
hqpos : 0 < q
hqε : ↑q < ε
hfg' :
  ∀ᶠ (n : (ι × ι) × E) in (l ×ˢ l) ×ˢ 𝓝 x, dist (OfNat.ofNat 0 n.snd) (f' n.fst.fst n.snd - f' n.fst.snd n.snd) < ↑q
this :
  ∀ᶠ (x : (ι × ι) × E) in (l ×ˢ l) ×ˢ 𝓝 x,
    HasFDerivAt
        (f
          (((x.fst, x.snd, x.snd).fst.fst, (x.fst, x.snd, x.snd).snd.fst), (x.fst, x.snd, x.snd).fst.snd,
                (x.fst, x.snd, x.snd).snd.snd).fst.fst)
        (f'
          (((x.fst, x.snd, x.snd).fst.fst, (x.fst, x.snd, x.snd).snd.fst), (x.fst, x.snd, x.snd).fst.snd,
                (x.fst, x.snd, x.snd).snd.snd).fst.fst
          (((x.fst, x.snd, x.snd).fst.fst, (x.fst, x.snd, x.snd).snd.fst), (x.fst, x.snd, x.snd).fst.snd,
                (x.fst, x.snd, x.snd).snd.snd).fst.snd)
        (((x.fst, x.snd, x.snd).fst.fst, (x.fst, x.snd, x.snd).snd.fst), (x.fst, x.snd, x.snd).fst.snd,
              (x.fst, x.snd, x.snd).snd.snd).fst.snd ∧
      HasFDerivAt
        (f
          (((x.fst, x.snd, x.snd).fst.fst, (x.fst, x.snd, x.snd).snd.fst), (x.fst, x.snd, x.snd).fst.snd,
                (x.fst, x.snd, x.snd).snd.snd).snd.fst)
        (f'
          (((x.fst, x.snd, x.snd).fst.fst, (x.fst, x.snd, x.snd).snd.fst), (x.fst, x.snd, x.snd).fst.snd,
                (x.fst, x.snd, x.snd).snd.snd).snd.fst
          (((x.fst, x.snd, x.snd).fst.fst, (x.fst, x.snd, x.snd).snd.fst), (x.fst, x.snd, x.snd).fst.snd,
                (x.fst, x.snd, x.snd).snd.snd).snd.snd)
        (((x.fst, x.snd, x.snd).fst.fst, (x.fst, x.snd, x.snd).snd.fst), (x.fst, x.snd, x.snd).fst.snd,
              (x.fst, x.snd, x.snd).snd.snd).snd.snd
a : ι × ι → Prop
b : ∀ᶠ (x : ι × ι) in l ×ˢ l, a x
c : E → Prop
d : ∀ᶠ (y : E) in 𝓝 x, c y
e :
  ∀ {x : ι × ι},
    a x →
      ∀ {y : E},
        c y →
          dist (OfNat.ofNat 0 (x, y).snd) (f' (x, y).fst.fst (x, y).snd - f' (x, y).fst.snd (x, y).snd) < ↑q ∧
            HasFDerivAt
                (f
                  ((((x, y).fst, (x, y).snd, (x, y).snd).fst.fst, ((x, y).fst, (x, y).snd, (x, y).snd).snd.fst),
                        ((x, y).fst, (x, y).snd, (x, y).snd).fst.snd,
                        ((x, y).fst, (x, y).snd, (x, y).snd).snd.snd).fst.fst)
                (f'
                  ((((x, y).fst, (x, y).snd, (x, y).snd).fst.fst, ((x, y).fst, (x, y).snd, (x, y).snd).snd.fst),
                        ((x, y).fst, (x, y).snd, (x, y).snd).fst.snd,
                        ((x, y).fst, (x, y).snd, (x, y).snd).snd.snd).fst.fst
                  ((((x, y).fst, (x, y).snd, (x, y).snd).fst.fst, ((x, y).fst, (x, y).snd, (x, y).snd).snd.fst),
                        ((x, y).fst, (x, y).snd, (x, y).snd).fst.snd,
                        ((x, y).fst, (x, y).snd, (x, y).snd).snd.snd).fst.snd)
                ((((x, y).fst, (x, y).snd, (x, y).snd).fst.fst, ((x, y).fst, (x, y).snd, (x, y).snd).snd.fst),
                      ((x, y).fst, (x, y).snd, (x, y).snd).fst.snd,
                      ((x, y).fst, (x, y).snd, (x, y).snd).snd.snd).fst.snd ∧
              HasFDerivAt
                (f
                  ((((x, y).fst, (x, y).snd, (x, y).snd).fst.fst, ((x, y).fst, (x, y).snd, (x, y).snd).snd.fst),
                        ((x, y).fst, (x, y).snd, (x, y).snd).fst.snd,
                        ((x, y).fst, (x, y).snd, (x, y).snd).snd.snd).snd.fst)
                (f'
                  ((((x, y).fst, (x, y).snd, (x, y).snd).fst.fst, ((x, y).fst, (x, y).snd, (x, y).snd).snd.fst),
                        ((x, y).fst, (x, y).snd, (x, y).snd).fst.snd,
                        ((x, y).fst, (x, y).snd, (x, y).snd).snd.snd).snd.fst
                  ((((x, y).fst, (x, y).snd, (x, y).snd).fst.fst, ((x, y).fst, (x, y).snd, (x, y).snd).snd.fst),
                        ((x, y).fst, (x, y).snd, (x, y).snd).fst.snd,
                        ((x, y).fst, (x, y).snd, (x, y).snd).snd.snd).snd.snd)
                ((((x, y).fst, (x, y).snd, (x, y).snd).fst.fst, ((x, y).fst, (x, y).snd, (x, y).snd).snd.fst),
                      ((x, y).fst, (x, y).snd, (x, y).snd).fst.snd,
                      ((x, y).fst, (x, y).snd, (x, y).snd).snd.snd).snd.snd
r : ℝ
hr : 0 < r
hr' : ∀ ⦃x_1 : E⦄, x_1 ∈ Metric.ball x r → c x_1
n : ι × ι
hn : a n
y : E
hy : (fun e => Metric.ball x r e) y
hyz' : ¬x = y
hyz : 0 < ‖y - x‖
⊢ ‖f n.fst y - f n.snd y - (f n.fst x - f n.snd x)‖ ≤ ↑q * ‖y - x‖
[PROOFSTEP]
simp only [Pi.zero_apply, dist_zero_left] at e
[GOAL]
case neg
ι : Type u_1
l : Filter ι
E : Type u_2
inst✝⁴ : NormedAddCommGroup E
𝕜 : Type u_3
inst✝³ : IsROrC 𝕜
inst✝² : NormedSpace 𝕜 E
G : Type u_4
inst✝¹ : NormedAddCommGroup G
inst✝ : NormedSpace 𝕜 G
f : ι → E → G
g : E → G
f' : ι → E → E →L[𝕜] G
g' : E → E →L[𝕜] G
x : E
hf' : TendstoUniformlyOnFilter f' g' l (𝓝 x)
hf : ∀ᶠ (n : ι × E) in l ×ˢ 𝓝 x, HasFDerivAt (f n.fst) (f' n.fst n.snd) n.snd
hfg : ∀ᶠ (y : E) in 𝓝 x, Tendsto (fun n => f n y) l (𝓝 (g y))
this✝¹ : NormedSpace ℝ E := NormedSpace.restrictScalars ℝ 𝕜 E
hl : l ≠ ⊥
this✝ : NeBot l
ε : ℝ
hε : ε > 0
q : ℚ
hqpos : 0 < q
hqε : ↑q < ε
hfg' :
  ∀ᶠ (n : (ι × ι) × E) in (l ×ˢ l) ×ˢ 𝓝 x, dist (OfNat.ofNat 0 n.snd) (f' n.fst.fst n.snd - f' n.fst.snd n.snd) < ↑q
this :
  ∀ᶠ (x : (ι × ι) × E) in (l ×ˢ l) ×ˢ 𝓝 x,
    HasFDerivAt
        (f
          (((x.fst, x.snd, x.snd).fst.fst, (x.fst, x.snd, x.snd).snd.fst), (x.fst, x.snd, x.snd).fst.snd,
                (x.fst, x.snd, x.snd).snd.snd).fst.fst)
        (f'
          (((x.fst, x.snd, x.snd).fst.fst, (x.fst, x.snd, x.snd).snd.fst), (x.fst, x.snd, x.snd).fst.snd,
                (x.fst, x.snd, x.snd).snd.snd).fst.fst
          (((x.fst, x.snd, x.snd).fst.fst, (x.fst, x.snd, x.snd).snd.fst), (x.fst, x.snd, x.snd).fst.snd,
                (x.fst, x.snd, x.snd).snd.snd).fst.snd)
        (((x.fst, x.snd, x.snd).fst.fst, (x.fst, x.snd, x.snd).snd.fst), (x.fst, x.snd, x.snd).fst.snd,
              (x.fst, x.snd, x.snd).snd.snd).fst.snd ∧
      HasFDerivAt
        (f
          (((x.fst, x.snd, x.snd).fst.fst, (x.fst, x.snd, x.snd).snd.fst), (x.fst, x.snd, x.snd).fst.snd,
                (x.fst, x.snd, x.snd).snd.snd).snd.fst)
        (f'
          (((x.fst, x.snd, x.snd).fst.fst, (x.fst, x.snd, x.snd).snd.fst), (x.fst, x.snd, x.snd).fst.snd,
                (x.fst, x.snd, x.snd).snd.snd).snd.fst
          (((x.fst, x.snd, x.snd).fst.fst, (x.fst, x.snd, x.snd).snd.fst), (x.fst, x.snd, x.snd).fst.snd,
                (x.fst, x.snd, x.snd).snd.snd).snd.snd)
        (((x.fst, x.snd, x.snd).fst.fst, (x.fst, x.snd, x.snd).snd.fst), (x.fst, x.snd, x.snd).fst.snd,
              (x.fst, x.snd, x.snd).snd.snd).snd.snd
a : ι × ι → Prop
b : ∀ᶠ (x : ι × ι) in l ×ˢ l, a x
c : E → Prop
d : ∀ᶠ (y : E) in 𝓝 x, c y
r : ℝ
hr : 0 < r
hr' : ∀ ⦃x_1 : E⦄, x_1 ∈ Metric.ball x r → c x_1
n : ι × ι
hn : a n
y : E
hy : (fun e => Metric.ball x r e) y
hyz' : ¬x = y
hyz : 0 < ‖y - x‖
e :
  ∀ {x : ι × ι},
    a x →
      ∀ {y : E},
        c y →
          ‖f' x.fst y - f' x.snd y‖ < ↑q ∧ HasFDerivAt (f x.fst) (f' x.fst y) y ∧ HasFDerivAt (f x.snd) (f' x.snd y) y
⊢ ‖f n.fst y - f n.snd y - (f n.fst x - f n.snd x)‖ ≤ ↑q * ‖y - x‖
[PROOFSTEP]
refine'
  Convex.norm_image_sub_le_of_norm_hasFDerivWithin_le
    (fun y hy => ((e hn (hr' hy)).2.1.sub (e hn (hr' hy)).2.2).hasFDerivWithinAt) (fun y hy => (e hn (hr' hy)).1.le)
    (convex_ball x r) (Metric.mem_ball_self hr) hy
[GOAL]
ι : Type u_1
l : Filter ι
E : Type u_2
inst✝⁵ : NormedAddCommGroup E
𝕜 : Type u_3
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedSpace 𝕜 E
G : Type u_4
inst✝² : NormedAddCommGroup G
inst✝¹ : NormedSpace 𝕜 G
f : ι → E → G
g : E → G
f' : ι → E → E →L[𝕜] G
g' : E → E →L[𝕜] G
x : E
inst✝ : NeBot l
hf' : TendstoUniformlyOnFilter f' g' l (𝓝 x)
hf : ∀ᶠ (n : ι × E) in l ×ˢ 𝓝 x, HasFDerivAt (f n.fst) (f' n.fst n.snd) n.snd
hfg : ∀ᶠ (y : E) in 𝓝 x, Tendsto (fun n => f n y) l (𝓝 (g y))
⊢ HasFDerivAt g (g' x) x
[PROOFSTEP]
rw [hasFDerivAt_iff_tendsto]
  -- Introduce extra quantifier via curried filters
[GOAL]
ι : Type u_1
l : Filter ι
E : Type u_2
inst✝⁵ : NormedAddCommGroup E
𝕜 : Type u_3
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedSpace 𝕜 E
G : Type u_4
inst✝² : NormedAddCommGroup G
inst✝¹ : NormedSpace 𝕜 G
f : ι → E → G
g : E → G
f' : ι → E → E →L[𝕜] G
g' : E → E →L[𝕜] G
x : E
inst✝ : NeBot l
hf' : TendstoUniformlyOnFilter f' g' l (𝓝 x)
hf : ∀ᶠ (n : ι × E) in l ×ˢ 𝓝 x, HasFDerivAt (f n.fst) (f' n.fst n.snd) n.snd
hfg : ∀ᶠ (y : E) in 𝓝 x, Tendsto (fun n => f n y) l (𝓝 (g y))
⊢ Tendsto (fun x' => ‖x' - x‖⁻¹ * ‖g x' - g x - ↑(g' x) (x' - x)‖) (𝓝 x) (𝓝 0)
[PROOFSTEP]
suffices Tendsto (fun y : ι × E => ‖y.2 - x‖⁻¹ * ‖g y.2 - g x - (g' x) (y.2 - x)‖) (l.curry (𝓝 x)) (𝓝 0)
  by
  rw [Metric.tendsto_nhds] at this ⊢
  intro ε hε
  specialize this ε hε
  rw [eventually_curry_iff] at this
  simp only at this
  exact
    (eventually_const.mp this).mono
      (by simp only [imp_self, forall_const])
        -- With the new quantifier in hand, we can perform the famous `ε/3` proof. Specifically,
          -- we will break up the limit (the difference functions minus the derivative go to 0) into 3:
          --   * The difference functions of the `f n` converge *uniformly* to the difference functions
          --     of the `g n`
          --   * The `f' n` are the derivatives of the `f n`
          --   * The `f' n` converge to `g'` at `x`
[GOAL]
ι : Type u_1
l : Filter ι
E : Type u_2
inst✝⁵ : NormedAddCommGroup E
𝕜 : Type u_3
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedSpace 𝕜 E
G : Type u_4
inst✝² : NormedAddCommGroup G
inst✝¹ : NormedSpace 𝕜 G
f : ι → E → G
g : E → G
f' : ι → E → E →L[𝕜] G
g' : E → E →L[𝕜] G
x : E
inst✝ : NeBot l
hf' : TendstoUniformlyOnFilter f' g' l (𝓝 x)
hf : ∀ᶠ (n : ι × E) in l ×ˢ 𝓝 x, HasFDerivAt (f n.fst) (f' n.fst n.snd) n.snd
hfg : ∀ᶠ (y : E) in 𝓝 x, Tendsto (fun n => f n y) l (𝓝 (g y))
this : Tendsto (fun y => ‖y.snd - x‖⁻¹ * ‖g y.snd - g x - ↑(g' x) (y.snd - x)‖) (curry l (𝓝 x)) (𝓝 0)
⊢ Tendsto (fun x' => ‖x' - x‖⁻¹ * ‖g x' - g x - ↑(g' x) (x' - x)‖) (𝓝 x) (𝓝 0)
[PROOFSTEP]
rw [Metric.tendsto_nhds] at this ⊢
[GOAL]
ι : Type u_1
l : Filter ι
E : Type u_2
inst✝⁵ : NormedAddCommGroup E
𝕜 : Type u_3
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedSpace 𝕜 E
G : Type u_4
inst✝² : NormedAddCommGroup G
inst✝¹ : NormedSpace 𝕜 G
f : ι → E → G
g : E → G
f' : ι → E → E →L[𝕜] G
g' : E → E →L[𝕜] G
x : E
inst✝ : NeBot l
hf' : TendstoUniformlyOnFilter f' g' l (𝓝 x)
hf : ∀ᶠ (n : ι × E) in l ×ˢ 𝓝 x, HasFDerivAt (f n.fst) (f' n.fst n.snd) n.snd
hfg : ∀ᶠ (y : E) in 𝓝 x, Tendsto (fun n => f n y) l (𝓝 (g y))
this :
  ∀ (ε : ℝ),
    ε > 0 → ∀ᶠ (x_1 : ι × E) in curry l (𝓝 x), dist (‖x_1.snd - x‖⁻¹ * ‖g x_1.snd - g x - ↑(g' x) (x_1.snd - x)‖) 0 < ε
⊢ ∀ (ε : ℝ), ε > 0 → ∀ᶠ (x_1 : E) in 𝓝 x, dist (‖x_1 - x‖⁻¹ * ‖g x_1 - g x - ↑(g' x) (x_1 - x)‖) 0 < ε
[PROOFSTEP]
intro ε hε
[GOAL]
ι : Type u_1
l : Filter ι
E : Type u_2
inst✝⁵ : NormedAddCommGroup E
𝕜 : Type u_3
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedSpace 𝕜 E
G : Type u_4
inst✝² : NormedAddCommGroup G
inst✝¹ : NormedSpace 𝕜 G
f : ι → E → G
g : E → G
f' : ι → E → E →L[𝕜] G
g' : E → E →L[𝕜] G
x : E
inst✝ : NeBot l
hf' : TendstoUniformlyOnFilter f' g' l (𝓝 x)
hf : ∀ᶠ (n : ι × E) in l ×ˢ 𝓝 x, HasFDerivAt (f n.fst) (f' n.fst n.snd) n.snd
hfg : ∀ᶠ (y : E) in 𝓝 x, Tendsto (fun n => f n y) l (𝓝 (g y))
this :
  ∀ (ε : ℝ),
    ε > 0 → ∀ᶠ (x_1 : ι × E) in curry l (𝓝 x), dist (‖x_1.snd - x‖⁻¹ * ‖g x_1.snd - g x - ↑(g' x) (x_1.snd - x)‖) 0 < ε
ε : ℝ
hε : ε > 0
⊢ ∀ᶠ (x_1 : E) in 𝓝 x, dist (‖x_1 - x‖⁻¹ * ‖g x_1 - g x - ↑(g' x) (x_1 - x)‖) 0 < ε
[PROOFSTEP]
specialize this ε hε
[GOAL]
ι : Type u_1
l : Filter ι
E : Type u_2
inst✝⁵ : NormedAddCommGroup E
𝕜 : Type u_3
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedSpace 𝕜 E
G : Type u_4
inst✝² : NormedAddCommGroup G
inst✝¹ : NormedSpace 𝕜 G
f : ι → E → G
g : E → G
f' : ι → E → E →L[𝕜] G
g' : E → E →L[𝕜] G
x : E
inst✝ : NeBot l
hf' : TendstoUniformlyOnFilter f' g' l (𝓝 x)
hf : ∀ᶠ (n : ι × E) in l ×ˢ 𝓝 x, HasFDerivAt (f n.fst) (f' n.fst n.snd) n.snd
hfg : ∀ᶠ (y : E) in 𝓝 x, Tendsto (fun n => f n y) l (𝓝 (g y))
ε : ℝ
hε : ε > 0
this : ∀ᶠ (x_1 : ι × E) in curry l (𝓝 x), dist (‖x_1.snd - x‖⁻¹ * ‖g x_1.snd - g x - ↑(g' x) (x_1.snd - x)‖) 0 < ε
⊢ ∀ᶠ (x_1 : E) in 𝓝 x, dist (‖x_1 - x‖⁻¹ * ‖g x_1 - g x - ↑(g' x) (x_1 - x)‖) 0 < ε
[PROOFSTEP]
rw [eventually_curry_iff] at this
[GOAL]
ι : Type u_1
l : Filter ι
E : Type u_2
inst✝⁵ : NormedAddCommGroup E
𝕜 : Type u_3
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedSpace 𝕜 E
G : Type u_4
inst✝² : NormedAddCommGroup G
inst✝¹ : NormedSpace 𝕜 G
f : ι → E → G
g : E → G
f' : ι → E → E →L[𝕜] G
g' : E → E →L[𝕜] G
x : E
inst✝ : NeBot l
hf' : TendstoUniformlyOnFilter f' g' l (𝓝 x)
hf : ∀ᶠ (n : ι × E) in l ×ˢ 𝓝 x, HasFDerivAt (f n.fst) (f' n.fst n.snd) n.snd
hfg : ∀ᶠ (y : E) in 𝓝 x, Tendsto (fun n => f n y) l (𝓝 (g y))
ε : ℝ
hε : ε > 0
this :
  ∀ᶠ (x_1 : ι) in l,
    ∀ᶠ (y : E) in 𝓝 x, dist (‖(x_1, y).snd - x‖⁻¹ * ‖g (x_1, y).snd - g x - ↑(g' x) ((x_1, y).snd - x)‖) 0 < ε
⊢ ∀ᶠ (x_1 : E) in 𝓝 x, dist (‖x_1 - x‖⁻¹ * ‖g x_1 - g x - ↑(g' x) (x_1 - x)‖) 0 < ε
[PROOFSTEP]
simp only at this
[GOAL]
ι : Type u_1
l : Filter ι
E : Type u_2
inst✝⁵ : NormedAddCommGroup E
𝕜 : Type u_3
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedSpace 𝕜 E
G : Type u_4
inst✝² : NormedAddCommGroup G
inst✝¹ : NormedSpace 𝕜 G
f : ι → E → G
g : E → G
f' : ι → E → E →L[𝕜] G
g' : E → E →L[𝕜] G
x : E
inst✝ : NeBot l
hf' : TendstoUniformlyOnFilter f' g' l (𝓝 x)
hf : ∀ᶠ (n : ι × E) in l ×ˢ 𝓝 x, HasFDerivAt (f n.fst) (f' n.fst n.snd) n.snd
hfg : ∀ᶠ (y : E) in 𝓝 x, Tendsto (fun n => f n y) l (𝓝 (g y))
ε : ℝ
hε : ε > 0
this : ∀ᶠ (x_1 : ι) in l, ∀ᶠ (y : E) in 𝓝 x, dist (‖y - x‖⁻¹ * ‖g y - g x - ↑(g' x) (y - x)‖) 0 < ε
⊢ ∀ᶠ (x_1 : E) in 𝓝 x, dist (‖x_1 - x‖⁻¹ * ‖g x_1 - g x - ↑(g' x) (x_1 - x)‖) 0 < ε
[PROOFSTEP]
exact
  (eventually_const.mp this).mono
    (by simp only [imp_self, forall_const])
      -- With the new quantifier in hand, we can perform the famous `ε/3` proof. Specifically,
        -- we will break up the limit (the difference functions minus the derivative go to 0) into 3:
        --   * The difference functions of the `f n` converge *uniformly* to the difference functions
        --     of the `g n`
        --   * The `f' n` are the derivatives of the `f n`
        --   * The `f' n` converge to `g'` at `x`
[GOAL]
ι : Type u_1
l : Filter ι
E : Type u_2
inst✝⁵ : NormedAddCommGroup E
𝕜 : Type u_3
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedSpace 𝕜 E
G : Type u_4
inst✝² : NormedAddCommGroup G
inst✝¹ : NormedSpace 𝕜 G
f : ι → E → G
g : E → G
f' : ι → E → E →L[𝕜] G
g' : E → E →L[𝕜] G
x : E
inst✝ : NeBot l
hf' : TendstoUniformlyOnFilter f' g' l (𝓝 x)
hf : ∀ᶠ (n : ι × E) in l ×ˢ 𝓝 x, HasFDerivAt (f n.fst) (f' n.fst n.snd) n.snd
hfg : ∀ᶠ (y : E) in 𝓝 x, Tendsto (fun n => f n y) l (𝓝 (g y))
ε : ℝ
hε : ε > 0
this : ∀ᶠ (x_1 : ι) in l, ∀ᶠ (y : E) in 𝓝 x, dist (‖y - x‖⁻¹ * ‖g y - g x - ↑(g' x) (y - x)‖) 0 < ε
⊢ ∀ (x_1 : E),
    dist (‖x_1 - x‖⁻¹ * ‖g x_1 - g x - ↑(g' x) (x_1 - x)‖) 0 < ε →
      dist (‖x_1 - x‖⁻¹ * ‖g x_1 - g x - ↑(g' x) (x_1 - x)‖) 0 < ε
[PROOFSTEP]
simp only [imp_self, forall_const]
[GOAL]
ι : Type u_1
l : Filter ι
E : Type u_2
inst✝⁵ : NormedAddCommGroup E
𝕜 : Type u_3
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedSpace 𝕜 E
G : Type u_4
inst✝² : NormedAddCommGroup G
inst✝¹ : NormedSpace 𝕜 G
f : ι → E → G
g : E → G
f' : ι → E → E →L[𝕜] G
g' : E → E →L[𝕜] G
x : E
inst✝ : NeBot l
hf' : TendstoUniformlyOnFilter f' g' l (𝓝 x)
hf : ∀ᶠ (n : ι × E) in l ×ˢ 𝓝 x, HasFDerivAt (f n.fst) (f' n.fst n.snd) n.snd
hfg : ∀ᶠ (y : E) in 𝓝 x, Tendsto (fun n => f n y) l (𝓝 (g y))
⊢ Tendsto (fun y => ‖y.snd - x‖⁻¹ * ‖g y.snd - g x - ↑(g' x) (y.snd - x)‖) (curry l (𝓝 x)) (𝓝 0)
[PROOFSTEP]
conv =>
  congr
  ext
  rw [← abs_norm, ← abs_inv, ← @IsROrC.norm_ofReal 𝕜 _ _, IsROrC.ofReal_inv, ← norm_smul]
[GOAL]
ι : Type u_1
l : Filter ι
E : Type u_2
inst✝⁵ : NormedAddCommGroup E
𝕜 : Type u_3
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedSpace 𝕜 E
G : Type u_4
inst✝² : NormedAddCommGroup G
inst✝¹ : NormedSpace 𝕜 G
f : ι → E → G
g : E → G
f' : ι → E → E →L[𝕜] G
g' : E → E →L[𝕜] G
x : E
inst✝ : NeBot l
hf' : TendstoUniformlyOnFilter f' g' l (𝓝 x)
hf : ∀ᶠ (n : ι × E) in l ×ˢ 𝓝 x, HasFDerivAt (f n.fst) (f' n.fst n.snd) n.snd
hfg : ∀ᶠ (y : E) in 𝓝 x, Tendsto (fun n => f n y) l (𝓝 (g y))
| Tendsto (fun y => ‖y.snd - x‖⁻¹ * ‖g y.snd - g x - ↑(g' x) (y.snd - x)‖) (curry l (𝓝 x)) (𝓝 0)
[PROOFSTEP]
  congr
  ext
  rw [← abs_norm, ← abs_inv, ← @IsROrC.norm_ofReal 𝕜 _ _, IsROrC.ofReal_inv, ← norm_smul]
[GOAL]
ι : Type u_1
l : Filter ι
E : Type u_2
inst✝⁵ : NormedAddCommGroup E
𝕜 : Type u_3
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedSpace 𝕜 E
G : Type u_4
inst✝² : NormedAddCommGroup G
inst✝¹ : NormedSpace 𝕜 G
f : ι → E → G
g : E → G
f' : ι → E → E →L[𝕜] G
g' : E → E →L[𝕜] G
x : E
inst✝ : NeBot l
hf' : TendstoUniformlyOnFilter f' g' l (𝓝 x)
hf : ∀ᶠ (n : ι × E) in l ×ˢ 𝓝 x, HasFDerivAt (f n.fst) (f' n.fst n.snd) n.snd
hfg : ∀ᶠ (y : E) in 𝓝 x, Tendsto (fun n => f n y) l (𝓝 (g y))
| Tendsto (fun y => ‖y.snd - x‖⁻¹ * ‖g y.snd - g x - ↑(g' x) (y.snd - x)‖) (curry l (𝓝 x)) (𝓝 0)
[PROOFSTEP]
  congr
  ext
  rw [← abs_norm, ← abs_inv, ← @IsROrC.norm_ofReal 𝕜 _ _, IsROrC.ofReal_inv, ← norm_smul]
[GOAL]
ι : Type u_1
l : Filter ι
E : Type u_2
inst✝⁵ : NormedAddCommGroup E
𝕜 : Type u_3
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedSpace 𝕜 E
G : Type u_4
inst✝² : NormedAddCommGroup G
inst✝¹ : NormedSpace 𝕜 G
f : ι → E → G
g : E → G
f' : ι → E → E →L[𝕜] G
g' : E → E →L[𝕜] G
x : E
inst✝ : NeBot l
hf' : TendstoUniformlyOnFilter f' g' l (𝓝 x)
hf : ∀ᶠ (n : ι × E) in l ×ˢ 𝓝 x, HasFDerivAt (f n.fst) (f' n.fst n.snd) n.snd
hfg : ∀ᶠ (y : E) in 𝓝 x, Tendsto (fun n => f n y) l (𝓝 (g y))
| Tendsto (fun y => ‖y.snd - x‖⁻¹ * ‖g y.snd - g x - ↑(g' x) (y.snd - x)‖) (curry l (𝓝 x)) (𝓝 0)
[PROOFSTEP]
congr
[GOAL]
case f
ι : Type u_1
l : Filter ι
E : Type u_2
inst✝⁵ : NormedAddCommGroup E
𝕜 : Type u_3
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedSpace 𝕜 E
G : Type u_4
inst✝² : NormedAddCommGroup G
inst✝¹ : NormedSpace 𝕜 G
f : ι → E → G
g : E → G
f' : ι → E → E →L[𝕜] G
g' : E → E →L[𝕜] G
x : E
inst✝ : NeBot l
hf' : TendstoUniformlyOnFilter f' g' l (𝓝 x)
hf : ∀ᶠ (n : ι × E) in l ×ˢ 𝓝 x, HasFDerivAt (f n.fst) (f' n.fst n.snd) n.snd
hfg : ∀ᶠ (y : E) in 𝓝 x, Tendsto (fun n => f n y) l (𝓝 (g y))
| fun y => ‖y.snd - x‖⁻¹ * ‖g y.snd - g x - ↑(g' x) (y.snd - x)‖
case l₁
ι : Type u_1
l : Filter ι
E : Type u_2
inst✝⁵ : NormedAddCommGroup E
𝕜 : Type u_3
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedSpace 𝕜 E
G : Type u_4
inst✝² : NormedAddCommGroup G
inst✝¹ : NormedSpace 𝕜 G
f : ι → E → G
g : E → G
f' : ι → E → E →L[𝕜] G
g' : E → E →L[𝕜] G
x : E
inst✝ : NeBot l
hf' : TendstoUniformlyOnFilter f' g' l (𝓝 x)
hf : ∀ᶠ (n : ι × E) in l ×ˢ 𝓝 x, HasFDerivAt (f n.fst) (f' n.fst n.snd) n.snd
hfg : ∀ᶠ (y : E) in 𝓝 x, Tendsto (fun n => f n y) l (𝓝 (g y))
| curry l (𝓝 x)
case l₂
ι : Type u_1
l : Filter ι
E : Type u_2
inst✝⁵ : NormedAddCommGroup E
𝕜 : Type u_3
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedSpace 𝕜 E
G : Type u_4
inst✝² : NormedAddCommGroup G
inst✝¹ : NormedSpace 𝕜 G
f : ι → E → G
g : E → G
f' : ι → E → E →L[𝕜] G
g' : E → E →L[𝕜] G
x : E
inst✝ : NeBot l
hf' : TendstoUniformlyOnFilter f' g' l (𝓝 x)
hf : ∀ᶠ (n : ι × E) in l ×ˢ 𝓝 x, HasFDerivAt (f n.fst) (f' n.fst n.snd) n.snd
hfg : ∀ᶠ (y : E) in 𝓝 x, Tendsto (fun n => f n y) l (𝓝 (g y))
| 𝓝 0
[PROOFSTEP]
ext
[GOAL]
case f.h
ι : Type u_1
l : Filter ι
E : Type u_2
inst✝⁵ : NormedAddCommGroup E
𝕜 : Type u_3
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedSpace 𝕜 E
G : Type u_4
inst✝² : NormedAddCommGroup G
inst✝¹ : NormedSpace 𝕜 G
f : ι → E → G
g : E → G
f' : ι → E → E →L[𝕜] G
g' : E → E →L[𝕜] G
x : E
inst✝ : NeBot l
hf' : TendstoUniformlyOnFilter f' g' l (𝓝 x)
hf : ∀ᶠ (n : ι × E) in l ×ˢ 𝓝 x, HasFDerivAt (f n.fst) (f' n.fst n.snd) n.snd
hfg : ∀ᶠ (y : E) in 𝓝 x, Tendsto (fun n => f n y) l (𝓝 (g y))
x✝ : ι × E
| ‖x✝.snd - x‖⁻¹ * ‖g x✝.snd - g x - ↑(g' x) (x✝.snd - x)‖
case l₁
ι : Type u_1
l : Filter ι
E : Type u_2
inst✝⁵ : NormedAddCommGroup E
𝕜 : Type u_3
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedSpace 𝕜 E
G : Type u_4
inst✝² : NormedAddCommGroup G
inst✝¹ : NormedSpace 𝕜 G
f : ι → E → G
g : E → G
f' : ι → E → E →L[𝕜] G
g' : E → E →L[𝕜] G
x : E
inst✝ : NeBot l
hf' : TendstoUniformlyOnFilter f' g' l (𝓝 x)
hf : ∀ᶠ (n : ι × E) in l ×ˢ 𝓝 x, HasFDerivAt (f n.fst) (f' n.fst n.snd) n.snd
hfg : ∀ᶠ (y : E) in 𝓝 x, Tendsto (fun n => f n y) l (𝓝 (g y))
| curry l (𝓝 x)
case l₂
ι : Type u_1
l : Filter ι
E : Type u_2
inst✝⁵ : NormedAddCommGroup E
𝕜 : Type u_3
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedSpace 𝕜 E
G : Type u_4
inst✝² : NormedAddCommGroup G
inst✝¹ : NormedSpace 𝕜 G
f : ι → E → G
g : E → G
f' : ι → E → E →L[𝕜] G
g' : E → E →L[𝕜] G
x : E
inst✝ : NeBot l
hf' : TendstoUniformlyOnFilter f' g' l (𝓝 x)
hf : ∀ᶠ (n : ι × E) in l ×ˢ 𝓝 x, HasFDerivAt (f n.fst) (f' n.fst n.snd) n.snd
hfg : ∀ᶠ (y : E) in 𝓝 x, Tendsto (fun n => f n y) l (𝓝 (g y))
| 𝓝 0
[PROOFSTEP]
rw [← abs_norm, ← abs_inv, ← @IsROrC.norm_ofReal 𝕜 _ _, IsROrC.ofReal_inv, ← norm_smul]
[GOAL]
ι : Type u_1
l : Filter ι
E : Type u_2
inst✝⁵ : NormedAddCommGroup E
𝕜 : Type u_3
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedSpace 𝕜 E
G : Type u_4
inst✝² : NormedAddCommGroup G
inst✝¹ : NormedSpace 𝕜 G
f : ι → E → G
g : E → G
f' : ι → E → E →L[𝕜] G
g' : E → E →L[𝕜] G
x : E
inst✝ : NeBot l
hf' : TendstoUniformlyOnFilter f' g' l (𝓝 x)
hf : ∀ᶠ (n : ι × E) in l ×ˢ 𝓝 x, HasFDerivAt (f n.fst) (f' n.fst n.snd) n.snd
hfg : ∀ᶠ (y : E) in 𝓝 x, Tendsto (fun n => f n y) l (𝓝 (g y))
⊢ Tendsto (fun x_1 => ‖(↑‖x_1.snd - x‖)⁻¹ • (g x_1.snd - g x - ↑(g' x) (x_1.snd - x))‖) (curry l (𝓝 x)) (𝓝 0)
[PROOFSTEP]
rw [← tendsto_zero_iff_norm_tendsto_zero]
[GOAL]
ι : Type u_1
l : Filter ι
E : Type u_2
inst✝⁵ : NormedAddCommGroup E
𝕜 : Type u_3
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedSpace 𝕜 E
G : Type u_4
inst✝² : NormedAddCommGroup G
inst✝¹ : NormedSpace 𝕜 G
f : ι → E → G
g : E → G
f' : ι → E → E →L[𝕜] G
g' : E → E →L[𝕜] G
x : E
inst✝ : NeBot l
hf' : TendstoUniformlyOnFilter f' g' l (𝓝 x)
hf : ∀ᶠ (n : ι × E) in l ×ˢ 𝓝 x, HasFDerivAt (f n.fst) (f' n.fst n.snd) n.snd
hfg : ∀ᶠ (y : E) in 𝓝 x, Tendsto (fun n => f n y) l (𝓝 (g y))
⊢ Tendsto (fun x_1 => (↑‖x_1.snd - x‖)⁻¹ • (g x_1.snd - g x - ↑(g' x) (x_1.snd - x))) (curry l (𝓝 x)) (𝓝 0)
[PROOFSTEP]
have :
  (fun a : ι × E => (‖a.2 - x‖⁻¹ : 𝕜) • (g a.2 - g x - (g' x) (a.2 - x))) =
    ((fun a : ι × E => (‖a.2 - x‖⁻¹ : 𝕜) • (g a.2 - g x - (f a.1 a.2 - f a.1 x))) + fun a : ι × E =>
        (‖a.2 - x‖⁻¹ : 𝕜) • (f a.1 a.2 - f a.1 x - ((f' a.1 x) a.2 - (f' a.1 x) x))) +
      fun a : ι × E => (‖a.2 - x‖⁻¹ : 𝕜) • (f' a.1 x - g' x) (a.2 - x) :=
  by
  ext; simp only [Pi.add_apply]; rw [← smul_add, ← smul_add]; congr
  simp only [map_sub, sub_add_sub_cancel, ContinuousLinearMap.coe_sub', Pi.sub_apply]
    -- Porting note: added
  abel
[GOAL]
ι : Type u_1
l : Filter ι
E : Type u_2
inst✝⁵ : NormedAddCommGroup E
𝕜 : Type u_3
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedSpace 𝕜 E
G : Type u_4
inst✝² : NormedAddCommGroup G
inst✝¹ : NormedSpace 𝕜 G
f : ι → E → G
g : E → G
f' : ι → E → E →L[𝕜] G
g' : E → E →L[𝕜] G
x : E
inst✝ : NeBot l
hf' : TendstoUniformlyOnFilter f' g' l (𝓝 x)
hf : ∀ᶠ (n : ι × E) in l ×ˢ 𝓝 x, HasFDerivAt (f n.fst) (f' n.fst n.snd) n.snd
hfg : ∀ᶠ (y : E) in 𝓝 x, Tendsto (fun n => f n y) l (𝓝 (g y))
⊢ (fun a => (↑‖a.snd - x‖)⁻¹ • (g a.snd - g x - ↑(g' x) (a.snd - x))) =
    ((fun a => (↑‖a.snd - x‖)⁻¹ • (g a.snd - g x - (f a.fst a.snd - f a.fst x))) + fun a =>
        (↑‖a.snd - x‖)⁻¹ • (f a.fst a.snd - f a.fst x - (↑(f' a.fst x) a.snd - ↑(f' a.fst x) x))) +
      fun a => (↑‖a.snd - x‖)⁻¹ • ↑(f' a.fst x - g' x) (a.snd - x)
[PROOFSTEP]
ext
[GOAL]
case h
ι : Type u_1
l : Filter ι
E : Type u_2
inst✝⁵ : NormedAddCommGroup E
𝕜 : Type u_3
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedSpace 𝕜 E
G : Type u_4
inst✝² : NormedAddCommGroup G
inst✝¹ : NormedSpace 𝕜 G
f : ι → E → G
g : E → G
f' : ι → E → E →L[𝕜] G
g' : E → E →L[𝕜] G
x : E
inst✝ : NeBot l
hf' : TendstoUniformlyOnFilter f' g' l (𝓝 x)
hf : ∀ᶠ (n : ι × E) in l ×ˢ 𝓝 x, HasFDerivAt (f n.fst) (f' n.fst n.snd) n.snd
hfg : ∀ᶠ (y : E) in 𝓝 x, Tendsto (fun n => f n y) l (𝓝 (g y))
x✝ : ι × E
⊢ (↑‖x✝.snd - x‖)⁻¹ • (g x✝.snd - g x - ↑(g' x) (x✝.snd - x)) =
    (((fun a => (↑‖a.snd - x‖)⁻¹ • (g a.snd - g x - (f a.fst a.snd - f a.fst x))) + fun a =>
          (↑‖a.snd - x‖)⁻¹ • (f a.fst a.snd - f a.fst x - (↑(f' a.fst x) a.snd - ↑(f' a.fst x) x))) +
        fun a => (↑‖a.snd - x‖)⁻¹ • ↑(f' a.fst x - g' x) (a.snd - x))
      x✝
[PROOFSTEP]
simp only [Pi.add_apply]
[GOAL]
case h
ι : Type u_1
l : Filter ι
E : Type u_2
inst✝⁵ : NormedAddCommGroup E
𝕜 : Type u_3
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedSpace 𝕜 E
G : Type u_4
inst✝² : NormedAddCommGroup G
inst✝¹ : NormedSpace 𝕜 G
f : ι → E → G
g : E → G
f' : ι → E → E →L[𝕜] G
g' : E → E →L[𝕜] G
x : E
inst✝ : NeBot l
hf' : TendstoUniformlyOnFilter f' g' l (𝓝 x)
hf : ∀ᶠ (n : ι × E) in l ×ˢ 𝓝 x, HasFDerivAt (f n.fst) (f' n.fst n.snd) n.snd
hfg : ∀ᶠ (y : E) in 𝓝 x, Tendsto (fun n => f n y) l (𝓝 (g y))
x✝ : ι × E
⊢ (↑‖x✝.snd - x‖)⁻¹ • (g x✝.snd - g x - ↑(g' x) (x✝.snd - x)) =
    (↑‖x✝.snd - x‖)⁻¹ • (g x✝.snd - g x - (f x✝.fst x✝.snd - f x✝.fst x)) +
        (↑‖x✝.snd - x‖)⁻¹ • (f x✝.fst x✝.snd - f x✝.fst x - (↑(f' x✝.fst x) x✝.snd - ↑(f' x✝.fst x) x)) +
      (↑‖x✝.snd - x‖)⁻¹ • ↑(f' x✝.fst x - g' x) (x✝.snd - x)
[PROOFSTEP]
rw [← smul_add, ← smul_add]
[GOAL]
case h
ι : Type u_1
l : Filter ι
E : Type u_2
inst✝⁵ : NormedAddCommGroup E
𝕜 : Type u_3
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedSpace 𝕜 E
G : Type u_4
inst✝² : NormedAddCommGroup G
inst✝¹ : NormedSpace 𝕜 G
f : ι → E → G
g : E → G
f' : ι → E → E →L[𝕜] G
g' : E → E →L[𝕜] G
x : E
inst✝ : NeBot l
hf' : TendstoUniformlyOnFilter f' g' l (𝓝 x)
hf : ∀ᶠ (n : ι × E) in l ×ˢ 𝓝 x, HasFDerivAt (f n.fst) (f' n.fst n.snd) n.snd
hfg : ∀ᶠ (y : E) in 𝓝 x, Tendsto (fun n => f n y) l (𝓝 (g y))
x✝ : ι × E
⊢ (↑‖x✝.snd - x‖)⁻¹ • (g x✝.snd - g x - ↑(g' x) (x✝.snd - x)) =
    (↑‖x✝.snd - x‖)⁻¹ •
      (g x✝.snd - g x - (f x✝.fst x✝.snd - f x✝.fst x) +
          (f x✝.fst x✝.snd - f x✝.fst x - (↑(f' x✝.fst x) x✝.snd - ↑(f' x✝.fst x) x)) +
        ↑(f' x✝.fst x - g' x) (x✝.snd - x))
[PROOFSTEP]
congr
[GOAL]
case h.e_a
ι : Type u_1
l : Filter ι
E : Type u_2
inst✝⁵ : NormedAddCommGroup E
𝕜 : Type u_3
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedSpace 𝕜 E
G : Type u_4
inst✝² : NormedAddCommGroup G
inst✝¹ : NormedSpace 𝕜 G
f : ι → E → G
g : E → G
f' : ι → E → E →L[𝕜] G
g' : E → E →L[𝕜] G
x : E
inst✝ : NeBot l
hf' : TendstoUniformlyOnFilter f' g' l (𝓝 x)
hf : ∀ᶠ (n : ι × E) in l ×ˢ 𝓝 x, HasFDerivAt (f n.fst) (f' n.fst n.snd) n.snd
hfg : ∀ᶠ (y : E) in 𝓝 x, Tendsto (fun n => f n y) l (𝓝 (g y))
x✝ : ι × E
⊢ g x✝.snd - g x - ↑(g' x) (x✝.snd - x) =
    g x✝.snd - g x - (f x✝.fst x✝.snd - f x✝.fst x) +
        (f x✝.fst x✝.snd - f x✝.fst x - (↑(f' x✝.fst x) x✝.snd - ↑(f' x✝.fst x) x)) +
      ↑(f' x✝.fst x - g' x) (x✝.snd - x)
[PROOFSTEP]
simp only [map_sub, sub_add_sub_cancel, ContinuousLinearMap.coe_sub', Pi.sub_apply]
  -- Porting note: added
[GOAL]
case h.e_a
ι : Type u_1
l : Filter ι
E : Type u_2
inst✝⁵ : NormedAddCommGroup E
𝕜 : Type u_3
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedSpace 𝕜 E
G : Type u_4
inst✝² : NormedAddCommGroup G
inst✝¹ : NormedSpace 𝕜 G
f : ι → E → G
g : E → G
f' : ι → E → E →L[𝕜] G
g' : E → E →L[𝕜] G
x : E
inst✝ : NeBot l
hf' : TendstoUniformlyOnFilter f' g' l (𝓝 x)
hf : ∀ᶠ (n : ι × E) in l ×ˢ 𝓝 x, HasFDerivAt (f n.fst) (f' n.fst n.snd) n.snd
hfg : ∀ᶠ (y : E) in 𝓝 x, Tendsto (fun n => f n y) l (𝓝 (g y))
x✝ : ι × E
⊢ g x✝.snd - g x - (↑(g' x) x✝.snd - ↑(g' x) x) =
    g x✝.snd - g x - (↑(f' x✝.fst x) x✝.snd - ↑(f' x✝.fst x) x) +
      (↑(f' x✝.fst x) x✝.snd - ↑(g' x) x✝.snd - (↑(f' x✝.fst x) x - ↑(g' x) x))
[PROOFSTEP]
abel
[GOAL]
case h.e_a
ι : Type u_1
l : Filter ι
E : Type u_2
inst✝⁵ : NormedAddCommGroup E
𝕜 : Type u_3
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedSpace 𝕜 E
G : Type u_4
inst✝² : NormedAddCommGroup G
inst✝¹ : NormedSpace 𝕜 G
f : ι → E → G
g : E → G
f' : ι → E → E →L[𝕜] G
g' : E → E →L[𝕜] G
x : E
inst✝ : NeBot l
hf' : TendstoUniformlyOnFilter f' g' l (𝓝 x)
hf : ∀ᶠ (n : ι × E) in l ×ˢ 𝓝 x, HasFDerivAt (f n.fst) (f' n.fst n.snd) n.snd
hfg : ∀ᶠ (y : E) in 𝓝 x, Tendsto (fun n => f n y) l (𝓝 (g y))
x✝ : ι × E
⊢ g x✝.snd - g x - (↑(g' x) x✝.snd - ↑(g' x) x) =
    g x✝.snd - g x - (↑(f' x✝.fst x) x✝.snd - ↑(f' x✝.fst x) x) +
      (↑(f' x✝.fst x) x✝.snd - ↑(g' x) x✝.snd - (↑(f' x✝.fst x) x - ↑(g' x) x))
[PROOFSTEP]
abel
[GOAL]
ι : Type u_1
l : Filter ι
E : Type u_2
inst✝⁵ : NormedAddCommGroup E
𝕜 : Type u_3
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedSpace 𝕜 E
G : Type u_4
inst✝² : NormedAddCommGroup G
inst✝¹ : NormedSpace 𝕜 G
f : ι → E → G
g : E → G
f' : ι → E → E →L[𝕜] G
g' : E → E →L[𝕜] G
x : E
inst✝ : NeBot l
hf' : TendstoUniformlyOnFilter f' g' l (𝓝 x)
hf : ∀ᶠ (n : ι × E) in l ×ˢ 𝓝 x, HasFDerivAt (f n.fst) (f' n.fst n.snd) n.snd
hfg : ∀ᶠ (y : E) in 𝓝 x, Tendsto (fun n => f n y) l (𝓝 (g y))
this :
  (fun a => (↑‖a.snd - x‖)⁻¹ • (g a.snd - g x - ↑(g' x) (a.snd - x))) =
    ((fun a => (↑‖a.snd - x‖)⁻¹ • (g a.snd - g x - (f a.fst a.snd - f a.fst x))) + fun a =>
        (↑‖a.snd - x‖)⁻¹ • (f a.fst a.snd - f a.fst x - (↑(f' a.fst x) a.snd - ↑(f' a.fst x) x))) +
      fun a => (↑‖a.snd - x‖)⁻¹ • ↑(f' a.fst x - g' x) (a.snd - x)
⊢ Tendsto (fun x_1 => (↑‖x_1.snd - x‖)⁻¹ • (g x_1.snd - g x - ↑(g' x) (x_1.snd - x))) (curry l (𝓝 x)) (𝓝 0)
[PROOFSTEP]
simp_rw [this]
[GOAL]
ι : Type u_1
l : Filter ι
E : Type u_2
inst✝⁵ : NormedAddCommGroup E
𝕜 : Type u_3
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedSpace 𝕜 E
G : Type u_4
inst✝² : NormedAddCommGroup G
inst✝¹ : NormedSpace 𝕜 G
f : ι → E → G
g : E → G
f' : ι → E → E →L[𝕜] G
g' : E → E →L[𝕜] G
x : E
inst✝ : NeBot l
hf' : TendstoUniformlyOnFilter f' g' l (𝓝 x)
hf : ∀ᶠ (n : ι × E) in l ×ˢ 𝓝 x, HasFDerivAt (f n.fst) (f' n.fst n.snd) n.snd
hfg : ∀ᶠ (y : E) in 𝓝 x, Tendsto (fun n => f n y) l (𝓝 (g y))
this :
  (fun a => (↑‖a.snd - x‖)⁻¹ • (g a.snd - g x - ↑(g' x) (a.snd - x))) =
    ((fun a => (↑‖a.snd - x‖)⁻¹ • (g a.snd - g x - (f a.fst a.snd - f a.fst x))) + fun a =>
        (↑‖a.snd - x‖)⁻¹ • (f a.fst a.snd - f a.fst x - (↑(f' a.fst x) a.snd - ↑(f' a.fst x) x))) +
      fun a => (↑‖a.snd - x‖)⁻¹ • ↑(f' a.fst x - g' x) (a.snd - x)
⊢ Tendsto
    (((fun a => (↑‖a.snd - x‖)⁻¹ • (g a.snd - g x - (f a.fst a.snd - f a.fst x))) + fun a =>
        (↑‖a.snd - x‖)⁻¹ • (f a.fst a.snd - f a.fst x - (↑(f' a.fst x) a.snd - ↑(f' a.fst x) x))) +
      fun a => (↑‖a.snd - x‖)⁻¹ • ↑(f' a.fst x - g' x) (a.snd - x))
    (curry l (𝓝 x)) (𝓝 0)
[PROOFSTEP]
have : 𝓝 (0 : G) = 𝓝 (0 + 0 + 0)
[GOAL]
case this
ι : Type u_1
l : Filter ι
E : Type u_2
inst✝⁵ : NormedAddCommGroup E
𝕜 : Type u_3
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedSpace 𝕜 E
G : Type u_4
inst✝² : NormedAddCommGroup G
inst✝¹ : NormedSpace 𝕜 G
f : ι → E → G
g : E → G
f' : ι → E → E →L[𝕜] G
g' : E → E →L[𝕜] G
x : E
inst✝ : NeBot l
hf' : TendstoUniformlyOnFilter f' g' l (𝓝 x)
hf : ∀ᶠ (n : ι × E) in l ×ˢ 𝓝 x, HasFDerivAt (f n.fst) (f' n.fst n.snd) n.snd
hfg : ∀ᶠ (y : E) in 𝓝 x, Tendsto (fun n => f n y) l (𝓝 (g y))
this :
  (fun a => (↑‖a.snd - x‖)⁻¹ • (g a.snd - g x - ↑(g' x) (a.snd - x))) =
    ((fun a => (↑‖a.snd - x‖)⁻¹ • (g a.snd - g x - (f a.fst a.snd - f a.fst x))) + fun a =>
        (↑‖a.snd - x‖)⁻¹ • (f a.fst a.snd - f a.fst x - (↑(f' a.fst x) a.snd - ↑(f' a.fst x) x))) +
      fun a => (↑‖a.snd - x‖)⁻¹ • ↑(f' a.fst x - g' x) (a.snd - x)
⊢ 𝓝 0 = 𝓝 (0 + 0 + 0)
ι : Type u_1
l : Filter ι
E : Type u_2
inst✝⁵ : NormedAddCommGroup E
𝕜 : Type u_3
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedSpace 𝕜 E
G : Type u_4
inst✝² : NormedAddCommGroup G
inst✝¹ : NormedSpace 𝕜 G
f : ι → E → G
g : E → G
f' : ι → E → E →L[𝕜] G
g' : E → E →L[𝕜] G
x : E
inst✝ : NeBot l
hf' : TendstoUniformlyOnFilter f' g' l (𝓝 x)
hf : ∀ᶠ (n : ι × E) in l ×ˢ 𝓝 x, HasFDerivAt (f n.fst) (f' n.fst n.snd) n.snd
hfg : ∀ᶠ (y : E) in 𝓝 x, Tendsto (fun n => f n y) l (𝓝 (g y))
this✝ :
  (fun a => (↑‖a.snd - x‖)⁻¹ • (g a.snd - g x - ↑(g' x) (a.snd - x))) =
    ((fun a => (↑‖a.snd - x‖)⁻¹ • (g a.snd - g x - (f a.fst a.snd - f a.fst x))) + fun a =>
        (↑‖a.snd - x‖)⁻¹ • (f a.fst a.snd - f a.fst x - (↑(f' a.fst x) a.snd - ↑(f' a.fst x) x))) +
      fun a => (↑‖a.snd - x‖)⁻¹ • ↑(f' a.fst x - g' x) (a.snd - x)
this : 𝓝 0 = 𝓝 (0 + 0 + 0)
⊢ Tendsto
    (((fun a => (↑‖a.snd - x‖)⁻¹ • (g a.snd - g x - (f a.fst a.snd - f a.fst x))) + fun a =>
        (↑‖a.snd - x‖)⁻¹ • (f a.fst a.snd - f a.fst x - (↑(f' a.fst x) a.snd - ↑(f' a.fst x) x))) +
      fun a => (↑‖a.snd - x‖)⁻¹ • ↑(f' a.fst x - g' x) (a.snd - x))
    (curry l (𝓝 x)) (𝓝 0)
[PROOFSTEP]
simp only [add_zero]
[GOAL]
ι : Type u_1
l : Filter ι
E : Type u_2
inst✝⁵ : NormedAddCommGroup E
𝕜 : Type u_3
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedSpace 𝕜 E
G : Type u_4
inst✝² : NormedAddCommGroup G
inst✝¹ : NormedSpace 𝕜 G
f : ι → E → G
g : E → G
f' : ι → E → E →L[𝕜] G
g' : E → E →L[𝕜] G
x : E
inst✝ : NeBot l
hf' : TendstoUniformlyOnFilter f' g' l (𝓝 x)
hf : ∀ᶠ (n : ι × E) in l ×ˢ 𝓝 x, HasFDerivAt (f n.fst) (f' n.fst n.snd) n.snd
hfg : ∀ᶠ (y : E) in 𝓝 x, Tendsto (fun n => f n y) l (𝓝 (g y))
this✝ :
  (fun a => (↑‖a.snd - x‖)⁻¹ • (g a.snd - g x - ↑(g' x) (a.snd - x))) =
    ((fun a => (↑‖a.snd - x‖)⁻¹ • (g a.snd - g x - (f a.fst a.snd - f a.fst x))) + fun a =>
        (↑‖a.snd - x‖)⁻¹ • (f a.fst a.snd - f a.fst x - (↑(f' a.fst x) a.snd - ↑(f' a.fst x) x))) +
      fun a => (↑‖a.snd - x‖)⁻¹ • ↑(f' a.fst x - g' x) (a.snd - x)
this : 𝓝 0 = 𝓝 (0 + 0 + 0)
⊢ Tendsto
    (((fun a => (↑‖a.snd - x‖)⁻¹ • (g a.snd - g x - (f a.fst a.snd - f a.fst x))) + fun a =>
        (↑‖a.snd - x‖)⁻¹ • (f a.fst a.snd - f a.fst x - (↑(f' a.fst x) a.snd - ↑(f' a.fst x) x))) +
      fun a => (↑‖a.snd - x‖)⁻¹ • ↑(f' a.fst x - g' x) (a.snd - x))
    (curry l (𝓝 x)) (𝓝 0)
[PROOFSTEP]
rw [this]
[GOAL]
ι : Type u_1
l : Filter ι
E : Type u_2
inst✝⁵ : NormedAddCommGroup E
𝕜 : Type u_3
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedSpace 𝕜 E
G : Type u_4
inst✝² : NormedAddCommGroup G
inst✝¹ : NormedSpace 𝕜 G
f : ι → E → G
g : E → G
f' : ι → E → E →L[𝕜] G
g' : E → E →L[𝕜] G
x : E
inst✝ : NeBot l
hf' : TendstoUniformlyOnFilter f' g' l (𝓝 x)
hf : ∀ᶠ (n : ι × E) in l ×ˢ 𝓝 x, HasFDerivAt (f n.fst) (f' n.fst n.snd) n.snd
hfg : ∀ᶠ (y : E) in 𝓝 x, Tendsto (fun n => f n y) l (𝓝 (g y))
this✝ :
  (fun a => (↑‖a.snd - x‖)⁻¹ • (g a.snd - g x - ↑(g' x) (a.snd - x))) =
    ((fun a => (↑‖a.snd - x‖)⁻¹ • (g a.snd - g x - (f a.fst a.snd - f a.fst x))) + fun a =>
        (↑‖a.snd - x‖)⁻¹ • (f a.fst a.snd - f a.fst x - (↑(f' a.fst x) a.snd - ↑(f' a.fst x) x))) +
      fun a => (↑‖a.snd - x‖)⁻¹ • ↑(f' a.fst x - g' x) (a.snd - x)
this : 𝓝 0 = 𝓝 (0 + 0 + 0)
⊢ Tendsto
    (((fun a => (↑‖a.snd - x‖)⁻¹ • (g a.snd - g x - (f a.fst a.snd - f a.fst x))) + fun a =>
        (↑‖a.snd - x‖)⁻¹ • (f a.fst a.snd - f a.fst x - (↑(f' a.fst x) a.snd - ↑(f' a.fst x) x))) +
      fun a => (↑‖a.snd - x‖)⁻¹ • ↑(f' a.fst x - g' x) (a.snd - x))
    (curry l (𝓝 x)) (𝓝 (0 + 0 + 0))
[PROOFSTEP]
refine' Tendsto.add (Tendsto.add _ _) _
[GOAL]
case refine'_1
ι : Type u_1
l : Filter ι
E : Type u_2
inst✝⁵ : NormedAddCommGroup E
𝕜 : Type u_3
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedSpace 𝕜 E
G : Type u_4
inst✝² : NormedAddCommGroup G
inst✝¹ : NormedSpace 𝕜 G
f : ι → E → G
g : E → G
f' : ι → E → E →L[𝕜] G
g' : E → E →L[𝕜] G
x : E
inst✝ : NeBot l
hf' : TendstoUniformlyOnFilter f' g' l (𝓝 x)
hf : ∀ᶠ (n : ι × E) in l ×ˢ 𝓝 x, HasFDerivAt (f n.fst) (f' n.fst n.snd) n.snd
hfg : ∀ᶠ (y : E) in 𝓝 x, Tendsto (fun n => f n y) l (𝓝 (g y))
this✝ :
  (fun a => (↑‖a.snd - x‖)⁻¹ • (g a.snd - g x - ↑(g' x) (a.snd - x))) =
    ((fun a => (↑‖a.snd - x‖)⁻¹ • (g a.snd - g x - (f a.fst a.snd - f a.fst x))) + fun a =>
        (↑‖a.snd - x‖)⁻¹ • (f a.fst a.snd - f a.fst x - (↑(f' a.fst x) a.snd - ↑(f' a.fst x) x))) +
      fun a => (↑‖a.snd - x‖)⁻¹ • ↑(f' a.fst x - g' x) (a.snd - x)
this : 𝓝 0 = 𝓝 (0 + 0 + 0)
⊢ Tendsto (fun x_1 => (fun a => (↑‖a.snd - x‖)⁻¹ • (g a.snd - g x - (f a.fst a.snd - f a.fst x))) x_1) (curry l (𝓝 x))
    (𝓝 0)
case refine'_2
ι : Type u_1
l : Filter ι
E : Type u_2
inst✝⁵ : NormedAddCommGroup E
𝕜 : Type u_3
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedSpace 𝕜 E
G : Type u_4
inst✝² : NormedAddCommGroup G
inst✝¹ : NormedSpace 𝕜 G
f : ι → E → G
g : E → G
f' : ι → E → E →L[𝕜] G
g' : E → E →L[𝕜] G
x : E
inst✝ : NeBot l
hf' : TendstoUniformlyOnFilter f' g' l (𝓝 x)
hf : ∀ᶠ (n : ι × E) in l ×ˢ 𝓝 x, HasFDerivAt (f n.fst) (f' n.fst n.snd) n.snd
hfg : ∀ᶠ (y : E) in 𝓝 x, Tendsto (fun n => f n y) l (𝓝 (g y))
this✝ :
  (fun a => (↑‖a.snd - x‖)⁻¹ • (g a.snd - g x - ↑(g' x) (a.snd - x))) =
    ((fun a => (↑‖a.snd - x‖)⁻¹ • (g a.snd - g x - (f a.fst a.snd - f a.fst x))) + fun a =>
        (↑‖a.snd - x‖)⁻¹ • (f a.fst a.snd - f a.fst x - (↑(f' a.fst x) a.snd - ↑(f' a.fst x) x))) +
      fun a => (↑‖a.snd - x‖)⁻¹ • ↑(f' a.fst x - g' x) (a.snd - x)
this : 𝓝 0 = 𝓝 (0 + 0 + 0)
⊢ Tendsto
    (fun x_1 => (fun a => (↑‖a.snd - x‖)⁻¹ • (f a.fst a.snd - f a.fst x - (↑(f' a.fst x) a.snd - ↑(f' a.fst x) x))) x_1)
    (curry l (𝓝 x)) (𝓝 0)
case refine'_3
ι : Type u_1
l : Filter ι
E : Type u_2
inst✝⁵ : NormedAddCommGroup E
𝕜 : Type u_3
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedSpace 𝕜 E
G : Type u_4
inst✝² : NormedAddCommGroup G
inst✝¹ : NormedSpace 𝕜 G
f : ι → E → G
g : E → G
f' : ι → E → E →L[𝕜] G
g' : E → E →L[𝕜] G
x : E
inst✝ : NeBot l
hf' : TendstoUniformlyOnFilter f' g' l (𝓝 x)
hf : ∀ᶠ (n : ι × E) in l ×ˢ 𝓝 x, HasFDerivAt (f n.fst) (f' n.fst n.snd) n.snd
hfg : ∀ᶠ (y : E) in 𝓝 x, Tendsto (fun n => f n y) l (𝓝 (g y))
this✝ :
  (fun a => (↑‖a.snd - x‖)⁻¹ • (g a.snd - g x - ↑(g' x) (a.snd - x))) =
    ((fun a => (↑‖a.snd - x‖)⁻¹ • (g a.snd - g x - (f a.fst a.snd - f a.fst x))) + fun a =>
        (↑‖a.snd - x‖)⁻¹ • (f a.fst a.snd - f a.fst x - (↑(f' a.fst x) a.snd - ↑(f' a.fst x) x))) +
      fun a => (↑‖a.snd - x‖)⁻¹ • ↑(f' a.fst x - g' x) (a.snd - x)
this : 𝓝 0 = 𝓝 (0 + 0 + 0)
⊢ Tendsto (fun x_1 => (fun a => (↑‖a.snd - x‖)⁻¹ • ↑(f' a.fst x - g' x) (a.snd - x)) x_1) (curry l (𝓝 x)) (𝓝 0)
[PROOFSTEP]
simp only
[GOAL]
case refine'_1
ι : Type u_1
l : Filter ι
E : Type u_2
inst✝⁵ : NormedAddCommGroup E
𝕜 : Type u_3
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedSpace 𝕜 E
G : Type u_4
inst✝² : NormedAddCommGroup G
inst✝¹ : NormedSpace 𝕜 G
f : ι → E → G
g : E → G
f' : ι → E → E →L[𝕜] G
g' : E → E →L[𝕜] G
x : E
inst✝ : NeBot l
hf' : TendstoUniformlyOnFilter f' g' l (𝓝 x)
hf : ∀ᶠ (n : ι × E) in l ×ˢ 𝓝 x, HasFDerivAt (f n.fst) (f' n.fst n.snd) n.snd
hfg : ∀ᶠ (y : E) in 𝓝 x, Tendsto (fun n => f n y) l (𝓝 (g y))
this✝ :
  (fun a => (↑‖a.snd - x‖)⁻¹ • (g a.snd - g x - ↑(g' x) (a.snd - x))) =
    ((fun a => (↑‖a.snd - x‖)⁻¹ • (g a.snd - g x - (f a.fst a.snd - f a.fst x))) + fun a =>
        (↑‖a.snd - x‖)⁻¹ • (f a.fst a.snd - f a.fst x - (↑(f' a.fst x) a.snd - ↑(f' a.fst x) x))) +
      fun a => (↑‖a.snd - x‖)⁻¹ • ↑(f' a.fst x - g' x) (a.snd - x)
this : 𝓝 0 = 𝓝 (0 + 0 + 0)
⊢ Tendsto (fun x_1 => (↑‖x_1.snd - x‖)⁻¹ • (g x_1.snd - g x - (f x_1.fst x_1.snd - f x_1.fst x))) (curry l (𝓝 x)) (𝓝 0)
[PROOFSTEP]
have := difference_quotients_converge_uniformly hf' hf hfg
[GOAL]
case refine'_1
ι : Type u_1
l : Filter ι
E : Type u_2
inst✝⁵ : NormedAddCommGroup E
𝕜 : Type u_3
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedSpace 𝕜 E
G : Type u_4
inst✝² : NormedAddCommGroup G
inst✝¹ : NormedSpace 𝕜 G
f : ι → E → G
g : E → G
f' : ι → E → E →L[𝕜] G
g' : E → E →L[𝕜] G
x : E
inst✝ : NeBot l
hf' : TendstoUniformlyOnFilter f' g' l (𝓝 x)
hf : ∀ᶠ (n : ι × E) in l ×ˢ 𝓝 x, HasFDerivAt (f n.fst) (f' n.fst n.snd) n.snd
hfg : ∀ᶠ (y : E) in 𝓝 x, Tendsto (fun n => f n y) l (𝓝 (g y))
this✝¹ :
  (fun a => (↑‖a.snd - x‖)⁻¹ • (g a.snd - g x - ↑(g' x) (a.snd - x))) =
    ((fun a => (↑‖a.snd - x‖)⁻¹ • (g a.snd - g x - (f a.fst a.snd - f a.fst x))) + fun a =>
        (↑‖a.snd - x‖)⁻¹ • (f a.fst a.snd - f a.fst x - (↑(f' a.fst x) a.snd - ↑(f' a.fst x) x))) +
      fun a => (↑‖a.snd - x‖)⁻¹ • ↑(f' a.fst x - g' x) (a.snd - x)
this✝ : 𝓝 0 = 𝓝 (0 + 0 + 0)
this :
  TendstoUniformlyOnFilter (fun n y => (↑‖y - x‖)⁻¹ • (f n y - f n x)) (fun y => (↑‖y - x‖)⁻¹ • (g y - g x)) l (𝓝 x)
⊢ Tendsto (fun x_1 => (↑‖x_1.snd - x‖)⁻¹ • (g x_1.snd - g x - (f x_1.fst x_1.snd - f x_1.fst x))) (curry l (𝓝 x)) (𝓝 0)
[PROOFSTEP]
rw [Metric.tendstoUniformlyOnFilter_iff] at this
[GOAL]
case refine'_1
ι : Type u_1
l : Filter ι
E : Type u_2
inst✝⁵ : NormedAddCommGroup E
𝕜 : Type u_3
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedSpace 𝕜 E
G : Type u_4
inst✝² : NormedAddCommGroup G
inst✝¹ : NormedSpace 𝕜 G
f : ι → E → G
g : E → G
f' : ι → E → E →L[𝕜] G
g' : E → E →L[𝕜] G
x : E
inst✝ : NeBot l
hf' : TendstoUniformlyOnFilter f' g' l (𝓝 x)
hf : ∀ᶠ (n : ι × E) in l ×ˢ 𝓝 x, HasFDerivAt (f n.fst) (f' n.fst n.snd) n.snd
hfg : ∀ᶠ (y : E) in 𝓝 x, Tendsto (fun n => f n y) l (𝓝 (g y))
this✝¹ :
  (fun a => (↑‖a.snd - x‖)⁻¹ • (g a.snd - g x - ↑(g' x) (a.snd - x))) =
    ((fun a => (↑‖a.snd - x‖)⁻¹ • (g a.snd - g x - (f a.fst a.snd - f a.fst x))) + fun a =>
        (↑‖a.snd - x‖)⁻¹ • (f a.fst a.snd - f a.fst x - (↑(f' a.fst x) a.snd - ↑(f' a.fst x) x))) +
      fun a => (↑‖a.snd - x‖)⁻¹ • ↑(f' a.fst x - g' x) (a.snd - x)
this✝ : 𝓝 0 = 𝓝 (0 + 0 + 0)
this :
  ∀ (ε : ℝ),
    ε > 0 →
      ∀ᶠ (n : ι × E) in l ×ˢ 𝓝 x,
        dist ((↑‖n.snd - x‖)⁻¹ • (g n.snd - g x)) ((↑‖n.snd - x‖)⁻¹ • (f n.fst n.snd - f n.fst x)) < ε
⊢ Tendsto (fun x_1 => (↑‖x_1.snd - x‖)⁻¹ • (g x_1.snd - g x - (f x_1.fst x_1.snd - f x_1.fst x))) (curry l (𝓝 x)) (𝓝 0)
[PROOFSTEP]
rw [Metric.tendsto_nhds]
[GOAL]
case refine'_1
ι : Type u_1
l : Filter ι
E : Type u_2
inst✝⁵ : NormedAddCommGroup E
𝕜 : Type u_3
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedSpace 𝕜 E
G : Type u_4
inst✝² : NormedAddCommGroup G
inst✝¹ : NormedSpace 𝕜 G
f : ι → E → G
g : E → G
f' : ι → E → E →L[𝕜] G
g' : E → E →L[𝕜] G
x : E
inst✝ : NeBot l
hf' : TendstoUniformlyOnFilter f' g' l (𝓝 x)
hf : ∀ᶠ (n : ι × E) in l ×ˢ 𝓝 x, HasFDerivAt (f n.fst) (f' n.fst n.snd) n.snd
hfg : ∀ᶠ (y : E) in 𝓝 x, Tendsto (fun n => f n y) l (𝓝 (g y))
this✝¹ :
  (fun a => (↑‖a.snd - x‖)⁻¹ • (g a.snd - g x - ↑(g' x) (a.snd - x))) =
    ((fun a => (↑‖a.snd - x‖)⁻¹ • (g a.snd - g x - (f a.fst a.snd - f a.fst x))) + fun a =>
        (↑‖a.snd - x‖)⁻¹ • (f a.fst a.snd - f a.fst x - (↑(f' a.fst x) a.snd - ↑(f' a.fst x) x))) +
      fun a => (↑‖a.snd - x‖)⁻¹ • ↑(f' a.fst x - g' x) (a.snd - x)
this✝ : 𝓝 0 = 𝓝 (0 + 0 + 0)
this :
  ∀ (ε : ℝ),
    ε > 0 →
      ∀ᶠ (n : ι × E) in l ×ˢ 𝓝 x,
        dist ((↑‖n.snd - x‖)⁻¹ • (g n.snd - g x)) ((↑‖n.snd - x‖)⁻¹ • (f n.fst n.snd - f n.fst x)) < ε
⊢ ∀ (ε : ℝ),
    ε > 0 →
      ∀ᶠ (x_1 : ι × E) in curry l (𝓝 x),
        dist ((↑‖x_1.snd - x‖)⁻¹ • (g x_1.snd - g x - (f x_1.fst x_1.snd - f x_1.fst x))) 0 < ε
[PROOFSTEP]
intro ε hε
[GOAL]
case refine'_1
ι : Type u_1
l : Filter ι
E : Type u_2
inst✝⁵ : NormedAddCommGroup E
𝕜 : Type u_3
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedSpace 𝕜 E
G : Type u_4
inst✝² : NormedAddCommGroup G
inst✝¹ : NormedSpace 𝕜 G
f : ι → E → G
g : E → G
f' : ι → E → E →L[𝕜] G
g' : E → E →L[𝕜] G
x : E
inst✝ : NeBot l
hf' : TendstoUniformlyOnFilter f' g' l (𝓝 x)
hf : ∀ᶠ (n : ι × E) in l ×ˢ 𝓝 x, HasFDerivAt (f n.fst) (f' n.fst n.snd) n.snd
hfg : ∀ᶠ (y : E) in 𝓝 x, Tendsto (fun n => f n y) l (𝓝 (g y))
this✝¹ :
  (fun a => (↑‖a.snd - x‖)⁻¹ • (g a.snd - g x - ↑(g' x) (a.snd - x))) =
    ((fun a => (↑‖a.snd - x‖)⁻¹ • (g a.snd - g x - (f a.fst a.snd - f a.fst x))) + fun a =>
        (↑‖a.snd - x‖)⁻¹ • (f a.fst a.snd - f a.fst x - (↑(f' a.fst x) a.snd - ↑(f' a.fst x) x))) +
      fun a => (↑‖a.snd - x‖)⁻¹ • ↑(f' a.fst x - g' x) (a.snd - x)
this✝ : 𝓝 0 = 𝓝 (0 + 0 + 0)
this :
  ∀ (ε : ℝ),
    ε > 0 →
      ∀ᶠ (n : ι × E) in l ×ˢ 𝓝 x,
        dist ((↑‖n.snd - x‖)⁻¹ • (g n.snd - g x)) ((↑‖n.snd - x‖)⁻¹ • (f n.fst n.snd - f n.fst x)) < ε
ε : ℝ
hε : ε > 0
⊢ ∀ᶠ (x_1 : ι × E) in curry l (𝓝 x),
    dist ((↑‖x_1.snd - x‖)⁻¹ • (g x_1.snd - g x - (f x_1.fst x_1.snd - f x_1.fst x))) 0 < ε
[PROOFSTEP]
apply ((this ε hε).filter_mono curry_le_prod).mono
[GOAL]
case refine'_1
ι : Type u_1
l : Filter ι
E : Type u_2
inst✝⁵ : NormedAddCommGroup E
𝕜 : Type u_3
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedSpace 𝕜 E
G : Type u_4
inst✝² : NormedAddCommGroup G
inst✝¹ : NormedSpace 𝕜 G
f : ι → E → G
g : E → G
f' : ι → E → E →L[𝕜] G
g' : E → E →L[𝕜] G
x : E
inst✝ : NeBot l
hf' : TendstoUniformlyOnFilter f' g' l (𝓝 x)
hf : ∀ᶠ (n : ι × E) in l ×ˢ 𝓝 x, HasFDerivAt (f n.fst) (f' n.fst n.snd) n.snd
hfg : ∀ᶠ (y : E) in 𝓝 x, Tendsto (fun n => f n y) l (𝓝 (g y))
this✝¹ :
  (fun a => (↑‖a.snd - x‖)⁻¹ • (g a.snd - g x - ↑(g' x) (a.snd - x))) =
    ((fun a => (↑‖a.snd - x‖)⁻¹ • (g a.snd - g x - (f a.fst a.snd - f a.fst x))) + fun a =>
        (↑‖a.snd - x‖)⁻¹ • (f a.fst a.snd - f a.fst x - (↑(f' a.fst x) a.snd - ↑(f' a.fst x) x))) +
      fun a => (↑‖a.snd - x‖)⁻¹ • ↑(f' a.fst x - g' x) (a.snd - x)
this✝ : 𝓝 0 = 𝓝 (0 + 0 + 0)
this :
  ∀ (ε : ℝ),
    ε > 0 →
      ∀ᶠ (n : ι × E) in l ×ˢ 𝓝 x,
        dist ((↑‖n.snd - x‖)⁻¹ • (g n.snd - g x)) ((↑‖n.snd - x‖)⁻¹ • (f n.fst n.snd - f n.fst x)) < ε
ε : ℝ
hε : ε > 0
⊢ ∀ (x_1 : ι × E),
    dist ((↑‖x_1.snd - x‖)⁻¹ • (g x_1.snd - g x)) ((↑‖x_1.snd - x‖)⁻¹ • (f x_1.fst x_1.snd - f x_1.fst x)) < ε →
      dist ((↑‖x_1.snd - x‖)⁻¹ • (g x_1.snd - g x - (f x_1.fst x_1.snd - f x_1.fst x))) 0 < ε
[PROOFSTEP]
intro n hn
[GOAL]
case refine'_1
ι : Type u_1
l : Filter ι
E : Type u_2
inst✝⁵ : NormedAddCommGroup E
𝕜 : Type u_3
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedSpace 𝕜 E
G : Type u_4
inst✝² : NormedAddCommGroup G
inst✝¹ : NormedSpace 𝕜 G
f : ι → E → G
g : E → G
f' : ι → E → E →L[𝕜] G
g' : E → E →L[𝕜] G
x : E
inst✝ : NeBot l
hf' : TendstoUniformlyOnFilter f' g' l (𝓝 x)
hf : ∀ᶠ (n : ι × E) in l ×ˢ 𝓝 x, HasFDerivAt (f n.fst) (f' n.fst n.snd) n.snd
hfg : ∀ᶠ (y : E) in 𝓝 x, Tendsto (fun n => f n y) l (𝓝 (g y))
this✝¹ :
  (fun a => (↑‖a.snd - x‖)⁻¹ • (g a.snd - g x - ↑(g' x) (a.snd - x))) =
    ((fun a => (↑‖a.snd - x‖)⁻¹ • (g a.snd - g x - (f a.fst a.snd - f a.fst x))) + fun a =>
        (↑‖a.snd - x‖)⁻¹ • (f a.fst a.snd - f a.fst x - (↑(f' a.fst x) a.snd - ↑(f' a.fst x) x))) +
      fun a => (↑‖a.snd - x‖)⁻¹ • ↑(f' a.fst x - g' x) (a.snd - x)
this✝ : 𝓝 0 = 𝓝 (0 + 0 + 0)
this :
  ∀ (ε : ℝ),
    ε > 0 →
      ∀ᶠ (n : ι × E) in l ×ˢ 𝓝 x,
        dist ((↑‖n.snd - x‖)⁻¹ • (g n.snd - g x)) ((↑‖n.snd - x‖)⁻¹ • (f n.fst n.snd - f n.fst x)) < ε
ε : ℝ
hε : ε > 0
n : ι × E
hn : dist ((↑‖n.snd - x‖)⁻¹ • (g n.snd - g x)) ((↑‖n.snd - x‖)⁻¹ • (f n.fst n.snd - f n.fst x)) < ε
⊢ dist ((↑‖n.snd - x‖)⁻¹ • (g n.snd - g x - (f n.fst n.snd - f n.fst x))) 0 < ε
[PROOFSTEP]
rw [dist_eq_norm] at hn ⊢
[GOAL]
case refine'_1
ι : Type u_1
l : Filter ι
E : Type u_2
inst✝⁵ : NormedAddCommGroup E
𝕜 : Type u_3
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedSpace 𝕜 E
G : Type u_4
inst✝² : NormedAddCommGroup G
inst✝¹ : NormedSpace 𝕜 G
f : ι → E → G
g : E → G
f' : ι → E → E →L[𝕜] G
g' : E → E →L[𝕜] G
x : E
inst✝ : NeBot l
hf' : TendstoUniformlyOnFilter f' g' l (𝓝 x)
hf : ∀ᶠ (n : ι × E) in l ×ˢ 𝓝 x, HasFDerivAt (f n.fst) (f' n.fst n.snd) n.snd
hfg : ∀ᶠ (y : E) in 𝓝 x, Tendsto (fun n => f n y) l (𝓝 (g y))
this✝¹ :
  (fun a => (↑‖a.snd - x‖)⁻¹ • (g a.snd - g x - ↑(g' x) (a.snd - x))) =
    ((fun a => (↑‖a.snd - x‖)⁻¹ • (g a.snd - g x - (f a.fst a.snd - f a.fst x))) + fun a =>
        (↑‖a.snd - x‖)⁻¹ • (f a.fst a.snd - f a.fst x - (↑(f' a.fst x) a.snd - ↑(f' a.fst x) x))) +
      fun a => (↑‖a.snd - x‖)⁻¹ • ↑(f' a.fst x - g' x) (a.snd - x)
this✝ : 𝓝 0 = 𝓝 (0 + 0 + 0)
this :
  ∀ (ε : ℝ),
    ε > 0 →
      ∀ᶠ (n : ι × E) in l ×ˢ 𝓝 x,
        dist ((↑‖n.snd - x‖)⁻¹ • (g n.snd - g x)) ((↑‖n.snd - x‖)⁻¹ • (f n.fst n.snd - f n.fst x)) < ε
ε : ℝ
hε : ε > 0
n : ι × E
hn : ‖(↑‖n.snd - x‖)⁻¹ • (g n.snd - g x) - (↑‖n.snd - x‖)⁻¹ • (f n.fst n.snd - f n.fst x)‖ < ε
⊢ ‖(↑‖n.snd - x‖)⁻¹ • (g n.snd - g x - (f n.fst n.snd - f n.fst x)) - 0‖ < ε
[PROOFSTEP]
rw [← smul_sub] at hn
[GOAL]
case refine'_1
ι : Type u_1
l : Filter ι
E : Type u_2
inst✝⁵ : NormedAddCommGroup E
𝕜 : Type u_3
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedSpace 𝕜 E
G : Type u_4
inst✝² : NormedAddCommGroup G
inst✝¹ : NormedSpace 𝕜 G
f : ι → E → G
g : E → G
f' : ι → E → E →L[𝕜] G
g' : E → E →L[𝕜] G
x : E
inst✝ : NeBot l
hf' : TendstoUniformlyOnFilter f' g' l (𝓝 x)
hf : ∀ᶠ (n : ι × E) in l ×ˢ 𝓝 x, HasFDerivAt (f n.fst) (f' n.fst n.snd) n.snd
hfg : ∀ᶠ (y : E) in 𝓝 x, Tendsto (fun n => f n y) l (𝓝 (g y))
this✝¹ :
  (fun a => (↑‖a.snd - x‖)⁻¹ • (g a.snd - g x - ↑(g' x) (a.snd - x))) =
    ((fun a => (↑‖a.snd - x‖)⁻¹ • (g a.snd - g x - (f a.fst a.snd - f a.fst x))) + fun a =>
        (↑‖a.snd - x‖)⁻¹ • (f a.fst a.snd - f a.fst x - (↑(f' a.fst x) a.snd - ↑(f' a.fst x) x))) +
      fun a => (↑‖a.snd - x‖)⁻¹ • ↑(f' a.fst x - g' x) (a.snd - x)
this✝ : 𝓝 0 = 𝓝 (0 + 0 + 0)
this :
  ∀ (ε : ℝ),
    ε > 0 →
      ∀ᶠ (n : ι × E) in l ×ˢ 𝓝 x,
        dist ((↑‖n.snd - x‖)⁻¹ • (g n.snd - g x)) ((↑‖n.snd - x‖)⁻¹ • (f n.fst n.snd - f n.fst x)) < ε
ε : ℝ
hε : ε > 0
n : ι × E
hn : ‖(↑‖n.snd - x‖)⁻¹ • (g n.snd - g x - (f n.fst n.snd - f n.fst x))‖ < ε
⊢ ‖(↑‖n.snd - x‖)⁻¹ • (g n.snd - g x - (f n.fst n.snd - f n.fst x)) - 0‖ < ε
[PROOFSTEP]
rwa [sub_zero]
[GOAL]
case refine'_2
ι : Type u_1
l : Filter ι
E : Type u_2
inst✝⁵ : NormedAddCommGroup E
𝕜 : Type u_3
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedSpace 𝕜 E
G : Type u_4
inst✝² : NormedAddCommGroup G
inst✝¹ : NormedSpace 𝕜 G
f : ι → E → G
g : E → G
f' : ι → E → E →L[𝕜] G
g' : E → E →L[𝕜] G
x : E
inst✝ : NeBot l
hf' : TendstoUniformlyOnFilter f' g' l (𝓝 x)
hf : ∀ᶠ (n : ι × E) in l ×ˢ 𝓝 x, HasFDerivAt (f n.fst) (f' n.fst n.snd) n.snd
hfg : ∀ᶠ (y : E) in 𝓝 x, Tendsto (fun n => f n y) l (𝓝 (g y))
this✝ :
  (fun a => (↑‖a.snd - x‖)⁻¹ • (g a.snd - g x - ↑(g' x) (a.snd - x))) =
    ((fun a => (↑‖a.snd - x‖)⁻¹ • (g a.snd - g x - (f a.fst a.snd - f a.fst x))) + fun a =>
        (↑‖a.snd - x‖)⁻¹ • (f a.fst a.snd - f a.fst x - (↑(f' a.fst x) a.snd - ↑(f' a.fst x) x))) +
      fun a => (↑‖a.snd - x‖)⁻¹ • ↑(f' a.fst x - g' x) (a.snd - x)
this : 𝓝 0 = 𝓝 (0 + 0 + 0)
⊢ Tendsto
    (fun x_1 => (fun a => (↑‖a.snd - x‖)⁻¹ • (f a.fst a.snd - f a.fst x - (↑(f' a.fst x) a.snd - ↑(f' a.fst x) x))) x_1)
    (curry l (𝓝 x)) (𝓝 0)
[PROOFSTEP]
rw [Metric.tendsto_nhds]
[GOAL]
case refine'_2
ι : Type u_1
l : Filter ι
E : Type u_2
inst✝⁵ : NormedAddCommGroup E
𝕜 : Type u_3
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedSpace 𝕜 E
G : Type u_4
inst✝² : NormedAddCommGroup G
inst✝¹ : NormedSpace 𝕜 G
f : ι → E → G
g : E → G
f' : ι → E → E →L[𝕜] G
g' : E → E →L[𝕜] G
x : E
inst✝ : NeBot l
hf' : TendstoUniformlyOnFilter f' g' l (𝓝 x)
hf : ∀ᶠ (n : ι × E) in l ×ˢ 𝓝 x, HasFDerivAt (f n.fst) (f' n.fst n.snd) n.snd
hfg : ∀ᶠ (y : E) in 𝓝 x, Tendsto (fun n => f n y) l (𝓝 (g y))
this✝ :
  (fun a => (↑‖a.snd - x‖)⁻¹ • (g a.snd - g x - ↑(g' x) (a.snd - x))) =
    ((fun a => (↑‖a.snd - x‖)⁻¹ • (g a.snd - g x - (f a.fst a.snd - f a.fst x))) + fun a =>
        (↑‖a.snd - x‖)⁻¹ • (f a.fst a.snd - f a.fst x - (↑(f' a.fst x) a.snd - ↑(f' a.fst x) x))) +
      fun a => (↑‖a.snd - x‖)⁻¹ • ↑(f' a.fst x - g' x) (a.snd - x)
this : 𝓝 0 = 𝓝 (0 + 0 + 0)
⊢ ∀ (ε : ℝ),
    ε > 0 →
      ∀ᶠ (x_1 : ι × E) in curry l (𝓝 x),
        dist ((fun a => (↑‖a.snd - x‖)⁻¹ • (f a.fst a.snd - f a.fst x - (↑(f' a.fst x) a.snd - ↑(f' a.fst x) x))) x_1)
            0 <
          ε
[PROOFSTEP]
intro ε hε
[GOAL]
case refine'_2
ι : Type u_1
l : Filter ι
E : Type u_2
inst✝⁵ : NormedAddCommGroup E
𝕜 : Type u_3
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedSpace 𝕜 E
G : Type u_4
inst✝² : NormedAddCommGroup G
inst✝¹ : NormedSpace 𝕜 G
f : ι → E → G
g : E → G
f' : ι → E → E →L[𝕜] G
g' : E → E →L[𝕜] G
x : E
inst✝ : NeBot l
hf' : TendstoUniformlyOnFilter f' g' l (𝓝 x)
hf : ∀ᶠ (n : ι × E) in l ×ˢ 𝓝 x, HasFDerivAt (f n.fst) (f' n.fst n.snd) n.snd
hfg : ∀ᶠ (y : E) in 𝓝 x, Tendsto (fun n => f n y) l (𝓝 (g y))
this✝ :
  (fun a => (↑‖a.snd - x‖)⁻¹ • (g a.snd - g x - ↑(g' x) (a.snd - x))) =
    ((fun a => (↑‖a.snd - x‖)⁻¹ • (g a.snd - g x - (f a.fst a.snd - f a.fst x))) + fun a =>
        (↑‖a.snd - x‖)⁻¹ • (f a.fst a.snd - f a.fst x - (↑(f' a.fst x) a.snd - ↑(f' a.fst x) x))) +
      fun a => (↑‖a.snd - x‖)⁻¹ • ↑(f' a.fst x - g' x) (a.snd - x)
this : 𝓝 0 = 𝓝 (0 + 0 + 0)
ε : ℝ
hε : ε > 0
⊢ ∀ᶠ (x_1 : ι × E) in curry l (𝓝 x),
    dist ((fun a => (↑‖a.snd - x‖)⁻¹ • (f a.fst a.snd - f a.fst x - (↑(f' a.fst x) a.snd - ↑(f' a.fst x) x))) x_1) 0 < ε
[PROOFSTEP]
rw [eventually_curry_iff]
[GOAL]
case refine'_2
ι : Type u_1
l : Filter ι
E : Type u_2
inst✝⁵ : NormedAddCommGroup E
𝕜 : Type u_3
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedSpace 𝕜 E
G : Type u_4
inst✝² : NormedAddCommGroup G
inst✝¹ : NormedSpace 𝕜 G
f : ι → E → G
g : E → G
f' : ι → E → E →L[𝕜] G
g' : E → E →L[𝕜] G
x : E
inst✝ : NeBot l
hf' : TendstoUniformlyOnFilter f' g' l (𝓝 x)
hf : ∀ᶠ (n : ι × E) in l ×ˢ 𝓝 x, HasFDerivAt (f n.fst) (f' n.fst n.snd) n.snd
hfg : ∀ᶠ (y : E) in 𝓝 x, Tendsto (fun n => f n y) l (𝓝 (g y))
this✝ :
  (fun a => (↑‖a.snd - x‖)⁻¹ • (g a.snd - g x - ↑(g' x) (a.snd - x))) =
    ((fun a => (↑‖a.snd - x‖)⁻¹ • (g a.snd - g x - (f a.fst a.snd - f a.fst x))) + fun a =>
        (↑‖a.snd - x‖)⁻¹ • (f a.fst a.snd - f a.fst x - (↑(f' a.fst x) a.snd - ↑(f' a.fst x) x))) +
      fun a => (↑‖a.snd - x‖)⁻¹ • ↑(f' a.fst x - g' x) (a.snd - x)
this : 𝓝 0 = 𝓝 (0 + 0 + 0)
ε : ℝ
hε : ε > 0
⊢ ∀ᶠ (x_1 : ι) in l,
    ∀ᶠ (y : E) in 𝓝 x,
      dist
          ((fun a => (↑‖a.snd - x‖)⁻¹ • (f a.fst a.snd - f a.fst x - (↑(f' a.fst x) a.snd - ↑(f' a.fst x) x))) (x_1, y))
          0 <
        ε
[PROOFSTEP]
refine' hf.curry.mono fun n hn => _
[GOAL]
case refine'_2
ι : Type u_1
l : Filter ι
E : Type u_2
inst✝⁵ : NormedAddCommGroup E
𝕜 : Type u_3
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedSpace 𝕜 E
G : Type u_4
inst✝² : NormedAddCommGroup G
inst✝¹ : NormedSpace 𝕜 G
f : ι → E → G
g : E → G
f' : ι → E → E →L[𝕜] G
g' : E → E →L[𝕜] G
x : E
inst✝ : NeBot l
hf' : TendstoUniformlyOnFilter f' g' l (𝓝 x)
hf : ∀ᶠ (n : ι × E) in l ×ˢ 𝓝 x, HasFDerivAt (f n.fst) (f' n.fst n.snd) n.snd
hfg : ∀ᶠ (y : E) in 𝓝 x, Tendsto (fun n => f n y) l (𝓝 (g y))
this✝ :
  (fun a => (↑‖a.snd - x‖)⁻¹ • (g a.snd - g x - ↑(g' x) (a.snd - x))) =
    ((fun a => (↑‖a.snd - x‖)⁻¹ • (g a.snd - g x - (f a.fst a.snd - f a.fst x))) + fun a =>
        (↑‖a.snd - x‖)⁻¹ • (f a.fst a.snd - f a.fst x - (↑(f' a.fst x) a.snd - ↑(f' a.fst x) x))) +
      fun a => (↑‖a.snd - x‖)⁻¹ • ↑(f' a.fst x - g' x) (a.snd - x)
this : 𝓝 0 = 𝓝 (0 + 0 + 0)
ε : ℝ
hε : ε > 0
n : ι
hn : ∀ᶠ (y : E) in 𝓝 x, HasFDerivAt (f (n, y).fst) (f' (n, y).fst (n, y).snd) (n, y).snd
⊢ ∀ᶠ (y : E) in 𝓝 x,
    dist ((fun a => (↑‖a.snd - x‖)⁻¹ • (f a.fst a.snd - f a.fst x - (↑(f' a.fst x) a.snd - ↑(f' a.fst x) x))) (n, y))
        0 <
      ε
[PROOFSTEP]
have := hn.self_of_nhds
[GOAL]
case refine'_2
ι : Type u_1
l : Filter ι
E : Type u_2
inst✝⁵ : NormedAddCommGroup E
𝕜 : Type u_3
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedSpace 𝕜 E
G : Type u_4
inst✝² : NormedAddCommGroup G
inst✝¹ : NormedSpace 𝕜 G
f : ι → E → G
g : E → G
f' : ι → E → E →L[𝕜] G
g' : E → E →L[𝕜] G
x : E
inst✝ : NeBot l
hf' : TendstoUniformlyOnFilter f' g' l (𝓝 x)
hf : ∀ᶠ (n : ι × E) in l ×ˢ 𝓝 x, HasFDerivAt (f n.fst) (f' n.fst n.snd) n.snd
hfg : ∀ᶠ (y : E) in 𝓝 x, Tendsto (fun n => f n y) l (𝓝 (g y))
this✝¹ :
  (fun a => (↑‖a.snd - x‖)⁻¹ • (g a.snd - g x - ↑(g' x) (a.snd - x))) =
    ((fun a => (↑‖a.snd - x‖)⁻¹ • (g a.snd - g x - (f a.fst a.snd - f a.fst x))) + fun a =>
        (↑‖a.snd - x‖)⁻¹ • (f a.fst a.snd - f a.fst x - (↑(f' a.fst x) a.snd - ↑(f' a.fst x) x))) +
      fun a => (↑‖a.snd - x‖)⁻¹ • ↑(f' a.fst x - g' x) (a.snd - x)
this✝ : 𝓝 0 = 𝓝 (0 + 0 + 0)
ε : ℝ
hε : ε > 0
n : ι
hn : ∀ᶠ (y : E) in 𝓝 x, HasFDerivAt (f (n, y).fst) (f' (n, y).fst (n, y).snd) (n, y).snd
this : HasFDerivAt (f (n, x).fst) (f' (n, x).fst (n, x).snd) (n, x).snd
⊢ ∀ᶠ (y : E) in 𝓝 x,
    dist ((fun a => (↑‖a.snd - x‖)⁻¹ • (f a.fst a.snd - f a.fst x - (↑(f' a.fst x) a.snd - ↑(f' a.fst x) x))) (n, y))
        0 <
      ε
[PROOFSTEP]
rw [hasFDerivAt_iff_tendsto, Metric.tendsto_nhds] at this
[GOAL]
case refine'_2
ι : Type u_1
l : Filter ι
E : Type u_2
inst✝⁵ : NormedAddCommGroup E
𝕜 : Type u_3
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedSpace 𝕜 E
G : Type u_4
inst✝² : NormedAddCommGroup G
inst✝¹ : NormedSpace 𝕜 G
f : ι → E → G
g : E → G
f' : ι → E → E →L[𝕜] G
g' : E → E →L[𝕜] G
x : E
inst✝ : NeBot l
hf' : TendstoUniformlyOnFilter f' g' l (𝓝 x)
hf : ∀ᶠ (n : ι × E) in l ×ˢ 𝓝 x, HasFDerivAt (f n.fst) (f' n.fst n.snd) n.snd
hfg : ∀ᶠ (y : E) in 𝓝 x, Tendsto (fun n => f n y) l (𝓝 (g y))
this✝¹ :
  (fun a => (↑‖a.snd - x‖)⁻¹ • (g a.snd - g x - ↑(g' x) (a.snd - x))) =
    ((fun a => (↑‖a.snd - x‖)⁻¹ • (g a.snd - g x - (f a.fst a.snd - f a.fst x))) + fun a =>
        (↑‖a.snd - x‖)⁻¹ • (f a.fst a.snd - f a.fst x - (↑(f' a.fst x) a.snd - ↑(f' a.fst x) x))) +
      fun a => (↑‖a.snd - x‖)⁻¹ • ↑(f' a.fst x - g' x) (a.snd - x)
this✝ : 𝓝 0 = 𝓝 (0 + 0 + 0)
ε : ℝ
hε : ε > 0
n : ι
hn : ∀ᶠ (y : E) in 𝓝 x, HasFDerivAt (f (n, y).fst) (f' (n, y).fst (n, y).snd) (n, y).snd
this :
  ∀ (ε : ℝ),
    ε > 0 →
      ∀ᶠ (x_1 : E) in 𝓝 (n, x).snd,
        dist
            (‖x_1 - (n, x).snd‖⁻¹ *
              ‖f (n, x).fst x_1 - f (n, x).fst (n, x).snd - ↑(f' (n, x).fst (n, x).snd) (x_1 - (n, x).snd)‖)
            0 <
          ε
⊢ ∀ᶠ (y : E) in 𝓝 x,
    dist ((fun a => (↑‖a.snd - x‖)⁻¹ • (f a.fst a.snd - f a.fst x - (↑(f' a.fst x) a.snd - ↑(f' a.fst x) x))) (n, y))
        0 <
      ε
[PROOFSTEP]
refine' (this ε hε).mono fun y hy => _
[GOAL]
case refine'_2
ι : Type u_1
l : Filter ι
E : Type u_2
inst✝⁵ : NormedAddCommGroup E
𝕜 : Type u_3
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedSpace 𝕜 E
G : Type u_4
inst✝² : NormedAddCommGroup G
inst✝¹ : NormedSpace 𝕜 G
f : ι → E → G
g : E → G
f' : ι → E → E →L[𝕜] G
g' : E → E →L[𝕜] G
x : E
inst✝ : NeBot l
hf' : TendstoUniformlyOnFilter f' g' l (𝓝 x)
hf : ∀ᶠ (n : ι × E) in l ×ˢ 𝓝 x, HasFDerivAt (f n.fst) (f' n.fst n.snd) n.snd
hfg : ∀ᶠ (y : E) in 𝓝 x, Tendsto (fun n => f n y) l (𝓝 (g y))
this✝¹ :
  (fun a => (↑‖a.snd - x‖)⁻¹ • (g a.snd - g x - ↑(g' x) (a.snd - x))) =
    ((fun a => (↑‖a.snd - x‖)⁻¹ • (g a.snd - g x - (f a.fst a.snd - f a.fst x))) + fun a =>
        (↑‖a.snd - x‖)⁻¹ • (f a.fst a.snd - f a.fst x - (↑(f' a.fst x) a.snd - ↑(f' a.fst x) x))) +
      fun a => (↑‖a.snd - x‖)⁻¹ • ↑(f' a.fst x - g' x) (a.snd - x)
this✝ : 𝓝 0 = 𝓝 (0 + 0 + 0)
ε : ℝ
hε : ε > 0
n : ι
hn : ∀ᶠ (y : E) in 𝓝 x, HasFDerivAt (f (n, y).fst) (f' (n, y).fst (n, y).snd) (n, y).snd
this :
  ∀ (ε : ℝ),
    ε > 0 →
      ∀ᶠ (x_1 : E) in 𝓝 (n, x).snd,
        dist
            (‖x_1 - (n, x).snd‖⁻¹ *
              ‖f (n, x).fst x_1 - f (n, x).fst (n, x).snd - ↑(f' (n, x).fst (n, x).snd) (x_1 - (n, x).snd)‖)
            0 <
          ε
y : E
hy :
  dist (‖y - (n, x).snd‖⁻¹ * ‖f (n, x).fst y - f (n, x).fst (n, x).snd - ↑(f' (n, x).fst (n, x).snd) (y - (n, x).snd)‖)
      0 <
    ε
⊢ dist ((fun a => (↑‖a.snd - x‖)⁻¹ • (f a.fst a.snd - f a.fst x - (↑(f' a.fst x) a.snd - ↑(f' a.fst x) x))) (n, y)) 0 <
    ε
[PROOFSTEP]
rw [dist_eq_norm] at hy ⊢
[GOAL]
case refine'_2
ι : Type u_1
l : Filter ι
E : Type u_2
inst✝⁵ : NormedAddCommGroup E
𝕜 : Type u_3
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedSpace 𝕜 E
G : Type u_4
inst✝² : NormedAddCommGroup G
inst✝¹ : NormedSpace 𝕜 G
f : ι → E → G
g : E → G
f' : ι → E → E →L[𝕜] G
g' : E → E →L[𝕜] G
x : E
inst✝ : NeBot l
hf' : TendstoUniformlyOnFilter f' g' l (𝓝 x)
hf : ∀ᶠ (n : ι × E) in l ×ˢ 𝓝 x, HasFDerivAt (f n.fst) (f' n.fst n.snd) n.snd
hfg : ∀ᶠ (y : E) in 𝓝 x, Tendsto (fun n => f n y) l (𝓝 (g y))
this✝¹ :
  (fun a => (↑‖a.snd - x‖)⁻¹ • (g a.snd - g x - ↑(g' x) (a.snd - x))) =
    ((fun a => (↑‖a.snd - x‖)⁻¹ • (g a.snd - g x - (f a.fst a.snd - f a.fst x))) + fun a =>
        (↑‖a.snd - x‖)⁻¹ • (f a.fst a.snd - f a.fst x - (↑(f' a.fst x) a.snd - ↑(f' a.fst x) x))) +
      fun a => (↑‖a.snd - x‖)⁻¹ • ↑(f' a.fst x - g' x) (a.snd - x)
this✝ : 𝓝 0 = 𝓝 (0 + 0 + 0)
ε : ℝ
hε : ε > 0
n : ι
hn : ∀ᶠ (y : E) in 𝓝 x, HasFDerivAt (f (n, y).fst) (f' (n, y).fst (n, y).snd) (n, y).snd
this :
  ∀ (ε : ℝ),
    ε > 0 →
      ∀ᶠ (x_1 : E) in 𝓝 (n, x).snd,
        dist
            (‖x_1 - (n, x).snd‖⁻¹ *
              ‖f (n, x).fst x_1 - f (n, x).fst (n, x).snd - ↑(f' (n, x).fst (n, x).snd) (x_1 - (n, x).snd)‖)
            0 <
          ε
y : E
hy :
  ‖‖y - (n, x).snd‖⁻¹ * ‖f (n, x).fst y - f (n, x).fst (n, x).snd - ↑(f' (n, x).fst (n, x).snd) (y - (n, x).snd)‖ - 0‖ <
    ε
⊢ ‖(fun a => (↑‖a.snd - x‖)⁻¹ • (f a.fst a.snd - f a.fst x - (↑(f' a.fst x) a.snd - ↑(f' a.fst x) x))) (n, y) - 0‖ < ε
[PROOFSTEP]
simp only [sub_zero, map_sub, norm_mul, norm_inv, norm_norm] at hy ⊢
[GOAL]
case refine'_2
ι : Type u_1
l : Filter ι
E : Type u_2
inst✝⁵ : NormedAddCommGroup E
𝕜 : Type u_3
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedSpace 𝕜 E
G : Type u_4
inst✝² : NormedAddCommGroup G
inst✝¹ : NormedSpace 𝕜 G
f : ι → E → G
g : E → G
f' : ι → E → E →L[𝕜] G
g' : E → E →L[𝕜] G
x : E
inst✝ : NeBot l
hf' : TendstoUniformlyOnFilter f' g' l (𝓝 x)
hf : ∀ᶠ (n : ι × E) in l ×ˢ 𝓝 x, HasFDerivAt (f n.fst) (f' n.fst n.snd) n.snd
hfg : ∀ᶠ (y : E) in 𝓝 x, Tendsto (fun n => f n y) l (𝓝 (g y))
this✝¹ :
  (fun a => (↑‖a.snd - x‖)⁻¹ • (g a.snd - g x - ↑(g' x) (a.snd - x))) =
    ((fun a => (↑‖a.snd - x‖)⁻¹ • (g a.snd - g x - (f a.fst a.snd - f a.fst x))) + fun a =>
        (↑‖a.snd - x‖)⁻¹ • (f a.fst a.snd - f a.fst x - (↑(f' a.fst x) a.snd - ↑(f' a.fst x) x))) +
      fun a => (↑‖a.snd - x‖)⁻¹ • ↑(f' a.fst x - g' x) (a.snd - x)
this✝ : 𝓝 0 = 𝓝 (0 + 0 + 0)
ε : ℝ
hε : ε > 0
n : ι
hn : ∀ᶠ (y : E) in 𝓝 x, HasFDerivAt (f (n, y).fst) (f' (n, y).fst (n, y).snd) (n, y).snd
this :
  ∀ (ε : ℝ),
    ε > 0 →
      ∀ᶠ (x_1 : E) in 𝓝 (n, x).snd,
        dist
            (‖x_1 - (n, x).snd‖⁻¹ *
              ‖f (n, x).fst x_1 - f (n, x).fst (n, x).snd - ↑(f' (n, x).fst (n, x).snd) (x_1 - (n, x).snd)‖)
            0 <
          ε
y : E
hy : ‖y - x‖⁻¹ * ‖f n y - f n x - (↑(f' n x) y - ↑(f' n x) x)‖ < ε
⊢ ‖(↑‖y - x‖)⁻¹ • (f n y - f n x - (↑(f' n x) y - ↑(f' n x) x))‖ < ε
[PROOFSTEP]
rw [norm_smul, norm_inv, IsROrC.norm_coe_norm]
[GOAL]
case refine'_2
ι : Type u_1
l : Filter ι
E : Type u_2
inst✝⁵ : NormedAddCommGroup E
𝕜 : Type u_3
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedSpace 𝕜 E
G : Type u_4
inst✝² : NormedAddCommGroup G
inst✝¹ : NormedSpace 𝕜 G
f : ι → E → G
g : E → G
f' : ι → E → E →L[𝕜] G
g' : E → E →L[𝕜] G
x : E
inst✝ : NeBot l
hf' : TendstoUniformlyOnFilter f' g' l (𝓝 x)
hf : ∀ᶠ (n : ι × E) in l ×ˢ 𝓝 x, HasFDerivAt (f n.fst) (f' n.fst n.snd) n.snd
hfg : ∀ᶠ (y : E) in 𝓝 x, Tendsto (fun n => f n y) l (𝓝 (g y))
this✝¹ :
  (fun a => (↑‖a.snd - x‖)⁻¹ • (g a.snd - g x - ↑(g' x) (a.snd - x))) =
    ((fun a => (↑‖a.snd - x‖)⁻¹ • (g a.snd - g x - (f a.fst a.snd - f a.fst x))) + fun a =>
        (↑‖a.snd - x‖)⁻¹ • (f a.fst a.snd - f a.fst x - (↑(f' a.fst x) a.snd - ↑(f' a.fst x) x))) +
      fun a => (↑‖a.snd - x‖)⁻¹ • ↑(f' a.fst x - g' x) (a.snd - x)
this✝ : 𝓝 0 = 𝓝 (0 + 0 + 0)
ε : ℝ
hε : ε > 0
n : ι
hn : ∀ᶠ (y : E) in 𝓝 x, HasFDerivAt (f (n, y).fst) (f' (n, y).fst (n, y).snd) (n, y).snd
this :
  ∀ (ε : ℝ),
    ε > 0 →
      ∀ᶠ (x_1 : E) in 𝓝 (n, x).snd,
        dist
            (‖x_1 - (n, x).snd‖⁻¹ *
              ‖f (n, x).fst x_1 - f (n, x).fst (n, x).snd - ↑(f' (n, x).fst (n, x).snd) (x_1 - (n, x).snd)‖)
            0 <
          ε
y : E
hy : ‖y - x‖⁻¹ * ‖f n y - f n x - (↑(f' n x) y - ↑(f' n x) x)‖ < ε
⊢ ‖y - x‖⁻¹ * ‖f n y - f n x - (↑(f' n x) y - ↑(f' n x) x)‖ < ε
[PROOFSTEP]
exact hy
[GOAL]
case refine'_3
ι : Type u_1
l : Filter ι
E : Type u_2
inst✝⁵ : NormedAddCommGroup E
𝕜 : Type u_3
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedSpace 𝕜 E
G : Type u_4
inst✝² : NormedAddCommGroup G
inst✝¹ : NormedSpace 𝕜 G
f : ι → E → G
g : E → G
f' : ι → E → E →L[𝕜] G
g' : E → E →L[𝕜] G
x : E
inst✝ : NeBot l
hf' : TendstoUniformlyOnFilter f' g' l (𝓝 x)
hf : ∀ᶠ (n : ι × E) in l ×ˢ 𝓝 x, HasFDerivAt (f n.fst) (f' n.fst n.snd) n.snd
hfg : ∀ᶠ (y : E) in 𝓝 x, Tendsto (fun n => f n y) l (𝓝 (g y))
this✝ :
  (fun a => (↑‖a.snd - x‖)⁻¹ • (g a.snd - g x - ↑(g' x) (a.snd - x))) =
    ((fun a => (↑‖a.snd - x‖)⁻¹ • (g a.snd - g x - (f a.fst a.snd - f a.fst x))) + fun a =>
        (↑‖a.snd - x‖)⁻¹ • (f a.fst a.snd - f a.fst x - (↑(f' a.fst x) a.snd - ↑(f' a.fst x) x))) +
      fun a => (↑‖a.snd - x‖)⁻¹ • ↑(f' a.fst x - g' x) (a.snd - x)
this : 𝓝 0 = 𝓝 (0 + 0 + 0)
⊢ Tendsto (fun x_1 => (fun a => (↑‖a.snd - x‖)⁻¹ • ↑(f' a.fst x - g' x) (a.snd - x)) x_1) (curry l (𝓝 x)) (𝓝 0)
[PROOFSTEP]
refine' Tendsto.mono_left _ curry_le_prod
[GOAL]
case refine'_3
ι : Type u_1
l : Filter ι
E : Type u_2
inst✝⁵ : NormedAddCommGroup E
𝕜 : Type u_3
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedSpace 𝕜 E
G : Type u_4
inst✝² : NormedAddCommGroup G
inst✝¹ : NormedSpace 𝕜 G
f : ι → E → G
g : E → G
f' : ι → E → E →L[𝕜] G
g' : E → E →L[𝕜] G
x : E
inst✝ : NeBot l
hf' : TendstoUniformlyOnFilter f' g' l (𝓝 x)
hf : ∀ᶠ (n : ι × E) in l ×ˢ 𝓝 x, HasFDerivAt (f n.fst) (f' n.fst n.snd) n.snd
hfg : ∀ᶠ (y : E) in 𝓝 x, Tendsto (fun n => f n y) l (𝓝 (g y))
this✝ :
  (fun a => (↑‖a.snd - x‖)⁻¹ • (g a.snd - g x - ↑(g' x) (a.snd - x))) =
    ((fun a => (↑‖a.snd - x‖)⁻¹ • (g a.snd - g x - (f a.fst a.snd - f a.fst x))) + fun a =>
        (↑‖a.snd - x‖)⁻¹ • (f a.fst a.snd - f a.fst x - (↑(f' a.fst x) a.snd - ↑(f' a.fst x) x))) +
      fun a => (↑‖a.snd - x‖)⁻¹ • ↑(f' a.fst x - g' x) (a.snd - x)
this : 𝓝 0 = 𝓝 (0 + 0 + 0)
⊢ Tendsto (fun x_1 => (fun a => (↑‖a.snd - x‖)⁻¹ • ↑(f' a.fst x - g' x) (a.snd - x)) x_1) (Filter.prod l (𝓝 x)) (𝓝 0)
[PROOFSTEP]
have h1 : Tendsto (fun n : ι × E => g' n.2 - f' n.1 n.2) (l ×ˢ 𝓝 x) (𝓝 0) :=
  by
  rw [Metric.tendstoUniformlyOnFilter_iff] at hf'
  exact Metric.tendsto_nhds.mpr fun ε hε => by simpa using hf' ε hε
[GOAL]
ι : Type u_1
l : Filter ι
E : Type u_2
inst✝⁵ : NormedAddCommGroup E
𝕜 : Type u_3
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedSpace 𝕜 E
G : Type u_4
inst✝² : NormedAddCommGroup G
inst✝¹ : NormedSpace 𝕜 G
f : ι → E → G
g : E → G
f' : ι → E → E →L[𝕜] G
g' : E → E →L[𝕜] G
x : E
inst✝ : NeBot l
hf' : TendstoUniformlyOnFilter f' g' l (𝓝 x)
hf : ∀ᶠ (n : ι × E) in l ×ˢ 𝓝 x, HasFDerivAt (f n.fst) (f' n.fst n.snd) n.snd
hfg : ∀ᶠ (y : E) in 𝓝 x, Tendsto (fun n => f n y) l (𝓝 (g y))
this✝ :
  (fun a => (↑‖a.snd - x‖)⁻¹ • (g a.snd - g x - ↑(g' x) (a.snd - x))) =
    ((fun a => (↑‖a.snd - x‖)⁻¹ • (g a.snd - g x - (f a.fst a.snd - f a.fst x))) + fun a =>
        (↑‖a.snd - x‖)⁻¹ • (f a.fst a.snd - f a.fst x - (↑(f' a.fst x) a.snd - ↑(f' a.fst x) x))) +
      fun a => (↑‖a.snd - x‖)⁻¹ • ↑(f' a.fst x - g' x) (a.snd - x)
this : 𝓝 0 = 𝓝 (0 + 0 + 0)
⊢ Tendsto (fun n => g' n.snd - f' n.fst n.snd) (l ×ˢ 𝓝 x) (𝓝 0)
[PROOFSTEP]
rw [Metric.tendstoUniformlyOnFilter_iff] at hf'
[GOAL]
ι : Type u_1
l : Filter ι
E : Type u_2
inst✝⁵ : NormedAddCommGroup E
𝕜 : Type u_3
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedSpace 𝕜 E
G : Type u_4
inst✝² : NormedAddCommGroup G
inst✝¹ : NormedSpace 𝕜 G
f : ι → E → G
g : E → G
f' : ι → E → E →L[𝕜] G
g' : E → E →L[𝕜] G
x : E
inst✝ : NeBot l
hf' : ∀ (ε : ℝ), ε > 0 → ∀ᶠ (n : ι × E) in l ×ˢ 𝓝 x, dist (g' n.snd) (f' n.fst n.snd) < ε
hf : ∀ᶠ (n : ι × E) in l ×ˢ 𝓝 x, HasFDerivAt (f n.fst) (f' n.fst n.snd) n.snd
hfg : ∀ᶠ (y : E) in 𝓝 x, Tendsto (fun n => f n y) l (𝓝 (g y))
this✝ :
  (fun a => (↑‖a.snd - x‖)⁻¹ • (g a.snd - g x - ↑(g' x) (a.snd - x))) =
    ((fun a => (↑‖a.snd - x‖)⁻¹ • (g a.snd - g x - (f a.fst a.snd - f a.fst x))) + fun a =>
        (↑‖a.snd - x‖)⁻¹ • (f a.fst a.snd - f a.fst x - (↑(f' a.fst x) a.snd - ↑(f' a.fst x) x))) +
      fun a => (↑‖a.snd - x‖)⁻¹ • ↑(f' a.fst x - g' x) (a.snd - x)
this : 𝓝 0 = 𝓝 (0 + 0 + 0)
⊢ Tendsto (fun n => g' n.snd - f' n.fst n.snd) (l ×ˢ 𝓝 x) (𝓝 0)
[PROOFSTEP]
exact Metric.tendsto_nhds.mpr fun ε hε => by simpa using hf' ε hε
[GOAL]
ι : Type u_1
l : Filter ι
E : Type u_2
inst✝⁵ : NormedAddCommGroup E
𝕜 : Type u_3
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedSpace 𝕜 E
G : Type u_4
inst✝² : NormedAddCommGroup G
inst✝¹ : NormedSpace 𝕜 G
f : ι → E → G
g : E → G
f' : ι → E → E →L[𝕜] G
g' : E → E →L[𝕜] G
x : E
inst✝ : NeBot l
hf' : ∀ (ε : ℝ), ε > 0 → ∀ᶠ (n : ι × E) in l ×ˢ 𝓝 x, dist (g' n.snd) (f' n.fst n.snd) < ε
hf : ∀ᶠ (n : ι × E) in l ×ˢ 𝓝 x, HasFDerivAt (f n.fst) (f' n.fst n.snd) n.snd
hfg : ∀ᶠ (y : E) in 𝓝 x, Tendsto (fun n => f n y) l (𝓝 (g y))
this✝ :
  (fun a => (↑‖a.snd - x‖)⁻¹ • (g a.snd - g x - ↑(g' x) (a.snd - x))) =
    ((fun a => (↑‖a.snd - x‖)⁻¹ • (g a.snd - g x - (f a.fst a.snd - f a.fst x))) + fun a =>
        (↑‖a.snd - x‖)⁻¹ • (f a.fst a.snd - f a.fst x - (↑(f' a.fst x) a.snd - ↑(f' a.fst x) x))) +
      fun a => (↑‖a.snd - x‖)⁻¹ • ↑(f' a.fst x - g' x) (a.snd - x)
this : 𝓝 0 = 𝓝 (0 + 0 + 0)
ε : ℝ
hε : ε > 0
⊢ ∀ᶠ (x : ι × E) in l ×ˢ 𝓝 x, dist (g' x.snd - f' x.fst x.snd) 0 < ε
[PROOFSTEP]
simpa using hf' ε hε
[GOAL]
case refine'_3
ι : Type u_1
l : Filter ι
E : Type u_2
inst✝⁵ : NormedAddCommGroup E
𝕜 : Type u_3
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedSpace 𝕜 E
G : Type u_4
inst✝² : NormedAddCommGroup G
inst✝¹ : NormedSpace 𝕜 G
f : ι → E → G
g : E → G
f' : ι → E → E →L[𝕜] G
g' : E → E →L[𝕜] G
x : E
inst✝ : NeBot l
hf' : TendstoUniformlyOnFilter f' g' l (𝓝 x)
hf : ∀ᶠ (n : ι × E) in l ×ˢ 𝓝 x, HasFDerivAt (f n.fst) (f' n.fst n.snd) n.snd
hfg : ∀ᶠ (y : E) in 𝓝 x, Tendsto (fun n => f n y) l (𝓝 (g y))
this✝ :
  (fun a => (↑‖a.snd - x‖)⁻¹ • (g a.snd - g x - ↑(g' x) (a.snd - x))) =
    ((fun a => (↑‖a.snd - x‖)⁻¹ • (g a.snd - g x - (f a.fst a.snd - f a.fst x))) + fun a =>
        (↑‖a.snd - x‖)⁻¹ • (f a.fst a.snd - f a.fst x - (↑(f' a.fst x) a.snd - ↑(f' a.fst x) x))) +
      fun a => (↑‖a.snd - x‖)⁻¹ • ↑(f' a.fst x - g' x) (a.snd - x)
this : 𝓝 0 = 𝓝 (0 + 0 + 0)
h1 : Tendsto (fun n => g' n.snd - f' n.fst n.snd) (l ×ˢ 𝓝 x) (𝓝 0)
⊢ Tendsto (fun x_1 => (fun a => (↑‖a.snd - x‖)⁻¹ • ↑(f' a.fst x - g' x) (a.snd - x)) x_1) (Filter.prod l (𝓝 x)) (𝓝 0)
[PROOFSTEP]
have h2 : Tendsto (fun n : ι => g' x - f' n x) l (𝓝 0) :=
  by
  rw [Metric.tendsto_nhds] at h1 ⊢
  exact fun ε hε => (h1 ε hε).curry.mono fun n hn => hn.self_of_nhds
[GOAL]
ι : Type u_1
l : Filter ι
E : Type u_2
inst✝⁵ : NormedAddCommGroup E
𝕜 : Type u_3
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedSpace 𝕜 E
G : Type u_4
inst✝² : NormedAddCommGroup G
inst✝¹ : NormedSpace 𝕜 G
f : ι → E → G
g : E → G
f' : ι → E → E →L[𝕜] G
g' : E → E →L[𝕜] G
x : E
inst✝ : NeBot l
hf' : TendstoUniformlyOnFilter f' g' l (𝓝 x)
hf : ∀ᶠ (n : ι × E) in l ×ˢ 𝓝 x, HasFDerivAt (f n.fst) (f' n.fst n.snd) n.snd
hfg : ∀ᶠ (y : E) in 𝓝 x, Tendsto (fun n => f n y) l (𝓝 (g y))
this✝ :
  (fun a => (↑‖a.snd - x‖)⁻¹ • (g a.snd - g x - ↑(g' x) (a.snd - x))) =
    ((fun a => (↑‖a.snd - x‖)⁻¹ • (g a.snd - g x - (f a.fst a.snd - f a.fst x))) + fun a =>
        (↑‖a.snd - x‖)⁻¹ • (f a.fst a.snd - f a.fst x - (↑(f' a.fst x) a.snd - ↑(f' a.fst x) x))) +
      fun a => (↑‖a.snd - x‖)⁻¹ • ↑(f' a.fst x - g' x) (a.snd - x)
this : 𝓝 0 = 𝓝 (0 + 0 + 0)
h1 : Tendsto (fun n => g' n.snd - f' n.fst n.snd) (l ×ˢ 𝓝 x) (𝓝 0)
⊢ Tendsto (fun n => g' x - f' n x) l (𝓝 0)
[PROOFSTEP]
rw [Metric.tendsto_nhds] at h1 ⊢
[GOAL]
ι : Type u_1
l : Filter ι
E : Type u_2
inst✝⁵ : NormedAddCommGroup E
𝕜 : Type u_3
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedSpace 𝕜 E
G : Type u_4
inst✝² : NormedAddCommGroup G
inst✝¹ : NormedSpace 𝕜 G
f : ι → E → G
g : E → G
f' : ι → E → E →L[𝕜] G
g' : E → E →L[𝕜] G
x : E
inst✝ : NeBot l
hf' : TendstoUniformlyOnFilter f' g' l (𝓝 x)
hf : ∀ᶠ (n : ι × E) in l ×ˢ 𝓝 x, HasFDerivAt (f n.fst) (f' n.fst n.snd) n.snd
hfg : ∀ᶠ (y : E) in 𝓝 x, Tendsto (fun n => f n y) l (𝓝 (g y))
this✝ :
  (fun a => (↑‖a.snd - x‖)⁻¹ • (g a.snd - g x - ↑(g' x) (a.snd - x))) =
    ((fun a => (↑‖a.snd - x‖)⁻¹ • (g a.snd - g x - (f a.fst a.snd - f a.fst x))) + fun a =>
        (↑‖a.snd - x‖)⁻¹ • (f a.fst a.snd - f a.fst x - (↑(f' a.fst x) a.snd - ↑(f' a.fst x) x))) +
      fun a => (↑‖a.snd - x‖)⁻¹ • ↑(f' a.fst x - g' x) (a.snd - x)
this : 𝓝 0 = 𝓝 (0 + 0 + 0)
h1 : ∀ (ε : ℝ), ε > 0 → ∀ᶠ (x : ι × E) in l ×ˢ 𝓝 x, dist (g' x.snd - f' x.fst x.snd) 0 < ε
⊢ ∀ (ε : ℝ), ε > 0 → ∀ᶠ (x_1 : ι) in l, dist (g' x - f' x_1 x) 0 < ε
[PROOFSTEP]
exact fun ε hε => (h1 ε hε).curry.mono fun n hn => hn.self_of_nhds
[GOAL]
case refine'_3
ι : Type u_1
l : Filter ι
E : Type u_2
inst✝⁵ : NormedAddCommGroup E
𝕜 : Type u_3
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedSpace 𝕜 E
G : Type u_4
inst✝² : NormedAddCommGroup G
inst✝¹ : NormedSpace 𝕜 G
f : ι → E → G
g : E → G
f' : ι → E → E →L[𝕜] G
g' : E → E →L[𝕜] G
x : E
inst✝ : NeBot l
hf' : TendstoUniformlyOnFilter f' g' l (𝓝 x)
hf : ∀ᶠ (n : ι × E) in l ×ˢ 𝓝 x, HasFDerivAt (f n.fst) (f' n.fst n.snd) n.snd
hfg : ∀ᶠ (y : E) in 𝓝 x, Tendsto (fun n => f n y) l (𝓝 (g y))
this✝ :
  (fun a => (↑‖a.snd - x‖)⁻¹ • (g a.snd - g x - ↑(g' x) (a.snd - x))) =
    ((fun a => (↑‖a.snd - x‖)⁻¹ • (g a.snd - g x - (f a.fst a.snd - f a.fst x))) + fun a =>
        (↑‖a.snd - x‖)⁻¹ • (f a.fst a.snd - f a.fst x - (↑(f' a.fst x) a.snd - ↑(f' a.fst x) x))) +
      fun a => (↑‖a.snd - x‖)⁻¹ • ↑(f' a.fst x - g' x) (a.snd - x)
this : 𝓝 0 = 𝓝 (0 + 0 + 0)
h1 : Tendsto (fun n => g' n.snd - f' n.fst n.snd) (l ×ˢ 𝓝 x) (𝓝 0)
h2 : Tendsto (fun n => g' x - f' n x) l (𝓝 0)
⊢ Tendsto (fun x_1 => (fun a => (↑‖a.snd - x‖)⁻¹ • ↑(f' a.fst x - g' x) (a.snd - x)) x_1) (Filter.prod l (𝓝 x)) (𝓝 0)
[PROOFSTEP]
refine' squeeze_zero_norm _ (tendsto_zero_iff_norm_tendsto_zero.mp (tendsto_fst.comp (h2.prod_map tendsto_id)))
[GOAL]
case refine'_3
ι : Type u_1
l : Filter ι
E : Type u_2
inst✝⁵ : NormedAddCommGroup E
𝕜 : Type u_3
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedSpace 𝕜 E
G : Type u_4
inst✝² : NormedAddCommGroup G
inst✝¹ : NormedSpace 𝕜 G
f : ι → E → G
g : E → G
f' : ι → E → E →L[𝕜] G
g' : E → E →L[𝕜] G
x : E
inst✝ : NeBot l
hf' : TendstoUniformlyOnFilter f' g' l (𝓝 x)
hf : ∀ᶠ (n : ι × E) in l ×ˢ 𝓝 x, HasFDerivAt (f n.fst) (f' n.fst n.snd) n.snd
hfg : ∀ᶠ (y : E) in 𝓝 x, Tendsto (fun n => f n y) l (𝓝 (g y))
this✝ :
  (fun a => (↑‖a.snd - x‖)⁻¹ • (g a.snd - g x - ↑(g' x) (a.snd - x))) =
    ((fun a => (↑‖a.snd - x‖)⁻¹ • (g a.snd - g x - (f a.fst a.snd - f a.fst x))) + fun a =>
        (↑‖a.snd - x‖)⁻¹ • (f a.fst a.snd - f a.fst x - (↑(f' a.fst x) a.snd - ↑(f' a.fst x) x))) +
      fun a => (↑‖a.snd - x‖)⁻¹ • ↑(f' a.fst x - g' x) (a.snd - x)
this : 𝓝 0 = 𝓝 (0 + 0 + 0)
h1 : Tendsto (fun n => g' n.snd - f' n.fst n.snd) (l ×ˢ 𝓝 x) (𝓝 0)
h2 : Tendsto (fun n => g' x - f' n x) l (𝓝 0)
⊢ ∀ (n : ι × E),
    ‖(fun a => (↑‖a.snd - x‖)⁻¹ • ↑(f' a.fst x - g' x) (a.snd - x)) n‖ ≤
      ‖(Prod.fst ∘ Prod.map (fun n => g' x - f' n x) id) n‖
[PROOFSTEP]
intro n
[GOAL]
case refine'_3
ι : Type u_1
l : Filter ι
E : Type u_2
inst✝⁵ : NormedAddCommGroup E
𝕜 : Type u_3
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedSpace 𝕜 E
G : Type u_4
inst✝² : NormedAddCommGroup G
inst✝¹ : NormedSpace 𝕜 G
f : ι → E → G
g : E → G
f' : ι → E → E →L[𝕜] G
g' : E → E →L[𝕜] G
x : E
inst✝ : NeBot l
hf' : TendstoUniformlyOnFilter f' g' l (𝓝 x)
hf : ∀ᶠ (n : ι × E) in l ×ˢ 𝓝 x, HasFDerivAt (f n.fst) (f' n.fst n.snd) n.snd
hfg : ∀ᶠ (y : E) in 𝓝 x, Tendsto (fun n => f n y) l (𝓝 (g y))
this✝ :
  (fun a => (↑‖a.snd - x‖)⁻¹ • (g a.snd - g x - ↑(g' x) (a.snd - x))) =
    ((fun a => (↑‖a.snd - x‖)⁻¹ • (g a.snd - g x - (f a.fst a.snd - f a.fst x))) + fun a =>
        (↑‖a.snd - x‖)⁻¹ • (f a.fst a.snd - f a.fst x - (↑(f' a.fst x) a.snd - ↑(f' a.fst x) x))) +
      fun a => (↑‖a.snd - x‖)⁻¹ • ↑(f' a.fst x - g' x) (a.snd - x)
this : 𝓝 0 = 𝓝 (0 + 0 + 0)
h1 : Tendsto (fun n => g' n.snd - f' n.fst n.snd) (l ×ˢ 𝓝 x) (𝓝 0)
h2 : Tendsto (fun n => g' x - f' n x) l (𝓝 0)
n : ι × E
⊢ ‖(fun a => (↑‖a.snd - x‖)⁻¹ • ↑(f' a.fst x - g' x) (a.snd - x)) n‖ ≤
    ‖(Prod.fst ∘ Prod.map (fun n => g' x - f' n x) id) n‖
[PROOFSTEP]
simp_rw [norm_smul, norm_inv, IsROrC.norm_coe_norm]
[GOAL]
case refine'_3
ι : Type u_1
l : Filter ι
E : Type u_2
inst✝⁵ : NormedAddCommGroup E
𝕜 : Type u_3
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedSpace 𝕜 E
G : Type u_4
inst✝² : NormedAddCommGroup G
inst✝¹ : NormedSpace 𝕜 G
f : ι → E → G
g : E → G
f' : ι → E → E →L[𝕜] G
g' : E → E →L[𝕜] G
x : E
inst✝ : NeBot l
hf' : TendstoUniformlyOnFilter f' g' l (𝓝 x)
hf : ∀ᶠ (n : ι × E) in l ×ˢ 𝓝 x, HasFDerivAt (f n.fst) (f' n.fst n.snd) n.snd
hfg : ∀ᶠ (y : E) in 𝓝 x, Tendsto (fun n => f n y) l (𝓝 (g y))
this✝ :
  (fun a => (↑‖a.snd - x‖)⁻¹ • (g a.snd - g x - ↑(g' x) (a.snd - x))) =
    ((fun a => (↑‖a.snd - x‖)⁻¹ • (g a.snd - g x - (f a.fst a.snd - f a.fst x))) + fun a =>
        (↑‖a.snd - x‖)⁻¹ • (f a.fst a.snd - f a.fst x - (↑(f' a.fst x) a.snd - ↑(f' a.fst x) x))) +
      fun a => (↑‖a.snd - x‖)⁻¹ • ↑(f' a.fst x - g' x) (a.snd - x)
this : 𝓝 0 = 𝓝 (0 + 0 + 0)
h1 : Tendsto (fun n => g' n.snd - f' n.fst n.snd) (l ×ˢ 𝓝 x) (𝓝 0)
h2 : Tendsto (fun n => g' x - f' n x) l (𝓝 0)
n : ι × E
⊢ ‖n.snd - x‖⁻¹ * ‖↑(f' n.fst x - g' x) (n.snd - x)‖ ≤ ‖(Prod.fst ∘ Prod.map (fun n => g' x - f' n x) id) n‖
[PROOFSTEP]
by_cases hx : x = n.2
[GOAL]
case pos
ι : Type u_1
l : Filter ι
E : Type u_2
inst✝⁵ : NormedAddCommGroup E
𝕜 : Type u_3
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedSpace 𝕜 E
G : Type u_4
inst✝² : NormedAddCommGroup G
inst✝¹ : NormedSpace 𝕜 G
f : ι → E → G
g : E → G
f' : ι → E → E →L[𝕜] G
g' : E → E →L[𝕜] G
x : E
inst✝ : NeBot l
hf' : TendstoUniformlyOnFilter f' g' l (𝓝 x)
hf : ∀ᶠ (n : ι × E) in l ×ˢ 𝓝 x, HasFDerivAt (f n.fst) (f' n.fst n.snd) n.snd
hfg : ∀ᶠ (y : E) in 𝓝 x, Tendsto (fun n => f n y) l (𝓝 (g y))
this✝ :
  (fun a => (↑‖a.snd - x‖)⁻¹ • (g a.snd - g x - ↑(g' x) (a.snd - x))) =
    ((fun a => (↑‖a.snd - x‖)⁻¹ • (g a.snd - g x - (f a.fst a.snd - f a.fst x))) + fun a =>
        (↑‖a.snd - x‖)⁻¹ • (f a.fst a.snd - f a.fst x - (↑(f' a.fst x) a.snd - ↑(f' a.fst x) x))) +
      fun a => (↑‖a.snd - x‖)⁻¹ • ↑(f' a.fst x - g' x) (a.snd - x)
this : 𝓝 0 = 𝓝 (0 + 0 + 0)
h1 : Tendsto (fun n => g' n.snd - f' n.fst n.snd) (l ×ˢ 𝓝 x) (𝓝 0)
h2 : Tendsto (fun n => g' x - f' n x) l (𝓝 0)
n : ι × E
hx : x = n.snd
⊢ ‖n.snd - x‖⁻¹ * ‖↑(f' n.fst x - g' x) (n.snd - x)‖ ≤ ‖(Prod.fst ∘ Prod.map (fun n => g' x - f' n x) id) n‖
[PROOFSTEP]
simp [hx]
[GOAL]
case neg
ι : Type u_1
l : Filter ι
E : Type u_2
inst✝⁵ : NormedAddCommGroup E
𝕜 : Type u_3
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedSpace 𝕜 E
G : Type u_4
inst✝² : NormedAddCommGroup G
inst✝¹ : NormedSpace 𝕜 G
f : ι → E → G
g : E → G
f' : ι → E → E →L[𝕜] G
g' : E → E →L[𝕜] G
x : E
inst✝ : NeBot l
hf' : TendstoUniformlyOnFilter f' g' l (𝓝 x)
hf : ∀ᶠ (n : ι × E) in l ×ˢ 𝓝 x, HasFDerivAt (f n.fst) (f' n.fst n.snd) n.snd
hfg : ∀ᶠ (y : E) in 𝓝 x, Tendsto (fun n => f n y) l (𝓝 (g y))
this✝ :
  (fun a => (↑‖a.snd - x‖)⁻¹ • (g a.snd - g x - ↑(g' x) (a.snd - x))) =
    ((fun a => (↑‖a.snd - x‖)⁻¹ • (g a.snd - g x - (f a.fst a.snd - f a.fst x))) + fun a =>
        (↑‖a.snd - x‖)⁻¹ • (f a.fst a.snd - f a.fst x - (↑(f' a.fst x) a.snd - ↑(f' a.fst x) x))) +
      fun a => (↑‖a.snd - x‖)⁻¹ • ↑(f' a.fst x - g' x) (a.snd - x)
this : 𝓝 0 = 𝓝 (0 + 0 + 0)
h1 : Tendsto (fun n => g' n.snd - f' n.fst n.snd) (l ×ˢ 𝓝 x) (𝓝 0)
h2 : Tendsto (fun n => g' x - f' n x) l (𝓝 0)
n : ι × E
hx : ¬x = n.snd
⊢ ‖n.snd - x‖⁻¹ * ‖↑(f' n.fst x - g' x) (n.snd - x)‖ ≤ ‖(Prod.fst ∘ Prod.map (fun n => g' x - f' n x) id) n‖
[PROOFSTEP]
have hnx : 0 < ‖n.2 - x‖ := by rw [norm_pos_iff]; intro hx'; exact hx (eq_of_sub_eq_zero hx').symm
[GOAL]
ι : Type u_1
l : Filter ι
E : Type u_2
inst✝⁵ : NormedAddCommGroup E
𝕜 : Type u_3
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedSpace 𝕜 E
G : Type u_4
inst✝² : NormedAddCommGroup G
inst✝¹ : NormedSpace 𝕜 G
f : ι → E → G
g : E → G
f' : ι → E → E →L[𝕜] G
g' : E → E →L[𝕜] G
x : E
inst✝ : NeBot l
hf' : TendstoUniformlyOnFilter f' g' l (𝓝 x)
hf : ∀ᶠ (n : ι × E) in l ×ˢ 𝓝 x, HasFDerivAt (f n.fst) (f' n.fst n.snd) n.snd
hfg : ∀ᶠ (y : E) in 𝓝 x, Tendsto (fun n => f n y) l (𝓝 (g y))
this✝ :
  (fun a => (↑‖a.snd - x‖)⁻¹ • (g a.snd - g x - ↑(g' x) (a.snd - x))) =
    ((fun a => (↑‖a.snd - x‖)⁻¹ • (g a.snd - g x - (f a.fst a.snd - f a.fst x))) + fun a =>
        (↑‖a.snd - x‖)⁻¹ • (f a.fst a.snd - f a.fst x - (↑(f' a.fst x) a.snd - ↑(f' a.fst x) x))) +
      fun a => (↑‖a.snd - x‖)⁻¹ • ↑(f' a.fst x - g' x) (a.snd - x)
this : 𝓝 0 = 𝓝 (0 + 0 + 0)
h1 : Tendsto (fun n => g' n.snd - f' n.fst n.snd) (l ×ˢ 𝓝 x) (𝓝 0)
h2 : Tendsto (fun n => g' x - f' n x) l (𝓝 0)
n : ι × E
hx : ¬x = n.snd
⊢ 0 < ‖n.snd - x‖
[PROOFSTEP]
rw [norm_pos_iff]
[GOAL]
ι : Type u_1
l : Filter ι
E : Type u_2
inst✝⁵ : NormedAddCommGroup E
𝕜 : Type u_3
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedSpace 𝕜 E
G : Type u_4
inst✝² : NormedAddCommGroup G
inst✝¹ : NormedSpace 𝕜 G
f : ι → E → G
g : E → G
f' : ι → E → E →L[𝕜] G
g' : E → E →L[𝕜] G
x : E
inst✝ : NeBot l
hf' : TendstoUniformlyOnFilter f' g' l (𝓝 x)
hf : ∀ᶠ (n : ι × E) in l ×ˢ 𝓝 x, HasFDerivAt (f n.fst) (f' n.fst n.snd) n.snd
hfg : ∀ᶠ (y : E) in 𝓝 x, Tendsto (fun n => f n y) l (𝓝 (g y))
this✝ :
  (fun a => (↑‖a.snd - x‖)⁻¹ • (g a.snd - g x - ↑(g' x) (a.snd - x))) =
    ((fun a => (↑‖a.snd - x‖)⁻¹ • (g a.snd - g x - (f a.fst a.snd - f a.fst x))) + fun a =>
        (↑‖a.snd - x‖)⁻¹ • (f a.fst a.snd - f a.fst x - (↑(f' a.fst x) a.snd - ↑(f' a.fst x) x))) +
      fun a => (↑‖a.snd - x‖)⁻¹ • ↑(f' a.fst x - g' x) (a.snd - x)
this : 𝓝 0 = 𝓝 (0 + 0 + 0)
h1 : Tendsto (fun n => g' n.snd - f' n.fst n.snd) (l ×ˢ 𝓝 x) (𝓝 0)
h2 : Tendsto (fun n => g' x - f' n x) l (𝓝 0)
n : ι × E
hx : ¬x = n.snd
⊢ n.snd - x ≠ 0
[PROOFSTEP]
intro hx'
[GOAL]
ι : Type u_1
l : Filter ι
E : Type u_2
inst✝⁵ : NormedAddCommGroup E
𝕜 : Type u_3
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedSpace 𝕜 E
G : Type u_4
inst✝² : NormedAddCommGroup G
inst✝¹ : NormedSpace 𝕜 G
f : ι → E → G
g : E → G
f' : ι → E → E →L[𝕜] G
g' : E → E →L[𝕜] G
x : E
inst✝ : NeBot l
hf' : TendstoUniformlyOnFilter f' g' l (𝓝 x)
hf : ∀ᶠ (n : ι × E) in l ×ˢ 𝓝 x, HasFDerivAt (f n.fst) (f' n.fst n.snd) n.snd
hfg : ∀ᶠ (y : E) in 𝓝 x, Tendsto (fun n => f n y) l (𝓝 (g y))
this✝ :
  (fun a => (↑‖a.snd - x‖)⁻¹ • (g a.snd - g x - ↑(g' x) (a.snd - x))) =
    ((fun a => (↑‖a.snd - x‖)⁻¹ • (g a.snd - g x - (f a.fst a.snd - f a.fst x))) + fun a =>
        (↑‖a.snd - x‖)⁻¹ • (f a.fst a.snd - f a.fst x - (↑(f' a.fst x) a.snd - ↑(f' a.fst x) x))) +
      fun a => (↑‖a.snd - x‖)⁻¹ • ↑(f' a.fst x - g' x) (a.snd - x)
this : 𝓝 0 = 𝓝 (0 + 0 + 0)
h1 : Tendsto (fun n => g' n.snd - f' n.fst n.snd) (l ×ˢ 𝓝 x) (𝓝 0)
h2 : Tendsto (fun n => g' x - f' n x) l (𝓝 0)
n : ι × E
hx : ¬x = n.snd
hx' : n.snd - x = 0
⊢ False
[PROOFSTEP]
exact hx (eq_of_sub_eq_zero hx').symm
[GOAL]
case neg
ι : Type u_1
l : Filter ι
E : Type u_2
inst✝⁵ : NormedAddCommGroup E
𝕜 : Type u_3
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedSpace 𝕜 E
G : Type u_4
inst✝² : NormedAddCommGroup G
inst✝¹ : NormedSpace 𝕜 G
f : ι → E → G
g : E → G
f' : ι → E → E →L[𝕜] G
g' : E → E →L[𝕜] G
x : E
inst✝ : NeBot l
hf' : TendstoUniformlyOnFilter f' g' l (𝓝 x)
hf : ∀ᶠ (n : ι × E) in l ×ˢ 𝓝 x, HasFDerivAt (f n.fst) (f' n.fst n.snd) n.snd
hfg : ∀ᶠ (y : E) in 𝓝 x, Tendsto (fun n => f n y) l (𝓝 (g y))
this✝ :
  (fun a => (↑‖a.snd - x‖)⁻¹ • (g a.snd - g x - ↑(g' x) (a.snd - x))) =
    ((fun a => (↑‖a.snd - x‖)⁻¹ • (g a.snd - g x - (f a.fst a.snd - f a.fst x))) + fun a =>
        (↑‖a.snd - x‖)⁻¹ • (f a.fst a.snd - f a.fst x - (↑(f' a.fst x) a.snd - ↑(f' a.fst x) x))) +
      fun a => (↑‖a.snd - x‖)⁻¹ • ↑(f' a.fst x - g' x) (a.snd - x)
this : 𝓝 0 = 𝓝 (0 + 0 + 0)
h1 : Tendsto (fun n => g' n.snd - f' n.fst n.snd) (l ×ˢ 𝓝 x) (𝓝 0)
h2 : Tendsto (fun n => g' x - f' n x) l (𝓝 0)
n : ι × E
hx : ¬x = n.snd
hnx : 0 < ‖n.snd - x‖
⊢ ‖n.snd - x‖⁻¹ * ‖↑(f' n.fst x - g' x) (n.snd - x)‖ ≤ ‖(Prod.fst ∘ Prod.map (fun n => g' x - f' n x) id) n‖
[PROOFSTEP]
rw [inv_mul_le_iff hnx, mul_comm]
[GOAL]
case neg
ι : Type u_1
l : Filter ι
E : Type u_2
inst✝⁵ : NormedAddCommGroup E
𝕜 : Type u_3
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedSpace 𝕜 E
G : Type u_4
inst✝² : NormedAddCommGroup G
inst✝¹ : NormedSpace 𝕜 G
f : ι → E → G
g : E → G
f' : ι → E → E →L[𝕜] G
g' : E → E →L[𝕜] G
x : E
inst✝ : NeBot l
hf' : TendstoUniformlyOnFilter f' g' l (𝓝 x)
hf : ∀ᶠ (n : ι × E) in l ×ˢ 𝓝 x, HasFDerivAt (f n.fst) (f' n.fst n.snd) n.snd
hfg : ∀ᶠ (y : E) in 𝓝 x, Tendsto (fun n => f n y) l (𝓝 (g y))
this✝ :
  (fun a => (↑‖a.snd - x‖)⁻¹ • (g a.snd - g x - ↑(g' x) (a.snd - x))) =
    ((fun a => (↑‖a.snd - x‖)⁻¹ • (g a.snd - g x - (f a.fst a.snd - f a.fst x))) + fun a =>
        (↑‖a.snd - x‖)⁻¹ • (f a.fst a.snd - f a.fst x - (↑(f' a.fst x) a.snd - ↑(f' a.fst x) x))) +
      fun a => (↑‖a.snd - x‖)⁻¹ • ↑(f' a.fst x - g' x) (a.snd - x)
this : 𝓝 0 = 𝓝 (0 + 0 + 0)
h1 : Tendsto (fun n => g' n.snd - f' n.fst n.snd) (l ×ˢ 𝓝 x) (𝓝 0)
h2 : Tendsto (fun n => g' x - f' n x) l (𝓝 0)
n : ι × E
hx : ¬x = n.snd
hnx : 0 < ‖n.snd - x‖
⊢ ‖↑(f' n.fst x - g' x) (n.snd - x)‖ ≤ ‖(Prod.fst ∘ Prod.map (fun n => g' x - f' n x) id) n‖ * ‖n.snd - x‖
[PROOFSTEP]
simp only [Function.comp_apply, Prod_map]
[GOAL]
case neg
ι : Type u_1
l : Filter ι
E : Type u_2
inst✝⁵ : NormedAddCommGroup E
𝕜 : Type u_3
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedSpace 𝕜 E
G : Type u_4
inst✝² : NormedAddCommGroup G
inst✝¹ : NormedSpace 𝕜 G
f : ι → E → G
g : E → G
f' : ι → E → E →L[𝕜] G
g' : E → E →L[𝕜] G
x : E
inst✝ : NeBot l
hf' : TendstoUniformlyOnFilter f' g' l (𝓝 x)
hf : ∀ᶠ (n : ι × E) in l ×ˢ 𝓝 x, HasFDerivAt (f n.fst) (f' n.fst n.snd) n.snd
hfg : ∀ᶠ (y : E) in 𝓝 x, Tendsto (fun n => f n y) l (𝓝 (g y))
this✝ :
  (fun a => (↑‖a.snd - x‖)⁻¹ • (g a.snd - g x - ↑(g' x) (a.snd - x))) =
    ((fun a => (↑‖a.snd - x‖)⁻¹ • (g a.snd - g x - (f a.fst a.snd - f a.fst x))) + fun a =>
        (↑‖a.snd - x‖)⁻¹ • (f a.fst a.snd - f a.fst x - (↑(f' a.fst x) a.snd - ↑(f' a.fst x) x))) +
      fun a => (↑‖a.snd - x‖)⁻¹ • ↑(f' a.fst x - g' x) (a.snd - x)
this : 𝓝 0 = 𝓝 (0 + 0 + 0)
h1 : Tendsto (fun n => g' n.snd - f' n.fst n.snd) (l ×ˢ 𝓝 x) (𝓝 0)
h2 : Tendsto (fun n => g' x - f' n x) l (𝓝 0)
n : ι × E
hx : ¬x = n.snd
hnx : 0 < ‖n.snd - x‖
⊢ ‖↑(f' n.fst x - g' x) (n.snd - x)‖ ≤ ‖g' x - f' n.fst x‖ * ‖n.snd - x‖
[PROOFSTEP]
rw [norm_sub_rev]
[GOAL]
case neg
ι : Type u_1
l : Filter ι
E : Type u_2
inst✝⁵ : NormedAddCommGroup E
𝕜 : Type u_3
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedSpace 𝕜 E
G : Type u_4
inst✝² : NormedAddCommGroup G
inst✝¹ : NormedSpace 𝕜 G
f : ι → E → G
g : E → G
f' : ι → E → E →L[𝕜] G
g' : E → E →L[𝕜] G
x : E
inst✝ : NeBot l
hf' : TendstoUniformlyOnFilter f' g' l (𝓝 x)
hf : ∀ᶠ (n : ι × E) in l ×ˢ 𝓝 x, HasFDerivAt (f n.fst) (f' n.fst n.snd) n.snd
hfg : ∀ᶠ (y : E) in 𝓝 x, Tendsto (fun n => f n y) l (𝓝 (g y))
this✝ :
  (fun a => (↑‖a.snd - x‖)⁻¹ • (g a.snd - g x - ↑(g' x) (a.snd - x))) =
    ((fun a => (↑‖a.snd - x‖)⁻¹ • (g a.snd - g x - (f a.fst a.snd - f a.fst x))) + fun a =>
        (↑‖a.snd - x‖)⁻¹ • (f a.fst a.snd - f a.fst x - (↑(f' a.fst x) a.snd - ↑(f' a.fst x) x))) +
      fun a => (↑‖a.snd - x‖)⁻¹ • ↑(f' a.fst x - g' x) (a.snd - x)
this : 𝓝 0 = 𝓝 (0 + 0 + 0)
h1 : Tendsto (fun n => g' n.snd - f' n.fst n.snd) (l ×ˢ 𝓝 x) (𝓝 0)
h2 : Tendsto (fun n => g' x - f' n x) l (𝓝 0)
n : ι × E
hx : ¬x = n.snd
hnx : 0 < ‖n.snd - x‖
⊢ ‖↑(f' n.fst x - g' x) (n.snd - x)‖ ≤ ‖f' n.fst x - g' x‖ * ‖n.snd - x‖
[PROOFSTEP]
exact (f' n.1 x - g' x).le_op_norm (n.2 - x)
[GOAL]
ι : Type u_1
l : Filter ι
E : Type u_2
inst✝⁵ : NormedAddCommGroup E
𝕜 : Type u_3
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedSpace 𝕜 E
G : Type u_4
inst✝² : NormedAddCommGroup G
inst✝¹ : NormedSpace 𝕜 G
f : ι → E → G
g : E → G
f' : ι → E → E →L[𝕜] G
g' : E → E →L[𝕜] G
x : E
inst✝ : NeBot l
s : Set E
hs : IsOpen s
hf' : TendstoLocallyUniformlyOn f' g' l s
hf : ∀ (n : ι) (x : E), x ∈ s → HasFDerivAt (f n) (f' n x) x
hfg : ∀ (x : E), x ∈ s → Tendsto (fun n => f n x) l (𝓝 (g x))
hx : x ∈ s
⊢ HasFDerivAt g (g' x) x
[PROOFSTEP]
have h1 : s ∈ 𝓝 x := hs.mem_nhds hx
[GOAL]
ι : Type u_1
l : Filter ι
E : Type u_2
inst✝⁵ : NormedAddCommGroup E
𝕜 : Type u_3
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedSpace 𝕜 E
G : Type u_4
inst✝² : NormedAddCommGroup G
inst✝¹ : NormedSpace 𝕜 G
f : ι → E → G
g : E → G
f' : ι → E → E →L[𝕜] G
g' : E → E →L[𝕜] G
x : E
inst✝ : NeBot l
s : Set E
hs : IsOpen s
hf' : TendstoLocallyUniformlyOn f' g' l s
hf : ∀ (n : ι) (x : E), x ∈ s → HasFDerivAt (f n) (f' n x) x
hfg : ∀ (x : E), x ∈ s → Tendsto (fun n => f n x) l (𝓝 (g x))
hx : x ∈ s
h1 : s ∈ 𝓝 x
⊢ HasFDerivAt g (g' x) x
[PROOFSTEP]
have h3 : Set.univ ×ˢ s ∈ l ×ˢ 𝓝 x := by simp only [h1, prod_mem_prod_iff, univ_mem, and_self_iff]
[GOAL]
ι : Type u_1
l : Filter ι
E : Type u_2
inst✝⁵ : NormedAddCommGroup E
𝕜 : Type u_3
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedSpace 𝕜 E
G : Type u_4
inst✝² : NormedAddCommGroup G
inst✝¹ : NormedSpace 𝕜 G
f : ι → E → G
g : E → G
f' : ι → E → E →L[𝕜] G
g' : E → E →L[𝕜] G
x : E
inst✝ : NeBot l
s : Set E
hs : IsOpen s
hf' : TendstoLocallyUniformlyOn f' g' l s
hf : ∀ (n : ι) (x : E), x ∈ s → HasFDerivAt (f n) (f' n x) x
hfg : ∀ (x : E), x ∈ s → Tendsto (fun n => f n x) l (𝓝 (g x))
hx : x ∈ s
h1 : s ∈ 𝓝 x
⊢ Set.univ ×ˢ s ∈ l ×ˢ 𝓝 x
[PROOFSTEP]
simp only [h1, prod_mem_prod_iff, univ_mem, and_self_iff]
[GOAL]
ι : Type u_1
l : Filter ι
E : Type u_2
inst✝⁵ : NormedAddCommGroup E
𝕜 : Type u_3
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedSpace 𝕜 E
G : Type u_4
inst✝² : NormedAddCommGroup G
inst✝¹ : NormedSpace 𝕜 G
f : ι → E → G
g : E → G
f' : ι → E → E →L[𝕜] G
g' : E → E →L[𝕜] G
x : E
inst✝ : NeBot l
s : Set E
hs : IsOpen s
hf' : TendstoLocallyUniformlyOn f' g' l s
hf : ∀ (n : ι) (x : E), x ∈ s → HasFDerivAt (f n) (f' n x) x
hfg : ∀ (x : E), x ∈ s → Tendsto (fun n => f n x) l (𝓝 (g x))
hx : x ∈ s
h1 : s ∈ 𝓝 x
h3 : Set.univ ×ˢ s ∈ l ×ˢ 𝓝 x
⊢ HasFDerivAt g (g' x) x
[PROOFSTEP]
have h4 : ∀ᶠ n : ι × E in l ×ˢ 𝓝 x, HasFDerivAt (f n.1) (f' n.1 n.2) n.2 :=
  eventually_of_mem h3 fun ⟨n, z⟩ ⟨_, hz⟩ => hf n z hz
[GOAL]
ι : Type u_1
l : Filter ι
E : Type u_2
inst✝⁵ : NormedAddCommGroup E
𝕜 : Type u_3
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedSpace 𝕜 E
G : Type u_4
inst✝² : NormedAddCommGroup G
inst✝¹ : NormedSpace 𝕜 G
f : ι → E → G
g : E → G
f' : ι → E → E →L[𝕜] G
g' : E → E →L[𝕜] G
x : E
inst✝ : NeBot l
s : Set E
hs : IsOpen s
hf' : TendstoLocallyUniformlyOn f' g' l s
hf : ∀ (n : ι) (x : E), x ∈ s → HasFDerivAt (f n) (f' n x) x
hfg : ∀ (x : E), x ∈ s → Tendsto (fun n => f n x) l (𝓝 (g x))
hx : x ∈ s
h1 : s ∈ 𝓝 x
h3 : Set.univ ×ˢ s ∈ l ×ˢ 𝓝 x
h4 : ∀ᶠ (n : ι × E) in l ×ˢ 𝓝 x, HasFDerivAt (f n.fst) (f' n.fst n.snd) n.snd
⊢ HasFDerivAt g (g' x) x
[PROOFSTEP]
refine' hasFDerivAt_of_tendstoUniformlyOnFilter _ h4 (eventually_of_mem h1 hfg)
[GOAL]
ι : Type u_1
l : Filter ι
E : Type u_2
inst✝⁵ : NormedAddCommGroup E
𝕜 : Type u_3
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedSpace 𝕜 E
G : Type u_4
inst✝² : NormedAddCommGroup G
inst✝¹ : NormedSpace 𝕜 G
f : ι → E → G
g : E → G
f' : ι → E → E →L[𝕜] G
g' : E → E →L[𝕜] G
x : E
inst✝ : NeBot l
s : Set E
hs : IsOpen s
hf' : TendstoLocallyUniformlyOn f' g' l s
hf : ∀ (n : ι) (x : E), x ∈ s → HasFDerivAt (f n) (f' n x) x
hfg : ∀ (x : E), x ∈ s → Tendsto (fun n => f n x) l (𝓝 (g x))
hx : x ∈ s
h1 : s ∈ 𝓝 x
h3 : Set.univ ×ˢ s ∈ l ×ˢ 𝓝 x
h4 : ∀ᶠ (n : ι × E) in l ×ˢ 𝓝 x, HasFDerivAt (f n.fst) (f' n.fst n.snd) n.snd
⊢ TendstoUniformlyOnFilter f' g' l (𝓝 x)
[PROOFSTEP]
simpa [IsOpen.nhdsWithin_eq hs hx] using tendstoLocallyUniformlyOn_iff_filter.mp hf' x hx
[GOAL]
ι : Type u_1
l : Filter ι
E : Type u_2
inst✝⁵ : NormedAddCommGroup E
𝕜 : Type u_3
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedSpace 𝕜 E
G : Type u_4
inst✝² : NormedAddCommGroup G
inst✝¹ : NormedSpace 𝕜 G
f : ι → E → G
g : E → G
f' : ι → E → E →L[𝕜] G
g' : E → E →L[𝕜] G
x : E
inst✝ : NeBot l
s : Set E
hs : IsOpen s
hf' : TendstoLocallyUniformlyOn (fderiv 𝕜 ∘ f) g' l s
hf : ∀ (n : ι), DifferentiableOn 𝕜 (f n) s
hfg : ∀ (x : E), x ∈ s → Tendsto (fun n => f n x) l (𝓝 (g x))
hx : x ∈ s
⊢ HasFDerivAt g (g' x) x
[PROOFSTEP]
refine' hasFDerivAt_of_tendstoLocallyUniformlyOn hs hf' (fun n z hz => _) hfg hx
[GOAL]
ι : Type u_1
l : Filter ι
E : Type u_2
inst✝⁵ : NormedAddCommGroup E
𝕜 : Type u_3
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedSpace 𝕜 E
G : Type u_4
inst✝² : NormedAddCommGroup G
inst✝¹ : NormedSpace 𝕜 G
f : ι → E → G
g : E → G
f' : ι → E → E →L[𝕜] G
g' : E → E →L[𝕜] G
x : E
inst✝ : NeBot l
s : Set E
hs : IsOpen s
hf' : TendstoLocallyUniformlyOn (fderiv 𝕜 ∘ f) g' l s
hf : ∀ (n : ι), DifferentiableOn 𝕜 (f n) s
hfg : ∀ (x : E), x ∈ s → Tendsto (fun n => f n x) l (𝓝 (g x))
hx : x ∈ s
n : ι
z : E
hz : z ∈ s
⊢ HasFDerivAt (fun x => f n x) ((fderiv 𝕜 ∘ f) n z) z
[PROOFSTEP]
exact ((hf n z hz).differentiableAt (hs.mem_nhds hz)).hasFDerivAt
[GOAL]
ι : Type u_1
l : Filter ι
E : Type u_2
inst✝⁵ : NormedAddCommGroup E
𝕜 : Type u_3
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedSpace 𝕜 E
G : Type u_4
inst✝² : NormedAddCommGroup G
inst✝¹ : NormedSpace 𝕜 G
f : ι → E → G
g : E → G
f' : ι → E → E →L[𝕜] G
g' : E → E →L[𝕜] G
x : E
inst✝ : NeBot l
hf' : TendstoUniformly f' g' l
hf : ∀ (n : ι) (x : E), HasFDerivAt (f n) (f' n x) x
hfg : ∀ (x : E), Tendsto (fun n => f n x) l (𝓝 (g x))
⊢ ∀ (x : E), HasFDerivAt g (g' x) x
[PROOFSTEP]
intro x
[GOAL]
ι : Type u_1
l : Filter ι
E : Type u_2
inst✝⁵ : NormedAddCommGroup E
𝕜 : Type u_3
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedSpace 𝕜 E
G : Type u_4
inst✝² : NormedAddCommGroup G
inst✝¹ : NormedSpace 𝕜 G
f : ι → E → G
g : E → G
f' : ι → E → E →L[𝕜] G
g' : E → E →L[𝕜] G
x✝ : E
inst✝ : NeBot l
hf' : TendstoUniformly f' g' l
hf : ∀ (n : ι) (x : E), HasFDerivAt (f n) (f' n x) x
hfg : ∀ (x : E), Tendsto (fun n => f n x) l (𝓝 (g x))
x : E
⊢ HasFDerivAt g (g' x) x
[PROOFSTEP]
have hf : ∀ n : ι, ∀ x : E, x ∈ Set.univ → HasFDerivAt (f n) (f' n x) x := by simp [hf]
[GOAL]
ι : Type u_1
l : Filter ι
E : Type u_2
inst✝⁵ : NormedAddCommGroup E
𝕜 : Type u_3
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedSpace 𝕜 E
G : Type u_4
inst✝² : NormedAddCommGroup G
inst✝¹ : NormedSpace 𝕜 G
f : ι → E → G
g : E → G
f' : ι → E → E →L[𝕜] G
g' : E → E →L[𝕜] G
x✝ : E
inst✝ : NeBot l
hf' : TendstoUniformly f' g' l
hf : ∀ (n : ι) (x : E), HasFDerivAt (f n) (f' n x) x
hfg : ∀ (x : E), Tendsto (fun n => f n x) l (𝓝 (g x))
x : E
⊢ ∀ (n : ι) (x : E), x ∈ Set.univ → HasFDerivAt (f n) (f' n x) x
[PROOFSTEP]
simp [hf]
[GOAL]
ι : Type u_1
l : Filter ι
E : Type u_2
inst✝⁵ : NormedAddCommGroup E
𝕜 : Type u_3
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedSpace 𝕜 E
G : Type u_4
inst✝² : NormedAddCommGroup G
inst✝¹ : NormedSpace 𝕜 G
f : ι → E → G
g : E → G
f' : ι → E → E →L[𝕜] G
g' : E → E →L[𝕜] G
x✝ : E
inst✝ : NeBot l
hf' : TendstoUniformly f' g' l
hf✝ : ∀ (n : ι) (x : E), HasFDerivAt (f n) (f' n x) x
hfg : ∀ (x : E), Tendsto (fun n => f n x) l (𝓝 (g x))
x : E
hf : ∀ (n : ι) (x : E), x ∈ Set.univ → HasFDerivAt (f n) (f' n x) x
⊢ HasFDerivAt g (g' x) x
[PROOFSTEP]
have hfg : ∀ x : E, x ∈ Set.univ → Tendsto (fun n => f n x) l (𝓝 (g x)) := by simp [hfg]
[GOAL]
ι : Type u_1
l : Filter ι
E : Type u_2
inst✝⁵ : NormedAddCommGroup E
𝕜 : Type u_3
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedSpace 𝕜 E
G : Type u_4
inst✝² : NormedAddCommGroup G
inst✝¹ : NormedSpace 𝕜 G
f : ι → E → G
g : E → G
f' : ι → E → E →L[𝕜] G
g' : E → E →L[𝕜] G
x✝ : E
inst✝ : NeBot l
hf' : TendstoUniformly f' g' l
hf✝ : ∀ (n : ι) (x : E), HasFDerivAt (f n) (f' n x) x
hfg : ∀ (x : E), Tendsto (fun n => f n x) l (𝓝 (g x))
x : E
hf : ∀ (n : ι) (x : E), x ∈ Set.univ → HasFDerivAt (f n) (f' n x) x
⊢ ∀ (x : E), x ∈ Set.univ → Tendsto (fun n => f n x) l (𝓝 (g x))
[PROOFSTEP]
simp [hfg]
[GOAL]
ι : Type u_1
l : Filter ι
E : Type u_2
inst✝⁵ : NormedAddCommGroup E
𝕜 : Type u_3
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedSpace 𝕜 E
G : Type u_4
inst✝² : NormedAddCommGroup G
inst✝¹ : NormedSpace 𝕜 G
f : ι → E → G
g : E → G
f' : ι → E → E →L[𝕜] G
g' : E → E →L[𝕜] G
x✝ : E
inst✝ : NeBot l
hf' : TendstoUniformly f' g' l
hf✝ : ∀ (n : ι) (x : E), HasFDerivAt (f n) (f' n x) x
hfg✝ : ∀ (x : E), Tendsto (fun n => f n x) l (𝓝 (g x))
x : E
hf : ∀ (n : ι) (x : E), x ∈ Set.univ → HasFDerivAt (f n) (f' n x) x
hfg : ∀ (x : E), x ∈ Set.univ → Tendsto (fun n => f n x) l (𝓝 (g x))
⊢ HasFDerivAt g (g' x) x
[PROOFSTEP]
have hf' : TendstoUniformlyOn f' g' l Set.univ := by rwa [tendstoUniformlyOn_univ]
[GOAL]
ι : Type u_1
l : Filter ι
E : Type u_2
inst✝⁵ : NormedAddCommGroup E
𝕜 : Type u_3
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedSpace 𝕜 E
G : Type u_4
inst✝² : NormedAddCommGroup G
inst✝¹ : NormedSpace 𝕜 G
f : ι → E → G
g : E → G
f' : ι → E → E →L[𝕜] G
g' : E → E →L[𝕜] G
x✝ : E
inst✝ : NeBot l
hf' : TendstoUniformly f' g' l
hf✝ : ∀ (n : ι) (x : E), HasFDerivAt (f n) (f' n x) x
hfg✝ : ∀ (x : E), Tendsto (fun n => f n x) l (𝓝 (g x))
x : E
hf : ∀ (n : ι) (x : E), x ∈ Set.univ → HasFDerivAt (f n) (f' n x) x
hfg : ∀ (x : E), x ∈ Set.univ → Tendsto (fun n => f n x) l (𝓝 (g x))
⊢ TendstoUniformlyOn f' g' l Set.univ
[PROOFSTEP]
rwa [tendstoUniformlyOn_univ]
[GOAL]
ι : Type u_1
l : Filter ι
E : Type u_2
inst✝⁵ : NormedAddCommGroup E
𝕜 : Type u_3
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedSpace 𝕜 E
G : Type u_4
inst✝² : NormedAddCommGroup G
inst✝¹ : NormedSpace 𝕜 G
f : ι → E → G
g : E → G
f' : ι → E → E →L[𝕜] G
g' : E → E →L[𝕜] G
x✝ : E
inst✝ : NeBot l
hf'✝ : TendstoUniformly f' g' l
hf✝ : ∀ (n : ι) (x : E), HasFDerivAt (f n) (f' n x) x
hfg✝ : ∀ (x : E), Tendsto (fun n => f n x) l (𝓝 (g x))
x : E
hf : ∀ (n : ι) (x : E), x ∈ Set.univ → HasFDerivAt (f n) (f' n x) x
hfg : ∀ (x : E), x ∈ Set.univ → Tendsto (fun n => f n x) l (𝓝 (g x))
hf' : TendstoUniformlyOn f' g' l Set.univ
⊢ HasFDerivAt g (g' x) x
[PROOFSTEP]
refine' hasFDerivAt_of_tendstoUniformlyOn isOpen_univ hf' hf hfg x (Set.mem_univ x)
[GOAL]
ι : Type u_1
l : Filter ι
𝕜 : Type u_2
inst✝² : IsROrC 𝕜
G : Type u_3
inst✝¹ : NormedAddCommGroup G
inst✝ : NormedSpace 𝕜 G
f : ι → 𝕜 → G
g : 𝕜 → G
f' : ι → 𝕜 → G
g' : 𝕜 → G
x : 𝕜
l' : Filter 𝕜
hf' : UniformCauchySeqOnFilter f' l l'
⊢ UniformCauchySeqOnFilter (fun n z => ContinuousLinearMap.smulRight 1 (f' n z)) l l'
[PROOFSTEP]
rw [SeminormedAddGroup.uniformCauchySeqOnFilter_iff_tendstoUniformlyOnFilter_zero,
  Metric.tendstoUniformlyOnFilter_iff] at hf' ⊢
[GOAL]
ι : Type u_1
l : Filter ι
𝕜 : Type u_2
inst✝² : IsROrC 𝕜
G : Type u_3
inst✝¹ : NormedAddCommGroup G
inst✝ : NormedSpace 𝕜 G
f : ι → 𝕜 → G
g : 𝕜 → G
f' : ι → 𝕜 → G
g' : 𝕜 → G
x : 𝕜
l' : Filter 𝕜
hf' :
  ∀ (ε : ℝ),
    ε > 0 →
      ∀ᶠ (n : (ι × ι) × 𝕜) in (l ×ˢ l) ×ˢ l', dist (OfNat.ofNat 0 n.snd) (f' n.fst.fst n.snd - f' n.fst.snd n.snd) < ε
⊢ ∀ (ε : ℝ),
    ε > 0 →
      ∀ᶠ (n : (ι × ι) × 𝕜) in (l ×ˢ l) ×ˢ l',
        dist (OfNat.ofNat 0 n.snd)
            (ContinuousLinearMap.smulRight 1 (f' n.fst.fst n.snd) -
              ContinuousLinearMap.smulRight 1 (f' n.fst.snd n.snd)) <
          ε
[PROOFSTEP]
intro ε hε
[GOAL]
ι : Type u_1
l : Filter ι
𝕜 : Type u_2
inst✝² : IsROrC 𝕜
G : Type u_3
inst✝¹ : NormedAddCommGroup G
inst✝ : NormedSpace 𝕜 G
f : ι → 𝕜 → G
g : 𝕜 → G
f' : ι → 𝕜 → G
g' : 𝕜 → G
x : 𝕜
l' : Filter 𝕜
hf' :
  ∀ (ε : ℝ),
    ε > 0 →
      ∀ᶠ (n : (ι × ι) × 𝕜) in (l ×ˢ l) ×ˢ l', dist (OfNat.ofNat 0 n.snd) (f' n.fst.fst n.snd - f' n.fst.snd n.snd) < ε
ε : ℝ
hε : ε > 0
⊢ ∀ᶠ (n : (ι × ι) × 𝕜) in (l ×ˢ l) ×ˢ l',
    dist (OfNat.ofNat 0 n.snd)
        (ContinuousLinearMap.smulRight 1 (f' n.fst.fst n.snd) - ContinuousLinearMap.smulRight 1 (f' n.fst.snd n.snd)) <
      ε
[PROOFSTEP]
obtain ⟨q, hq, hq'⟩ := exists_between hε.lt
[GOAL]
case intro.intro
ι : Type u_1
l : Filter ι
𝕜 : Type u_2
inst✝² : IsROrC 𝕜
G : Type u_3
inst✝¹ : NormedAddCommGroup G
inst✝ : NormedSpace 𝕜 G
f : ι → 𝕜 → G
g : 𝕜 → G
f' : ι → 𝕜 → G
g' : 𝕜 → G
x : 𝕜
l' : Filter 𝕜
hf' :
  ∀ (ε : ℝ),
    ε > 0 →
      ∀ᶠ (n : (ι × ι) × 𝕜) in (l ×ˢ l) ×ˢ l', dist (OfNat.ofNat 0 n.snd) (f' n.fst.fst n.snd - f' n.fst.snd n.snd) < ε
ε : ℝ
hε : ε > 0
q : ℝ
hq : 0 < q
hq' : q < ε
⊢ ∀ᶠ (n : (ι × ι) × 𝕜) in (l ×ˢ l) ×ˢ l',
    dist (OfNat.ofNat 0 n.snd)
        (ContinuousLinearMap.smulRight 1 (f' n.fst.fst n.snd) - ContinuousLinearMap.smulRight 1 (f' n.fst.snd n.snd)) <
      ε
[PROOFSTEP]
apply (hf' q hq).mono
[GOAL]
case intro.intro
ι : Type u_1
l : Filter ι
𝕜 : Type u_2
inst✝² : IsROrC 𝕜
G : Type u_3
inst✝¹ : NormedAddCommGroup G
inst✝ : NormedSpace 𝕜 G
f : ι → 𝕜 → G
g : 𝕜 → G
f' : ι → 𝕜 → G
g' : 𝕜 → G
x : 𝕜
l' : Filter 𝕜
hf' :
  ∀ (ε : ℝ),
    ε > 0 →
      ∀ᶠ (n : (ι × ι) × 𝕜) in (l ×ˢ l) ×ˢ l', dist (OfNat.ofNat 0 n.snd) (f' n.fst.fst n.snd - f' n.fst.snd n.snd) < ε
ε : ℝ
hε : ε > 0
q : ℝ
hq : 0 < q
hq' : q < ε
⊢ ∀ (x : (ι × ι) × 𝕜),
    dist (OfNat.ofNat 0 x.snd) (f' x.fst.fst x.snd - f' x.fst.snd x.snd) < q →
      dist (OfNat.ofNat 0 x.snd)
          (ContinuousLinearMap.smulRight 1 (f' x.fst.fst x.snd) -
            ContinuousLinearMap.smulRight 1 (f' x.fst.snd x.snd)) <
        ε
[PROOFSTEP]
intro n hn
[GOAL]
case intro.intro
ι : Type u_1
l : Filter ι
𝕜 : Type u_2
inst✝² : IsROrC 𝕜
G : Type u_3
inst✝¹ : NormedAddCommGroup G
inst✝ : NormedSpace 𝕜 G
f : ι → 𝕜 → G
g : 𝕜 → G
f' : ι → 𝕜 → G
g' : 𝕜 → G
x : 𝕜
l' : Filter 𝕜
hf' :
  ∀ (ε : ℝ),
    ε > 0 →
      ∀ᶠ (n : (ι × ι) × 𝕜) in (l ×ˢ l) ×ˢ l', dist (OfNat.ofNat 0 n.snd) (f' n.fst.fst n.snd - f' n.fst.snd n.snd) < ε
ε : ℝ
hε : ε > 0
q : ℝ
hq : 0 < q
hq' : q < ε
n : (ι × ι) × 𝕜
hn : dist (OfNat.ofNat 0 n.snd) (f' n.fst.fst n.snd - f' n.fst.snd n.snd) < q
⊢ dist (OfNat.ofNat 0 n.snd)
      (ContinuousLinearMap.smulRight 1 (f' n.fst.fst n.snd) - ContinuousLinearMap.smulRight 1 (f' n.fst.snd n.snd)) <
    ε
[PROOFSTEP]
refine' lt_of_le_of_lt _ hq'
[GOAL]
case intro.intro
ι : Type u_1
l : Filter ι
𝕜 : Type u_2
inst✝² : IsROrC 𝕜
G : Type u_3
inst✝¹ : NormedAddCommGroup G
inst✝ : NormedSpace 𝕜 G
f : ι → 𝕜 → G
g : 𝕜 → G
f' : ι → 𝕜 → G
g' : 𝕜 → G
x : 𝕜
l' : Filter 𝕜
hf' :
  ∀ (ε : ℝ),
    ε > 0 →
      ∀ᶠ (n : (ι × ι) × 𝕜) in (l ×ˢ l) ×ˢ l', dist (OfNat.ofNat 0 n.snd) (f' n.fst.fst n.snd - f' n.fst.snd n.snd) < ε
ε : ℝ
hε : ε > 0
q : ℝ
hq : 0 < q
hq' : q < ε
n : (ι × ι) × 𝕜
hn : dist (OfNat.ofNat 0 n.snd) (f' n.fst.fst n.snd - f' n.fst.snd n.snd) < q
⊢ dist (OfNat.ofNat 0 n.snd)
      (ContinuousLinearMap.smulRight 1 (f' n.fst.fst n.snd) - ContinuousLinearMap.smulRight 1 (f' n.fst.snd n.snd)) ≤
    q
[PROOFSTEP]
simp only [dist_eq_norm, Pi.zero_apply, zero_sub, norm_neg] at hn ⊢
[GOAL]
case intro.intro
ι : Type u_1
l : Filter ι
𝕜 : Type u_2
inst✝² : IsROrC 𝕜
G : Type u_3
inst✝¹ : NormedAddCommGroup G
inst✝ : NormedSpace 𝕜 G
f : ι → 𝕜 → G
g : 𝕜 → G
f' : ι → 𝕜 → G
g' : 𝕜 → G
x : 𝕜
l' : Filter 𝕜
hf' :
  ∀ (ε : ℝ),
    ε > 0 →
      ∀ᶠ (n : (ι × ι) × 𝕜) in (l ×ˢ l) ×ˢ l', dist (OfNat.ofNat 0 n.snd) (f' n.fst.fst n.snd - f' n.fst.snd n.snd) < ε
ε : ℝ
hε : ε > 0
q : ℝ
hq : 0 < q
hq' : q < ε
n : (ι × ι) × 𝕜
hn : ‖f' n.fst.fst n.snd - f' n.fst.snd n.snd‖ < q
⊢ ‖ContinuousLinearMap.smulRight 1 (f' n.fst.fst n.snd) - ContinuousLinearMap.smulRight 1 (f' n.fst.snd n.snd)‖ ≤ q
[PROOFSTEP]
refine' ContinuousLinearMap.op_norm_le_bound _ hq.le _
[GOAL]
case intro.intro
ι : Type u_1
l : Filter ι
𝕜 : Type u_2
inst✝² : IsROrC 𝕜
G : Type u_3
inst✝¹ : NormedAddCommGroup G
inst✝ : NormedSpace 𝕜 G
f : ι → 𝕜 → G
g : 𝕜 → G
f' : ι → 𝕜 → G
g' : 𝕜 → G
x : 𝕜
l' : Filter 𝕜
hf' :
  ∀ (ε : ℝ),
    ε > 0 →
      ∀ᶠ (n : (ι × ι) × 𝕜) in (l ×ˢ l) ×ˢ l', dist (OfNat.ofNat 0 n.snd) (f' n.fst.fst n.snd - f' n.fst.snd n.snd) < ε
ε : ℝ
hε : ε > 0
q : ℝ
hq : 0 < q
hq' : q < ε
n : (ι × ι) × 𝕜
hn : ‖f' n.fst.fst n.snd - f' n.fst.snd n.snd‖ < q
⊢ ∀ (x : 𝕜),
    ‖↑(ContinuousLinearMap.smulRight 1 (f' n.fst.fst n.snd) - ContinuousLinearMap.smulRight 1 (f' n.fst.snd n.snd)) x‖ ≤
      q * ‖x‖
[PROOFSTEP]
intro z
[GOAL]
case intro.intro
ι : Type u_1
l : Filter ι
𝕜 : Type u_2
inst✝² : IsROrC 𝕜
G : Type u_3
inst✝¹ : NormedAddCommGroup G
inst✝ : NormedSpace 𝕜 G
f : ι → 𝕜 → G
g : 𝕜 → G
f' : ι → 𝕜 → G
g' : 𝕜 → G
x : 𝕜
l' : Filter 𝕜
hf' :
  ∀ (ε : ℝ),
    ε > 0 →
      ∀ᶠ (n : (ι × ι) × 𝕜) in (l ×ˢ l) ×ˢ l', dist (OfNat.ofNat 0 n.snd) (f' n.fst.fst n.snd - f' n.fst.snd n.snd) < ε
ε : ℝ
hε : ε > 0
q : ℝ
hq : 0 < q
hq' : q < ε
n : (ι × ι) × 𝕜
hn : ‖f' n.fst.fst n.snd - f' n.fst.snd n.snd‖ < q
z : 𝕜
⊢ ‖↑(ContinuousLinearMap.smulRight 1 (f' n.fst.fst n.snd) - ContinuousLinearMap.smulRight 1 (f' n.fst.snd n.snd)) z‖ ≤
    q * ‖z‖
[PROOFSTEP]
simp only [ContinuousLinearMap.coe_sub', Pi.sub_apply, ContinuousLinearMap.smulRight_apply,
  ContinuousLinearMap.one_apply]
[GOAL]
case intro.intro
ι : Type u_1
l : Filter ι
𝕜 : Type u_2
inst✝² : IsROrC 𝕜
G : Type u_3
inst✝¹ : NormedAddCommGroup G
inst✝ : NormedSpace 𝕜 G
f : ι → 𝕜 → G
g : 𝕜 → G
f' : ι → 𝕜 → G
g' : 𝕜 → G
x : 𝕜
l' : Filter 𝕜
hf' :
  ∀ (ε : ℝ),
    ε > 0 →
      ∀ᶠ (n : (ι × ι) × 𝕜) in (l ×ˢ l) ×ˢ l', dist (OfNat.ofNat 0 n.snd) (f' n.fst.fst n.snd - f' n.fst.snd n.snd) < ε
ε : ℝ
hε : ε > 0
q : ℝ
hq : 0 < q
hq' : q < ε
n : (ι × ι) × 𝕜
hn : ‖f' n.fst.fst n.snd - f' n.fst.snd n.snd‖ < q
z : 𝕜
⊢ ‖z • f' n.fst.fst n.snd - z • f' n.fst.snd n.snd‖ ≤ q * ‖z‖
[PROOFSTEP]
rw [← smul_sub, norm_smul, mul_comm]
[GOAL]
case intro.intro
ι : Type u_1
l : Filter ι
𝕜 : Type u_2
inst✝² : IsROrC 𝕜
G : Type u_3
inst✝¹ : NormedAddCommGroup G
inst✝ : NormedSpace 𝕜 G
f : ι → 𝕜 → G
g : 𝕜 → G
f' : ι → 𝕜 → G
g' : 𝕜 → G
x : 𝕜
l' : Filter 𝕜
hf' :
  ∀ (ε : ℝ),
    ε > 0 →
      ∀ᶠ (n : (ι × ι) × 𝕜) in (l ×ˢ l) ×ˢ l', dist (OfNat.ofNat 0 n.snd) (f' n.fst.fst n.snd - f' n.fst.snd n.snd) < ε
ε : ℝ
hε : ε > 0
q : ℝ
hq : 0 < q
hq' : q < ε
n : (ι × ι) × 𝕜
hn : ‖f' n.fst.fst n.snd - f' n.fst.snd n.snd‖ < q
z : 𝕜
⊢ ‖f' n.fst.fst n.snd - f' n.fst.snd n.snd‖ * ‖z‖ ≤ q * ‖z‖
[PROOFSTEP]
gcongr
[GOAL]
ι : Type u_1
l : Filter ι
𝕜 : Type u_2
inst✝² : IsROrC 𝕜
G : Type u_3
inst✝¹ : NormedAddCommGroup G
inst✝ : NormedSpace 𝕜 G
f : ι → 𝕜 → G
g : 𝕜 → G
f' : ι → 𝕜 → G
g' : 𝕜 → G
x : 𝕜
hf' : UniformCauchySeqOnFilter f' l (𝓝 x)
hf : ∀ᶠ (n : ι × 𝕜) in l ×ˢ 𝓝 x, HasDerivAt (f n.fst) (f' n.fst n.snd) n.snd
hfg : Cauchy (map (fun n => f n x) l)
⊢ UniformCauchySeqOnFilter f l (𝓝 x)
[PROOFSTEP]
simp_rw [hasDerivAt_iff_hasFDerivAt] at hf
[GOAL]
ι : Type u_1
l : Filter ι
𝕜 : Type u_2
inst✝² : IsROrC 𝕜
G : Type u_3
inst✝¹ : NormedAddCommGroup G
inst✝ : NormedSpace 𝕜 G
f : ι → 𝕜 → G
g : 𝕜 → G
f' : ι → 𝕜 → G
g' : 𝕜 → G
x : 𝕜
hf' : UniformCauchySeqOnFilter f' l (𝓝 x)
hfg : Cauchy (map (fun n => f n x) l)
hf : ∀ᶠ (n : ι × 𝕜) in l ×ˢ 𝓝 x, HasFDerivAt (f n.fst) (ContinuousLinearMap.smulRight 1 (f' n.fst n.snd)) n.snd
⊢ UniformCauchySeqOnFilter f l (𝓝 x)
[PROOFSTEP]
exact uniformCauchySeqOnFilter_of_fderiv hf'.one_smulRight hf hfg
[GOAL]
ι : Type u_1
l : Filter ι
𝕜 : Type u_2
inst✝² : IsROrC 𝕜
G : Type u_3
inst✝¹ : NormedAddCommGroup G
inst✝ : NormedSpace 𝕜 G
f : ι → 𝕜 → G
g : 𝕜 → G
f' : ι → 𝕜 → G
g' : 𝕜 → G
x : 𝕜
r : ℝ
hf' : UniformCauchySeqOn f' l (Metric.ball x r)
hf : ∀ (n : ι) (y : 𝕜), y ∈ Metric.ball x r → HasDerivAt (f n) (f' n y) y
hfg : Cauchy (map (fun n => f n x) l)
⊢ UniformCauchySeqOn f l (Metric.ball x r)
[PROOFSTEP]
simp_rw [hasDerivAt_iff_hasFDerivAt] at hf
[GOAL]
ι : Type u_1
l : Filter ι
𝕜 : Type u_2
inst✝² : IsROrC 𝕜
G : Type u_3
inst✝¹ : NormedAddCommGroup G
inst✝ : NormedSpace 𝕜 G
f : ι → 𝕜 → G
g : 𝕜 → G
f' : ι → 𝕜 → G
g' : 𝕜 → G
x : 𝕜
r : ℝ
hf' : UniformCauchySeqOn f' l (Metric.ball x r)
hfg : Cauchy (map (fun n => f n x) l)
hf : ∀ (n : ι) (y : 𝕜), y ∈ Metric.ball x r → HasFDerivAt (f n) (ContinuousLinearMap.smulRight 1 (f' n y)) y
⊢ UniformCauchySeqOn f l (Metric.ball x r)
[PROOFSTEP]
rw [uniformCauchySeqOn_iff_uniformCauchySeqOnFilter] at hf'
[GOAL]
ι : Type u_1
l : Filter ι
𝕜 : Type u_2
inst✝² : IsROrC 𝕜
G : Type u_3
inst✝¹ : NormedAddCommGroup G
inst✝ : NormedSpace 𝕜 G
f : ι → 𝕜 → G
g : 𝕜 → G
f' : ι → 𝕜 → G
g' : 𝕜 → G
x : 𝕜
r : ℝ
hf' : UniformCauchySeqOnFilter f' l (𝓟 (Metric.ball x r))
hfg : Cauchy (map (fun n => f n x) l)
hf : ∀ (n : ι) (y : 𝕜), y ∈ Metric.ball x r → HasFDerivAt (f n) (ContinuousLinearMap.smulRight 1 (f' n y)) y
⊢ UniformCauchySeqOn f l (Metric.ball x r)
[PROOFSTEP]
have hf' : UniformCauchySeqOn (fun n => fun z => (1 : 𝕜 →L[𝕜] 𝕜).smulRight (f' n z)) l (Metric.ball x r) :=
  by
  rw [uniformCauchySeqOn_iff_uniformCauchySeqOnFilter]
  exact hf'.one_smulRight
[GOAL]
ι : Type u_1
l : Filter ι
𝕜 : Type u_2
inst✝² : IsROrC 𝕜
G : Type u_3
inst✝¹ : NormedAddCommGroup G
inst✝ : NormedSpace 𝕜 G
f : ι → 𝕜 → G
g : 𝕜 → G
f' : ι → 𝕜 → G
g' : 𝕜 → G
x : 𝕜
r : ℝ
hf' : UniformCauchySeqOnFilter f' l (𝓟 (Metric.ball x r))
hfg : Cauchy (map (fun n => f n x) l)
hf : ∀ (n : ι) (y : 𝕜), y ∈ Metric.ball x r → HasFDerivAt (f n) (ContinuousLinearMap.smulRight 1 (f' n y)) y
⊢ UniformCauchySeqOn (fun n z => ContinuousLinearMap.smulRight 1 (f' n z)) l (Metric.ball x r)
[PROOFSTEP]
rw [uniformCauchySeqOn_iff_uniformCauchySeqOnFilter]
[GOAL]
ι : Type u_1
l : Filter ι
𝕜 : Type u_2
inst✝² : IsROrC 𝕜
G : Type u_3
inst✝¹ : NormedAddCommGroup G
inst✝ : NormedSpace 𝕜 G
f : ι → 𝕜 → G
g : 𝕜 → G
f' : ι → 𝕜 → G
g' : 𝕜 → G
x : 𝕜
r : ℝ
hf' : UniformCauchySeqOnFilter f' l (𝓟 (Metric.ball x r))
hfg : Cauchy (map (fun n => f n x) l)
hf : ∀ (n : ι) (y : 𝕜), y ∈ Metric.ball x r → HasFDerivAt (f n) (ContinuousLinearMap.smulRight 1 (f' n y)) y
⊢ UniformCauchySeqOnFilter (fun n z => ContinuousLinearMap.smulRight 1 (f' n z)) l (𝓟 (Metric.ball x r))
[PROOFSTEP]
exact hf'.one_smulRight
[GOAL]
ι : Type u_1
l : Filter ι
𝕜 : Type u_2
inst✝² : IsROrC 𝕜
G : Type u_3
inst✝¹ : NormedAddCommGroup G
inst✝ : NormedSpace 𝕜 G
f : ι → 𝕜 → G
g : 𝕜 → G
f' : ι → 𝕜 → G
g' : 𝕜 → G
x : 𝕜
r : ℝ
hf'✝ : UniformCauchySeqOnFilter f' l (𝓟 (Metric.ball x r))
hfg : Cauchy (map (fun n => f n x) l)
hf : ∀ (n : ι) (y : 𝕜), y ∈ Metric.ball x r → HasFDerivAt (f n) (ContinuousLinearMap.smulRight 1 (f' n y)) y
hf' : UniformCauchySeqOn (fun n z => ContinuousLinearMap.smulRight 1 (f' n z)) l (Metric.ball x r)
⊢ UniformCauchySeqOn f l (Metric.ball x r)
[PROOFSTEP]
exact uniformCauchySeqOn_ball_of_fderiv hf' hf hfg
[GOAL]
ι : Type u_1
l : Filter ι
𝕜 : Type u_2
inst✝³ : IsROrC 𝕜
G : Type u_3
inst✝² : NormedAddCommGroup G
inst✝¹ : NormedSpace 𝕜 G
f : ι → 𝕜 → G
g : 𝕜 → G
f' : ι → 𝕜 → G
g' : 𝕜 → G
x : 𝕜
inst✝ : NeBot l
hf' : TendstoUniformlyOnFilter f' g' l (𝓝 x)
hf : ∀ᶠ (n : ι × 𝕜) in l ×ˢ 𝓝 x, HasDerivAt (f n.fst) (f' n.fst n.snd) n.snd
hfg : ∀ᶠ (y : 𝕜) in 𝓝 x, Tendsto (fun n => f n y) l (𝓝 (g y))
⊢ HasDerivAt g (g' x) x
[PROOFSTEP]
let F' n z := (1 : 𝕜 →L[𝕜] 𝕜).smulRight (f' n z)
[GOAL]
ι : Type u_1
l : Filter ι
𝕜 : Type u_2
inst✝³ : IsROrC 𝕜
G : Type u_3
inst✝² : NormedAddCommGroup G
inst✝¹ : NormedSpace 𝕜 G
f : ι → 𝕜 → G
g : 𝕜 → G
f' : ι → 𝕜 → G
g' : 𝕜 → G
x : 𝕜
inst✝ : NeBot l
hf' : TendstoUniformlyOnFilter f' g' l (𝓝 x)
hf : ∀ᶠ (n : ι × 𝕜) in l ×ˢ 𝓝 x, HasDerivAt (f n.fst) (f' n.fst n.snd) n.snd
hfg : ∀ᶠ (y : 𝕜) in 𝓝 x, Tendsto (fun n => f n y) l (𝓝 (g y))
F' : ι → 𝕜 → 𝕜 →L[𝕜] G := fun n z => ContinuousLinearMap.smulRight 1 (f' n z)
⊢ HasDerivAt g (g' x) x
[PROOFSTEP]
let G' z := (1 : 𝕜 →L[𝕜] 𝕜).smulRight (g' z)
[GOAL]
ι : Type u_1
l : Filter ι
𝕜 : Type u_2
inst✝³ : IsROrC 𝕜
G : Type u_3
inst✝² : NormedAddCommGroup G
inst✝¹ : NormedSpace 𝕜 G
f : ι → 𝕜 → G
g : 𝕜 → G
f' : ι → 𝕜 → G
g' : 𝕜 → G
x : 𝕜
inst✝ : NeBot l
hf' : TendstoUniformlyOnFilter f' g' l (𝓝 x)
hf : ∀ᶠ (n : ι × 𝕜) in l ×ˢ 𝓝 x, HasDerivAt (f n.fst) (f' n.fst n.snd) n.snd
hfg : ∀ᶠ (y : 𝕜) in 𝓝 x, Tendsto (fun n => f n y) l (𝓝 (g y))
F' : ι → 𝕜 → 𝕜 →L[𝕜] G := fun n z => ContinuousLinearMap.smulRight 1 (f' n z)
G' : 𝕜 → 𝕜 →L[𝕜] G := fun z => ContinuousLinearMap.smulRight 1 (g' z)
⊢ HasDerivAt g (g' x) x
[PROOFSTEP]
simp_rw [hasDerivAt_iff_hasFDerivAt] at hf ⊢
  -- Now we need to rewrite hf' in terms of continuous_linear_maps. The tricky part is that
    -- operator norms are written in terms of `≤` whereas metrics are written in terms of `<`. So we
    -- need to shrink `ε` utilizing the archimedean property of `ℝ`
[GOAL]
ι : Type u_1
l : Filter ι
𝕜 : Type u_2
inst✝³ : IsROrC 𝕜
G : Type u_3
inst✝² : NormedAddCommGroup G
inst✝¹ : NormedSpace 𝕜 G
f : ι → 𝕜 → G
g : 𝕜 → G
f' : ι → 𝕜 → G
g' : 𝕜 → G
x : 𝕜
inst✝ : NeBot l
hf' : TendstoUniformlyOnFilter f' g' l (𝓝 x)
hfg : ∀ᶠ (y : 𝕜) in 𝓝 x, Tendsto (fun n => f n y) l (𝓝 (g y))
F' : ι → 𝕜 → 𝕜 →L[𝕜] G := fun n z => ContinuousLinearMap.smulRight 1 (f' n z)
G' : 𝕜 → 𝕜 →L[𝕜] G := fun z => ContinuousLinearMap.smulRight 1 (g' z)
hf : ∀ᶠ (n : ι × 𝕜) in l ×ˢ 𝓝 x, HasFDerivAt (f n.fst) (ContinuousLinearMap.smulRight 1 (f' n.fst n.snd)) n.snd
⊢ HasFDerivAt g (ContinuousLinearMap.smulRight 1 (g' x)) x
[PROOFSTEP]
have hf' : TendstoUniformlyOnFilter F' G' l (𝓝 x) :=
  by
  rw [Metric.tendstoUniformlyOnFilter_iff] at hf' ⊢
  intro ε hε
  obtain ⟨q, hq, hq'⟩ := exists_between hε.lt
  apply (hf' q hq).mono
  intro n hn
  refine' lt_of_le_of_lt _ hq'
  simp only [dist_eq_norm] at hn ⊢
  refine' ContinuousLinearMap.op_norm_le_bound _ hq.le _
  intro z
  simp only [ContinuousLinearMap.coe_sub', Pi.sub_apply, ContinuousLinearMap.smulRight_apply,
    ContinuousLinearMap.one_apply]
  rw [← smul_sub, norm_smul, mul_comm]
  gcongr
[GOAL]
ι : Type u_1
l : Filter ι
𝕜 : Type u_2
inst✝³ : IsROrC 𝕜
G : Type u_3
inst✝² : NormedAddCommGroup G
inst✝¹ : NormedSpace 𝕜 G
f : ι → 𝕜 → G
g : 𝕜 → G
f' : ι → 𝕜 → G
g' : 𝕜 → G
x : 𝕜
inst✝ : NeBot l
hf' : TendstoUniformlyOnFilter f' g' l (𝓝 x)
hfg : ∀ᶠ (y : 𝕜) in 𝓝 x, Tendsto (fun n => f n y) l (𝓝 (g y))
F' : ι → 𝕜 → 𝕜 →L[𝕜] G := fun n z => ContinuousLinearMap.smulRight 1 (f' n z)
G' : 𝕜 → 𝕜 →L[𝕜] G := fun z => ContinuousLinearMap.smulRight 1 (g' z)
hf : ∀ᶠ (n : ι × 𝕜) in l ×ˢ 𝓝 x, HasFDerivAt (f n.fst) (ContinuousLinearMap.smulRight 1 (f' n.fst n.snd)) n.snd
⊢ TendstoUniformlyOnFilter F' G' l (𝓝 x)
[PROOFSTEP]
rw [Metric.tendstoUniformlyOnFilter_iff] at hf' ⊢
[GOAL]
ι : Type u_1
l : Filter ι
𝕜 : Type u_2
inst✝³ : IsROrC 𝕜
G : Type u_3
inst✝² : NormedAddCommGroup G
inst✝¹ : NormedSpace 𝕜 G
f : ι → 𝕜 → G
g : 𝕜 → G
f' : ι → 𝕜 → G
g' : 𝕜 → G
x : 𝕜
inst✝ : NeBot l
hf' : ∀ (ε : ℝ), ε > 0 → ∀ᶠ (n : ι × 𝕜) in l ×ˢ 𝓝 x, dist (g' n.snd) (f' n.fst n.snd) < ε
hfg : ∀ᶠ (y : 𝕜) in 𝓝 x, Tendsto (fun n => f n y) l (𝓝 (g y))
F' : ι → 𝕜 → 𝕜 →L[𝕜] G := fun n z => ContinuousLinearMap.smulRight 1 (f' n z)
G' : 𝕜 → 𝕜 →L[𝕜] G := fun z => ContinuousLinearMap.smulRight 1 (g' z)
hf : ∀ᶠ (n : ι × 𝕜) in l ×ˢ 𝓝 x, HasFDerivAt (f n.fst) (ContinuousLinearMap.smulRight 1 (f' n.fst n.snd)) n.snd
⊢ ∀ (ε : ℝ), ε > 0 → ∀ᶠ (n : ι × 𝕜) in l ×ˢ 𝓝 x, dist (G' n.snd) (F' n.fst n.snd) < ε
[PROOFSTEP]
intro ε hε
[GOAL]
ι : Type u_1
l : Filter ι
𝕜 : Type u_2
inst✝³ : IsROrC 𝕜
G : Type u_3
inst✝² : NormedAddCommGroup G
inst✝¹ : NormedSpace 𝕜 G
f : ι → 𝕜 → G
g : 𝕜 → G
f' : ι → 𝕜 → G
g' : 𝕜 → G
x : 𝕜
inst✝ : NeBot l
hf' : ∀ (ε : ℝ), ε > 0 → ∀ᶠ (n : ι × 𝕜) in l ×ˢ 𝓝 x, dist (g' n.snd) (f' n.fst n.snd) < ε
hfg : ∀ᶠ (y : 𝕜) in 𝓝 x, Tendsto (fun n => f n y) l (𝓝 (g y))
F' : ι → 𝕜 → 𝕜 →L[𝕜] G := fun n z => ContinuousLinearMap.smulRight 1 (f' n z)
G' : 𝕜 → 𝕜 →L[𝕜] G := fun z => ContinuousLinearMap.smulRight 1 (g' z)
hf : ∀ᶠ (n : ι × 𝕜) in l ×ˢ 𝓝 x, HasFDerivAt (f n.fst) (ContinuousLinearMap.smulRight 1 (f' n.fst n.snd)) n.snd
ε : ℝ
hε : ε > 0
⊢ ∀ᶠ (n : ι × 𝕜) in l ×ˢ 𝓝 x, dist (G' n.snd) (F' n.fst n.snd) < ε
[PROOFSTEP]
obtain ⟨q, hq, hq'⟩ := exists_between hε.lt
[GOAL]
case intro.intro
ι : Type u_1
l : Filter ι
𝕜 : Type u_2
inst✝³ : IsROrC 𝕜
G : Type u_3
inst✝² : NormedAddCommGroup G
inst✝¹ : NormedSpace 𝕜 G
f : ι → 𝕜 → G
g : 𝕜 → G
f' : ι → 𝕜 → G
g' : 𝕜 → G
x : 𝕜
inst✝ : NeBot l
hf' : ∀ (ε : ℝ), ε > 0 → ∀ᶠ (n : ι × 𝕜) in l ×ˢ 𝓝 x, dist (g' n.snd) (f' n.fst n.snd) < ε
hfg : ∀ᶠ (y : 𝕜) in 𝓝 x, Tendsto (fun n => f n y) l (𝓝 (g y))
F' : ι → 𝕜 → 𝕜 →L[𝕜] G := fun n z => ContinuousLinearMap.smulRight 1 (f' n z)
G' : 𝕜 → 𝕜 →L[𝕜] G := fun z => ContinuousLinearMap.smulRight 1 (g' z)
hf : ∀ᶠ (n : ι × 𝕜) in l ×ˢ 𝓝 x, HasFDerivAt (f n.fst) (ContinuousLinearMap.smulRight 1 (f' n.fst n.snd)) n.snd
ε : ℝ
hε : ε > 0
q : ℝ
hq : 0 < q
hq' : q < ε
⊢ ∀ᶠ (n : ι × 𝕜) in l ×ˢ 𝓝 x, dist (G' n.snd) (F' n.fst n.snd) < ε
[PROOFSTEP]
apply (hf' q hq).mono
[GOAL]
case intro.intro
ι : Type u_1
l : Filter ι
𝕜 : Type u_2
inst✝³ : IsROrC 𝕜
G : Type u_3
inst✝² : NormedAddCommGroup G
inst✝¹ : NormedSpace 𝕜 G
f : ι → 𝕜 → G
g : 𝕜 → G
f' : ι → 𝕜 → G
g' : 𝕜 → G
x : 𝕜
inst✝ : NeBot l
hf' : ∀ (ε : ℝ), ε > 0 → ∀ᶠ (n : ι × 𝕜) in l ×ˢ 𝓝 x, dist (g' n.snd) (f' n.fst n.snd) < ε
hfg : ∀ᶠ (y : 𝕜) in 𝓝 x, Tendsto (fun n => f n y) l (𝓝 (g y))
F' : ι → 𝕜 → 𝕜 →L[𝕜] G := fun n z => ContinuousLinearMap.smulRight 1 (f' n z)
G' : 𝕜 → 𝕜 →L[𝕜] G := fun z => ContinuousLinearMap.smulRight 1 (g' z)
hf : ∀ᶠ (n : ι × 𝕜) in l ×ˢ 𝓝 x, HasFDerivAt (f n.fst) (ContinuousLinearMap.smulRight 1 (f' n.fst n.snd)) n.snd
ε : ℝ
hε : ε > 0
q : ℝ
hq : 0 < q
hq' : q < ε
⊢ ∀ (x : ι × 𝕜), dist (g' x.snd) (f' x.fst x.snd) < q → dist (G' x.snd) (F' x.fst x.snd) < ε
[PROOFSTEP]
intro n hn
[GOAL]
case intro.intro
ι : Type u_1
l : Filter ι
𝕜 : Type u_2
inst✝³ : IsROrC 𝕜
G : Type u_3
inst✝² : NormedAddCommGroup G
inst✝¹ : NormedSpace 𝕜 G
f : ι → 𝕜 → G
g : 𝕜 → G
f' : ι → 𝕜 → G
g' : 𝕜 → G
x : 𝕜
inst✝ : NeBot l
hf' : ∀ (ε : ℝ), ε > 0 → ∀ᶠ (n : ι × 𝕜) in l ×ˢ 𝓝 x, dist (g' n.snd) (f' n.fst n.snd) < ε
hfg : ∀ᶠ (y : 𝕜) in 𝓝 x, Tendsto (fun n => f n y) l (𝓝 (g y))
F' : ι → 𝕜 → 𝕜 →L[𝕜] G := fun n z => ContinuousLinearMap.smulRight 1 (f' n z)
G' : 𝕜 → 𝕜 →L[𝕜] G := fun z => ContinuousLinearMap.smulRight 1 (g' z)
hf : ∀ᶠ (n : ι × 𝕜) in l ×ˢ 𝓝 x, HasFDerivAt (f n.fst) (ContinuousLinearMap.smulRight 1 (f' n.fst n.snd)) n.snd
ε : ℝ
hε : ε > 0
q : ℝ
hq : 0 < q
hq' : q < ε
n : ι × 𝕜
hn : dist (g' n.snd) (f' n.fst n.snd) < q
⊢ dist (G' n.snd) (F' n.fst n.snd) < ε
[PROOFSTEP]
refine' lt_of_le_of_lt _ hq'
[GOAL]
case intro.intro
ι : Type u_1
l : Filter ι
𝕜 : Type u_2
inst✝³ : IsROrC 𝕜
G : Type u_3
inst✝² : NormedAddCommGroup G
inst✝¹ : NormedSpace 𝕜 G
f : ι → 𝕜 → G
g : 𝕜 → G
f' : ι → 𝕜 → G
g' : 𝕜 → G
x : 𝕜
inst✝ : NeBot l
hf' : ∀ (ε : ℝ), ε > 0 → ∀ᶠ (n : ι × 𝕜) in l ×ˢ 𝓝 x, dist (g' n.snd) (f' n.fst n.snd) < ε
hfg : ∀ᶠ (y : 𝕜) in 𝓝 x, Tendsto (fun n => f n y) l (𝓝 (g y))
F' : ι → 𝕜 → 𝕜 →L[𝕜] G := fun n z => ContinuousLinearMap.smulRight 1 (f' n z)
G' : 𝕜 → 𝕜 →L[𝕜] G := fun z => ContinuousLinearMap.smulRight 1 (g' z)
hf : ∀ᶠ (n : ι × 𝕜) in l ×ˢ 𝓝 x, HasFDerivAt (f n.fst) (ContinuousLinearMap.smulRight 1 (f' n.fst n.snd)) n.snd
ε : ℝ
hε : ε > 0
q : ℝ
hq : 0 < q
hq' : q < ε
n : ι × 𝕜
hn : dist (g' n.snd) (f' n.fst n.snd) < q
⊢ dist (G' n.snd) (F' n.fst n.snd) ≤ q
[PROOFSTEP]
simp only [dist_eq_norm] at hn ⊢
[GOAL]
case intro.intro
ι : Type u_1
l : Filter ι
𝕜 : Type u_2
inst✝³ : IsROrC 𝕜
G : Type u_3
inst✝² : NormedAddCommGroup G
inst✝¹ : NormedSpace 𝕜 G
f : ι → 𝕜 → G
g : 𝕜 → G
f' : ι → 𝕜 → G
g' : 𝕜 → G
x : 𝕜
inst✝ : NeBot l
hf' : ∀ (ε : ℝ), ε > 0 → ∀ᶠ (n : ι × 𝕜) in l ×ˢ 𝓝 x, dist (g' n.snd) (f' n.fst n.snd) < ε
hfg : ∀ᶠ (y : 𝕜) in 𝓝 x, Tendsto (fun n => f n y) l (𝓝 (g y))
F' : ι → 𝕜 → 𝕜 →L[𝕜] G := fun n z => ContinuousLinearMap.smulRight 1 (f' n z)
G' : 𝕜 → 𝕜 →L[𝕜] G := fun z => ContinuousLinearMap.smulRight 1 (g' z)
hf : ∀ᶠ (n : ι × 𝕜) in l ×ˢ 𝓝 x, HasFDerivAt (f n.fst) (ContinuousLinearMap.smulRight 1 (f' n.fst n.snd)) n.snd
ε : ℝ
hε : ε > 0
q : ℝ
hq : 0 < q
hq' : q < ε
n : ι × 𝕜
hn : ‖g' n.snd - f' n.fst n.snd‖ < q
⊢ ‖ContinuousLinearMap.smulRight 1 (g' n.snd) - ContinuousLinearMap.smulRight 1 (f' n.fst n.snd)‖ ≤ q
[PROOFSTEP]
refine' ContinuousLinearMap.op_norm_le_bound _ hq.le _
[GOAL]
case intro.intro
ι : Type u_1
l : Filter ι
𝕜 : Type u_2
inst✝³ : IsROrC 𝕜
G : Type u_3
inst✝² : NormedAddCommGroup G
inst✝¹ : NormedSpace 𝕜 G
f : ι → 𝕜 → G
g : 𝕜 → G
f' : ι → 𝕜 → G
g' : 𝕜 → G
x : 𝕜
inst✝ : NeBot l
hf' : ∀ (ε : ℝ), ε > 0 → ∀ᶠ (n : ι × 𝕜) in l ×ˢ 𝓝 x, dist (g' n.snd) (f' n.fst n.snd) < ε
hfg : ∀ᶠ (y : 𝕜) in 𝓝 x, Tendsto (fun n => f n y) l (𝓝 (g y))
F' : ι → 𝕜 → 𝕜 →L[𝕜] G := fun n z => ContinuousLinearMap.smulRight 1 (f' n z)
G' : 𝕜 → 𝕜 →L[𝕜] G := fun z => ContinuousLinearMap.smulRight 1 (g' z)
hf : ∀ᶠ (n : ι × 𝕜) in l ×ˢ 𝓝 x, HasFDerivAt (f n.fst) (ContinuousLinearMap.smulRight 1 (f' n.fst n.snd)) n.snd
ε : ℝ
hε : ε > 0
q : ℝ
hq : 0 < q
hq' : q < ε
n : ι × 𝕜
hn : ‖g' n.snd - f' n.fst n.snd‖ < q
⊢ ∀ (x : 𝕜),
    ‖↑(ContinuousLinearMap.smulRight 1 (g' n.snd) - ContinuousLinearMap.smulRight 1 (f' n.fst n.snd)) x‖ ≤ q * ‖x‖
[PROOFSTEP]
intro z
[GOAL]
case intro.intro
ι : Type u_1
l : Filter ι
𝕜 : Type u_2
inst✝³ : IsROrC 𝕜
G : Type u_3
inst✝² : NormedAddCommGroup G
inst✝¹ : NormedSpace 𝕜 G
f : ι → 𝕜 → G
g : 𝕜 → G
f' : ι → 𝕜 → G
g' : 𝕜 → G
x : 𝕜
inst✝ : NeBot l
hf' : ∀ (ε : ℝ), ε > 0 → ∀ᶠ (n : ι × 𝕜) in l ×ˢ 𝓝 x, dist (g' n.snd) (f' n.fst n.snd) < ε
hfg : ∀ᶠ (y : 𝕜) in 𝓝 x, Tendsto (fun n => f n y) l (𝓝 (g y))
F' : ι → 𝕜 → 𝕜 →L[𝕜] G := fun n z => ContinuousLinearMap.smulRight 1 (f' n z)
G' : 𝕜 → 𝕜 →L[𝕜] G := fun z => ContinuousLinearMap.smulRight 1 (g' z)
hf : ∀ᶠ (n : ι × 𝕜) in l ×ˢ 𝓝 x, HasFDerivAt (f n.fst) (ContinuousLinearMap.smulRight 1 (f' n.fst n.snd)) n.snd
ε : ℝ
hε : ε > 0
q : ℝ
hq : 0 < q
hq' : q < ε
n : ι × 𝕜
hn : ‖g' n.snd - f' n.fst n.snd‖ < q
z : 𝕜
⊢ ‖↑(ContinuousLinearMap.smulRight 1 (g' n.snd) - ContinuousLinearMap.smulRight 1 (f' n.fst n.snd)) z‖ ≤ q * ‖z‖
[PROOFSTEP]
simp only [ContinuousLinearMap.coe_sub', Pi.sub_apply, ContinuousLinearMap.smulRight_apply,
  ContinuousLinearMap.one_apply]
[GOAL]
case intro.intro
ι : Type u_1
l : Filter ι
𝕜 : Type u_2
inst✝³ : IsROrC 𝕜
G : Type u_3
inst✝² : NormedAddCommGroup G
inst✝¹ : NormedSpace 𝕜 G
f : ι → 𝕜 → G
g : 𝕜 → G
f' : ι → 𝕜 → G
g' : 𝕜 → G
x : 𝕜
inst✝ : NeBot l
hf' : ∀ (ε : ℝ), ε > 0 → ∀ᶠ (n : ι × 𝕜) in l ×ˢ 𝓝 x, dist (g' n.snd) (f' n.fst n.snd) < ε
hfg : ∀ᶠ (y : 𝕜) in 𝓝 x, Tendsto (fun n => f n y) l (𝓝 (g y))
F' : ι → 𝕜 → 𝕜 →L[𝕜] G := fun n z => ContinuousLinearMap.smulRight 1 (f' n z)
G' : 𝕜 → 𝕜 →L[𝕜] G := fun z => ContinuousLinearMap.smulRight 1 (g' z)
hf : ∀ᶠ (n : ι × 𝕜) in l ×ˢ 𝓝 x, HasFDerivAt (f n.fst) (ContinuousLinearMap.smulRight 1 (f' n.fst n.snd)) n.snd
ε : ℝ
hε : ε > 0
q : ℝ
hq : 0 < q
hq' : q < ε
n : ι × 𝕜
hn : ‖g' n.snd - f' n.fst n.snd‖ < q
z : 𝕜
⊢ ‖z • g' n.snd - z • f' n.fst n.snd‖ ≤ q * ‖z‖
[PROOFSTEP]
rw [← smul_sub, norm_smul, mul_comm]
[GOAL]
case intro.intro
ι : Type u_1
l : Filter ι
𝕜 : Type u_2
inst✝³ : IsROrC 𝕜
G : Type u_3
inst✝² : NormedAddCommGroup G
inst✝¹ : NormedSpace 𝕜 G
f : ι → 𝕜 → G
g : 𝕜 → G
f' : ι → 𝕜 → G
g' : 𝕜 → G
x : 𝕜
inst✝ : NeBot l
hf' : ∀ (ε : ℝ), ε > 0 → ∀ᶠ (n : ι × 𝕜) in l ×ˢ 𝓝 x, dist (g' n.snd) (f' n.fst n.snd) < ε
hfg : ∀ᶠ (y : 𝕜) in 𝓝 x, Tendsto (fun n => f n y) l (𝓝 (g y))
F' : ι → 𝕜 → 𝕜 →L[𝕜] G := fun n z => ContinuousLinearMap.smulRight 1 (f' n z)
G' : 𝕜 → 𝕜 →L[𝕜] G := fun z => ContinuousLinearMap.smulRight 1 (g' z)
hf : ∀ᶠ (n : ι × 𝕜) in l ×ˢ 𝓝 x, HasFDerivAt (f n.fst) (ContinuousLinearMap.smulRight 1 (f' n.fst n.snd)) n.snd
ε : ℝ
hε : ε > 0
q : ℝ
hq : 0 < q
hq' : q < ε
n : ι × 𝕜
hn : ‖g' n.snd - f' n.fst n.snd‖ < q
z : 𝕜
⊢ ‖g' n.snd - f' n.fst n.snd‖ * ‖z‖ ≤ q * ‖z‖
[PROOFSTEP]
gcongr
[GOAL]
ι : Type u_1
l : Filter ι
𝕜 : Type u_2
inst✝³ : IsROrC 𝕜
G : Type u_3
inst✝² : NormedAddCommGroup G
inst✝¹ : NormedSpace 𝕜 G
f : ι → 𝕜 → G
g : 𝕜 → G
f' : ι → 𝕜 → G
g' : 𝕜 → G
x : 𝕜
inst✝ : NeBot l
hf'✝ : TendstoUniformlyOnFilter f' g' l (𝓝 x)
hfg : ∀ᶠ (y : 𝕜) in 𝓝 x, Tendsto (fun n => f n y) l (𝓝 (g y))
F' : ι → 𝕜 → 𝕜 →L[𝕜] G := fun n z => ContinuousLinearMap.smulRight 1 (f' n z)
G' : 𝕜 → 𝕜 →L[𝕜] G := fun z => ContinuousLinearMap.smulRight 1 (g' z)
hf : ∀ᶠ (n : ι × 𝕜) in l ×ˢ 𝓝 x, HasFDerivAt (f n.fst) (ContinuousLinearMap.smulRight 1 (f' n.fst n.snd)) n.snd
hf' : TendstoUniformlyOnFilter F' G' l (𝓝 x)
⊢ HasFDerivAt g (ContinuousLinearMap.smulRight 1 (g' x)) x
[PROOFSTEP]
exact hasFDerivAt_of_tendstoUniformlyOnFilter hf' hf hfg
[GOAL]
ι : Type u_1
l : Filter ι
𝕜 : Type u_2
inst✝³ : IsROrC 𝕜
G : Type u_3
inst✝² : NormedAddCommGroup G
inst✝¹ : NormedSpace 𝕜 G
f : ι → 𝕜 → G
g : 𝕜 → G
f' : ι → 𝕜 → G
g' : 𝕜 → G
x : 𝕜
inst✝ : NeBot l
s : Set 𝕜
hs : IsOpen s
hf' : TendstoLocallyUniformlyOn f' g' l s
hf : ∀ᶠ (n : ι) in l, ∀ (x : 𝕜), x ∈ s → HasDerivAt (f n) (f' n x) x
hfg : ∀ (x : 𝕜), x ∈ s → Tendsto (fun n => f n x) l (𝓝 (g x))
hx : x ∈ s
⊢ HasDerivAt g (g' x) x
[PROOFSTEP]
have h1 : s ∈ 𝓝 x := hs.mem_nhds hx
[GOAL]
ι : Type u_1
l : Filter ι
𝕜 : Type u_2
inst✝³ : IsROrC 𝕜
G : Type u_3
inst✝² : NormedAddCommGroup G
inst✝¹ : NormedSpace 𝕜 G
f : ι → 𝕜 → G
g : 𝕜 → G
f' : ι → 𝕜 → G
g' : 𝕜 → G
x : 𝕜
inst✝ : NeBot l
s : Set 𝕜
hs : IsOpen s
hf' : TendstoLocallyUniformlyOn f' g' l s
hf : ∀ᶠ (n : ι) in l, ∀ (x : 𝕜), x ∈ s → HasDerivAt (f n) (f' n x) x
hfg : ∀ (x : 𝕜), x ∈ s → Tendsto (fun n => f n x) l (𝓝 (g x))
hx : x ∈ s
h1 : s ∈ 𝓝 x
⊢ HasDerivAt g (g' x) x
[PROOFSTEP]
have h2 : ∀ᶠ n : ι × 𝕜 in l ×ˢ 𝓝 x, HasDerivAt (f n.1) (f' n.1 n.2) n.2 :=
  eventually_prod_iff.2 ⟨_, hf, fun x => x ∈ s, h1, fun {n} => id⟩
[GOAL]
ι : Type u_1
l : Filter ι
𝕜 : Type u_2
inst✝³ : IsROrC 𝕜
G : Type u_3
inst✝² : NormedAddCommGroup G
inst✝¹ : NormedSpace 𝕜 G
f : ι → 𝕜 → G
g : 𝕜 → G
f' : ι → 𝕜 → G
g' : 𝕜 → G
x : 𝕜
inst✝ : NeBot l
s : Set 𝕜
hs : IsOpen s
hf' : TendstoLocallyUniformlyOn f' g' l s
hf : ∀ᶠ (n : ι) in l, ∀ (x : 𝕜), x ∈ s → HasDerivAt (f n) (f' n x) x
hfg : ∀ (x : 𝕜), x ∈ s → Tendsto (fun n => f n x) l (𝓝 (g x))
hx : x ∈ s
h1 : s ∈ 𝓝 x
h2 : ∀ᶠ (n : ι × 𝕜) in l ×ˢ 𝓝 x, HasDerivAt (f n.fst) (f' n.fst n.snd) n.snd
⊢ HasDerivAt g (g' x) x
[PROOFSTEP]
refine' hasDerivAt_of_tendstoUniformlyOnFilter _ h2 (eventually_of_mem h1 hfg)
[GOAL]
ι : Type u_1
l : Filter ι
𝕜 : Type u_2
inst✝³ : IsROrC 𝕜
G : Type u_3
inst✝² : NormedAddCommGroup G
inst✝¹ : NormedSpace 𝕜 G
f : ι → 𝕜 → G
g : 𝕜 → G
f' : ι → 𝕜 → G
g' : 𝕜 → G
x : 𝕜
inst✝ : NeBot l
s : Set 𝕜
hs : IsOpen s
hf' : TendstoLocallyUniformlyOn f' g' l s
hf : ∀ᶠ (n : ι) in l, ∀ (x : 𝕜), x ∈ s → HasDerivAt (f n) (f' n x) x
hfg : ∀ (x : 𝕜), x ∈ s → Tendsto (fun n => f n x) l (𝓝 (g x))
hx : x ∈ s
h1 : s ∈ 𝓝 x
h2 : ∀ᶠ (n : ι × 𝕜) in l ×ˢ 𝓝 x, HasDerivAt (f n.fst) (f' n.fst n.snd) n.snd
⊢ TendstoUniformlyOnFilter f' g' l (𝓝 x)
[PROOFSTEP]
simpa [IsOpen.nhdsWithin_eq hs hx] using tendstoLocallyUniformlyOn_iff_filter.mp hf' x hx
[GOAL]
ι : Type u_1
l : Filter ι
𝕜 : Type u_2
inst✝³ : IsROrC 𝕜
G : Type u_3
inst✝² : NormedAddCommGroup G
inst✝¹ : NormedSpace 𝕜 G
f : ι → 𝕜 → G
g : 𝕜 → G
f' : ι → 𝕜 → G
g' : 𝕜 → G
x : 𝕜
inst✝ : NeBot l
s : Set 𝕜
hs : IsOpen s
hf' : TendstoLocallyUniformlyOn (deriv ∘ f) g' l s
hf : ∀ᶠ (n : ι) in l, DifferentiableOn 𝕜 (f n) s
hfg : ∀ (x : 𝕜), x ∈ s → Tendsto (fun n => f n x) l (𝓝 (g x))
hx : x ∈ s
⊢ HasDerivAt g (g' x) x
[PROOFSTEP]
refine' hasDerivAt_of_tendstoLocallyUniformlyOn hs hf' _ hfg hx
[GOAL]
ι : Type u_1
l : Filter ι
𝕜 : Type u_2
inst✝³ : IsROrC 𝕜
G : Type u_3
inst✝² : NormedAddCommGroup G
inst✝¹ : NormedSpace 𝕜 G
f : ι → 𝕜 → G
g : 𝕜 → G
f' : ι → 𝕜 → G
g' : 𝕜 → G
x : 𝕜
inst✝ : NeBot l
s : Set 𝕜
hs : IsOpen s
hf' : TendstoLocallyUniformlyOn (deriv ∘ f) g' l s
hf : ∀ᶠ (n : ι) in l, DifferentiableOn 𝕜 (f n) s
hfg : ∀ (x : 𝕜), x ∈ s → Tendsto (fun n => f n x) l (𝓝 (g x))
hx : x ∈ s
⊢ ∀ᶠ (n : ι) in l, ∀ (x : 𝕜), x ∈ s → HasDerivAt (fun x => f n x) ((deriv ∘ f) n x) x
[PROOFSTEP]
filter_upwards [hf] with n h z hz using ((h z hz).differentiableAt (hs.mem_nhds hz)).hasDerivAt
[GOAL]
ι : Type u_1
l : Filter ι
𝕜 : Type u_2
inst✝³ : IsROrC 𝕜
G : Type u_3
inst✝² : NormedAddCommGroup G
inst✝¹ : NormedSpace 𝕜 G
f : ι → 𝕜 → G
g : 𝕜 → G
f' : ι → 𝕜 → G
g' : 𝕜 → G
x : 𝕜
inst✝ : NeBot l
hf' : TendstoUniformly f' g' l
hf : ∀ᶠ (n : ι) in l, ∀ (x : 𝕜), HasDerivAt (f n) (f' n x) x
hfg : ∀ (x : 𝕜), Tendsto (fun n => f n x) l (𝓝 (g x))
⊢ ∀ (x : 𝕜), HasDerivAt g (g' x) x
[PROOFSTEP]
intro x
[GOAL]
ι : Type u_1
l : Filter ι
𝕜 : Type u_2
inst✝³ : IsROrC 𝕜
G : Type u_3
inst✝² : NormedAddCommGroup G
inst✝¹ : NormedSpace 𝕜 G
f : ι → 𝕜 → G
g : 𝕜 → G
f' : ι → 𝕜 → G
g' : 𝕜 → G
x✝ : 𝕜
inst✝ : NeBot l
hf' : TendstoUniformly f' g' l
hf : ∀ᶠ (n : ι) in l, ∀ (x : 𝕜), HasDerivAt (f n) (f' n x) x
hfg : ∀ (x : 𝕜), Tendsto (fun n => f n x) l (𝓝 (g x))
x : 𝕜
⊢ HasDerivAt g (g' x) x
[PROOFSTEP]
have hf : ∀ᶠ n in l, ∀ x : 𝕜, x ∈ Set.univ → HasDerivAt (f n) (f' n x) x := by
  filter_upwards [hf] with n h x _ using h x
[GOAL]
ι : Type u_1
l : Filter ι
𝕜 : Type u_2
inst✝³ : IsROrC 𝕜
G : Type u_3
inst✝² : NormedAddCommGroup G
inst✝¹ : NormedSpace 𝕜 G
f : ι → 𝕜 → G
g : 𝕜 → G
f' : ι → 𝕜 → G
g' : 𝕜 → G
x✝ : 𝕜
inst✝ : NeBot l
hf' : TendstoUniformly f' g' l
hf : ∀ᶠ (n : ι) in l, ∀ (x : 𝕜), HasDerivAt (f n) (f' n x) x
hfg : ∀ (x : 𝕜), Tendsto (fun n => f n x) l (𝓝 (g x))
x : 𝕜
⊢ ∀ᶠ (n : ι) in l, ∀ (x : 𝕜), x ∈ Set.univ → HasDerivAt (f n) (f' n x) x
[PROOFSTEP]
filter_upwards [hf] with n h x _ using h x
[GOAL]
ι : Type u_1
l : Filter ι
𝕜 : Type u_2
inst✝³ : IsROrC 𝕜
G : Type u_3
inst✝² : NormedAddCommGroup G
inst✝¹ : NormedSpace 𝕜 G
f : ι → 𝕜 → G
g : 𝕜 → G
f' : ι → 𝕜 → G
g' : 𝕜 → G
x✝ : 𝕜
inst✝ : NeBot l
hf' : TendstoUniformly f' g' l
hf✝ : ∀ᶠ (n : ι) in l, ∀ (x : 𝕜), HasDerivAt (f n) (f' n x) x
hfg : ∀ (x : 𝕜), Tendsto (fun n => f n x) l (𝓝 (g x))
x : 𝕜
hf : ∀ᶠ (n : ι) in l, ∀ (x : 𝕜), x ∈ Set.univ → HasDerivAt (f n) (f' n x) x
⊢ HasDerivAt g (g' x) x
[PROOFSTEP]
have hfg : ∀ x : 𝕜, x ∈ Set.univ → Tendsto (fun n => f n x) l (𝓝 (g x)) := by simp [hfg]
[GOAL]
ι : Type u_1
l : Filter ι
𝕜 : Type u_2
inst✝³ : IsROrC 𝕜
G : Type u_3
inst✝² : NormedAddCommGroup G
inst✝¹ : NormedSpace 𝕜 G
f : ι → 𝕜 → G
g : 𝕜 → G
f' : ι → 𝕜 → G
g' : 𝕜 → G
x✝ : 𝕜
inst✝ : NeBot l
hf' : TendstoUniformly f' g' l
hf✝ : ∀ᶠ (n : ι) in l, ∀ (x : 𝕜), HasDerivAt (f n) (f' n x) x
hfg : ∀ (x : 𝕜), Tendsto (fun n => f n x) l (𝓝 (g x))
x : 𝕜
hf : ∀ᶠ (n : ι) in l, ∀ (x : 𝕜), x ∈ Set.univ → HasDerivAt (f n) (f' n x) x
⊢ ∀ (x : 𝕜), x ∈ Set.univ → Tendsto (fun n => f n x) l (𝓝 (g x))
[PROOFSTEP]
simp [hfg]
[GOAL]
ι : Type u_1
l : Filter ι
𝕜 : Type u_2
inst✝³ : IsROrC 𝕜
G : Type u_3
inst✝² : NormedAddCommGroup G
inst✝¹ : NormedSpace 𝕜 G
f : ι → 𝕜 → G
g : 𝕜 → G
f' : ι → 𝕜 → G
g' : 𝕜 → G
x✝ : 𝕜
inst✝ : NeBot l
hf' : TendstoUniformly f' g' l
hf✝ : ∀ᶠ (n : ι) in l, ∀ (x : 𝕜), HasDerivAt (f n) (f' n x) x
hfg✝ : ∀ (x : 𝕜), Tendsto (fun n => f n x) l (𝓝 (g x))
x : 𝕜
hf : ∀ᶠ (n : ι) in l, ∀ (x : 𝕜), x ∈ Set.univ → HasDerivAt (f n) (f' n x) x
hfg : ∀ (x : 𝕜), x ∈ Set.univ → Tendsto (fun n => f n x) l (𝓝 (g x))
⊢ HasDerivAt g (g' x) x
[PROOFSTEP]
have hf' : TendstoUniformlyOn f' g' l Set.univ := by rwa [tendstoUniformlyOn_univ]
[GOAL]
ι : Type u_1
l : Filter ι
𝕜 : Type u_2
inst✝³ : IsROrC 𝕜
G : Type u_3
inst✝² : NormedAddCommGroup G
inst✝¹ : NormedSpace 𝕜 G
f : ι → 𝕜 → G
g : 𝕜 → G
f' : ι → 𝕜 → G
g' : 𝕜 → G
x✝ : 𝕜
inst✝ : NeBot l
hf' : TendstoUniformly f' g' l
hf✝ : ∀ᶠ (n : ι) in l, ∀ (x : 𝕜), HasDerivAt (f n) (f' n x) x
hfg✝ : ∀ (x : 𝕜), Tendsto (fun n => f n x) l (𝓝 (g x))
x : 𝕜
hf : ∀ᶠ (n : ι) in l, ∀ (x : 𝕜), x ∈ Set.univ → HasDerivAt (f n) (f' n x) x
hfg : ∀ (x : 𝕜), x ∈ Set.univ → Tendsto (fun n => f n x) l (𝓝 (g x))
⊢ TendstoUniformlyOn f' g' l Set.univ
[PROOFSTEP]
rwa [tendstoUniformlyOn_univ]
[GOAL]
ι : Type u_1
l : Filter ι
𝕜 : Type u_2
inst✝³ : IsROrC 𝕜
G : Type u_3
inst✝² : NormedAddCommGroup G
inst✝¹ : NormedSpace 𝕜 G
f : ι → 𝕜 → G
g : 𝕜 → G
f' : ι → 𝕜 → G
g' : 𝕜 → G
x✝ : 𝕜
inst✝ : NeBot l
hf'✝ : TendstoUniformly f' g' l
hf✝ : ∀ᶠ (n : ι) in l, ∀ (x : 𝕜), HasDerivAt (f n) (f' n x) x
hfg✝ : ∀ (x : 𝕜), Tendsto (fun n => f n x) l (𝓝 (g x))
x : 𝕜
hf : ∀ᶠ (n : ι) in l, ∀ (x : 𝕜), x ∈ Set.univ → HasDerivAt (f n) (f' n x) x
hfg : ∀ (x : 𝕜), x ∈ Set.univ → Tendsto (fun n => f n x) l (𝓝 (g x))
hf' : TendstoUniformlyOn f' g' l Set.univ
⊢ HasDerivAt g (g' x) x
[PROOFSTEP]
exact hasDerivAt_of_tendstoUniformlyOn isOpen_univ hf' hf hfg x (Set.mem_univ x)