Theorem: HasFTaylorSeriesUpToOn.prod
File: Mathlib/Analysis/Calculus/ContDiff.lean

tactic: set L := fun m => ContinuousMultilinearMap.prodL 𝕜 (fun i : Fin m => E) F G
state_before: 𝕜 : Type u_1
inst✝¹⁰ : NontriviallyNormedField 𝕜
D : Type uD
inst✝⁹ : NormedAddCommGroup D
inst✝⁸ : NormedSpace 𝕜 D
E : Type uE
inst✝⁷ : NormedAddCommGroup E
inst✝⁶ : NormedSpace 𝕜 E
F : Type uF
inst✝⁵ : NormedAddCommGroup F
inst✝⁴ : NormedSpace 𝕜 F
G : Type uG
inst✝³ : NormedAddCommGroup G
inst✝² : NormedSpace 𝕜 G
X : Type ?u.591998
inst✝¹ : NormedAddCommGroup X
inst✝ : NormedSpace 𝕜 X
s s₁ t u : Set E
f f₁ : E → F
g✝ : F → G
x x₀ : E
c : F
b : E × F → G
m n : ℕ∞
p : E → FormalMultilinearSeries 𝕜 E F
hf : HasFTaylorSeriesUpToOn n f p s
g : E → G
q : E → FormalMultilinearSeries 𝕜 E G
hg : HasFTaylorSeriesUpToOn n g q s
⊢ HasFTaylorSeriesUpToOn n (fun y => (f y, g y)) (fun y k => ContinuousMultilinearMap.prod (p y k) (q y k)) s

tactic: constructor
state_before: 𝕜 : Type u_1
inst✝¹⁰ : NontriviallyNormedField 𝕜
D : Type uD
inst✝⁹ : NormedAddCommGroup D
inst✝⁸ : NormedSpace 𝕜 D
E : Type uE
inst✝⁷ : NormedAddCommGroup E
inst✝⁶ : NormedSpace 𝕜 E
F : Type uF
inst✝⁵ : NormedAddCommGroup F
inst✝⁴ : NormedSpace 𝕜 F
G : Type uG
inst✝³ : NormedAddCommGroup G
inst✝² : NormedSpace 𝕜 G
X : Type ?u.591998
inst✝¹ : NormedAddCommGroup X
inst✝ : NormedSpace 𝕜 X
s s₁ t u : Set E
f f₁ : E → F
g✝ : F → G
x x₀ : E
c : F
b : E × F → G
m n : ℕ∞
p : E → FormalMultilinearSeries 𝕜 E F
hf : HasFTaylorSeriesUpToOn n f p s
g : E → G
q : E → FormalMultilinearSeries 𝕜 E G
hg : HasFTaylorSeriesUpToOn n g q s
L : (m : ℕ) →
  ContinuousMultilinearMap 𝕜 (fun i => E) F × ContinuousMultilinearMap 𝕜 (fun i => E) G ≃ₗᵢ[𝕜]
    ContinuousMultilinearMap 𝕜 (fun i => E) (F × G) :=
  fun m => ContinuousMultilinearMap.prodL 𝕜 (fun i => E) F G
⊢ HasFTaylorSeriesUpToOn n (fun y => (f y, g y)) (fun y k => ContinuousMultilinearMap.prod (p y k) (q y k)) s

tactic: intro x hx
state_before: case zero_eq
𝕜 : Type u_1
inst✝¹⁰ : NontriviallyNormedField 𝕜
D : Type uD
inst✝⁹ : NormedAddCommGroup D
inst✝⁸ : NormedSpace 𝕜 D
E : Type uE
inst✝⁷ : NormedAddCommGroup E
inst✝⁶ : NormedSpace 𝕜 E
F : Type uF
inst✝⁵ : NormedAddCommGroup F
inst✝⁴ : NormedSpace 𝕜 F
G : Type uG
inst✝³ : NormedAddCommGroup G
inst✝² : NormedSpace 𝕜 G
X : Type ?u.591998
inst✝¹ : NormedAddCommGroup X
inst✝ : NormedSpace 𝕜 X
s s₁ t u : Set E
f f₁ : E → F
g✝ : F → G
x x₀ : E
c : F
b : E × F → G
m n : ℕ∞
p : E → FormalMultilinearSeries 𝕜 E F
hf : HasFTaylorSeriesUpToOn n f p s
g : E → G
q : E → FormalMultilinearSeries 𝕜 E G
hg : HasFTaylorSeriesUpToOn n g q s
L : (m : ℕ) →
  ContinuousMultilinearMap 𝕜 (fun i => E) F × ContinuousMultilinearMap 𝕜 (fun i => E) G ≃ₗᵢ[𝕜]
    ContinuousMultilinearMap 𝕜 (fun i => E) (F × G) :=
  fun m => ContinuousMultilinearMap.prodL 𝕜 (fun i => E) F G
