Theorem: HasFPowerSeriesOnBall.fderiv
File: Mathlib/Analysis/Calculus/FDerivAnalytic.lean

tactic: suffices A :
  HasFPowerSeriesOnBall
    (fun z => continuousMultilinearCurryFin1 𝕜 E F (p.changeOrigin (z - x) 1))
    ((continuousMultilinearCurryFin1 𝕜 E F :
          (E[×1]→L[𝕜] F) →L[𝕜] E →L[𝕜] F).compFormalMultilinearSeries
      (p.changeOriginSeries 1))
    x r
state_before: 𝕜 : Type u_2
inst✝⁵ : NontriviallyNormedField 𝕜
E : Type u_3
inst✝⁴ : NormedAddCommGroup E
inst✝³ : NormedSpace 𝕜 E
F : Type u_1
inst✝² : NormedAddCommGroup F
inst✝¹ : NormedSpace 𝕜 F
p : FormalMultilinearSeries 𝕜 E F
r : ℝ≥0∞
f : E → F
x : E
s : Set E
inst✝ : CompleteSpace F
h : HasFPowerSeriesOnBall f p x r
⊢ HasFPowerSeriesOnBall (_root_.fderiv 𝕜 f)
    (ContinuousLinearMap.compFormalMultilinearSeries
      (↑(ContinuousLinearEquiv.mk (continuousMultilinearCurryFin1 𝕜 E F).toLinearEquiv))
      (FormalMultilinearSeries.changeOriginSeries p 1))
    x r

tactic: suffices B :
  HasFPowerSeriesOnBall (fun z => p.changeOrigin (z - x) 1) (p.changeOriginSeries 1) x r
state_before: case A
𝕜 : Type u_2
inst✝⁵ : NontriviallyNormedField 𝕜
E : Type u_3
inst✝⁴ : NormedAddCommGroup E
inst✝³ : NormedSpace 𝕜 E
F : Type u_1
inst✝² : NormedAddCommGroup F
inst✝¹ : NormedSpace 𝕜 F
p : FormalMultilinearSeries 𝕜 E F
r : ℝ≥0∞
f : E → F
x : E
s : Set E
inst✝ : CompleteSpace F
h : HasFPowerSeriesOnBall f p x r
⊢ HasFPowerSeriesOnBall
    (fun z => ↑(continuousMultilinearCurryFin1 𝕜 E F) (FormalMultilinearSeries.changeOrigin p (z - x) 1))
    (ContinuousLinearMap.compFormalMultilinearSeries
      (↑(ContinuousLinearEquiv.mk (continuousMultilinearCurryFin1 𝕜 E F).toLinearEquiv))
      (FormalMultilinearSeries.changeOriginSeries p 1))
    x r

tactic: exact
  (continuousMultilinearCurryFin1 𝕜 E
            F).toContinuousLinearEquiv.toContinuousLinearMap.comp_hasFPowerSeriesOnBall
    B
state_before: case A
𝕜 : Type u_2
inst✝⁵ : NontriviallyNormedField 𝕜
E : Type u_3
inst✝⁴ : NormedAddCommGroup E
inst✝³ : NormedSpace 𝕜 E
F : Type u_1
inst✝² : NormedAddCommGroup F
inst✝¹ : NormedSpace 𝕜 F
p : FormalMultilinearSeries 𝕜 E F
r : ℝ≥0∞
f : E → F
x : E
s : Set E
inst✝ : CompleteSpace F
h : HasFPowerSeriesOnBall f p x r
B :
  HasFPowerSeriesOnBall (fun z => FormalMultilinearSeries.changeOrigin p (z - x) 1)
    (FormalMultilinearSeries.changeOriginSeries p 1) x r
⊢ HasFPowerSeriesOnBall
    (fun z => ↑(continuousMultilinearCurryFin1 𝕜 E F) (FormalMultilinearSeries.changeOrigin p (z - x) 1))
    (ContinuousLinearMap.compFormalMultilinearSeries
      (↑(ContinuousLinearEquiv.mk (continuousMultilinearCurryFin1 𝕜 E F).toLinearEquiv))
      (FormalMultilinearSeries.changeOriginSeries p 1))
    x r

