Theorem: HasFDerivAtFilter.comp
File: Mathlib/Analysis/Calculus/FDeriv/Comp.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
g : F → G
g' : F →L[𝕜] G
L' : Filter F
hg : HasFDerivAtFilter g g' (f x) L'
hf : HasFDerivAtFilter f f' x L
hL : Tendsto f L L'
⊢ HasFDerivAtFilter (g ∘ f) (g'.comp f') x L
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
g : F → G
g' : F →L[𝕜] G
L' : Filter F
hg : HasFDerivAtFilter g g' (f x) L'
hf : HasFDerivAtFilter f f' x L
hL : Tendsto f L L'
eq₁ : (fun x' => g' (f x' - f x - f' (x' - x))) =o[L] fun x' => x' - x :=
  IsBigO.trans_isLittleO (isBigO_comp g' (fun x' => f x' - f x - f' (x' - x)) L) hf.isLittleO
⊢ HasFDerivAtFilter (g ∘ f) (g'.comp f') x L
tactic: let eq₁ := (g'.isBigO_comp _ _).trans_isLittleO hf.isLittleO
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
g : F → G
g' : F →L[𝕜] G
L' : Filter F
hg : HasFDerivAtFilter g g' (f x) L'
hf : HasFDerivAtFilter f f' x L
hL : Tendsto f L L'
eq₁ : (fun x' => g' (f x' - f x - f' (x' - x))) =o[L] fun x' => x' - x :=
  IsBigO.trans_isLittleO (isBigO_comp g' (fun x' => f x' - f x - f' (x' - x)) L) hf.isLittleO
⊢ HasFDerivAtFilter (g ∘ f) (g'.comp f') x L
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
g : F → G
g' : F →L[𝕜] G
L' : Filter F
hg : HasFDerivAtFilter g g' (f x) L'
hf : HasFDerivAtFilter f f' x L
hL : Tendsto f L L'
eq₁ : (fun x' => g' (f x' - f x - f' (x' - x))) =o[L] fun x' => x' - x :=
  IsBigO.trans_isLittleO (isBigO_comp g' (fun x' => f x' - f x - f' (x' - x)) L) hf.isLittleO
eq₂ : ((fun x' => g x' - g (f x) - g' (x' - f x)) ∘ f) =o[L] fun x' => x' - x :=
  IsLittleO.trans_isBigO (IsLittleO.comp_tendsto hg.isLittleO hL) (isBigO_sub hf)
⊢ HasFDerivAtFilter (g ∘ f) (g'.comp f') x L
tactic: let eq₂ := (hg.isLittleO.comp_tendsto hL).trans_isBigO hf.isBigO_sub
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
g : F → G
g' : F →L[𝕜] G
L' : Filter F
hg : HasFDerivAtFilter g g' (f x) L'
hf : HasFDerivAtFilter f f' x L
hL : Tendsto f L L'
eq₁ : (fun x' => g' (f x' - f x - f' (x' - x))) =o[L] fun x' => x' - x :=
  IsBigO.trans_isLittleO (isBigO_comp g' (fun x' => f x' - f x - f' (x' - x)) L) hf.isLittleO
eq₂ : ((fun x' => g x' - g (f x) - g' (x' - f x)) ∘ f) =o[L] fun x' => x' - x :=
  IsLittleO.trans_isBigO (IsLittleO.comp_tendsto hg.isLittleO hL) (isBigO_sub hf)
⊢ HasFDerivAtFilter (g ∘ f) (g'.comp f') x L
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
g : F → G
g' : F →L[𝕜] G
L' : Filter F
hg : HasFDerivAtFilter g g' (f x) L'
hf : HasFDerivAtFilter f f' x L
hL : Tendsto f L L'
eq₁ : (fun x' => g' (f x' - f x - f' (x' - x))) =o[L] fun x' => x' - x :=
  IsBigO.trans_isLittleO (isBigO_comp g' (fun x' => f x' - f x - f' (x' - x)) L) hf.isLittleO
eq₂ : ((fun x' => g x' - g (f x) - g' (x' - f x)) ∘ f) =o[L] fun x' => x' - x :=
  IsLittleO.trans_isBigO (IsLittleO.comp_tendsto hg.isLittleO hL) (isBigO_sub hf)
x' : E
⊢ g' (f x' - f x - f' (x' - x)) = g' (f x' - f x) - (g'.comp f') (x' - x)
tactic: refine .of_isLittleO <| eq₂.triangle <| eq₁.congr_left fun x' => ?_
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
g : F → G
g' : F →L[𝕜] G
L' : Filter F
hg : HasFDerivAtFilter g g' (f x) L'
hf : HasFDerivAtFilter f f' x L
hL : Tendsto f L L'
eq₁ : (fun x' => g' (f x' - f x - f' (x' - x))) =o[L] fun x' => x' - x :=
  IsBigO.trans_isLittleO (isBigO_comp g' (fun x' => f x' - f x - f' (x' - x)) L) hf.isLittleO
eq₂ : ((fun x' => g x' - g (f x) - g' (x' - f x)) ∘ f) =o[L] fun x' => x' - x :=
  IsLittleO.trans_isBigO (IsLittleO.comp_tendsto hg.isLittleO hL) (isBigO_sub hf)
x' : E
⊢ g' (f x' - f x - f' (x' - x)) = g' (f x' - f x) - (g'.comp f') (x' - x)
state_after: no goals
tactic: simp