⊢ ∀ (x : E), x ∈ s → ContinuousMultilinearMap.uncurry0 (ContinuousMultilinearMap.prod (p x 0) (q x 0)) = (f x, g x)

tactic: rw [← hf.zero_eq x hx, ← hg.zero_eq x hx]
state_before: case zero_eq
𝕜 : Type u_1
inst✝¹⁰ : NontriviallyNormedField 𝕜
D : Type uD
inst✝⁹ : NormedAddCommGroup D
inst✝⁸ : NormedSpace 𝕜 D
E : Type uE
inst✝⁷ : NormedAddCommGroup E
inst✝⁶ : NormedSpace 𝕜 E
F : Type uF
inst✝⁵ : NormedAddCommGroup F
inst✝⁴ : NormedSpace 𝕜 F
G : Type uG
inst✝³ : NormedAddCommGroup G
inst✝² : NormedSpace 𝕜 G
X : Type ?u.591998
inst✝¹ : NormedAddCommGroup X
inst✝ : NormedSpace 𝕜 X
s s₁ t u : Set E
f f₁ : E → F
g✝ : F → G
x✝ x₀ : E
c : F
b : E × F → G
m n : ℕ∞
p : E → FormalMultilinearSeries 𝕜 E F
hf : HasFTaylorSeriesUpToOn n f p s
g : E → G
q : E → FormalMultilinearSeries 𝕜 E G
hg : HasFTaylorSeriesUpToOn n g q s
L : (m : ℕ) →
  ContinuousMultilinearMap 𝕜 (fun i => E) F × ContinuousMultilinearMap 𝕜 (fun i => E) G ≃ₗᵢ[𝕜]
    ContinuousMultilinearMap 𝕜 (fun i => E) (F × G) :=
  fun m => ContinuousMultilinearMap.prodL 𝕜 (fun i => E) F G
x : E
hx : x ∈ s
⊢ ContinuousMultilinearMap.uncurry0 (ContinuousMultilinearMap.prod (p x 0) (q x 0)) = (f x, g x)

tactic: rfl
state_before: case zero_eq
𝕜 : Type u_1
inst✝¹⁰ : NontriviallyNormedField 𝕜
D : Type uD
inst✝⁹ : NormedAddCommGroup D
inst✝⁸ : NormedSpace 𝕜 D
E : Type uE
inst✝⁷ : NormedAddCommGroup E
inst✝⁶ : NormedSpace 𝕜 E
F : Type uF
inst✝⁵ : NormedAddCommGroup F
inst✝⁴ : NormedSpace 𝕜 F
G : Type uG
inst✝³ : NormedAddCommGroup G
inst✝² : NormedSpace 𝕜 G
X : Type ?u.591998
inst✝¹ : NormedAddCommGroup X
inst✝ : NormedSpace 𝕜 X
s s₁ t u : Set E
f f₁ : E → F
g✝ : F → G
x✝ x₀ : E
c : F
b : E × F → G
m n : ℕ∞
p : E → FormalMultilinearSeries 𝕜 E F
hf : HasFTaylorSeriesUpToOn n f p s
g : E → G
q : E → FormalMultilinearSeries 𝕜 E G
hg : HasFTaylorSeriesUpToOn n g q s
L : (m : ℕ) →
  ContinuousMultilinearMap 𝕜 (fun i => E) F × ContinuousMultilinearMap 𝕜 (fun i => E) G ≃ₗᵢ[𝕜]
    ContinuousMultilinearMap 𝕜 (fun i => E) (F × G) :=
  fun m => ContinuousMultilinearMap.prodL 𝕜 (fun i => E) F G