case B
𝕜 : Type u_2
inst✝⁵ : NontriviallyNormedField 𝕜
E : Type u_3
inst✝⁴ : NormedAddCommGroup E
inst✝³ : NormedSpace 𝕜 E
F : Type u_1
inst✝² : NormedAddCommGroup F
inst✝¹ : NormedSpace 𝕜 F
p : FormalMultilinearSeries 𝕜 E F
r : ℝ≥0∞
f : E → F
x : E
s : Set E
inst✝ : CompleteSpace F
h : HasFPowerSeriesOnBall f p x r
⊢ HasFPowerSeriesOnBall (fun z => FormalMultilinearSeries.changeOrigin p (z - x) 1)
    (FormalMultilinearSeries.changeOriginSeries p 1) x r

tactic: simpa using
  ((p.hasFPowerSeriesOnBall_changeOrigin 1 (h.r_pos.trans_le h.r_le)).mono h.r_pos
        h.r_le).comp_sub
    x
state_before: case B
𝕜 : Type u_2
inst✝⁵ : NontriviallyNormedField 𝕜
E : Type u_3
inst✝⁴ : NormedAddCommGroup E
inst✝³ : NormedSpace 𝕜 E
F : Type u_1
inst✝² : NormedAddCommGroup F
inst✝¹ : NormedSpace 𝕜 F
p : FormalMultilinearSeries 𝕜 E F
r : ℝ≥0∞
f : E → F
x : E
s : Set E
inst✝ : CompleteSpace F
h : HasFPowerSeriesOnBall f p x r
⊢ HasFPowerSeriesOnBall (fun z => FormalMultilinearSeries.changeOrigin p (z - x) 1)
    (FormalMultilinearSeries.changeOriginSeries p 1) x r

tactic: apply A.congr
state_before: 𝕜 : Type u_2
inst✝⁵ : NontriviallyNormedField 𝕜
E : Type u_3
inst✝⁴ : NormedAddCommGroup E
inst✝³ : NormedSpace 𝕜 E
F : Type u_1
inst✝² : NormedAddCommGroup F
inst✝¹ : NormedSpace 𝕜 F
p : FormalMultilinearSeries 𝕜 E F
r : ℝ≥0∞
f : E → F
x : E
s : Set E
inst✝ : CompleteSpace F
h : HasFPowerSeriesOnBall f p x r
A :
  HasFPowerSeriesOnBall
    (fun z => ↑(continuousMultilinearCurryFin1 𝕜 E F) (FormalMultilinearSeries.changeOrigin p (z - x) 1))
    (ContinuousLinearMap.compFormalMultilinearSeries
      (↑(ContinuousLinearEquiv.mk (continuousMultilinearCurryFin1 𝕜 E F).toLinearEquiv))
      (FormalMultilinearSeries.changeOriginSeries p 1))
    x r
⊢ HasFPowerSeriesOnBall (_root_.fderiv 𝕜 f)
    (ContinuousLinearMap.compFormalMultilinearSeries
      (↑(ContinuousLinearEquiv.mk (continuousMultilinearCurryFin1 𝕜 E F).toLinearEquiv))
      (FormalMultilinearSeries.changeOriginSeries p 1))
    x r

tactic: intro z hz
state_before: 𝕜 : Type u_2
inst✝⁵ : NontriviallyNormedField 𝕜
E : Type u_3
inst✝⁴ : NormedAddCommGroup E
inst✝³ : NormedSpace 𝕜 E
F : Type u_1
inst✝² : NormedAddCommGroup F
inst✝¹ : NormedSpace 𝕜 F
p : FormalMultilinearSeries 𝕜 E F
r : ℝ≥0∞
f : E → F
x : E
s : Set E
inst✝ : CompleteSpace F
h : HasFPowerSeriesOnBall f p x r
A :
  HasFPowerSeriesOnBall
    (fun z => ↑(continuousMultilinearCurryFin1 𝕜 E F) (FormalMultilinearSeries.changeOrigin p (z - x) 1))
    (ContinuousLinearMap.compFormalMultilinearSeries
      (↑(ContinuousLinearEquiv.mk (continuousMultilinearCurryFin1 𝕜 E F).toLinearEquiv))
      (FormalMultilinearSeries.changeOriginSeries p 1))
    x r
