Theorem: FormalMultilinearSeries.compAlongComposition_bound
File: Mathlib/Analysis/Analytic/Composition.lean

Proof steps:
state_before: 𝕜 : Type u_1
E : Type u_2
F : Type u_3
G : Type u_4
H : Type u_5
inst✝⁸ : NontriviallyNormedField 𝕜
inst✝⁷ : NormedAddCommGroup E
inst✝⁶ : NormedSpace 𝕜 E
inst✝⁵ : NormedAddCommGroup F
inst✝⁴ : NormedSpace 𝕜 F
inst✝³ : NormedAddCommGroup G
inst✝² : NormedSpace 𝕜 G
inst✝¹ : NormedAddCommGroup H
inst✝ : NormedSpace 𝕜 H
n : ℕ
p : FormalMultilinearSeries 𝕜 E F
c : Composition n
f : ContinuousMultilinearMap 𝕜 (fun _i => F) G
v : Fin n → E
⊢ ‖f‖ * ∏ i : Fin c.length, ‖p.applyComposition c v i‖ ≤
    ‖f‖ * ∏ i : Fin c.length, ‖p (c.blocksFun i)‖ * ∏ j : Fin (c.blocksFun i), ‖(v ∘ ⇑(c.embedding i)) j‖
state_after: 𝕜 : Type u_1
E : Type u_2
F : Type u_3
G : Type u_4
H : Type u_5
inst✝⁸ : NontriviallyNormedField 𝕜
inst✝⁷ : NormedAddCommGroup E
inst✝⁶ : NormedSpace 𝕜 E
inst✝⁵ : NormedAddCommGroup F
inst✝⁴ : NormedSpace 𝕜 F
inst✝³ : NormedAddCommGroup G
inst✝² : NormedSpace 𝕜 G
inst✝¹ : NormedAddCommGroup H
inst✝ : NormedSpace 𝕜 H
n : ℕ
p : FormalMultilinearSeries 𝕜 E F
c : Composition n
f : ContinuousMultilinearMap 𝕜 (fun _i => F) G
v : Fin n → E
⊢ ∏ i : Fin c.length, ‖p.applyComposition c v i‖ ≤
    ∏ i : Fin c.length, ‖p (c.blocksFun i)‖ * ∏ j : Fin (c.blocksFun i), ‖(v ∘ ⇑(c.embedding i)) j‖
tactic: apply mul_le_mul_of_nonneg_left _ (norm_nonneg _)
state_before: 𝕜 : Type u_1
E : Type u_2
F : Type u_3
G : Type u_4
H : Type u_5
inst✝⁸ : NontriviallyNormedField 𝕜
inst✝⁷ : NormedAddCommGroup E
inst✝⁶ : NormedSpace 𝕜 E
inst✝⁵ : NormedAddCommGroup F
inst✝⁴ : NormedSpace 𝕜 F
inst✝³ : NormedAddCommGroup G
inst✝² : NormedSpace 𝕜 G
inst✝¹ : NormedAddCommGroup H
inst✝ : NormedSpace 𝕜 H
n : ℕ
p : FormalMultilinearSeries 𝕜 E F
c : Composition n
f : ContinuousMultilinearMap 𝕜 (fun _i => F) G
v : Fin n → E
⊢ ∏ i : Fin c.length, ‖p.applyComposition c v i‖ ≤
    ∏ i : Fin c.length, ‖p (c.blocksFun i)‖ * ∏ j : Fin (c.blocksFun i), ‖(v ∘ ⇑(c.embedding i)) j‖
state_after: 𝕜 : Type u_1
E : Type u_2
F : Type u_3
G : Type u_4
H : Type u_5
inst✝⁸ : NontriviallyNormedField 𝕜
inst✝⁷ : NormedAddCommGroup E
inst✝⁶ : NormedSpace 𝕜 E
inst✝⁵ : NormedAddCommGroup F
inst✝⁴ : NormedSpace 𝕜 F
inst✝³ : NormedAddCommGroup G
inst✝² : NormedSpace 𝕜 G
inst✝¹ : NormedAddCommGroup H
inst✝ : NormedSpace 𝕜 H
n : ℕ
p : FormalMultilinearSeries 𝕜 E F
c : Composition n
f : ContinuousMultilinearMap 𝕜 (fun _i => F) G
v : Fin n → E
i : Fin c.length
_hi : i ∈ Finset.univ
⊢ ‖p.applyComposition c v i‖ ≤ ‖p (c.blocksFun i)‖ * ∏ j : Fin (c.blocksFun i), ‖(v ∘ ⇑(c.embedding i)) j‖
tactic: refine Finset.prod_le_prod (fun i _hi => norm_nonneg _) fun i _hi => ?_
state_before: 𝕜 : Type u_1
E : Type u_2
F : Type u_3
G : Type u_4
H : Type u_5
inst✝⁸ : NontriviallyNormedField 𝕜
inst✝⁷ : NormedAddCommGroup E
inst✝⁶ : NormedSpace 𝕜 E
inst✝⁵ : NormedAddCommGroup F
inst✝⁴ : NormedSpace 𝕜 F
inst✝³ : NormedAddCommGroup G
inst✝² : NormedSpace 𝕜 G
inst✝¹ : NormedAddCommGroup H
inst✝ : NormedSpace 𝕜 H
n : ℕ
p : FormalMultilinearSeries 𝕜 E F
c : Composition n
f : ContinuousMultilinearMap 𝕜 (fun _i => F) G
v : Fin n → E
i : Fin c.length
_hi : i ∈ Finset.univ
⊢ ‖p.applyComposition c v i‖ ≤ ‖p (c.blocksFun i)‖ * ∏ j : Fin (c.blocksFun i), ‖(v ∘ ⇑(c.embedding i)) j‖
state_after: no goals
tactic: apply ContinuousMultilinearMap.le_opNorm
state_before: 𝕜 : Type u_1
E : Type u_2
F : Type u_3
G : Type u_4
H : Type u_5
inst✝⁸ : NontriviallyNormedField 𝕜
inst✝⁷ : NormedAddCommGroup E
inst✝⁶ : NormedSpace 𝕜 E
inst✝⁵ : NormedAddCommGroup F
inst✝⁴ : NormedSpace 𝕜 F
inst✝³ : NormedAddCommGroup G
inst✝² : NormedSpace 𝕜 G
inst✝¹ : NormedAddCommGroup H
inst✝ : NormedSpace 𝕜 H
n : ℕ
p : FormalMultilinearSeries 𝕜 E F
c : Composition n
f : ContinuousMultilinearMap 𝕜 (fun _i => F) G
v : Fin n → E
⊢ ‖f‖ * ∏ i : Fin c.length, ‖p (c.blocksFun i)‖ * ∏ j : Fin (c.blocksFun i), ‖(v ∘ ⇑(c.embedding i)) j‖ =
    (‖f‖ * ∏ i : Fin c.length, ‖p (c.blocksFun i)‖) *
      ∏ i : Fin c.length, ∏ j : Fin (c.blocksFun i), ‖(v ∘ ⇑(c.embedding i)) j‖