x : E
hx : x ∈ s
⊢ ContinuousMultilinearMap.uncurry0 (ContinuousMultilinearMap.prod (p x 0) (q x 0)) =
    (ContinuousMultilinearMap.uncurry0 (p x 0), ContinuousMultilinearMap.uncurry0 (q x 0))

tactic: intro m hm x hx
state_before: case fderivWithin
𝕜 : Type u_1
inst✝¹⁰ : NontriviallyNormedField 𝕜
D : Type uD
inst✝⁹ : NormedAddCommGroup D
inst✝⁸ : NormedSpace 𝕜 D
E : Type uE
inst✝⁷ : NormedAddCommGroup E
inst✝⁶ : NormedSpace 𝕜 E
F : Type uF
inst✝⁵ : NormedAddCommGroup F
inst✝⁴ : NormedSpace 𝕜 F
G : Type uG
inst✝³ : NormedAddCommGroup G
inst✝² : NormedSpace 𝕜 G
X : Type ?u.591998
inst✝¹ : NormedAddCommGroup X
inst✝ : NormedSpace 𝕜 X
s s₁ t u : Set E
f f₁ : E → F
g✝ : F → G
x x₀ : E
c : F
b : E × F → G
m n : ℕ∞
p : E → FormalMultilinearSeries 𝕜 E F
hf : HasFTaylorSeriesUpToOn n f p s
g : E → G
q : E → FormalMultilinearSeries 𝕜 E G
hg : HasFTaylorSeriesUpToOn n g q s
L : (m : ℕ) →
  ContinuousMultilinearMap 𝕜 (fun i => E) F × ContinuousMultilinearMap 𝕜 (fun i => E) G ≃ₗᵢ[𝕜]
    ContinuousMultilinearMap 𝕜 (fun i => E) (F × G) :=
  fun m => ContinuousMultilinearMap.prodL 𝕜 (fun i => E) F G
⊢ ∀ (m : ℕ),
    ↑m < n →
      ∀ (x : E),
        x ∈ s →
          HasFDerivWithinAt (fun x => ContinuousMultilinearMap.prod (p x m) (q x m))
            (ContinuousMultilinearMap.curryLeft (ContinuousMultilinearMap.prod (p x (Nat.succ m)) (q x (Nat.succ m)))) s
            x

tactic: convert (L m).hasFDerivAt.comp_hasFDerivWithinAt x
    ((hf.fderivWithin m hm x hx).prod (hg.fderivWithin m hm x hx))
state_before: case fderivWithin
𝕜 : Type u_1
inst✝¹⁰ : NontriviallyNormedField 𝕜
D : Type uD
inst✝⁹ : NormedAddCommGroup D
inst✝⁸ : NormedSpace 𝕜 D
E : Type uE
inst✝⁷ : NormedAddCommGroup E
inst✝⁶ : NormedSpace 𝕜 E
F : Type uF
inst✝⁵ : NormedAddCommGroup F
inst✝⁴ : NormedSpace 𝕜 F
G : Type uG
inst✝³ : NormedAddCommGroup G
inst✝² : NormedSpace 𝕜 G
X : Type ?u.591998
inst✝¹ : NormedAddCommGroup X
inst✝ : NormedSpace 𝕜 X
s s₁ t u : Set E
f f₁ : E → F
g✝ : F → G
x✝ x₀ : E
c : F
b : E × F → G
m✝ n : ℕ∞
p : E → FormalMultilinearSeries 𝕜 E F
hf : HasFTaylorSeriesUpToOn n f p s
g : E → G
q : E → FormalMultilinearSeries 𝕜 E G
hg : HasFTaylorSeriesUpToOn n g q s
L : (m : ℕ) →
  ContinuousMultilinearMap 𝕜 (fun i => E) F × ContinuousMultilinearMap 𝕜 (fun i => E) G ≃ₗᵢ[𝕜]
    ContinuousMultilinearMap 𝕜 (fun i => E) (F × G) :=
  fun m => ContinuousMultilinearMap.prodL 𝕜 (fun i => E) F G
