Theorem: HasStrictFDerivAt.approximates_deriv_on_nhds
File: Mathlib/Analysis/Calculus/Inverse.lean

tactic: cases' hc with hE hc
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.502454
inst✝³ : NormedAddCommGroup G
inst✝² : NormedSpace 𝕜 G
G' : Type ?u.502557
inst✝¹ : NormedAddCommGroup G'
inst✝ : NormedSpace 𝕜 G'
ε : ℝ
f : E → F
f' : E →L[𝕜] F
a : E
hf : HasStrictFDerivAt f f' a
c : ℝ≥0
hc : Subsingleton E ∨ 0 < c
⊢ ∃ s, s ∈ 𝓝 a ∧ ApproximatesLinearOn f f' s c

tactic: have := hf.def hc
state_before: case inr
𝕜 : 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.502454
inst✝³ : NormedAddCommGroup G
inst✝² : NormedSpace 𝕜 G
G' : Type ?u.502557
inst✝¹ : NormedAddCommGroup G'
inst✝ : NormedSpace 𝕜 G'
ε : ℝ
f : E → F
f' : E →L[𝕜] F
a : E
hf : HasStrictFDerivAt f f' a
c : ℝ≥0
hc : 0 < c
⊢ ∃ s, s ∈ 𝓝 a ∧ ApproximatesLinearOn f f' s c

tactic: rw [nhds_prod_eq, Filter.Eventually, mem_prod_same_iff] at this
state_before: case inr
𝕜 : 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.502454
inst✝³ : NormedAddCommGroup G
inst✝² : NormedSpace 𝕜 G
G' : Type ?u.502557
inst✝¹ : NormedAddCommGroup G'
inst✝ : NormedSpace 𝕜 G'
ε : ℝ
f : E → F
f' : E →L[𝕜] F
a : E
hf : HasStrictFDerivAt f f' a
c : ℝ≥0
hc : 0 < c
this : ∀ᶠ (x : E × E) in 𝓝 (a, a), ‖f x.fst - f x.snd - ↑f' (x.fst - x.snd)‖ ≤ (fun a => ↑a) c * ‖x.fst - x.snd‖
⊢ ∃ s, s ∈ 𝓝 a ∧ ApproximatesLinearOn f f' s c

tactic: rcases this with ⟨s, has, hs⟩
state_before: case inr
𝕜 : 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.502454
inst✝³ : NormedAddCommGroup G
inst✝² : NormedSpace 𝕜 G
G' : Type ?u.502557
inst✝¹ : NormedAddCommGroup G'
inst✝ : NormedSpace 𝕜 G'
ε : ℝ
f : E → F
f' : E →L[𝕜] F
a : E
hf : HasStrictFDerivAt f f' a
c : ℝ≥0
hc : 0 < c
this : ∃ t, t ∈ 𝓝 a ∧ t ×ˢ t ⊆ {x | ‖f x.fst - f x.snd - ↑f' (x.fst - x.snd)‖ ≤ (fun a => ↑a) c * ‖x.fst - x.snd‖}
⊢ ∃ s, s ∈ 𝓝 a ∧ ApproximatesLinearOn f f' s c

tactic: exact ⟨s, has, fun x hx y hy => hs (mk_mem_prod hx hy)⟩
state_before: case inr.intro.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.502454
inst✝³ : NormedAddCommGroup G
inst✝² : NormedSpace 𝕜 G
G' : Type ?u.502557
inst✝¹ : NormedAddCommGroup G'
inst✝ : NormedSpace 𝕜 G'
ε : ℝ
f : E → F
f' : E →L[𝕜] F
a : E
hf : HasStrictFDerivAt f f' a
c : ℝ≥0
hc : 0 < c
s : Set E
has : s ∈ 𝓝 a
hs : s ×ˢ s ⊆ {x | ‖f x.fst - f x.snd - ↑f' (x.fst - x.snd)‖ ≤ (fun a => ↑a) c * ‖x.fst - x.snd‖}
⊢ ∃ s, s ∈ 𝓝 a ∧ ApproximatesLinearOn f f' s c

tactic: refine' ⟨univ, IsOpen.mem_nhds isOpen_univ trivial, fun x _ y _ => _⟩
state_before: case inl
𝕜 : 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.502454
inst✝³ : NormedAddCommGroup G
inst✝² : NormedSpace 𝕜 G
G' : Type ?u.502557
inst✝¹ : NormedAddCommGroup G'
inst✝ : NormedSpace 𝕜 G'
ε : ℝ
f : E → F
f' : E →L[𝕜] F
a : E
hf : HasStrictFDerivAt f f' a
c : ℝ≥0
hE : Subsingleton E
⊢ ∃ s, s ∈ 𝓝 a ∧ ApproximatesLinearOn f f' s c

tactic: simp [@Subsingleton.elim E hE x y]
state_before: case inl
𝕜 : 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.502454
inst✝³ : NormedAddCommGroup G
inst✝² : NormedSpace 𝕜 G
G' : Type ?u.502557
inst✝¹ : NormedAddCommGroup G'
inst✝ : NormedSpace 𝕜 G'
ε : ℝ
f : E → F
f' : E →L[𝕜] F
a : E
hf : HasStrictFDerivAt f f' a
c : ℝ≥0
hE : Subsingleton E
x : E
x✝¹ : x ∈ univ
y : E
x✝ : y ∈ univ
⊢ ‖f x - f y - ↑f' (x - y)‖ ≤ ↑c * ‖x - y‖