Theorem: Filter.EventuallyEq.hasStrictFDerivAt_iff
File: Mathlib/Analysis/Calculus/FDeriv/Basic.lean

Proof steps:
state_before: 𝕜 : Type u_1
inst✝⁸ : NontriviallyNormedField 𝕜
E : Type u_2
inst✝⁷ : NormedAddCommGroup E
inst✝⁶ : NormedSpace 𝕜 E
F : Type u_3
inst✝⁵ : NormedAddCommGroup F
inst✝⁴ : NormedSpace 𝕜 F
G : Type u_4
inst✝³ : NormedAddCommGroup G
inst✝² : NormedSpace 𝕜 G
G' : Type u_5
inst✝¹ : NormedAddCommGroup G'
inst✝ : NormedSpace 𝕜 G'
f f₀ f₁ g : E → F
f' f₀' f₁' g' e : E →L[𝕜] F
x : E
s t : Set E
L L₁ L₂ : Filter E
h : f₀ =ᶠ[𝓝 x] f₁
h' : ∀ (y : E), f₀' y = f₁' y
⊢ HasStrictFDerivAt f₀ f₀' x ↔ HasStrictFDerivAt f₁ f₁' x
state_after: 𝕜 : Type u_1
inst✝⁸ : NontriviallyNormedField 𝕜
E : Type u_2
inst✝⁷ : NormedAddCommGroup E
inst✝⁶ : NormedSpace 𝕜 E
F : Type u_3
inst✝⁵ : NormedAddCommGroup F
inst✝⁴ : NormedSpace 𝕜 F
G : Type u_4
inst✝³ : NormedAddCommGroup G
inst✝² : NormedSpace 𝕜 G
G' : Type u_5
inst✝¹ : NormedAddCommGroup G'
inst✝ : NormedSpace 𝕜 G'
f f₀ f₁ g : E → F
f' f₀' f₁' g' e : E →L[𝕜] F
x : E
s t : Set E
L L₁ L₂ : Filter E
h : f₀ =ᶠ[𝓝 x] f₁
h' : ∀ (y : E), f₀' y = f₁' y
⊢ ∀ (x : E × E),
    f₀ x.1 = f₁ x.1 ∧ f₀ x.2 = f₁ x.2 →
      (fun p => f₀ p.1 - f₀ p.2 - f₀' (p.1 - p.2)) x = (fun p => f₁ p.1 - f₁ p.2 - f₁' (p.1 - p.2)) x
tactic: refine isLittleO_congr ((h.prod_mk_nhds h).mono ?_) .rfl
state_before: 𝕜 : Type u_1
inst✝⁸ : NontriviallyNormedField 𝕜
E : Type u_2
inst✝⁷ : NormedAddCommGroup E
inst✝⁶ : NormedSpace 𝕜 E
F : Type u_3
inst✝⁵ : NormedAddCommGroup F
inst✝⁴ : NormedSpace 𝕜 F
G : Type u_4
inst✝³ : NormedAddCommGroup G
inst✝² : NormedSpace 𝕜 G
G' : Type u_5
inst✝¹ : NormedAddCommGroup G'
inst✝ : NormedSpace 𝕜 G'
f f₀ f₁ g : E → F
f' f₀' f₁' g' e : E →L[𝕜] F
x : E
s t : Set E
L L₁ L₂ : Filter E
h : f₀ =ᶠ[𝓝 x] f₁
h' : ∀ (y : E), f₀' y = f₁' y
⊢ ∀ (x : E × E),
    f₀ x.1 = f₁ x.1 ∧ f₀ x.2 = f₁ x.2 →
      (fun p => f₀ p.1 - f₀ p.2 - f₀' (p.1 - p.2)) x = (fun p => f₁ p.1 - f₁ p.2 - f₁' (p.1 - p.2)) x
state_after: case intro
𝕜 : Type u_1
inst✝⁸ : NontriviallyNormedField 𝕜
E : Type u_2
inst✝⁷ : NormedAddCommGroup E
inst✝⁶ : NormedSpace 𝕜 E
F : Type u_3
inst✝⁵ : NormedAddCommGroup F
inst✝⁴ : NormedSpace 𝕜 F
G : Type u_4
inst✝³ : NormedAddCommGroup G
inst✝² : NormedSpace 𝕜 G
G' : Type u_5
inst✝¹ : NormedAddCommGroup G'
inst✝ : NormedSpace 𝕜 G'
f f₀ f₁ g : E → F
f' f₀' f₁' g' e : E →L[𝕜] F
x : E
s t : Set E
L L₁ L₂ : Filter E
h : f₀ =ᶠ[𝓝 x] f₁
h' : ∀ (y : E), f₀' y = f₁' y
p : E × E
hp₁ : f₀ p.1 = f₁ p.1
hp₂ : f₀ p.2 = f₁ p.2
⊢ (fun p => f₀ p.1 - f₀ p.2 - f₀' (p.1 - p.2)) p = (fun p => f₁ p.1 - f₁ p.2 - f₁' (p.1 - p.2)) p
tactic: rintro p ⟨hp₁, hp₂⟩
state_before: case intro
𝕜 : Type u_1
inst✝⁸ : NontriviallyNormedField 𝕜
E : Type u_2
inst✝⁷ : NormedAddCommGroup E
inst✝⁶ : NormedSpace 𝕜 E
F : Type u_3
inst✝⁵ : NormedAddCommGroup F
inst✝⁴ : NormedSpace 𝕜 F
G : Type u_4
inst✝³ : NormedAddCommGroup G
inst✝² : NormedSpace 𝕜 G
G' : Type u_5
inst✝¹ : NormedAddCommGroup G'
inst✝ : NormedSpace 𝕜 G'
f f₀ f₁ g : E → F
f' f₀' f₁' g' e : E →L[𝕜] F
x : E
s t : Set E
L L₁ L₂ : Filter E
h : f₀ =ᶠ[𝓝 x] f₁
h' : ∀ (y : E), f₀' y = f₁' y
p : E × E
hp₁ : f₀ p.1 = f₁ p.1
hp₂ : f₀ p.2 = f₁ p.2
⊢ (fun p => f₀ p.1 - f₀ p.2 - f₀' (p.1 - p.2)) p = (fun p => f₁ p.1 - f₁ p.2 - f₁' (p.1 - p.2)) p
state_after: no goals
tactic: simp only [*]