m : ℕ
hm : ↑m < n
x : E
hx : x ∈ s
⊢ HasFDerivWithinAt (fun x => ContinuousMultilinearMap.prod (p x m) (q x m))
    (ContinuousMultilinearMap.curryLeft (ContinuousMultilinearMap.prod (p x (Nat.succ m)) (q x (Nat.succ m)))) s x

tactic: intro m hm
state_before: case cont
𝕜 : Type u_1
inst✝¹⁰ : NontriviallyNormedField 𝕜
D : Type uD
inst✝⁹ : NormedAddCommGroup D
inst✝⁸ : NormedSpace 𝕜 D
E : Type uE
inst✝⁷ : NormedAddCommGroup E
inst✝⁶ : NormedSpace 𝕜 E
F : Type uF
inst✝⁵ : NormedAddCommGroup F
inst✝⁴ : NormedSpace 𝕜 F
G : Type uG
inst✝³ : NormedAddCommGroup G
inst✝² : NormedSpace 𝕜 G
X : Type ?u.591998
inst✝¹ : NormedAddCommGroup X
inst✝ : NormedSpace 𝕜 X
s s₁ t u : Set E
f f₁ : E → F
g✝ : F → G
x x₀ : E
c : F
b : E × F → G
m n : ℕ∞
p : E → FormalMultilinearSeries 𝕜 E F
hf : HasFTaylorSeriesUpToOn n f p s
g : E → G
q : E → FormalMultilinearSeries 𝕜 E G
hg : HasFTaylorSeriesUpToOn n g q s
L : (m : ℕ) →
  ContinuousMultilinearMap 𝕜 (fun i => E) F × ContinuousMultilinearMap 𝕜 (fun i => E) G ≃ₗᵢ[𝕜]
    ContinuousMultilinearMap 𝕜 (fun i => E) (F × G) :=
  fun m => ContinuousMultilinearMap.prodL 𝕜 (fun i => E) F G
⊢ ∀ (m : ℕ), ↑m ≤ n → ContinuousOn (fun x => ContinuousMultilinearMap.prod (p x m) (q x m)) s

tactic: exact (L m).continuous.comp_continuousOn ((hf.cont m hm).prod (hg.cont m hm))
state_before: case cont
𝕜 : Type u_1
inst✝¹⁰ : NontriviallyNormedField 𝕜
D : Type uD
inst✝⁹ : NormedAddCommGroup D
inst✝⁸ : NormedSpace 𝕜 D
E : Type uE
inst✝⁷ : NormedAddCommGroup E
inst✝⁶ : NormedSpace 𝕜 E
F : Type uF
inst✝⁵ : NormedAddCommGroup F
inst✝⁴ : NormedSpace 𝕜 F
G : Type uG
inst✝³ : NormedAddCommGroup G
inst✝² : NormedSpace 𝕜 G
X : Type ?u.591998
inst✝¹ : NormedAddCommGroup X
inst✝ : NormedSpace 𝕜 X
s s₁ t u : Set E
f f₁ : E → F
g✝ : F → G
x x₀ : E
c : F
b : E × F → G
m✝ n : ℕ∞
p : E → FormalMultilinearSeries 𝕜 E F
hf : HasFTaylorSeriesUpToOn n f p s
g : E → G
q : E → FormalMultilinearSeries 𝕜 E G
hg : HasFTaylorSeriesUpToOn n g q s
L : (m : ℕ) →
  ContinuousMultilinearMap 𝕜 (fun i => E) F × ContinuousMultilinearMap 𝕜 (fun i => E) G ≃ₗᵢ[𝕜]
    ContinuousMultilinearMap 𝕜 (fun i => E) (F × G) :=
  fun m => ContinuousMultilinearMap.prodL 𝕜 (fun i => E) F G
m : ℕ
hm : ↑m ≤ n
⊢ ContinuousOn (fun x => ContinuousMultilinearMap.prod (p x m) (q x m)) s