⊢ Set.EqOn (fun z => ↑(continuousMultilinearCurryFin1 𝕜 E F) (FormalMultilinearSeries.changeOrigin p (z - x) 1))
    (_root_.fderiv 𝕜 f) (EMetric.ball x r)

tactic: dsimp
state_before: 𝕜 : Type u_2
inst✝⁵ : NontriviallyNormedField 𝕜
E : Type u_3
inst✝⁴ : NormedAddCommGroup E
inst✝³ : NormedSpace 𝕜 E
F : Type u_1
inst✝² : NormedAddCommGroup F
inst✝¹ : NormedSpace 𝕜 F
p : FormalMultilinearSeries 𝕜 E F
r : ℝ≥0∞
f : E → F
x : E
s : Set E
inst✝ : CompleteSpace F
h : HasFPowerSeriesOnBall f p x r
A :
  HasFPowerSeriesOnBall
    (fun z => ↑(continuousMultilinearCurryFin1 𝕜 E F) (FormalMultilinearSeries.changeOrigin p (z - x) 1))
    (ContinuousLinearMap.compFormalMultilinearSeries
      (↑(ContinuousLinearEquiv.mk (continuousMultilinearCurryFin1 𝕜 E F).toLinearEquiv))
      (FormalMultilinearSeries.changeOriginSeries p 1))
    x r
z : E
hz : z ∈ EMetric.ball x r
⊢ (fun z => ↑(continuousMultilinearCurryFin1 𝕜 E F) (FormalMultilinearSeries.changeOrigin p (z - x) 1)) z =
    _root_.fderiv 𝕜 f z

tactic: rw [← h.fderiv_eq, add_sub_cancel'_right]
state_before: 𝕜 : Type u_2
inst✝⁵ : NontriviallyNormedField 𝕜
E : Type u_3
inst✝⁴ : NormedAddCommGroup E
inst✝³ : NormedSpace 𝕜 E
F : Type u_1
inst✝² : NormedAddCommGroup F
inst✝¹ : NormedSpace 𝕜 F
p : FormalMultilinearSeries 𝕜 E F
r : ℝ≥0∞
f : E → F
x : E
s : Set E
inst✝ : CompleteSpace F
h : HasFPowerSeriesOnBall f p x r
A :
  HasFPowerSeriesOnBall
    (fun z => ↑(continuousMultilinearCurryFin1 𝕜 E F) (FormalMultilinearSeries.changeOrigin p (z - x) 1))
    (ContinuousLinearMap.compFormalMultilinearSeries
      (↑(ContinuousLinearEquiv.mk (continuousMultilinearCurryFin1 𝕜 E F).toLinearEquiv))
      (FormalMultilinearSeries.changeOriginSeries p 1))
    x r
z : E
hz : z ∈ EMetric.ball x r
⊢ ↑(continuousMultilinearCurryFin1 𝕜 E F) (FormalMultilinearSeries.changeOrigin p (z - x) 1) = _root_.fderiv 𝕜 f z

tactic: simpa only [edist_eq_coe_nnnorm_sub, EMetric.mem_ball] using hz
state_before: 𝕜 : Type u_2
inst✝⁵ : NontriviallyNormedField 𝕜
E : Type u_3
inst✝⁴ : NormedAddCommGroup E
inst✝³ : NormedSpace 𝕜 E
F : Type u_1
inst✝² : NormedAddCommGroup F
inst✝¹ : NormedSpace 𝕜 F
p : FormalMultilinearSeries 𝕜 E F
r : ℝ≥0∞
f : E → F
x : E
s : Set E
inst✝ : CompleteSpace F
h : HasFPowerSeriesOnBall f p x r
A :
  HasFPowerSeriesOnBall
    (fun z => ↑(continuousMultilinearCurryFin1 𝕜 E F) (FormalMultilinearSeries.changeOrigin p (z - x) 1))
    (ContinuousLinearMap.compFormalMultilinearSeries
      (↑(ContinuousLinearEquiv.mk (continuousMultilinearCurryFin1 𝕜 E F).toLinearEquiv))
      (FormalMultilinearSeries.changeOriginSeries p 1))
    x r
z : E
hz : z ∈ EMetric.ball x r
⊢ ↑‖z - x‖₊ < r