state_after: no goals
tactic: rw [Finset.prod_mul_distrib, mul_assoc]
state_before: 𝕜 : Type u_1
E : Type u_2
F : Type u_3
G : Type u_4
H : Type u_5
inst✝⁸ : NontriviallyNormedField 𝕜
inst✝⁷ : NormedAddCommGroup E
inst✝⁶ : NormedSpace 𝕜 E
inst✝⁵ : NormedAddCommGroup F
inst✝⁴ : NormedSpace 𝕜 F
inst✝³ : NormedAddCommGroup G
inst✝² : NormedSpace 𝕜 G
inst✝¹ : NormedAddCommGroup H
inst✝ : NormedSpace 𝕜 H
n : ℕ
p : FormalMultilinearSeries 𝕜 E F
c : Composition n
f : ContinuousMultilinearMap 𝕜 (fun _i => F) G
v : Fin n → E
⊢ (‖f‖ * ∏ i : Fin c.length, ‖p (c.blocksFun i)‖) *
      ∏ i : Fin c.length, ∏ j : Fin (c.blocksFun i), ‖(v ∘ ⇑(c.embedding i)) j‖ =
    (‖f‖ * ∏ i : Fin c.length, ‖p (c.blocksFun i)‖) * ∏ i : Fin n, ‖v i‖
state_after: 𝕜 : Type u_1
E : Type u_2
F : Type u_3
G : Type u_4
H : Type u_5
inst✝⁸ : NontriviallyNormedField 𝕜
inst✝⁷ : NormedAddCommGroup E
inst✝⁶ : NormedSpace 𝕜 E
inst✝⁵ : NormedAddCommGroup F
inst✝⁴ : NormedSpace 𝕜 F
inst✝³ : NormedAddCommGroup G
inst✝² : NormedSpace 𝕜 G
inst✝¹ : NormedAddCommGroup H
inst✝ : NormedSpace 𝕜 H
n : ℕ
p : FormalMultilinearSeries 𝕜 E F
c : Composition n
f : ContinuousMultilinearMap 𝕜 (fun _i => F) G
v : Fin n → E
⊢ (‖f‖ * ∏ i : Fin c.length, ‖p (c.blocksFun i)‖) *
      ∏ i : Fin c.length, ∏ j : Fin (c.blocksFun i), ‖(v ∘ ⇑(c.embedding i)) j‖ =
    (‖f‖ * ∏ i : Fin c.length, ‖p (c.blocksFun i)‖) *
      ∏ a : Fin c.length, ∏ s : Fin (c.blocksFun a), ‖v (c.blocksFinEquiv ⟨a, s⟩)‖
tactic: rw [← c.blocksFinEquiv.prod_comp, ← Finset.univ_sigma_univ, Finset.prod_sigma]
state_before: 𝕜 : Type u_1
E : Type u_2
F : Type u_3
G : Type u_4
H : Type u_5
inst✝⁸ : NontriviallyNormedField 𝕜
inst✝⁷ : NormedAddCommGroup E
inst✝⁶ : NormedSpace 𝕜 E
inst✝⁵ : NormedAddCommGroup F
inst✝⁴ : NormedSpace 𝕜 F
inst✝³ : NormedAddCommGroup G
inst✝² : NormedSpace 𝕜 G
inst✝¹ : NormedAddCommGroup H
inst✝ : NormedSpace 𝕜 H
n : ℕ
p : FormalMultilinearSeries 𝕜 E F
c : Composition n
f : ContinuousMultilinearMap 𝕜 (fun _i => F) G
v : Fin n → E
⊢ (‖f‖ * ∏ i : Fin c.length, ‖p (c.blocksFun i)‖) *
      ∏ i : Fin c.length, ∏ j : Fin (c.blocksFun i), ‖(v ∘ ⇑(c.embedding i)) j‖ =
    (‖f‖ * ∏ i : Fin c.length, ‖p (c.blocksFun i)‖) *
      ∏ a : Fin c.length, ∏ s : Fin (c.blocksFun a), ‖v (c.blocksFinEquiv ⟨a, s⟩)‖
state_after: no goals
tactic: congr