[GOAL]
𝕜 : Type u_1
E : Type u_2
F : Type u_3
G : Type u_4
H : Type u_5
inst✝¹⁵ : CommRing 𝕜
inst✝¹⁴ : AddCommGroup E
inst✝¹³ : AddCommGroup F
inst✝¹² : AddCommGroup G
inst✝¹¹ : Module 𝕜 E
inst✝¹⁰ : Module 𝕜 F
inst✝⁹ : Module 𝕜 G
inst✝⁸ : TopologicalSpace E
inst✝⁷ : TopologicalSpace F
inst✝⁶ : TopologicalSpace G
inst✝⁵ : TopologicalAddGroup E
inst✝⁴ : ContinuousConstSMul 𝕜 E
inst✝³ : TopologicalAddGroup F
inst✝² : ContinuousConstSMul 𝕜 F
inst✝¹ : TopologicalAddGroup G
inst✝ : ContinuousConstSMul 𝕜 G
p : FormalMultilinearSeries 𝕜 E F
n : ℕ
⊢ applyComposition p (Composition.ones n) = fun v i =>
    ↑(p 1) fun x => v (Fin.castLE (_ : Composition.length (Composition.ones n) ≤ n) i)
[PROOFSTEP]
funext v i
[GOAL]
case h.h
𝕜 : Type u_1
E : Type u_2
F : Type u_3
G : Type u_4
H : Type u_5
inst✝¹⁵ : CommRing 𝕜
inst✝¹⁴ : AddCommGroup E
inst✝¹³ : AddCommGroup F
inst✝¹² : AddCommGroup G
inst✝¹¹ : Module 𝕜 E
inst✝¹⁰ : Module 𝕜 F
inst✝⁹ : Module 𝕜 G
inst✝⁸ : TopologicalSpace E
inst✝⁷ : TopologicalSpace F
inst✝⁶ : TopologicalSpace G
inst✝⁵ : TopologicalAddGroup E
inst✝⁴ : ContinuousConstSMul 𝕜 E
inst✝³ : TopologicalAddGroup F
inst✝² : ContinuousConstSMul 𝕜 F
inst✝¹ : TopologicalAddGroup G
inst✝ : ContinuousConstSMul 𝕜 G
p : FormalMultilinearSeries 𝕜 E F
n : ℕ
v : Fin n → E
i : Fin (Composition.length (Composition.ones n))
⊢ applyComposition p (Composition.ones n) v i =
    ↑(p 1) fun x => v (Fin.castLE (_ : Composition.length (Composition.ones n) ≤ n) i)
[PROOFSTEP]
apply p.congr (Composition.ones_blocksFun _ _)
[GOAL]
case h.h
𝕜 : Type u_1
E : Type u_2
F : Type u_3
G : Type u_4
H : Type u_5
inst✝¹⁵ : CommRing 𝕜
inst✝¹⁴ : AddCommGroup E
inst✝¹³ : AddCommGroup F
inst✝¹² : AddCommGroup G
inst✝¹¹ : Module 𝕜 E
inst✝¹⁰ : Module 𝕜 F
inst✝⁹ : Module 𝕜 G
inst✝⁸ : TopologicalSpace E
inst✝⁷ : TopologicalSpace F
inst✝⁶ : TopologicalSpace G
inst✝⁵ : TopologicalAddGroup E
inst✝⁴ : ContinuousConstSMul 𝕜 E
inst✝³ : TopologicalAddGroup F
inst✝² : ContinuousConstSMul 𝕜 F
inst✝¹ : TopologicalAddGroup G
inst✝ : ContinuousConstSMul 𝕜 G
p : FormalMultilinearSeries 𝕜 E F
n : ℕ
v : Fin n → E
i : Fin (Composition.length (Composition.ones n))
⊢ ∀ (i_1 : ℕ) (him : i_1 < Composition.blocksFun (Composition.ones n) i),
    i_1 < 1 →
      (v ∘ ↑(Composition.embedding (Composition.ones n) i)) { val := i_1, isLt := him } =
        v (Fin.castLE (_ : Composition.length (Composition.ones n) ≤ n) i)
[PROOFSTEP]
intro j hjn hj1
[GOAL]
case h.h
𝕜 : Type u_1
E : Type u_2
F : Type u_3
G : Type u_4
H : Type u_5
inst✝¹⁵ : CommRing 𝕜
inst✝¹⁴ : AddCommGroup E
inst✝¹³ : AddCommGroup F
inst✝¹² : AddCommGroup G
inst✝¹¹ : Module 𝕜 E
inst✝¹⁰ : Module 𝕜 F
inst✝⁹ : Module 𝕜 G
inst✝⁸ : TopologicalSpace E
inst✝⁷ : TopologicalSpace F
inst✝⁶ : TopologicalSpace G
inst✝⁵ : TopologicalAddGroup E
inst✝⁴ : ContinuousConstSMul 𝕜 E
inst✝³ : TopologicalAddGroup F
inst✝² : ContinuousConstSMul 𝕜 F
inst✝¹ : TopologicalAddGroup G
inst✝ : ContinuousConstSMul 𝕜 G
p : FormalMultilinearSeries 𝕜 E F
n : ℕ
v : Fin n → E
i : Fin (Composition.length (Composition.ones n))
j : ℕ
hjn : j < Composition.blocksFun (Composition.ones n) i
hj1 : j < 1
⊢ (v ∘ ↑(Composition.embedding (Composition.ones n) i)) { val := j, isLt := hjn } =
    v (Fin.castLE (_ : Composition.length (Composition.ones n) ≤ n) i)
[PROOFSTEP]
obtain rfl : j = 0 := by linarith
[GOAL]
𝕜 : Type u_1
E : Type u_2
F : Type u_3
G : Type u_4
H : Type u_5
inst✝¹⁵ : CommRing 𝕜
inst✝¹⁴ : AddCommGroup E
inst✝¹³ : AddCommGroup F
inst✝¹² : AddCommGroup G
inst✝¹¹ : Module 𝕜 E
inst✝¹⁰ : Module 𝕜 F
inst✝⁹ : Module 𝕜 G
inst✝⁸ : TopologicalSpace E
inst✝⁷ : TopologicalSpace F
inst✝⁶ : TopologicalSpace G
inst✝⁵ : TopologicalAddGroup E
inst✝⁴ : ContinuousConstSMul 𝕜 E
inst✝³ : TopologicalAddGroup F
inst✝² : ContinuousConstSMul 𝕜 F
inst✝¹ : TopologicalAddGroup G
inst✝ : ContinuousConstSMul 𝕜 G
p : FormalMultilinearSeries 𝕜 E F
n : ℕ
v : Fin n → E
i : Fin (Composition.length (Composition.ones n))
j : ℕ
hjn : j < Composition.blocksFun (Composition.ones n) i
hj1 : j < 1
⊢ j = 0
[PROOFSTEP]
linarith
[GOAL]
case h.h
𝕜 : Type u_1
E : Type u_2
F : Type u_3
G : Type u_4
H : Type u_5
inst✝¹⁵ : CommRing 𝕜
inst✝¹⁴ : AddCommGroup E
inst✝¹³ : AddCommGroup F
inst✝¹² : AddCommGroup G
inst✝¹¹ : Module 𝕜 E
inst✝¹⁰ : Module 𝕜 F
inst✝⁹ : Module 𝕜 G
inst✝⁸ : TopologicalSpace E
inst✝⁷ : TopologicalSpace F
inst✝⁶ : TopologicalSpace G
inst✝⁵ : TopologicalAddGroup E
inst✝⁴ : ContinuousConstSMul 𝕜 E
inst✝³ : TopologicalAddGroup F
inst✝² : ContinuousConstSMul 𝕜 F
inst✝¹ : TopologicalAddGroup G
inst✝ : ContinuousConstSMul 𝕜 G
p : FormalMultilinearSeries 𝕜 E F
n : ℕ
v : Fin n → E
i : Fin (Composition.length (Composition.ones n))
hjn : 0 < Composition.blocksFun (Composition.ones n) i
hj1 : 0 < 1
⊢ (v ∘ ↑(Composition.embedding (Composition.ones n) i)) { val := 0, isLt := hjn } =
    v (Fin.castLE (_ : Composition.length (Composition.ones n) ≤ n) i)
[PROOFSTEP]
refine' congr_arg v _
[GOAL]
case h.h
𝕜 : Type u_1
E : Type u_2
F : Type u_3
G : Type u_4
H : Type u_5
inst✝¹⁵ : CommRing 𝕜
inst✝¹⁴ : AddCommGroup E
inst✝¹³ : AddCommGroup F
inst✝¹² : AddCommGroup G
inst✝¹¹ : Module 𝕜 E
inst✝¹⁰ : Module 𝕜 F
inst✝⁹ : Module 𝕜 G
inst✝⁸ : TopologicalSpace E
inst✝⁷ : TopologicalSpace F
inst✝⁶ : TopologicalSpace G
inst✝⁵ : TopologicalAddGroup E
inst✝⁴ : ContinuousConstSMul 𝕜 E
inst✝³ : TopologicalAddGroup F
inst✝² : ContinuousConstSMul 𝕜 F
inst✝¹ : TopologicalAddGroup G
inst✝ : ContinuousConstSMul 𝕜 G
p : FormalMultilinearSeries 𝕜 E F
n : ℕ
v : Fin n → E
i : Fin (Composition.length (Composition.ones n))
hjn : 0 < Composition.blocksFun (Composition.ones n) i
hj1 : 0 < 1
⊢ ↑(Composition.embedding (Composition.ones n) i) { val := 0, isLt := hjn } =
    Fin.castLE (_ : Composition.length (Composition.ones n) ≤ n) i
[PROOFSTEP]
rw [Fin.ext_iff, Fin.coe_castLE, Composition.ones_embedding, Fin.val_mk]
[GOAL]
𝕜 : Type u_1
E : Type u_2
F : Type u_3
G : Type u_4
H : Type u_5
inst✝¹⁵ : CommRing 𝕜
inst✝¹⁴ : AddCommGroup E
inst✝¹³ : AddCommGroup F
inst✝¹² : AddCommGroup G
inst✝¹¹ : Module 𝕜 E
inst✝¹⁰ : Module 𝕜 F
inst✝⁹ : Module 𝕜 G
inst✝⁸ : TopologicalSpace E
inst✝⁷ : TopologicalSpace F
inst✝⁶ : TopologicalSpace G
inst✝⁵ : TopologicalAddGroup E
inst✝⁴ : ContinuousConstSMul 𝕜 E
inst✝³ : TopologicalAddGroup F
inst✝² : ContinuousConstSMul 𝕜 F
inst✝¹ : TopologicalAddGroup G
inst✝ : ContinuousConstSMul 𝕜 G
p : FormalMultilinearSeries 𝕜 E F
n : ℕ
hn : 0 < n
v : Fin n → E
⊢ applyComposition p (Composition.single n hn) v = fun _j => ↑(p n) v
[PROOFSTEP]
ext j
[GOAL]
case h
𝕜 : Type u_1
E : Type u_2
F : Type u_3
G : Type u_4
H : Type u_5
inst✝¹⁵ : CommRing 𝕜
inst✝¹⁴ : AddCommGroup E
inst✝¹³ : AddCommGroup F
inst✝¹² : AddCommGroup G
inst✝¹¹ : Module 𝕜 E
inst✝¹⁰ : Module 𝕜 F
inst✝⁹ : Module 𝕜 G
inst✝⁸ : TopologicalSpace E
inst✝⁷ : TopologicalSpace F
inst✝⁶ : TopologicalSpace G
inst✝⁵ : TopologicalAddGroup E
inst✝⁴ : ContinuousConstSMul 𝕜 E
inst✝³ : TopologicalAddGroup F
inst✝² : ContinuousConstSMul 𝕜 F
inst✝¹ : TopologicalAddGroup G
inst✝ : ContinuousConstSMul 𝕜 G
p : FormalMultilinearSeries 𝕜 E F
n : ℕ
hn : 0 < n
v : Fin n → E
j : Fin (Composition.length (Composition.single n hn))
⊢ applyComposition p (Composition.single n hn) v j = ↑(p n) v
[PROOFSTEP]
refine' p.congr (by simp) fun i hi1 hi2 => _
[GOAL]
𝕜 : Type u_1
E : Type u_2
F : Type u_3
G : Type u_4
H : Type u_5
inst✝¹⁵ : CommRing 𝕜
inst✝¹⁴ : AddCommGroup E
inst✝¹³ : AddCommGroup F
inst✝¹² : AddCommGroup G
inst✝¹¹ : Module 𝕜 E
inst✝¹⁰ : Module 𝕜 F
inst✝⁹ : Module 𝕜 G
inst✝⁸ : TopologicalSpace E
inst✝⁷ : TopologicalSpace F
inst✝⁶ : TopologicalSpace G
inst✝⁵ : TopologicalAddGroup E
inst✝⁴ : ContinuousConstSMul 𝕜 E
inst✝³ : TopologicalAddGroup F
inst✝² : ContinuousConstSMul 𝕜 F
inst✝¹ : TopologicalAddGroup G
inst✝ : ContinuousConstSMul 𝕜 G
p : FormalMultilinearSeries 𝕜 E F
n : ℕ
hn : 0 < n
v : Fin n → E
j : Fin (Composition.length (Composition.single n hn))
⊢ Composition.blocksFun (Composition.single n hn) j = n
[PROOFSTEP]
simp
[GOAL]
case h
𝕜 : Type u_1
E : Type u_2
F : Type u_3
G : Type u_4
H : Type u_5
inst✝¹⁵ : CommRing 𝕜
inst✝¹⁴ : AddCommGroup E
inst✝¹³ : AddCommGroup F
inst✝¹² : AddCommGroup G
inst✝¹¹ : Module 𝕜 E
inst✝¹⁰ : Module 𝕜 F
inst✝⁹ : Module 𝕜 G
inst✝⁸ : TopologicalSpace E
inst✝⁷ : TopologicalSpace F
inst✝⁶ : TopologicalSpace G
inst✝⁵ : TopologicalAddGroup E
inst✝⁴ : ContinuousConstSMul 𝕜 E
inst✝³ : TopologicalAddGroup F
inst✝² : ContinuousConstSMul 𝕜 F
inst✝¹ : TopologicalAddGroup G
inst✝ : ContinuousConstSMul 𝕜 G
p : FormalMultilinearSeries 𝕜 E F
n : ℕ
hn : 0 < n
v : Fin n → E
j : Fin (Composition.length (Composition.single n hn))
i : ℕ
hi1 : i < Composition.blocksFun (Composition.single n hn) j
hi2 : i < n
⊢ (v ∘ ↑(Composition.embedding (Composition.single n hn) j)) { val := i, isLt := hi1 } = v { val := i, isLt := hi2 }
[PROOFSTEP]
dsimp
[GOAL]
case h
𝕜 : Type u_1
E : Type u_2
F : Type u_3
G : Type u_4
H : Type u_5
inst✝¹⁵ : CommRing 𝕜
inst✝¹⁴ : AddCommGroup E
inst✝¹³ : AddCommGroup F
inst✝¹² : AddCommGroup G
inst✝¹¹ : Module 𝕜 E
inst✝¹⁰ : Module 𝕜 F
inst✝⁹ : Module 𝕜 G
inst✝⁸ : TopologicalSpace E
inst✝⁷ : TopologicalSpace F
inst✝⁶ : TopologicalSpace G
inst✝⁵ : TopologicalAddGroup E
inst✝⁴ : ContinuousConstSMul 𝕜 E
inst✝³ : TopologicalAddGroup F
inst✝² : ContinuousConstSMul 𝕜 F
inst✝¹ : TopologicalAddGroup G
inst✝ : ContinuousConstSMul 𝕜 G
p : FormalMultilinearSeries 𝕜 E F
n : ℕ
hn : 0 < n
v : Fin n → E
j : Fin (Composition.length (Composition.single n hn))
i : ℕ
hi1 : i < Composition.blocksFun (Composition.single n hn) j
hi2 : i < n
⊢ v (↑(Composition.embedding (Composition.single n hn) j) { val := i, isLt := hi1 }) = v { val := i, isLt := hi2 }
[PROOFSTEP]
congr 1
[GOAL]
case h.e_a
𝕜 : Type u_1
E : Type u_2
F : Type u_3
G : Type u_4
H : Type u_5
inst✝¹⁵ : CommRing 𝕜
inst✝¹⁴ : AddCommGroup E
inst✝¹³ : AddCommGroup F
inst✝¹² : AddCommGroup G
inst✝¹¹ : Module 𝕜 E
inst✝¹⁰ : Module 𝕜 F
inst✝⁹ : Module 𝕜 G
inst✝⁸ : TopologicalSpace E
inst✝⁷ : TopologicalSpace F
inst✝⁶ : TopologicalSpace G
inst✝⁵ : TopologicalAddGroup E
inst✝⁴ : ContinuousConstSMul 𝕜 E
inst✝³ : TopologicalAddGroup F
inst✝² : ContinuousConstSMul 𝕜 F
inst✝¹ : TopologicalAddGroup G
inst✝ : ContinuousConstSMul 𝕜 G
p : FormalMultilinearSeries 𝕜 E F
n : ℕ
hn : 0 < n
v : Fin n → E
j : Fin (Composition.length (Composition.single n hn))
i : ℕ
hi1 : i < Composition.blocksFun (Composition.single n hn) j
hi2 : i < n
⊢ ↑(Composition.embedding (Composition.single n hn) j) { val := i, isLt := hi1 } = { val := i, isLt := hi2 }
[PROOFSTEP]
convert Composition.single_embedding hn ⟨i, hi2⟩ using 1
[GOAL]
case h.e'_2
𝕜 : Type u_1
E : Type u_2
F : Type u_3
G : Type u_4
H : Type u_5
inst✝¹⁵ : CommRing 𝕜
inst✝¹⁴ : AddCommGroup E
inst✝¹³ : AddCommGroup F
inst✝¹² : AddCommGroup G
inst✝¹¹ : Module 𝕜 E
inst✝¹⁰ : Module 𝕜 F
inst✝⁹ : Module 𝕜 G
inst✝⁸ : TopologicalSpace E
inst✝⁷ : TopologicalSpace F
inst✝⁶ : TopologicalSpace G
inst✝⁵ : TopologicalAddGroup E
inst✝⁴ : ContinuousConstSMul 𝕜 E
inst✝³ : TopologicalAddGroup F
inst✝² : ContinuousConstSMul 𝕜 F
inst✝¹ : TopologicalAddGroup G
inst✝ : ContinuousConstSMul 𝕜 G
p : FormalMultilinearSeries 𝕜 E F
n : ℕ
hn : 0 < n
v : Fin n → E
j : Fin (Composition.length (Composition.single n hn))
i : ℕ
hi1 : i < Composition.blocksFun (Composition.single n hn) j
hi2 : i < n
⊢ ↑(Composition.embedding (Composition.single n hn) j) { val := i, isLt := hi1 } =
    ↑(Composition.embedding (Composition.single n hn) 0) { val := i, isLt := hi2 }
[PROOFSTEP]
cases' j with j_val j_property
[GOAL]
case h.e'_2.mk
𝕜 : Type u_1
E : Type u_2
F : Type u_3
G : Type u_4
H : Type u_5
inst✝¹⁵ : CommRing 𝕜
inst✝¹⁴ : AddCommGroup E
inst✝¹³ : AddCommGroup F
inst✝¹² : AddCommGroup G
inst✝¹¹ : Module 𝕜 E
inst✝¹⁰ : Module 𝕜 F
inst✝⁹ : Module 𝕜 G
inst✝⁸ : TopologicalSpace E
inst✝⁷ : TopologicalSpace F
inst✝⁶ : TopologicalSpace G
inst✝⁵ : TopologicalAddGroup E
inst✝⁴ : ContinuousConstSMul 𝕜 E
inst✝³ : TopologicalAddGroup F
inst✝² : ContinuousConstSMul 𝕜 F
inst✝¹ : TopologicalAddGroup G
inst✝ : ContinuousConstSMul 𝕜 G
p : FormalMultilinearSeries 𝕜 E F
n : ℕ
hn : 0 < n
v : Fin n → E
i : ℕ
hi2 : i < n
j_val : ℕ
j_property : j_val < Composition.length (Composition.single n hn)
hi1 : i < Composition.blocksFun (Composition.single n hn) { val := j_val, isLt := j_property }
⊢ ↑(Composition.embedding (Composition.single n hn) { val := j_val, isLt := j_property }) { val := i, isLt := hi1 } =
    ↑(Composition.embedding (Composition.single n hn) 0) { val := i, isLt := hi2 }
[PROOFSTEP]
have : j_val = 0 := le_bot_iff.1 (Nat.lt_succ_iff.1 j_property)
[GOAL]
case h.e'_2.mk
𝕜 : Type u_1
E : Type u_2
F : Type u_3
G : Type u_4
H : Type u_5
inst✝¹⁵ : CommRing 𝕜
inst✝¹⁴ : AddCommGroup E
inst✝¹³ : AddCommGroup F
inst✝¹² : AddCommGroup G
inst✝¹¹ : Module 𝕜 E
inst✝¹⁰ : Module 𝕜 F
inst✝⁹ : Module 𝕜 G
inst✝⁸ : TopologicalSpace E
inst✝⁷ : TopologicalSpace F
inst✝⁶ : TopologicalSpace G
inst✝⁵ : TopologicalAddGroup E
inst✝⁴ : ContinuousConstSMul 𝕜 E
inst✝³ : TopologicalAddGroup F
inst✝² : ContinuousConstSMul 𝕜 F
inst✝¹ : TopologicalAddGroup G
inst✝ : ContinuousConstSMul 𝕜 G
p : FormalMultilinearSeries 𝕜 E F
n : ℕ
hn : 0 < n
v : Fin n → E
i : ℕ
hi2 : i < n
j_val : ℕ
j_property : j_val < Composition.length (Composition.single n hn)
hi1 : i < Composition.blocksFun (Composition.single n hn) { val := j_val, isLt := j_property }
this : j_val = 0
⊢ ↑(Composition.embedding (Composition.single n hn) { val := j_val, isLt := j_property }) { val := i, isLt := hi1 } =
    ↑(Composition.embedding (Composition.single n hn) 0) { val := i, isLt := hi2 }
[PROOFSTEP]
congr!
[GOAL]
case h.e'_2.mk.h.e'_6.e'_1
𝕜 : Type u_1
E : Type u_2
F : Type u_3
G : Type u_4
H : Type u_5
inst✝¹⁵ : CommRing 𝕜
inst✝¹⁴ : AddCommGroup E
inst✝¹³ : AddCommGroup F
inst✝¹² : AddCommGroup G
inst✝¹¹ : Module 𝕜 E
inst✝¹⁰ : Module 𝕜 F
inst✝⁹ : Module 𝕜 G
inst✝⁸ : TopologicalSpace E
inst✝⁷ : TopologicalSpace F
inst✝⁶ : TopologicalSpace G
inst✝⁵ : TopologicalAddGroup E
inst✝⁴ : ContinuousConstSMul 𝕜 E
inst✝³ : TopologicalAddGroup F
inst✝² : ContinuousConstSMul 𝕜 F
inst✝¹ : TopologicalAddGroup G
inst✝ : ContinuousConstSMul 𝕜 G
p : FormalMultilinearSeries 𝕜 E F
n : ℕ
hn : 0 < n
v : Fin n → E
i : ℕ
hi2 : i < n
j_val : ℕ
j_property : j_val < Composition.length (Composition.single n hn)
hi1 : i < Composition.blocksFun (Composition.single n hn) { val := j_val, isLt := j_property }
this : j_val = 0
e_2✝ :
  Fin (Composition.blocksFun (Composition.single n hn) { val := j_val, isLt := j_property }) =
    Fin (Composition.blocksFun (Composition.single n hn) 0)
⊢ Composition.blocksFun (Composition.single n hn) { val := j_val, isLt := j_property } = n
[PROOFSTEP]
simp
[GOAL]
𝕜 : Type u_1
E : Type u_2
F : Type u_3
G : Type u_4
H : Type u_5
inst✝¹⁵ : CommRing 𝕜
inst✝¹⁴ : AddCommGroup E
inst✝¹³ : AddCommGroup F
inst✝¹² : AddCommGroup G
inst✝¹¹ : Module 𝕜 E
inst✝¹⁰ : Module 𝕜 F
inst✝⁹ : Module 𝕜 G
inst✝⁸ : TopologicalSpace E
inst✝⁷ : TopologicalSpace F
inst✝⁶ : TopologicalSpace G
inst✝⁵ : TopologicalAddGroup E
inst✝⁴ : ContinuousConstSMul 𝕜 E
inst✝³ : TopologicalAddGroup F
inst✝² : ContinuousConstSMul 𝕜 F
inst✝¹ : TopologicalAddGroup G
inst✝ : ContinuousConstSMul 𝕜 G
p : FormalMultilinearSeries 𝕜 E F
n : ℕ
c : Composition n
⊢ applyComposition (removeZero p) c = applyComposition p c
[PROOFSTEP]
ext v i
[GOAL]
case h.h
𝕜 : Type u_1
E : Type u_2
F : Type u_3
G : Type u_4
H : Type u_5
inst✝¹⁵ : CommRing 𝕜
inst✝¹⁴ : AddCommGroup E
inst✝¹³ : AddCommGroup F
inst✝¹² : AddCommGroup G
inst✝¹¹ : Module 𝕜 E
inst✝¹⁰ : Module 𝕜 F
inst✝⁹ : Module 𝕜 G
inst✝⁸ : TopologicalSpace E
inst✝⁷ : TopologicalSpace F
inst✝⁶ : TopologicalSpace G
inst✝⁵ : TopologicalAddGroup E
inst✝⁴ : ContinuousConstSMul 𝕜 E
inst✝³ : TopologicalAddGroup F
inst✝² : ContinuousConstSMul 𝕜 F
inst✝¹ : TopologicalAddGroup G
inst✝ : ContinuousConstSMul 𝕜 G
p : FormalMultilinearSeries 𝕜 E F
n : ℕ
c : Composition n
v : Fin n → E
i : Fin (Composition.length c)
⊢ applyComposition (removeZero p) c v i = applyComposition p c v i
[PROOFSTEP]
simp [applyComposition, zero_lt_one.trans_le (c.one_le_blocksFun i), removeZero_of_pos]
[GOAL]
𝕜 : Type u_1
E : Type u_2
F : Type u_3
G : Type u_4
H : Type u_5
inst✝¹⁵ : CommRing 𝕜
inst✝¹⁴ : AddCommGroup E
inst✝¹³ : AddCommGroup F
inst✝¹² : AddCommGroup G
inst✝¹¹ : Module 𝕜 E
inst✝¹⁰ : Module 𝕜 F
inst✝⁹ : Module 𝕜 G
inst✝⁸ : TopologicalSpace E
inst✝⁷ : TopologicalSpace F
inst✝⁶ : TopologicalSpace G
inst✝⁵ : TopologicalAddGroup E
inst✝⁴ : ContinuousConstSMul 𝕜 E
inst✝³ : TopologicalAddGroup F
inst✝² : ContinuousConstSMul 𝕜 F
inst✝¹ : TopologicalAddGroup G
inst✝ : ContinuousConstSMul 𝕜 G
p : FormalMultilinearSeries 𝕜 E F
n : ℕ
c : Composition n
j : Fin n
v : Fin n → E
z : E
⊢ applyComposition p c (Function.update v j z) =
    Function.update (applyComposition p c v) (Composition.index c j)
      (↑(p (Composition.blocksFun c (Composition.index c j)))
        (Function.update (v ∘ ↑(Composition.embedding c (Composition.index c j))) (Composition.invEmbedding c j) z))
[PROOFSTEP]
ext k
[GOAL]
case h
𝕜 : Type u_1
E : Type u_2
F : Type u_3
G : Type u_4
H : Type u_5
inst✝¹⁵ : CommRing 𝕜
inst✝¹⁴ : AddCommGroup E
inst✝¹³ : AddCommGroup F
inst✝¹² : AddCommGroup G
inst✝¹¹ : Module 𝕜 E
inst✝¹⁰ : Module 𝕜 F
inst✝⁹ : Module 𝕜 G
inst✝⁸ : TopologicalSpace E
inst✝⁷ : TopologicalSpace F
inst✝⁶ : TopologicalSpace G
inst✝⁵ : TopologicalAddGroup E
inst✝⁴ : ContinuousConstSMul 𝕜 E
inst✝³ : TopologicalAddGroup F
inst✝² : ContinuousConstSMul 𝕜 F
inst✝¹ : TopologicalAddGroup G
inst✝ : ContinuousConstSMul 𝕜 G
p : FormalMultilinearSeries 𝕜 E F
n : ℕ
c : Composition n
j : Fin n
v : Fin n → E
z : E
k : Fin (Composition.length c)
⊢ applyComposition p c (Function.update v j z) k =
    Function.update (applyComposition p c v) (Composition.index c j)
      (↑(p (Composition.blocksFun c (Composition.index c j)))
        (Function.update (v ∘ ↑(Composition.embedding c (Composition.index c j))) (Composition.invEmbedding c j) z))
      k
[PROOFSTEP]
by_cases h : k = c.index j
[GOAL]
case pos
𝕜 : Type u_1
E : Type u_2
F : Type u_3
G : Type u_4
H : Type u_5
inst✝¹⁵ : CommRing 𝕜
inst✝¹⁴ : AddCommGroup E
inst✝¹³ : AddCommGroup F
inst✝¹² : AddCommGroup G
inst✝¹¹ : Module 𝕜 E
inst✝¹⁰ : Module 𝕜 F
inst✝⁹ : Module 𝕜 G
inst✝⁸ : TopologicalSpace E
inst✝⁷ : TopologicalSpace F
inst✝⁶ : TopologicalSpace G
inst✝⁵ : TopologicalAddGroup E
inst✝⁴ : ContinuousConstSMul 𝕜 E
inst✝³ : TopologicalAddGroup F
inst✝² : ContinuousConstSMul 𝕜 F
inst✝¹ : TopologicalAddGroup G
inst✝ : ContinuousConstSMul 𝕜 G
p : FormalMultilinearSeries 𝕜 E F
n : ℕ
c : Composition n
j : Fin n
v : Fin n → E
z : E
k : Fin (Composition.length c)
h : k = Composition.index c j
⊢ applyComposition p c (Function.update v j z) k =
    Function.update (applyComposition p c v) (Composition.index c j)
      (↑(p (Composition.blocksFun c (Composition.index c j)))
        (Function.update (v ∘ ↑(Composition.embedding c (Composition.index c j))) (Composition.invEmbedding c j) z))
      k
[PROOFSTEP]
rw [h]
[GOAL]
case pos
𝕜 : Type u_1
E : Type u_2
F : Type u_3
G : Type u_4
H : Type u_5
inst✝¹⁵ : CommRing 𝕜
inst✝¹⁴ : AddCommGroup E
inst✝¹³ : AddCommGroup F
inst✝¹² : AddCommGroup G
inst✝¹¹ : Module 𝕜 E
inst✝¹⁰ : Module 𝕜 F
inst✝⁹ : Module 𝕜 G
inst✝⁸ : TopologicalSpace E
inst✝⁷ : TopologicalSpace F
inst✝⁶ : TopologicalSpace G
inst✝⁵ : TopologicalAddGroup E
inst✝⁴ : ContinuousConstSMul 𝕜 E
inst✝³ : TopologicalAddGroup F
inst✝² : ContinuousConstSMul 𝕜 F
inst✝¹ : TopologicalAddGroup G
inst✝ : ContinuousConstSMul 𝕜 G
p : FormalMultilinearSeries 𝕜 E F
n : ℕ
c : Composition n
j : Fin n
v : Fin n → E
z : E
k : Fin (Composition.length c)
h : k = Composition.index c j
⊢ applyComposition p c (Function.update v j z) (Composition.index c j) =
    Function.update (applyComposition p c v) (Composition.index c j)
      (↑(p (Composition.blocksFun c (Composition.index c j)))
        (Function.update (v ∘ ↑(Composition.embedding c (Composition.index c j))) (Composition.invEmbedding c j) z))
      (Composition.index c j)
[PROOFSTEP]
let r : Fin (c.blocksFun (c.index j)) → Fin n := c.embedding (c.index j)
[GOAL]
case pos
𝕜 : Type u_1
E : Type u_2
F : Type u_3
G : Type u_4
H : Type u_5
inst✝¹⁵ : CommRing 𝕜
inst✝¹⁴ : AddCommGroup E
inst✝¹³ : AddCommGroup F
inst✝¹² : AddCommGroup G
inst✝¹¹ : Module 𝕜 E
inst✝¹⁰ : Module 𝕜 F
inst✝⁹ : Module 𝕜 G
inst✝⁸ : TopologicalSpace E
inst✝⁷ : TopologicalSpace F
inst✝⁶ : TopologicalSpace G
inst✝⁵ : TopologicalAddGroup E
inst✝⁴ : ContinuousConstSMul 𝕜 E
inst✝³ : TopologicalAddGroup F
inst✝² : ContinuousConstSMul 𝕜 F
inst✝¹ : TopologicalAddGroup G
inst✝ : ContinuousConstSMul 𝕜 G
p : FormalMultilinearSeries 𝕜 E F
n : ℕ
c : Composition n
j : Fin n
v : Fin n → E
z : E
k : Fin (Composition.length c)
h : k = Composition.index c j
r : Fin (Composition.blocksFun c (Composition.index c j)) → Fin n := ↑(Composition.embedding c (Composition.index c j))
⊢ applyComposition p c (Function.update v j z) (Composition.index c j) =
    Function.update (applyComposition p c v) (Composition.index c j)
      (↑(p (Composition.blocksFun c (Composition.index c j)))
        (Function.update (v ∘ ↑(Composition.embedding c (Composition.index c j))) (Composition.invEmbedding c j) z))
      (Composition.index c j)
[PROOFSTEP]
simp only [Function.update_same]
[GOAL]
case pos
𝕜 : Type u_1
E : Type u_2
F : Type u_3
G : Type u_4
H : Type u_5
inst✝¹⁵ : CommRing 𝕜
inst✝¹⁴ : AddCommGroup E
inst✝¹³ : AddCommGroup F
inst✝¹² : AddCommGroup G
inst✝¹¹ : Module 𝕜 E
inst✝¹⁰ : Module 𝕜 F
inst✝⁹ : Module 𝕜 G
inst✝⁸ : TopologicalSpace E
inst✝⁷ : TopologicalSpace F
inst✝⁶ : TopologicalSpace G
inst✝⁵ : TopologicalAddGroup E
inst✝⁴ : ContinuousConstSMul 𝕜 E
inst✝³ : TopologicalAddGroup F
inst✝² : ContinuousConstSMul 𝕜 F
inst✝¹ : TopologicalAddGroup G
inst✝ : ContinuousConstSMul 𝕜 G
p : FormalMultilinearSeries 𝕜 E F
n : ℕ
c : Composition n
j : Fin n
v : Fin n → E
z : E
k : Fin (Composition.length c)
h : k = Composition.index c j
r : Fin (Composition.blocksFun c (Composition.index c j)) → Fin n := ↑(Composition.embedding c (Composition.index c j))
⊢ applyComposition p c (Function.update v j z) (Composition.index c j) =
    ↑(p (Composition.blocksFun c (Composition.index c j)))
      (Function.update (v ∘ ↑(Composition.embedding c (Composition.index c j))) (Composition.invEmbedding c j) z)
[PROOFSTEP]
change p (c.blocksFun (c.index j)) (Function.update v j z ∘ r) = _
[GOAL]
case pos
𝕜 : Type u_1
E : Type u_2
F : Type u_3
G : Type u_4
H : Type u_5
inst✝¹⁵ : CommRing 𝕜
inst✝¹⁴ : AddCommGroup E
inst✝¹³ : AddCommGroup F
inst✝¹² : AddCommGroup G
inst✝¹¹ : Module 𝕜 E
inst✝¹⁰ : Module 𝕜 F
inst✝⁹ : Module 𝕜 G
inst✝⁸ : TopologicalSpace E
inst✝⁷ : TopologicalSpace F
inst✝⁶ : TopologicalSpace G
inst✝⁵ : TopologicalAddGroup E
inst✝⁴ : ContinuousConstSMul 𝕜 E
inst✝³ : TopologicalAddGroup F
inst✝² : ContinuousConstSMul 𝕜 F
inst✝¹ : TopologicalAddGroup G
inst✝ : ContinuousConstSMul 𝕜 G
p : FormalMultilinearSeries 𝕜 E F
n : ℕ
c : Composition n
j : Fin n
v : Fin n → E
z : E
k : Fin (Composition.length c)
h : k = Composition.index c j
r : Fin (Composition.blocksFun c (Composition.index c j)) → Fin n := ↑(Composition.embedding c (Composition.index c j))
⊢ ↑(p (Composition.blocksFun c (Composition.index c j))) (Function.update v j z ∘ r) =
    ↑(p (Composition.blocksFun c (Composition.index c j)))
      (Function.update (v ∘ ↑(Composition.embedding c (Composition.index c j))) (Composition.invEmbedding c j) z)
[PROOFSTEP]
let j' := c.invEmbedding j
[GOAL]
case pos
𝕜 : Type u_1
E : Type u_2
F : Type u_3
G : Type u_4
H : Type u_5
inst✝¹⁵ : CommRing 𝕜
inst✝¹⁴ : AddCommGroup E
inst✝¹³ : AddCommGroup F
inst✝¹² : AddCommGroup G
inst✝¹¹ : Module 𝕜 E
inst✝¹⁰ : Module 𝕜 F
inst✝⁹ : Module 𝕜 G
inst✝⁸ : TopologicalSpace E
inst✝⁷ : TopologicalSpace F
inst✝⁶ : TopologicalSpace G
inst✝⁵ : TopologicalAddGroup E
inst✝⁴ : ContinuousConstSMul 𝕜 E
inst✝³ : TopologicalAddGroup F
inst✝² : ContinuousConstSMul 𝕜 F
inst✝¹ : TopologicalAddGroup G
inst✝ : ContinuousConstSMul 𝕜 G
p : FormalMultilinearSeries 𝕜 E F
n : ℕ
c : Composition n
j : Fin n
v : Fin n → E
z : E
k : Fin (Composition.length c)
h : k = Composition.index c j
r : Fin (Composition.blocksFun c (Composition.index c j)) → Fin n := ↑(Composition.embedding c (Composition.index c j))
j' : Fin (Composition.blocksFun c (Composition.index c j)) := Composition.invEmbedding c j
⊢ ↑(p (Composition.blocksFun c (Composition.index c j))) (Function.update v j z ∘ r) =
    ↑(p (Composition.blocksFun c (Composition.index c j)))
      (Function.update (v ∘ ↑(Composition.embedding c (Composition.index c j))) (Composition.invEmbedding c j) z)
[PROOFSTEP]
suffices B : Function.update v j z ∘ r = Function.update (v ∘ r) j' z
[GOAL]
case pos
𝕜 : Type u_1
E : Type u_2
F : Type u_3
G : Type u_4
H : Type u_5
inst✝¹⁵ : CommRing 𝕜
inst✝¹⁴ : AddCommGroup E
inst✝¹³ : AddCommGroup F
inst✝¹² : AddCommGroup G
inst✝¹¹ : Module 𝕜 E
inst✝¹⁰ : Module 𝕜 F
inst✝⁹ : Module 𝕜 G
inst✝⁸ : TopologicalSpace E
inst✝⁷ : TopologicalSpace F
inst✝⁶ : TopologicalSpace G
inst✝⁵ : TopologicalAddGroup E
inst✝⁴ : ContinuousConstSMul 𝕜 E
inst✝³ : TopologicalAddGroup F
inst✝² : ContinuousConstSMul 𝕜 F
inst✝¹ : TopologicalAddGroup G
inst✝ : ContinuousConstSMul 𝕜 G
p : FormalMultilinearSeries 𝕜 E F
n : ℕ
c : Composition n
j : Fin n
v : Fin n → E
z : E
k : Fin (Composition.length c)
h : k = Composition.index c j
r : Fin (Composition.blocksFun c (Composition.index c j)) → Fin n := ↑(Composition.embedding c (Composition.index c j))
j' : Fin (Composition.blocksFun c (Composition.index c j)) := Composition.invEmbedding c j
B : Function.update v j z ∘ r = Function.update (v ∘ r) j' z
⊢ ↑(p (Composition.blocksFun c (Composition.index c j))) (Function.update v j z ∘ r) =
    ↑(p (Composition.blocksFun c (Composition.index c j)))
      (Function.update (v ∘ ↑(Composition.embedding c (Composition.index c j))) (Composition.invEmbedding c j) z)
[PROOFSTEP]
rw [B]
[GOAL]
case B
𝕜 : Type u_1
E : Type u_2
F : Type u_3
G : Type u_4
H : Type u_5
inst✝¹⁵ : CommRing 𝕜
inst✝¹⁴ : AddCommGroup E
inst✝¹³ : AddCommGroup F
inst✝¹² : AddCommGroup G
inst✝¹¹ : Module 𝕜 E
inst✝¹⁰ : Module 𝕜 F
inst✝⁹ : Module 𝕜 G
inst✝⁸ : TopologicalSpace E
inst✝⁷ : TopologicalSpace F
inst✝⁶ : TopologicalSpace G
inst✝⁵ : TopologicalAddGroup E
inst✝⁴ : ContinuousConstSMul 𝕜 E
inst✝³ : TopologicalAddGroup F
inst✝² : ContinuousConstSMul 𝕜 F
inst✝¹ : TopologicalAddGroup G
inst✝ : ContinuousConstSMul 𝕜 G
p : FormalMultilinearSeries 𝕜 E F
n : ℕ
c : Composition n
j : Fin n
v : Fin n → E
z : E
k : Fin (Composition.length c)
h : k = Composition.index c j
r : Fin (Composition.blocksFun c (Composition.index c j)) → Fin n := ↑(Composition.embedding c (Composition.index c j))
j' : Fin (Composition.blocksFun c (Composition.index c j)) := Composition.invEmbedding c j
⊢ Function.update v j z ∘ r = Function.update (v ∘ r) j' z
[PROOFSTEP]
suffices C : Function.update v (r j') z ∘ r = Function.update (v ∘ r) j' z
[GOAL]
case B
𝕜 : Type u_1
E : Type u_2
F : Type u_3
G : Type u_4
H : Type u_5
inst✝¹⁵ : CommRing 𝕜
inst✝¹⁴ : AddCommGroup E
inst✝¹³ : AddCommGroup F
inst✝¹² : AddCommGroup G
inst✝¹¹ : Module 𝕜 E
inst✝¹⁰ : Module 𝕜 F
inst✝⁹ : Module 𝕜 G
inst✝⁸ : TopologicalSpace E
inst✝⁷ : TopologicalSpace F
inst✝⁶ : TopologicalSpace G
inst✝⁵ : TopologicalAddGroup E
inst✝⁴ : ContinuousConstSMul 𝕜 E
inst✝³ : TopologicalAddGroup F
inst✝² : ContinuousConstSMul 𝕜 F
inst✝¹ : TopologicalAddGroup G
inst✝ : ContinuousConstSMul 𝕜 G
p : FormalMultilinearSeries 𝕜 E F
n : ℕ
c : Composition n
j : Fin n
v : Fin n → E
z : E
k : Fin (Composition.length c)
h : k = Composition.index c j
r : Fin (Composition.blocksFun c (Composition.index c j)) → Fin n := ↑(Composition.embedding c (Composition.index c j))
j' : Fin (Composition.blocksFun c (Composition.index c j)) := Composition.invEmbedding c j
C : Function.update v (r j') z ∘ r = Function.update (v ∘ r) j' z
⊢ Function.update v j z ∘ r = Function.update (v ∘ r) j' z
[PROOFSTEP]
convert C
[GOAL]
case h.e'_2.h.e'_4.h.e'_5
𝕜 : Type u_1
E : Type u_2
F : Type u_3
G : Type u_4
H : Type u_5
inst✝¹⁵ : CommRing 𝕜
inst✝¹⁴ : AddCommGroup E
inst✝¹³ : AddCommGroup F
inst✝¹² : AddCommGroup G
inst✝¹¹ : Module 𝕜 E
inst✝¹⁰ : Module 𝕜 F
inst✝⁹ : Module 𝕜 G
inst✝⁸ : TopologicalSpace E
inst✝⁷ : TopologicalSpace F
inst✝⁶ : TopologicalSpace G
inst✝⁵ : TopologicalAddGroup E
inst✝⁴ : ContinuousConstSMul 𝕜 E
inst✝³ : TopologicalAddGroup F
inst✝² : ContinuousConstSMul 𝕜 F
inst✝¹ : TopologicalAddGroup G
inst✝ : ContinuousConstSMul 𝕜 G
p : FormalMultilinearSeries 𝕜 E F
n : ℕ
c : Composition n
j : Fin n
v : Fin n → E
z : E
k : Fin (Composition.length c)
h : k = Composition.index c j
r : Fin (Composition.blocksFun c (Composition.index c j)) → Fin n := ↑(Composition.embedding c (Composition.index c j))
j' : Fin (Composition.blocksFun c (Composition.index c j)) := Composition.invEmbedding c j
C : Function.update v (r j') z ∘ r = Function.update (v ∘ r) j' z
⊢ j = r j'
[PROOFSTEP]
exact (c.embedding_comp_inv j).symm
[GOAL]
case C
𝕜 : Type u_1
E : Type u_2
F : Type u_3
G : Type u_4
H : Type u_5
inst✝¹⁵ : CommRing 𝕜
inst✝¹⁴ : AddCommGroup E
inst✝¹³ : AddCommGroup F
inst✝¹² : AddCommGroup G
inst✝¹¹ : Module 𝕜 E
inst✝¹⁰ : Module 𝕜 F
inst✝⁹ : Module 𝕜 G
inst✝⁸ : TopologicalSpace E
inst✝⁷ : TopologicalSpace F
inst✝⁶ : TopologicalSpace G
inst✝⁵ : TopologicalAddGroup E
inst✝⁴ : ContinuousConstSMul 𝕜 E
inst✝³ : TopologicalAddGroup F
inst✝² : ContinuousConstSMul 𝕜 F
inst✝¹ : TopologicalAddGroup G
inst✝ : ContinuousConstSMul 𝕜 G
p : FormalMultilinearSeries 𝕜 E F
n : ℕ
c : Composition n
j : Fin n
v : Fin n → E
z : E
k : Fin (Composition.length c)
h : k = Composition.index c j
r : Fin (Composition.blocksFun c (Composition.index c j)) → Fin n := ↑(Composition.embedding c (Composition.index c j))
j' : Fin (Composition.blocksFun c (Composition.index c j)) := Composition.invEmbedding c j
⊢ Function.update v (r j') z ∘ r = Function.update (v ∘ r) j' z
[PROOFSTEP]
exact Function.update_comp_eq_of_injective _ (c.embedding _).injective _ _
[GOAL]
case neg
𝕜 : Type u_1
E : Type u_2
F : Type u_3
G : Type u_4
H : Type u_5
inst✝¹⁵ : CommRing 𝕜
inst✝¹⁴ : AddCommGroup E
inst✝¹³ : AddCommGroup F
inst✝¹² : AddCommGroup G
inst✝¹¹ : Module 𝕜 E
inst✝¹⁰ : Module 𝕜 F
inst✝⁹ : Module 𝕜 G
inst✝⁸ : TopologicalSpace E
inst✝⁷ : TopologicalSpace F
inst✝⁶ : TopologicalSpace G
inst✝⁵ : TopologicalAddGroup E
inst✝⁴ : ContinuousConstSMul 𝕜 E
inst✝³ : TopologicalAddGroup F
inst✝² : ContinuousConstSMul 𝕜 F
inst✝¹ : TopologicalAddGroup G
inst✝ : ContinuousConstSMul 𝕜 G
p : FormalMultilinearSeries 𝕜 E F
n : ℕ
c : Composition n
j : Fin n
v : Fin n → E
z : E
k : Fin (Composition.length c)
h : ¬k = Composition.index c j
⊢ applyComposition p c (Function.update v j z) k =
    Function.update (applyComposition p c v) (Composition.index c j)
      (↑(p (Composition.blocksFun c (Composition.index c j)))
        (Function.update (v ∘ ↑(Composition.embedding c (Composition.index c j))) (Composition.invEmbedding c j) z))
      k
[PROOFSTEP]
simp only [h, Function.update_eq_self, Function.update_noteq, Ne.def, not_false_iff]
[GOAL]
case neg
𝕜 : Type u_1
E : Type u_2
F : Type u_3
G : Type u_4
H : Type u_5
inst✝¹⁵ : CommRing 𝕜
inst✝¹⁴ : AddCommGroup E
inst✝¹³ : AddCommGroup F
inst✝¹² : AddCommGroup G
inst✝¹¹ : Module 𝕜 E
inst✝¹⁰ : Module 𝕜 F
inst✝⁹ : Module 𝕜 G
inst✝⁸ : TopologicalSpace E
inst✝⁷ : TopologicalSpace F
inst✝⁶ : TopologicalSpace G
inst✝⁵ : TopologicalAddGroup E
inst✝⁴ : ContinuousConstSMul 𝕜 E
inst✝³ : TopologicalAddGroup F
inst✝² : ContinuousConstSMul 𝕜 F
inst✝¹ : TopologicalAddGroup G
inst✝ : ContinuousConstSMul 𝕜 G
p : FormalMultilinearSeries 𝕜 E F
n : ℕ
c : Composition n
j : Fin n
v : Fin n → E
z : E
k : Fin (Composition.length c)
h : ¬k = Composition.index c j
⊢ applyComposition p c (Function.update v j z) k = applyComposition p c v k
[PROOFSTEP]
let r : Fin (c.blocksFun k) → Fin n := c.embedding k
[GOAL]
case neg
𝕜 : Type u_1
E : Type u_2
F : Type u_3
G : Type u_4
H : Type u_5
inst✝¹⁵ : CommRing 𝕜
inst✝¹⁴ : AddCommGroup E
inst✝¹³ : AddCommGroup F
inst✝¹² : AddCommGroup G
inst✝¹¹ : Module 𝕜 E
inst✝¹⁰ : Module 𝕜 F
inst✝⁹ : Module 𝕜 G
inst✝⁸ : TopologicalSpace E
inst✝⁷ : TopologicalSpace F
inst✝⁶ : TopologicalSpace G
inst✝⁵ : TopologicalAddGroup E
inst✝⁴ : ContinuousConstSMul 𝕜 E
inst✝³ : TopologicalAddGroup F
inst✝² : ContinuousConstSMul 𝕜 F
inst✝¹ : TopologicalAddGroup G
inst✝ : ContinuousConstSMul 𝕜 G
p : FormalMultilinearSeries 𝕜 E F
n : ℕ
c : Composition n
j : Fin n
v : Fin n → E
z : E
k : Fin (Composition.length c)
h : ¬k = Composition.index c j
r : Fin (Composition.blocksFun c k) → Fin n := ↑(Composition.embedding c k)
⊢ applyComposition p c (Function.update v j z) k = applyComposition p c v k
[PROOFSTEP]
change p (c.blocksFun k) (Function.update v j z ∘ r) = p (c.blocksFun k) (v ∘ r)
[GOAL]
case neg
𝕜 : Type u_1
E : Type u_2
F : Type u_3
G : Type u_4
H : Type u_5
inst✝¹⁵ : CommRing 𝕜
inst✝¹⁴ : AddCommGroup E
inst✝¹³ : AddCommGroup F
inst✝¹² : AddCommGroup G
inst✝¹¹ : Module 𝕜 E
inst✝¹⁰ : Module 𝕜 F
inst✝⁹ : Module 𝕜 G
inst✝⁸ : TopologicalSpace E
inst✝⁷ : TopologicalSpace F
inst✝⁶ : TopologicalSpace G
inst✝⁵ : TopologicalAddGroup E
inst✝⁴ : ContinuousConstSMul 𝕜 E
inst✝³ : TopologicalAddGroup F
inst✝² : ContinuousConstSMul 𝕜 F
inst✝¹ : TopologicalAddGroup G
inst✝ : ContinuousConstSMul 𝕜 G
p : FormalMultilinearSeries 𝕜 E F
n : ℕ
c : Composition n
j : Fin n
v : Fin n → E
z : E
k : Fin (Composition.length c)
h : ¬k = Composition.index c j
r : Fin (Composition.blocksFun c k) → Fin n := ↑(Composition.embedding c k)
⊢ ↑(p (Composition.blocksFun c k)) (Function.update v j z ∘ r) = ↑(p (Composition.blocksFun c k)) (v ∘ r)
[PROOFSTEP]
suffices B : Function.update v j z ∘ r = v ∘ r
[GOAL]
case neg
𝕜 : Type u_1
E : Type u_2
F : Type u_3
G : Type u_4
H : Type u_5
inst✝¹⁵ : CommRing 𝕜
inst✝¹⁴ : AddCommGroup E
inst✝¹³ : AddCommGroup F
inst✝¹² : AddCommGroup G
inst✝¹¹ : Module 𝕜 E
inst✝¹⁰ : Module 𝕜 F
inst✝⁹ : Module 𝕜 G
inst✝⁸ : TopologicalSpace E
inst✝⁷ : TopologicalSpace F
inst✝⁶ : TopologicalSpace G
inst✝⁵ : TopologicalAddGroup E
inst✝⁴ : ContinuousConstSMul 𝕜 E
inst✝³ : TopologicalAddGroup F
inst✝² : ContinuousConstSMul 𝕜 F
inst✝¹ : TopologicalAddGroup G
inst✝ : ContinuousConstSMul 𝕜 G
p : FormalMultilinearSeries 𝕜 E F
n : ℕ
c : Composition n
j : Fin n
v : Fin n → E
z : E
k : Fin (Composition.length c)
h : ¬k = Composition.index c j
r : Fin (Composition.blocksFun c k) → Fin n := ↑(Composition.embedding c k)
B : Function.update v j z ∘ r = v ∘ r
⊢ ↑(p (Composition.blocksFun c k)) (Function.update v j z ∘ r) = ↑(p (Composition.blocksFun c k)) (v ∘ r)
[PROOFSTEP]
rw [B]
[GOAL]
case B
𝕜 : Type u_1
E : Type u_2
F : Type u_3
G : Type u_4
H : Type u_5
inst✝¹⁵ : CommRing 𝕜
inst✝¹⁴ : AddCommGroup E
inst✝¹³ : AddCommGroup F
inst✝¹² : AddCommGroup G
inst✝¹¹ : Module 𝕜 E
inst✝¹⁰ : Module 𝕜 F
inst✝⁹ : Module 𝕜 G
inst✝⁸ : TopologicalSpace E
inst✝⁷ : TopologicalSpace F
inst✝⁶ : TopologicalSpace G
inst✝⁵ : TopologicalAddGroup E
inst✝⁴ : ContinuousConstSMul 𝕜 E
inst✝³ : TopologicalAddGroup F
inst✝² : ContinuousConstSMul 𝕜 F
inst✝¹ : TopologicalAddGroup G
inst✝ : ContinuousConstSMul 𝕜 G
p : FormalMultilinearSeries 𝕜 E F
n : ℕ
c : Composition n
j : Fin n
v : Fin n → E
z : E
k : Fin (Composition.length c)
h : ¬k = Composition.index c j
r : Fin (Composition.blocksFun c k) → Fin n := ↑(Composition.embedding c k)
⊢ Function.update v j z ∘ r = v ∘ r
[PROOFSTEP]
apply Function.update_comp_eq_of_not_mem_range
[GOAL]
case B.h
𝕜 : Type u_1
E : Type u_2
F : Type u_3
G : Type u_4
H : Type u_5
inst✝¹⁵ : CommRing 𝕜
inst✝¹⁴ : AddCommGroup E
inst✝¹³ : AddCommGroup F
inst✝¹² : AddCommGroup G
inst✝¹¹ : Module 𝕜 E
inst✝¹⁰ : Module 𝕜 F
inst✝⁹ : Module 𝕜 G
inst✝⁸ : TopologicalSpace E
inst✝⁷ : TopologicalSpace F
inst✝⁶ : TopologicalSpace G
inst✝⁵ : TopologicalAddGroup E
inst✝⁴ : ContinuousConstSMul 𝕜 E
inst✝³ : TopologicalAddGroup F
inst✝² : ContinuousConstSMul 𝕜 F
inst✝¹ : TopologicalAddGroup G
inst✝ : ContinuousConstSMul 𝕜 G
p : FormalMultilinearSeries 𝕜 E F
n : ℕ
c : Composition n
j : Fin n
v : Fin n → E
z : E
k : Fin (Composition.length c)
h : ¬k = Composition.index c j
r : Fin (Composition.blocksFun c k) → Fin n := ↑(Composition.embedding c k)
⊢ ¬j ∈ Set.range r
[PROOFSTEP]
rwa [c.mem_range_embedding_iff']
[GOAL]
𝕜 : Type u_1
E : Type u_2
F : Type u_3
G : Type u_4
H : Type u_5
inst✝¹⁵ : CommRing 𝕜
inst✝¹⁴ : AddCommGroup E
inst✝¹³ : AddCommGroup F
inst✝¹² : AddCommGroup G
inst✝¹¹ : Module 𝕜 E
inst✝¹⁰ : Module 𝕜 F
inst✝⁹ : Module 𝕜 G
inst✝⁸ : TopologicalSpace E
inst✝⁷ : TopologicalSpace F
inst✝⁶ : TopologicalSpace G
inst✝⁵ : TopologicalAddGroup E
inst✝⁴ : ContinuousConstSMul 𝕜 E
inst✝³ : TopologicalAddGroup F
inst✝² : ContinuousConstSMul 𝕜 F
inst✝¹ : TopologicalAddGroup G
inst✝ : ContinuousConstSMul 𝕜 G
n : ℕ
p : FormalMultilinearSeries 𝕜 F G
f : E →L[𝕜] F
c : Composition n
v : Fin n → E
⊢ applyComposition (compContinuousLinearMap p f) c v = applyComposition p c (↑f ∘ v)
[PROOFSTEP]
simp [applyComposition]
[GOAL]
𝕜 : Type u_1
E : Type u_2
F : Type u_3
G : Type u_4
H : Type u_5
inst✝¹⁵ : CommRing 𝕜
inst✝¹⁴ : AddCommGroup E
inst✝¹³ : AddCommGroup F
inst✝¹² : AddCommGroup G
inst✝¹¹ : Module 𝕜 E
inst✝¹⁰ : Module 𝕜 F
inst✝⁹ : Module 𝕜 G
inst✝⁸ : TopologicalSpace E
inst✝⁷ : TopologicalSpace F
inst✝⁶ : TopologicalSpace G
inst✝⁵ : TopologicalAddGroup E
inst✝⁴ : ContinuousConstSMul 𝕜 E
inst✝³ : TopologicalAddGroup F
inst✝² : ContinuousConstSMul 𝕜 F
inst✝¹ : TopologicalAddGroup G
inst✝ : ContinuousConstSMul 𝕜 G
n : ℕ
p : FormalMultilinearSeries 𝕜 F G
f : E →L[𝕜] F
c : Composition n
v : Fin n → E
⊢ (fun i => ↑(p (Composition.blocksFun c i)) (↑f ∘ v ∘ ↑(Composition.embedding c i))) = fun i =>
    ↑(p (Composition.blocksFun c i)) ((↑f ∘ v) ∘ ↑(Composition.embedding c i))
[PROOFSTEP]
rfl
[GOAL]
𝕜 : Type u_1
E : Type u_2
F : Type u_3
G : Type u_4
H : Type u_5
inst✝¹⁴ : CommRing 𝕜
inst✝¹³ : AddCommGroup E
inst✝¹² : AddCommGroup F
inst✝¹¹ : AddCommGroup G
inst✝¹⁰ : Module 𝕜 E
inst✝⁹ : Module 𝕜 F
inst✝⁸ : Module 𝕜 G
inst✝⁷ : TopologicalSpace E
inst✝⁶ : TopologicalSpace F
inst✝⁵ : TopologicalSpace G
inst✝⁴ : TopologicalAddGroup E
inst✝³ : ContinuousConstSMul 𝕜 E
inst✝² : TopologicalAddGroup F
inst✝¹ : ContinuousConstSMul 𝕜 F
n : ℕ
p : FormalMultilinearSeries 𝕜 E F
c : Composition n
f : ContinuousMultilinearMap 𝕜 (fun _i => F) G
inst✝ : DecidableEq (Fin n)
v : Fin n → E
i : Fin n
x y : E
⊢ (fun v => ↑f (applyComposition p c v)) (Function.update v i (x + y)) =
    (fun v => ↑f (applyComposition p c v)) (Function.update v i x) +
      (fun v => ↑f (applyComposition p c v)) (Function.update v i y)
[PROOFSTEP]
cases Subsingleton.elim ‹_› (instDecidableEqFin _)
[GOAL]
case refl
𝕜 : Type u_1
E : Type u_2
F : Type u_3
G : Type u_4
H : Type u_5
inst✝¹³ : CommRing 𝕜
inst✝¹² : AddCommGroup E
inst✝¹¹ : AddCommGroup F
inst✝¹⁰ : AddCommGroup G
inst✝⁹ : Module 𝕜 E
inst✝⁸ : Module 𝕜 F
inst✝⁷ : Module 𝕜 G
inst✝⁶ : TopologicalSpace E
inst✝⁵ : TopologicalSpace F
inst✝⁴ : TopologicalSpace G
inst✝³ : TopologicalAddGroup E
inst✝² : ContinuousConstSMul 𝕜 E
inst✝¹ : TopologicalAddGroup F
inst✝ : ContinuousConstSMul 𝕜 F
n : ℕ
p : FormalMultilinearSeries 𝕜 E F
c : Composition n
f : ContinuousMultilinearMap 𝕜 (fun _i => F) G
v : Fin n → E
i : Fin n
x y : E
⊢ (fun v => ↑f (applyComposition p c v)) (Function.update v i (x + y)) =
    (fun v => ↑f (applyComposition p c v)) (Function.update v i x) +
      (fun v => ↑f (applyComposition p c v)) (Function.update v i y)
[PROOFSTEP]
simp only [applyComposition_update, ContinuousMultilinearMap.map_add]
[GOAL]
𝕜 : Type u_1
E : Type u_2
F : Type u_3
G : Type u_4
H : Type u_5
inst✝¹⁴ : CommRing 𝕜
inst✝¹³ : AddCommGroup E
inst✝¹² : AddCommGroup F
inst✝¹¹ : AddCommGroup G
inst✝¹⁰ : Module 𝕜 E
inst✝⁹ : Module 𝕜 F
inst✝⁸ : Module 𝕜 G
inst✝⁷ : TopologicalSpace E
inst✝⁶ : TopologicalSpace F
inst✝⁵ : TopologicalSpace G
inst✝⁴ : TopologicalAddGroup E
inst✝³ : ContinuousConstSMul 𝕜 E
inst✝² : TopologicalAddGroup F
inst✝¹ : ContinuousConstSMul 𝕜 F
n : ℕ
p : FormalMultilinearSeries 𝕜 E F
c✝ : Composition n
f : ContinuousMultilinearMap 𝕜 (fun _i => F) G
inst✝ : DecidableEq (Fin n)
v : Fin n → E
i : Fin n
c : 𝕜
x : E
⊢ (fun v => ↑f (applyComposition p c✝ v)) (Function.update v i (c • x)) =
    c • (fun v => ↑f (applyComposition p c✝ v)) (Function.update v i x)
[PROOFSTEP]
cases Subsingleton.elim ‹_› (instDecidableEqFin _)
[GOAL]
case refl
𝕜 : Type u_1
E : Type u_2
F : Type u_3
G : Type u_4
H : Type u_5
inst✝¹³ : CommRing 𝕜
inst✝¹² : AddCommGroup E
inst✝¹¹ : AddCommGroup F
inst✝¹⁰ : AddCommGroup G
inst✝⁹ : Module 𝕜 E
inst✝⁸ : Module 𝕜 F
inst✝⁷ : Module 𝕜 G
inst✝⁶ : TopologicalSpace E
inst✝⁵ : TopologicalSpace F
inst✝⁴ : TopologicalSpace G
inst✝³ : TopologicalAddGroup E
inst✝² : ContinuousConstSMul 𝕜 E
inst✝¹ : TopologicalAddGroup F
inst✝ : ContinuousConstSMul 𝕜 F
n : ℕ
p : FormalMultilinearSeries 𝕜 E F
c✝ : Composition n
f : ContinuousMultilinearMap 𝕜 (fun _i => F) G
v : Fin n → E
i : Fin n
c : 𝕜
x : E
⊢ (fun v => ↑f (applyComposition p c✝ v)) (Function.update v i (c • x)) =
    c • (fun v => ↑f (applyComposition p c✝ v)) (Function.update v i x)
[PROOFSTEP]
simp only [applyComposition_update, ContinuousMultilinearMap.map_smul]
[GOAL]
𝕜 : Type u_1
E : Type u_2
F : Type u_3
G : Type u_4
H : Type u_5
inst✝¹⁵ : CommRing 𝕜
inst✝¹⁴ : AddCommGroup E
inst✝¹³ : AddCommGroup F
inst✝¹² : AddCommGroup G
inst✝¹¹ : Module 𝕜 E
inst✝¹⁰ : Module 𝕜 F
inst✝⁹ : Module 𝕜 G
inst✝⁸ : TopologicalSpace E
inst✝⁷ : TopologicalSpace F
inst✝⁶ : TopologicalSpace G
inst✝⁵ : TopologicalAddGroup E
inst✝⁴ : ContinuousConstSMul 𝕜 E
inst✝³ : TopologicalAddGroup F
inst✝² : ContinuousConstSMul 𝕜 F
inst✝¹ : TopologicalAddGroup G
inst✝ : ContinuousConstSMul 𝕜 G
q : FormalMultilinearSeries 𝕜 F G
p : FormalMultilinearSeries 𝕜 E F
v : Fin 0 → E
v' : Fin 0 → F
⊢ ↑(FormalMultilinearSeries.comp q p 0) v = ↑(q 0) v'
[PROOFSTEP]
let c : Composition 0 := Composition.ones 0
[GOAL]
𝕜 : Type u_1
E : Type u_2
F : Type u_3
G : Type u_4
H : Type u_5
inst✝¹⁵ : CommRing 𝕜
inst✝¹⁴ : AddCommGroup E
inst✝¹³ : AddCommGroup F
inst✝¹² : AddCommGroup G
inst✝¹¹ : Module 𝕜 E
inst✝¹⁰ : Module 𝕜 F
inst✝⁹ : Module 𝕜 G
inst✝⁸ : TopologicalSpace E
inst✝⁷ : TopologicalSpace F
inst✝⁶ : TopologicalSpace G
inst✝⁵ : TopologicalAddGroup E
inst✝⁴ : ContinuousConstSMul 𝕜 E
inst✝³ : TopologicalAddGroup F
inst✝² : ContinuousConstSMul 𝕜 F
inst✝¹ : TopologicalAddGroup G
inst✝ : ContinuousConstSMul 𝕜 G
q : FormalMultilinearSeries 𝕜 F G
p : FormalMultilinearSeries 𝕜 E F
v : Fin 0 → E
v' : Fin 0 → F
c : Composition 0 := Composition.ones 0
⊢ ↑(FormalMultilinearSeries.comp q p 0) v = ↑(q 0) v'
[PROOFSTEP]
dsimp [FormalMultilinearSeries.comp]
[GOAL]
𝕜 : Type u_1
E : Type u_2
F : Type u_3
G : Type u_4
H : Type u_5
inst✝¹⁵ : CommRing 𝕜
inst✝¹⁴ : AddCommGroup E
inst✝¹³ : AddCommGroup F
inst✝¹² : AddCommGroup G
inst✝¹¹ : Module 𝕜 E
inst✝¹⁰ : Module 𝕜 F
inst✝⁹ : Module 𝕜 G
inst✝⁸ : TopologicalSpace E
inst✝⁷ : TopologicalSpace F
inst✝⁶ : TopologicalSpace G
inst✝⁵ : TopologicalAddGroup E
inst✝⁴ : ContinuousConstSMul 𝕜 E
inst✝³ : TopologicalAddGroup F
inst✝² : ContinuousConstSMul 𝕜 F
inst✝¹ : TopologicalAddGroup G
inst✝ : ContinuousConstSMul 𝕜 G
q : FormalMultilinearSeries 𝕜 F G
p : FormalMultilinearSeries 𝕜 E F
v : Fin 0 → E
v' : Fin 0 → F
c : Composition 0 := Composition.ones 0
⊢ ↑(∑ c : Composition 0, compAlongComposition q p c) v = ↑(q 0) v'
[PROOFSTEP]
have : { c } = (Finset.univ : Finset (Composition 0)) := by
  apply Finset.eq_of_subset_of_card_le <;> simp [Finset.card_univ, composition_card 0]
[GOAL]
𝕜 : Type u_1
E : Type u_2
F : Type u_3
G : Type u_4
H : Type u_5
inst✝¹⁵ : CommRing 𝕜
inst✝¹⁴ : AddCommGroup E
inst✝¹³ : AddCommGroup F
inst✝¹² : AddCommGroup G
inst✝¹¹ : Module 𝕜 E
inst✝¹⁰ : Module 𝕜 F
inst✝⁹ : Module 𝕜 G
inst✝⁸ : TopologicalSpace E
inst✝⁷ : TopologicalSpace F
inst✝⁶ : TopologicalSpace G
inst✝⁵ : TopologicalAddGroup E
inst✝⁴ : ContinuousConstSMul 𝕜 E
inst✝³ : TopologicalAddGroup F
inst✝² : ContinuousConstSMul 𝕜 F
inst✝¹ : TopologicalAddGroup G
inst✝ : ContinuousConstSMul 𝕜 G
q : FormalMultilinearSeries 𝕜 F G
p : FormalMultilinearSeries 𝕜 E F
v : Fin 0 → E
v' : Fin 0 → F
c : Composition 0 := Composition.ones 0
⊢ {c} = Finset.univ
[PROOFSTEP]
apply Finset.eq_of_subset_of_card_le
[GOAL]
case h
𝕜 : Type u_1
E : Type u_2
F : Type u_3
G : Type u_4
H : Type u_5
inst✝¹⁵ : CommRing 𝕜
inst✝¹⁴ : AddCommGroup E
inst✝¹³ : AddCommGroup F
inst✝¹² : AddCommGroup G
inst✝¹¹ : Module 𝕜 E
inst✝¹⁰ : Module 𝕜 F
inst✝⁹ : Module 𝕜 G
inst✝⁸ : TopologicalSpace E
inst✝⁷ : TopologicalSpace F
inst✝⁶ : TopologicalSpace G
inst✝⁵ : TopologicalAddGroup E
inst✝⁴ : ContinuousConstSMul 𝕜 E
inst✝³ : TopologicalAddGroup F
inst✝² : ContinuousConstSMul 𝕜 F
inst✝¹ : TopologicalAddGroup G
inst✝ : ContinuousConstSMul 𝕜 G
q : FormalMultilinearSeries 𝕜 F G
p : FormalMultilinearSeries 𝕜 E F
v : Fin 0 → E
v' : Fin 0 → F
c : Composition 0 := Composition.ones 0
⊢ {c} ⊆ Finset.univ
[PROOFSTEP]
simp [Finset.card_univ, composition_card 0]
[GOAL]
case h₂
𝕜 : Type u_1
E : Type u_2
F : Type u_3
G : Type u_4
H : Type u_5
inst✝¹⁵ : CommRing 𝕜
inst✝¹⁴ : AddCommGroup E
inst✝¹³ : AddCommGroup F
inst✝¹² : AddCommGroup G
inst✝¹¹ : Module 𝕜 E
inst✝¹⁰ : Module 𝕜 F
inst✝⁹ : Module 𝕜 G
inst✝⁸ : TopologicalSpace E
inst✝⁷ : TopologicalSpace F
inst✝⁶ : TopologicalSpace G
inst✝⁵ : TopologicalAddGroup E
inst✝⁴ : ContinuousConstSMul 𝕜 E
inst✝³ : TopologicalAddGroup F
inst✝² : ContinuousConstSMul 𝕜 F
inst✝¹ : TopologicalAddGroup G
inst✝ : ContinuousConstSMul 𝕜 G
q : FormalMultilinearSeries 𝕜 F G
p : FormalMultilinearSeries 𝕜 E F
v : Fin 0 → E
v' : Fin 0 → F
c : Composition 0 := Composition.ones 0
⊢ Finset.card Finset.univ ≤ Finset.card {c}
[PROOFSTEP]
simp [Finset.card_univ, composition_card 0]
[GOAL]
𝕜 : Type u_1
E : Type u_2
F : Type u_3
G : Type u_4
H : Type u_5
inst✝¹⁵ : CommRing 𝕜
inst✝¹⁴ : AddCommGroup E
inst✝¹³ : AddCommGroup F
inst✝¹² : AddCommGroup G
inst✝¹¹ : Module 𝕜 E
inst✝¹⁰ : Module 𝕜 F
inst✝⁹ : Module 𝕜 G
inst✝⁸ : TopologicalSpace E
inst✝⁷ : TopologicalSpace F
inst✝⁶ : TopologicalSpace G
inst✝⁵ : TopologicalAddGroup E
inst✝⁴ : ContinuousConstSMul 𝕜 E
inst✝³ : TopologicalAddGroup F
inst✝² : ContinuousConstSMul 𝕜 F
inst✝¹ : TopologicalAddGroup G
inst✝ : ContinuousConstSMul 𝕜 G
q : FormalMultilinearSeries 𝕜 F G
p : FormalMultilinearSeries 𝕜 E F
v : Fin 0 → E
v' : Fin 0 → F
c : Composition 0 := Composition.ones 0
this : {c} = Finset.univ
⊢ ↑(∑ c : Composition 0, compAlongComposition q p c) v = ↑(q 0) v'
[PROOFSTEP]
rw [← this, Finset.sum_singleton, compAlongComposition_apply]
[GOAL]
𝕜 : Type u_1
E : Type u_2
F : Type u_3
G : Type u_4
H : Type u_5
inst✝¹⁵ : CommRing 𝕜
inst✝¹⁴ : AddCommGroup E
inst✝¹³ : AddCommGroup F
inst✝¹² : AddCommGroup G
inst✝¹¹ : Module 𝕜 E
inst✝¹⁰ : Module 𝕜 F
inst✝⁹ : Module 𝕜 G
inst✝⁸ : TopologicalSpace E
inst✝⁷ : TopologicalSpace F
inst✝⁶ : TopologicalSpace G
inst✝⁵ : TopologicalAddGroup E
inst✝⁴ : ContinuousConstSMul 𝕜 E
inst✝³ : TopologicalAddGroup F
inst✝² : ContinuousConstSMul 𝕜 F
inst✝¹ : TopologicalAddGroup G
inst✝ : ContinuousConstSMul 𝕜 G
q : FormalMultilinearSeries 𝕜 F G
p : FormalMultilinearSeries 𝕜 E F
v : Fin 0 → E
v' : Fin 0 → F
c : Composition 0 := Composition.ones 0
this : {c} = Finset.univ
⊢ ↑(q (Composition.length c)) (applyComposition p c v) = ↑(q 0) v'
[PROOFSTEP]
symm
[GOAL]
𝕜 : Type u_1
E : Type u_2
F : Type u_3
G : Type u_4
H : Type u_5
inst✝¹⁵ : CommRing 𝕜
inst✝¹⁴ : AddCommGroup E
inst✝¹³ : AddCommGroup F
inst✝¹² : AddCommGroup G
inst✝¹¹ : Module 𝕜 E
inst✝¹⁰ : Module 𝕜 F
inst✝⁹ : Module 𝕜 G
inst✝⁸ : TopologicalSpace E
inst✝⁷ : TopologicalSpace F
inst✝⁶ : TopologicalSpace G
inst✝⁵ : TopologicalAddGroup E
inst✝⁴ : ContinuousConstSMul 𝕜 E
inst✝³ : TopologicalAddGroup F
inst✝² : ContinuousConstSMul 𝕜 F
inst✝¹ : TopologicalAddGroup G
inst✝ : ContinuousConstSMul 𝕜 G
q : FormalMultilinearSeries 𝕜 F G
p : FormalMultilinearSeries 𝕜 E F
v : Fin 0 → E
v' : Fin 0 → F
c : Composition 0 := Composition.ones 0
this : {c} = Finset.univ
⊢ ↑(q 0) v' = ↑(q (Composition.length c)) (applyComposition p c v)
[PROOFSTEP]
congr!
  -- porting note: needed the stronger version of `congr` here
[GOAL]
𝕜 : Type u_1
E : Type u_2
F : Type u_3
G : Type u_4
H : Type u_5
inst✝¹⁵ : CommRing 𝕜
inst✝¹⁴ : AddCommGroup E
inst✝¹³ : AddCommGroup F
inst✝¹² : AddCommGroup G
inst✝¹¹ : Module 𝕜 E
inst✝¹⁰ : Module 𝕜 F
inst✝⁹ : Module 𝕜 G
inst✝⁸ : TopologicalSpace E
inst✝⁷ : TopologicalSpace F
inst✝⁶ : TopologicalSpace G
inst✝⁵ : TopologicalAddGroup E
inst✝⁴ : ContinuousConstSMul 𝕜 E
inst✝³ : TopologicalAddGroup F
inst✝² : ContinuousConstSMul 𝕜 F
inst✝¹ : TopologicalAddGroup G
inst✝ : ContinuousConstSMul 𝕜 G
q : FormalMultilinearSeries 𝕜 E F
p : FormalMultilinearSeries 𝕜 E E
⊢ FormalMultilinearSeries.comp q p 0 = q 0
[PROOFSTEP]
ext v
[GOAL]
case H
𝕜 : Type u_1
E : Type u_2
F : Type u_3
G : Type u_4
H : Type u_5
inst✝¹⁵ : CommRing 𝕜
inst✝¹⁴ : AddCommGroup E
inst✝¹³ : AddCommGroup F
inst✝¹² : AddCommGroup G
inst✝¹¹ : Module 𝕜 E
inst✝¹⁰ : Module 𝕜 F
inst✝⁹ : Module 𝕜 G
inst✝⁸ : TopologicalSpace E
inst✝⁷ : TopologicalSpace F
inst✝⁶ : TopologicalSpace G
inst✝⁵ : TopologicalAddGroup E
inst✝⁴ : ContinuousConstSMul 𝕜 E
inst✝³ : TopologicalAddGroup F
inst✝² : ContinuousConstSMul 𝕜 F
inst✝¹ : TopologicalAddGroup G
inst✝ : ContinuousConstSMul 𝕜 G
q : FormalMultilinearSeries 𝕜 E F
p : FormalMultilinearSeries 𝕜 E E
v : Fin 0 → E
⊢ ↑(FormalMultilinearSeries.comp q p 0) v = ↑(q 0) v
[PROOFSTEP]
exact q.comp_coeff_zero p _ _
[GOAL]
𝕜 : Type u_1
E : Type u_2
F : Type u_3
G : Type u_4
H : Type u_5
inst✝¹⁵ : CommRing 𝕜
inst✝¹⁴ : AddCommGroup E
inst✝¹³ : AddCommGroup F
inst✝¹² : AddCommGroup G
inst✝¹¹ : Module 𝕜 E
inst✝¹⁰ : Module 𝕜 F
inst✝⁹ : Module 𝕜 G
inst✝⁸ : TopologicalSpace E
inst✝⁷ : TopologicalSpace F
inst✝⁶ : TopologicalSpace G
inst✝⁵ : TopologicalAddGroup E
inst✝⁴ : ContinuousConstSMul 𝕜 E
inst✝³ : TopologicalAddGroup F
inst✝² : ContinuousConstSMul 𝕜 F
inst✝¹ : TopologicalAddGroup G
inst✝ : ContinuousConstSMul 𝕜 G
q : FormalMultilinearSeries 𝕜 F G
p : FormalMultilinearSeries 𝕜 E F
v : Fin 1 → E
⊢ ↑(FormalMultilinearSeries.comp q p 1) v = ↑(q 1) fun _i => ↑(p 1) v
[PROOFSTEP]
have : {Composition.ones 1} = (Finset.univ : Finset (Composition 1)) :=
  Finset.eq_univ_of_card _ (by simp [composition_card])
[GOAL]
𝕜 : Type u_1
E : Type u_2
F : Type u_3
G : Type u_4
H : Type u_5
inst✝¹⁵ : CommRing 𝕜
inst✝¹⁴ : AddCommGroup E
inst✝¹³ : AddCommGroup F
inst✝¹² : AddCommGroup G
inst✝¹¹ : Module 𝕜 E
inst✝¹⁰ : Module 𝕜 F
inst✝⁹ : Module 𝕜 G
inst✝⁸ : TopologicalSpace E
inst✝⁷ : TopologicalSpace F
inst✝⁶ : TopologicalSpace G
inst✝⁵ : TopologicalAddGroup E
inst✝⁴ : ContinuousConstSMul 𝕜 E
inst✝³ : TopologicalAddGroup F
inst✝² : ContinuousConstSMul 𝕜 F
inst✝¹ : TopologicalAddGroup G
inst✝ : ContinuousConstSMul 𝕜 G
q : FormalMultilinearSeries 𝕜 F G
p : FormalMultilinearSeries 𝕜 E F
v : Fin 1 → E
⊢ Finset.card {Composition.ones 1} = Fintype.card (Composition 1)
[PROOFSTEP]
simp [composition_card]
[GOAL]
𝕜 : Type u_1
E : Type u_2
F : Type u_3
G : Type u_4
H : Type u_5
inst✝¹⁵ : CommRing 𝕜
inst✝¹⁴ : AddCommGroup E
inst✝¹³ : AddCommGroup F
inst✝¹² : AddCommGroup G
inst✝¹¹ : Module 𝕜 E
inst✝¹⁰ : Module 𝕜 F
inst✝⁹ : Module 𝕜 G
inst✝⁸ : TopologicalSpace E
inst✝⁷ : TopologicalSpace F
inst✝⁶ : TopologicalSpace G
inst✝⁵ : TopologicalAddGroup E
inst✝⁴ : ContinuousConstSMul 𝕜 E
inst✝³ : TopologicalAddGroup F
inst✝² : ContinuousConstSMul 𝕜 F
inst✝¹ : TopologicalAddGroup G
inst✝ : ContinuousConstSMul 𝕜 G
q : FormalMultilinearSeries 𝕜 F G
p : FormalMultilinearSeries 𝕜 E F
v : Fin 1 → E
this : {Composition.ones 1} = Finset.univ
⊢ ↑(FormalMultilinearSeries.comp q p 1) v = ↑(q 1) fun _i => ↑(p 1) v
[PROOFSTEP]
simp only [FormalMultilinearSeries.comp, compAlongComposition_apply, ← this, Finset.sum_singleton]
[GOAL]
𝕜 : Type u_1
E : Type u_2
F : Type u_3
G : Type u_4
H : Type u_5
inst✝¹⁵ : CommRing 𝕜
inst✝¹⁴ : AddCommGroup E
inst✝¹³ : AddCommGroup F
inst✝¹² : AddCommGroup G
inst✝¹¹ : Module 𝕜 E
inst✝¹⁰ : Module 𝕜 F
inst✝⁹ : Module 𝕜 G
inst✝⁸ : TopologicalSpace E
inst✝⁷ : TopologicalSpace F
inst✝⁶ : TopologicalSpace G
inst✝⁵ : TopologicalAddGroup E
inst✝⁴ : ContinuousConstSMul 𝕜 E
inst✝³ : TopologicalAddGroup F
inst✝² : ContinuousConstSMul 𝕜 F
inst✝¹ : TopologicalAddGroup G
inst✝ : ContinuousConstSMul 𝕜 G
q : FormalMultilinearSeries 𝕜 F G
p : FormalMultilinearSeries 𝕜 E F
v : Fin 1 → E
this : {Composition.ones 1} = Finset.univ
⊢ ↑(q (Composition.length (Composition.ones 1))) (applyComposition p (Composition.ones 1) v) = ↑(q 1) fun _i => ↑(p 1) v
[PROOFSTEP]
refine' q.congr (by simp) fun i hi1 hi2 => _
[GOAL]
𝕜 : Type u_1
E : Type u_2
F : Type u_3
G : Type u_4
H : Type u_5
inst✝¹⁵ : CommRing 𝕜
inst✝¹⁴ : AddCommGroup E
inst✝¹³ : AddCommGroup F
inst✝¹² : AddCommGroup G
inst✝¹¹ : Module 𝕜 E
inst✝¹⁰ : Module 𝕜 F
inst✝⁹ : Module 𝕜 G
inst✝⁸ : TopologicalSpace E
inst✝⁷ : TopologicalSpace F
inst✝⁶ : TopologicalSpace G
inst✝⁵ : TopologicalAddGroup E
inst✝⁴ : ContinuousConstSMul 𝕜 E
inst✝³ : TopologicalAddGroup F
inst✝² : ContinuousConstSMul 𝕜 F
inst✝¹ : TopologicalAddGroup G
inst✝ : ContinuousConstSMul 𝕜 G
q : FormalMultilinearSeries 𝕜 F G
p : FormalMultilinearSeries 𝕜 E F
v : Fin 1 → E
this : {Composition.ones 1} = Finset.univ
⊢ Composition.length (Composition.ones 1) = 1
[PROOFSTEP]
simp
[GOAL]
𝕜 : Type u_1
E : Type u_2
F : Type u_3
G : Type u_4
H : Type u_5
inst✝¹⁵ : CommRing 𝕜
inst✝¹⁴ : AddCommGroup E
inst✝¹³ : AddCommGroup F
inst✝¹² : AddCommGroup G
inst✝¹¹ : Module 𝕜 E
inst✝¹⁰ : Module 𝕜 F
inst✝⁹ : Module 𝕜 G
inst✝⁸ : TopologicalSpace E
inst✝⁷ : TopologicalSpace F
inst✝⁶ : TopologicalSpace G
inst✝⁵ : TopologicalAddGroup E
inst✝⁴ : ContinuousConstSMul 𝕜 E
inst✝³ : TopologicalAddGroup F
inst✝² : ContinuousConstSMul 𝕜 F
inst✝¹ : TopologicalAddGroup G
inst✝ : ContinuousConstSMul 𝕜 G
q : FormalMultilinearSeries 𝕜 F G
p : FormalMultilinearSeries 𝕜 E F
v : Fin 1 → E
this : {Composition.ones 1} = Finset.univ
i : ℕ
hi1 : i < Composition.length (Composition.ones 1)
hi2 : i < 1
⊢ applyComposition p (Composition.ones 1) v { val := i, isLt := hi1 } = ↑(p 1) v
[PROOFSTEP]
simp only [applyComposition_ones]
[GOAL]
𝕜 : Type u_1
E : Type u_2
F : Type u_3
G : Type u_4
H : Type u_5
inst✝¹⁵ : CommRing 𝕜
inst✝¹⁴ : AddCommGroup E
inst✝¹³ : AddCommGroup F
inst✝¹² : AddCommGroup G
inst✝¹¹ : Module 𝕜 E
inst✝¹⁰ : Module 𝕜 F
inst✝⁹ : Module 𝕜 G
inst✝⁸ : TopologicalSpace E
inst✝⁷ : TopologicalSpace F
inst✝⁶ : TopologicalSpace G
inst✝⁵ : TopologicalAddGroup E
inst✝⁴ : ContinuousConstSMul 𝕜 E
inst✝³ : TopologicalAddGroup F
inst✝² : ContinuousConstSMul 𝕜 F
inst✝¹ : TopologicalAddGroup G
inst✝ : ContinuousConstSMul 𝕜 G
q : FormalMultilinearSeries 𝕜 F G
p : FormalMultilinearSeries 𝕜 E F
v : Fin 1 → E
this : {Composition.ones 1} = Finset.univ
i : ℕ
hi1 : i < Composition.length (Composition.ones 1)
hi2 : i < 1
⊢ (↑(p 1) fun x => v (Fin.castLE (_ : Composition.length (Composition.ones 1) ≤ 1) { val := i, isLt := hi1 })) =
    ↑(p 1) v
[PROOFSTEP]
exact
  p.congr rfl fun j _hj1 hj2 => by
    congr!
      -- porting note: needed the stronger `congr!`
[GOAL]
𝕜 : Type u_1
E : Type u_2
F : Type u_3
G : Type u_4
H : Type u_5
inst✝¹⁵ : CommRing 𝕜
inst✝¹⁴ : AddCommGroup E
inst✝¹³ : AddCommGroup F
inst✝¹² : AddCommGroup G
inst✝¹¹ : Module 𝕜 E
inst✝¹⁰ : Module 𝕜 F
inst✝⁹ : Module 𝕜 G
inst✝⁸ : TopologicalSpace E
inst✝⁷ : TopologicalSpace F
inst✝⁶ : TopologicalSpace G
inst✝⁵ : TopologicalAddGroup E
inst✝⁴ : ContinuousConstSMul 𝕜 E
inst✝³ : TopologicalAddGroup F
inst✝² : ContinuousConstSMul 𝕜 F
inst✝¹ : TopologicalAddGroup G
inst✝ : ContinuousConstSMul 𝕜 G
q : FormalMultilinearSeries 𝕜 F G
p : FormalMultilinearSeries 𝕜 E F
v : Fin 1 → E
this : {Composition.ones 1} = Finset.univ
i : ℕ
hi1 : i < Composition.length (Composition.ones 1)
hi2 : i < 1
j : ℕ
_hj1 hj2 : j < 1
⊢ v (Fin.castLE (_ : Composition.length (Composition.ones 1) ≤ 1) { val := i, isLt := hi1 }) =
    v { val := j, isLt := hj2 }
[PROOFSTEP]
congr!
  -- porting note: needed the stronger `congr!`
[GOAL]
𝕜 : Type u_1
E : Type u_2
F : Type u_3
G : Type u_4
H : Type u_5
inst✝¹⁵ : CommRing 𝕜
inst✝¹⁴ : AddCommGroup E
inst✝¹³ : AddCommGroup F
inst✝¹² : AddCommGroup G
inst✝¹¹ : Module 𝕜 E
inst✝¹⁰ : Module 𝕜 F
inst✝⁹ : Module 𝕜 G
inst✝⁸ : TopologicalSpace E
inst✝⁷ : TopologicalSpace F
inst✝⁶ : TopologicalSpace G
inst✝⁵ : TopologicalAddGroup E
inst✝⁴ : ContinuousConstSMul 𝕜 E
inst✝³ : TopologicalAddGroup F
inst✝² : ContinuousConstSMul 𝕜 F
inst✝¹ : TopologicalAddGroup G
inst✝ : ContinuousConstSMul 𝕜 G
q : FormalMultilinearSeries 𝕜 F G
p : FormalMultilinearSeries 𝕜 E F
n : ℕ
hn : 0 < n
⊢ FormalMultilinearSeries.comp (removeZero q) p n = FormalMultilinearSeries.comp q p n
[PROOFSTEP]
ext v
[GOAL]
case H
𝕜 : Type u_1
E : Type u_2
F : Type u_3
G : Type u_4
H : Type u_5
inst✝¹⁵ : CommRing 𝕜
inst✝¹⁴ : AddCommGroup E
inst✝¹³ : AddCommGroup F
inst✝¹² : AddCommGroup G
inst✝¹¹ : Module 𝕜 E
inst✝¹⁰ : Module 𝕜 F
inst✝⁹ : Module 𝕜 G
inst✝⁸ : TopologicalSpace E
inst✝⁷ : TopologicalSpace F
inst✝⁶ : TopologicalSpace G
inst✝⁵ : TopologicalAddGroup E
inst✝⁴ : ContinuousConstSMul 𝕜 E
inst✝³ : TopologicalAddGroup F
inst✝² : ContinuousConstSMul 𝕜 F
inst✝¹ : TopologicalAddGroup G
inst✝ : ContinuousConstSMul 𝕜 G
q : FormalMultilinearSeries 𝕜 F G
p : FormalMultilinearSeries 𝕜 E F
n : ℕ
hn : 0 < n
v : Fin n → E
⊢ ↑(FormalMultilinearSeries.comp (removeZero q) p n) v = ↑(FormalMultilinearSeries.comp q p n) v
[PROOFSTEP]
simp only [FormalMultilinearSeries.comp, compAlongComposition, ContinuousMultilinearMap.compAlongComposition_apply,
  ContinuousMultilinearMap.sum_apply]
[GOAL]
case H
𝕜 : Type u_1
E : Type u_2
F : Type u_3
G : Type u_4
H : Type u_5
inst✝¹⁵ : CommRing 𝕜
inst✝¹⁴ : AddCommGroup E
inst✝¹³ : AddCommGroup F
inst✝¹² : AddCommGroup G
inst✝¹¹ : Module 𝕜 E
inst✝¹⁰ : Module 𝕜 F
inst✝⁹ : Module 𝕜 G
inst✝⁸ : TopologicalSpace E
inst✝⁷ : TopologicalSpace F
inst✝⁶ : TopologicalSpace G
inst✝⁵ : TopologicalAddGroup E
inst✝⁴ : ContinuousConstSMul 𝕜 E
inst✝³ : TopologicalAddGroup F
inst✝² : ContinuousConstSMul 𝕜 F
inst✝¹ : TopologicalAddGroup G
inst✝ : ContinuousConstSMul 𝕜 G
q : FormalMultilinearSeries 𝕜 F G
p : FormalMultilinearSeries 𝕜 E F
n : ℕ
hn : 0 < n
v : Fin n → E
⊢ ∑ x : Composition n, ↑(removeZero q (Composition.length x)) (applyComposition p x v) =
    ∑ x : Composition n, ↑(q (Composition.length x)) (applyComposition p x v)
[PROOFSTEP]
refine' Finset.sum_congr rfl fun c _hc => _
[GOAL]
case H
𝕜 : Type u_1
E : Type u_2
F : Type u_3
G : Type u_4
H : Type u_5
inst✝¹⁵ : CommRing 𝕜
inst✝¹⁴ : AddCommGroup E
inst✝¹³ : AddCommGroup F
inst✝¹² : AddCommGroup G
inst✝¹¹ : Module 𝕜 E
inst✝¹⁰ : Module 𝕜 F
inst✝⁹ : Module 𝕜 G
inst✝⁸ : TopologicalSpace E
inst✝⁷ : TopologicalSpace F
inst✝⁶ : TopologicalSpace G
inst✝⁵ : TopologicalAddGroup E
inst✝⁴ : ContinuousConstSMul 𝕜 E
inst✝³ : TopologicalAddGroup F
inst✝² : ContinuousConstSMul 𝕜 F
inst✝¹ : TopologicalAddGroup G
inst✝ : ContinuousConstSMul 𝕜 G
q : FormalMultilinearSeries 𝕜 F G
p : FormalMultilinearSeries 𝕜 E F
n : ℕ
hn : 0 < n
v : Fin n → E
c : Composition n
_hc : c ∈ Finset.univ
⊢ ↑(removeZero q (Composition.length c)) (applyComposition p c v) = ↑(q (Composition.length c)) (applyComposition p c v)
[PROOFSTEP]
rw [removeZero_of_pos _ (c.length_pos_of_pos hn)]
[GOAL]
𝕜 : Type u_1
E : Type u_2
F : Type u_3
G : Type u_4
H : Type u_5
inst✝¹⁵ : CommRing 𝕜
inst✝¹⁴ : AddCommGroup E
inst✝¹³ : AddCommGroup F
inst✝¹² : AddCommGroup G
inst✝¹¹ : Module 𝕜 E
inst✝¹⁰ : Module 𝕜 F
inst✝⁹ : Module 𝕜 G
inst✝⁸ : TopologicalSpace E
inst✝⁷ : TopologicalSpace F
inst✝⁶ : TopologicalSpace G
inst✝⁵ : TopologicalAddGroup E
inst✝⁴ : ContinuousConstSMul 𝕜 E
inst✝³ : TopologicalAddGroup F
inst✝² : ContinuousConstSMul 𝕜 F
inst✝¹ : TopologicalAddGroup G
inst✝ : ContinuousConstSMul 𝕜 G
q : FormalMultilinearSeries 𝕜 F G
p : FormalMultilinearSeries 𝕜 E F
⊢ FormalMultilinearSeries.comp q (removeZero p) = FormalMultilinearSeries.comp q p
[PROOFSTEP]
ext n
[GOAL]
case h.H
𝕜 : Type u_1
E : Type u_2
F : Type u_3
G : Type u_4
H : Type u_5
inst✝¹⁵ : CommRing 𝕜
inst✝¹⁴ : AddCommGroup E
inst✝¹³ : AddCommGroup F
inst✝¹² : AddCommGroup G
inst✝¹¹ : Module 𝕜 E
inst✝¹⁰ : Module 𝕜 F
inst✝⁹ : Module 𝕜 G
inst✝⁸ : TopologicalSpace E
inst✝⁷ : TopologicalSpace F
inst✝⁶ : TopologicalSpace G
inst✝⁵ : TopologicalAddGroup E
inst✝⁴ : ContinuousConstSMul 𝕜 E
inst✝³ : TopologicalAddGroup F
inst✝² : ContinuousConstSMul 𝕜 F
inst✝¹ : TopologicalAddGroup G
inst✝ : ContinuousConstSMul 𝕜 G
q : FormalMultilinearSeries 𝕜 F G
p : FormalMultilinearSeries 𝕜 E F
n : ℕ
x✝ : Fin n → E
⊢ ↑(FormalMultilinearSeries.comp q (removeZero p) n) x✝ = ↑(FormalMultilinearSeries.comp q p n) x✝
[PROOFSTEP]
simp [FormalMultilinearSeries.comp]
[GOAL]
𝕜 : 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 (Composition.length c), ‖applyComposition p c v i‖ ≤
    ‖f‖ *
      ∏ i : Fin (Composition.length c),
        ‖p (Composition.blocksFun c i)‖ * ∏ j : Fin (Composition.blocksFun c i), ‖(v ∘ ↑(Composition.embedding c i)) j‖
[PROOFSTEP]
apply mul_le_mul_of_nonneg_left _ (norm_nonneg _)
[GOAL]
𝕜 : 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 (Composition.length c), ‖applyComposition p c v i‖ ≤
    ∏ i : Fin (Composition.length c),
      ‖p (Composition.blocksFun c i)‖ * ∏ j : Fin (Composition.blocksFun c i), ‖(v ∘ ↑(Composition.embedding c i)) j‖
[PROOFSTEP]
refine' Finset.prod_le_prod (fun i _hi => norm_nonneg _) fun i _hi => _
[GOAL]
𝕜 : 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 (Composition.length c)
_hi : i ∈ Finset.univ
⊢ ‖applyComposition p c v i‖ ≤
    ‖p (Composition.blocksFun c i)‖ * ∏ j : Fin (Composition.blocksFun c i), ‖(v ∘ ↑(Composition.embedding c i)) j‖
[PROOFSTEP]
apply ContinuousMultilinearMap.le_op_norm
[GOAL]
𝕜 : 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 (Composition.length c),
        ‖p (Composition.blocksFun c i)‖ *
          ∏ j : Fin (Composition.blocksFun c i), ‖(v ∘ ↑(Composition.embedding c i)) j‖ =
    (‖f‖ * ∏ i : Fin (Composition.length c), ‖p (Composition.blocksFun c i)‖) *
      ∏ i : Fin (Composition.length c), ∏ j : Fin (Composition.blocksFun c i), ‖(v ∘ ↑(Composition.embedding c i)) j‖
[PROOFSTEP]
rw [Finset.prod_mul_distrib, mul_assoc]
[GOAL]
𝕜 : 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 (Composition.length c), ‖p (Composition.blocksFun c i)‖) *
      ∏ i : Fin (Composition.length c), ∏ j : Fin (Composition.blocksFun c i), ‖(v ∘ ↑(Composition.embedding c i)) j‖ =
    (‖f‖ * ∏ i : Fin (Composition.length c), ‖p (Composition.blocksFun c i)‖) * ∏ i : Fin n, ‖v i‖
[PROOFSTEP]
rw [← c.blocksFinEquiv.prod_comp, ← Finset.univ_sigma_univ, Finset.prod_sigma]
[GOAL]
𝕜 : 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 (Composition.length c), ‖p (Composition.blocksFun c i)‖) *
      ∏ i : Fin (Composition.length c), ∏ j : Fin (Composition.blocksFun c i), ‖(v ∘ ↑(Composition.embedding c i)) j‖ =
    (‖f‖ * ∏ i : Fin (Composition.length c), ‖p (Composition.blocksFun c i)‖) *
      ∏ a : Fin (Composition.length c),
        ∏ s : Fin (Composition.blocksFun c a), ‖v (↑(Composition.blocksFinEquiv c) { fst := a, snd := s })‖
[PROOFSTEP]
congr
[GOAL]
𝕜 : 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 : ℕ
q : FormalMultilinearSeries 𝕜 F G
p : FormalMultilinearSeries 𝕜 E F
c : Composition n
⊢ ‖compAlongComposition q p c‖₊ ≤
    ‖q (Composition.length c)‖₊ * ∏ i : Fin (Composition.length c), ‖p (Composition.blocksFun c i)‖₊
[PROOFSTEP]
rw [← NNReal.coe_le_coe]
[GOAL]
𝕜 : 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 : ℕ
q : FormalMultilinearSeries 𝕜 F G
p : FormalMultilinearSeries 𝕜 E F
c : Composition n
⊢ ↑‖compAlongComposition q p c‖₊ ≤
    ↑(‖q (Composition.length c)‖₊ * ∏ i : Fin (Composition.length c), ‖p (Composition.blocksFun c i)‖₊)
[PROOFSTEP]
push_cast
[GOAL]
𝕜 : 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 : ℕ
q : FormalMultilinearSeries 𝕜 F G
p : FormalMultilinearSeries 𝕜 E F
c : Composition n
⊢ ‖compAlongComposition q p c‖ ≤
    ‖q (Composition.length c)‖ * ∏ x : Fin (Composition.length c), ‖p (Composition.blocksFun c x)‖
[PROOFSTEP]
exact q.compAlongComposition_norm p c
[GOAL]
𝕜 : 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 : ℕ
h : n = 1
v : Fin n → E
⊢ ↑(id 𝕜 E n) v = v { val := 0, isLt := (_ : 0 < n) }
[PROOFSTEP]
subst n
[GOAL]
𝕜 : 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
v : Fin 1 → E
⊢ ↑(id 𝕜 E 1) v = v { val := 0, isLt := (_ : 0 < 1) }
[PROOFSTEP]
apply id_apply_one
[GOAL]
𝕜 : 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 : ℕ
h : n ≠ 1
⊢ id 𝕜 E n = 0
[PROOFSTEP]
cases' n with n
[GOAL]
case zero
𝕜 : 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
h : Nat.zero ≠ 1
⊢ id 𝕜 E Nat.zero = 0
[PROOFSTEP]
rfl
[GOAL]
case succ
𝕜 : 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 : ℕ
h : Nat.succ n ≠ 1
⊢ id 𝕜 E (Nat.succ n) = 0
[PROOFSTEP]
cases n
[GOAL]
case succ.zero
𝕜 : 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
h : Nat.succ Nat.zero ≠ 1
⊢ id 𝕜 E (Nat.succ Nat.zero) = 0
[PROOFSTEP]
contradiction
[GOAL]
case succ.succ
𝕜 : 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✝ : ℕ
h : Nat.succ (Nat.succ n✝) ≠ 1
⊢ id 𝕜 E (Nat.succ (Nat.succ n✝)) = 0
[PROOFSTEP]
rfl
[GOAL]
𝕜 : 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
p : FormalMultilinearSeries 𝕜 E F
⊢ FormalMultilinearSeries.comp p (id 𝕜 E) = p
[PROOFSTEP]
ext1 n
[GOAL]
case h
𝕜 : 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
p : FormalMultilinearSeries 𝕜 E F
n : ℕ
⊢ FormalMultilinearSeries.comp p (id 𝕜 E) n = p n
[PROOFSTEP]
dsimp [FormalMultilinearSeries.comp]
[GOAL]
case h
𝕜 : 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
p : FormalMultilinearSeries 𝕜 E F
n : ℕ
⊢ ∑ c : Composition n, compAlongComposition p (id 𝕜 E) c = p n
[PROOFSTEP]
rw [Finset.sum_eq_single (Composition.ones n)]
[GOAL]
case h
𝕜 : 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
p : FormalMultilinearSeries 𝕜 E F
n : ℕ
⊢ compAlongComposition p (id 𝕜 E) (Composition.ones n) = p n
case h.h₀
𝕜 : 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
p : FormalMultilinearSeries 𝕜 E F
n : ℕ
⊢ ∀ (b : Composition n), b ∈ Finset.univ → b ≠ Composition.ones n → compAlongComposition p (id 𝕜 E) b = 0
case h.h₁
𝕜 : 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
p : FormalMultilinearSeries 𝕜 E F
n : ℕ
⊢ ¬Composition.ones n ∈ Finset.univ → compAlongComposition p (id 𝕜 E) (Composition.ones n) = 0
[PROOFSTEP]
show compAlongComposition p (id 𝕜 E) (Composition.ones n) = p n
[GOAL]
case h
𝕜 : 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
p : FormalMultilinearSeries 𝕜 E F
n : ℕ
⊢ compAlongComposition p (id 𝕜 E) (Composition.ones n) = p n
[PROOFSTEP]
ext v
[GOAL]
case h.H
𝕜 : 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
p : FormalMultilinearSeries 𝕜 E F
n : ℕ
v : Fin n → E
⊢ ↑(compAlongComposition p (id 𝕜 E) (Composition.ones n)) v = ↑(p n) v
[PROOFSTEP]
rw [compAlongComposition_apply]
[GOAL]
case h.H
𝕜 : 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
p : FormalMultilinearSeries 𝕜 E F
n : ℕ
v : Fin n → E
⊢ ↑(p (Composition.length (Composition.ones n))) (applyComposition (id 𝕜 E) (Composition.ones n) v) = ↑(p n) v
[PROOFSTEP]
apply p.congr (Composition.ones_length n)
[GOAL]
case h.H
𝕜 : 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
p : FormalMultilinearSeries 𝕜 E F
n : ℕ
v : Fin n → E
⊢ ∀ (i : ℕ) (him : i < Composition.length (Composition.ones n)) (hin : i < n),
    applyComposition (id 𝕜 E) (Composition.ones n) v { val := i, isLt := him } = v { val := i, isLt := hin }
[PROOFSTEP]
intros
[GOAL]
case h.H
𝕜 : 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
p : FormalMultilinearSeries 𝕜 E F
n : ℕ
v : Fin n → E
i✝ : ℕ
him✝ : i✝ < Composition.length (Composition.ones n)
hin✝ : i✝ < n
⊢ applyComposition (id 𝕜 E) (Composition.ones n) v { val := i✝, isLt := him✝ } = v { val := i✝, isLt := hin✝ }
[PROOFSTEP]
rw [applyComposition_ones]
[GOAL]
case h.H
𝕜 : 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
p : FormalMultilinearSeries 𝕜 E F
n : ℕ
v : Fin n → E
i✝ : ℕ
him✝ : i✝ < Composition.length (Composition.ones n)
hin✝ : i✝ < n
⊢ (fun v i => ↑(id 𝕜 E 1) fun x => v (Fin.castLE (_ : Composition.length (Composition.ones n) ≤ n) i)) v
      { val := i✝, isLt := him✝ } =
    v { val := i✝, isLt := hin✝ }
[PROOFSTEP]
refine' congr_arg v _
[GOAL]
case h.H
𝕜 : 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
p : FormalMultilinearSeries 𝕜 E F
n : ℕ
v : Fin n → E
i✝ : ℕ
him✝ : i✝ < Composition.length (Composition.ones n)
hin✝ : i✝ < n
⊢ Fin.castLE (_ : Composition.length (Composition.ones n) ≤ n) { val := i✝, isLt := him✝ } = { val := i✝, isLt := hin✝ }
[PROOFSTEP]
rw [Fin.ext_iff, Fin.coe_castLE, Fin.val_mk]
[GOAL]
case h.h₀
𝕜 : 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
p : FormalMultilinearSeries 𝕜 E F
n : ℕ
⊢ ∀ (b : Composition n), b ∈ Finset.univ → b ≠ Composition.ones n → compAlongComposition p (id 𝕜 E) b = 0
case h.h₁
𝕜 : 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
p : FormalMultilinearSeries 𝕜 E F
n : ℕ
⊢ ¬Composition.ones n ∈ Finset.univ → compAlongComposition p (id 𝕜 E) (Composition.ones n) = 0
[PROOFSTEP]
show ∀ b : Composition n, b ∈ Finset.univ → b ≠ Composition.ones n → compAlongComposition p (id 𝕜 E) b = 0
[GOAL]
case h.h₀
𝕜 : 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
p : FormalMultilinearSeries 𝕜 E F
n : ℕ
⊢ ∀ (b : Composition n), b ∈ Finset.univ → b ≠ Composition.ones n → compAlongComposition p (id 𝕜 E) b = 0
[PROOFSTEP]
intro b _ hb
[GOAL]
case h.h₀
𝕜 : 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
p : FormalMultilinearSeries 𝕜 E F
n : ℕ
b : Composition n
a✝ : b ∈ Finset.univ
hb : b ≠ Composition.ones n
⊢ compAlongComposition p (id 𝕜 E) b = 0
[PROOFSTEP]
obtain ⟨k, hk, lt_k⟩ : ∃ (k : ℕ), k ∈ Composition.blocks b ∧ 1 < k := Composition.ne_ones_iff.1 hb
[GOAL]
case h.h₀.intro.intro
𝕜 : 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
p : FormalMultilinearSeries 𝕜 E F
n : ℕ
b : Composition n
a✝ : b ∈ Finset.univ
hb : b ≠ Composition.ones n
k : ℕ
hk : k ∈ b.blocks
lt_k : 1 < k
⊢ compAlongComposition p (id 𝕜 E) b = 0
[PROOFSTEP]
obtain ⟨i, hi⟩ : ∃ (i : Fin b.blocks.length), b.blocks.get i = k := List.get_of_mem hk
[GOAL]
case h.h₀.intro.intro.intro
𝕜 : 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
p : FormalMultilinearSeries 𝕜 E F
n : ℕ
b : Composition n
a✝ : b ∈ Finset.univ
hb : b ≠ Composition.ones n
k : ℕ
hk : k ∈ b.blocks
lt_k : 1 < k
i : Fin (length b.blocks)
hi : List.get b.blocks i = k
⊢ compAlongComposition p (id 𝕜 E) b = 0
[PROOFSTEP]
let j : Fin b.length := ⟨i.val, b.blocks_length ▸ i.prop⟩
[GOAL]
case h.h₀.intro.intro.intro
𝕜 : 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
p : FormalMultilinearSeries 𝕜 E F
n : ℕ
b : Composition n
a✝ : b ∈ Finset.univ
hb : b ≠ Composition.ones n
k : ℕ
hk : k ∈ b.blocks
lt_k : 1 < k
i : Fin (length b.blocks)
hi : List.get b.blocks i = k
j : Fin (Composition.length b) := { val := ↑i, isLt := (_ : ↑i < Composition.length b) }
⊢ compAlongComposition p (id 𝕜 E) b = 0
[PROOFSTEP]
have A : 1 < b.blocksFun j := by convert lt_k
[GOAL]
𝕜 : 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
p : FormalMultilinearSeries 𝕜 E F
n : ℕ
b : Composition n
a✝ : b ∈ Finset.univ
hb : b ≠ Composition.ones n
k : ℕ
hk : k ∈ b.blocks
lt_k : 1 < k
i : Fin (length b.blocks)
hi : List.get b.blocks i = k
j : Fin (Composition.length b) := { val := ↑i, isLt := (_ : ↑i < Composition.length b) }
⊢ 1 < Composition.blocksFun b j
[PROOFSTEP]
convert lt_k
[GOAL]
case h.h₀.intro.intro.intro
𝕜 : 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
p : FormalMultilinearSeries 𝕜 E F
n : ℕ
b : Composition n
a✝ : b ∈ Finset.univ
hb : b ≠ Composition.ones n
k : ℕ
hk : k ∈ b.blocks
lt_k : 1 < k
i : Fin (length b.blocks)
hi : List.get b.blocks i = k
j : Fin (Composition.length b) := { val := ↑i, isLt := (_ : ↑i < Composition.length b) }
A : 1 < Composition.blocksFun b j
⊢ compAlongComposition p (id 𝕜 E) b = 0
[PROOFSTEP]
ext v
[GOAL]
case h.h₀.intro.intro.intro.H
𝕜 : 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
p : FormalMultilinearSeries 𝕜 E F
n : ℕ
b : Composition n
a✝ : b ∈ Finset.univ
hb : b ≠ Composition.ones n
k : ℕ
hk : k ∈ b.blocks
lt_k : 1 < k
i : Fin (length b.blocks)
hi : List.get b.blocks i = k
j : Fin (Composition.length b) := { val := ↑i, isLt := (_ : ↑i < Composition.length b) }
A : 1 < Composition.blocksFun b j
v : Fin n → E
⊢ ↑(compAlongComposition p (id 𝕜 E) b) v = ↑0 v
[PROOFSTEP]
rw [compAlongComposition_apply, ContinuousMultilinearMap.zero_apply]
[GOAL]
case h.h₀.intro.intro.intro.H
𝕜 : 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
p : FormalMultilinearSeries 𝕜 E F
n : ℕ
b : Composition n
a✝ : b ∈ Finset.univ
hb : b ≠ Composition.ones n
k : ℕ
hk : k ∈ b.blocks
lt_k : 1 < k
i : Fin (length b.blocks)
hi : List.get b.blocks i = k
j : Fin (Composition.length b) := { val := ↑i, isLt := (_ : ↑i < Composition.length b) }
A : 1 < Composition.blocksFun b j
v : Fin n → E
⊢ ↑(p (Composition.length b)) (applyComposition (id 𝕜 E) b v) = 0
[PROOFSTEP]
apply ContinuousMultilinearMap.map_coord_zero _ j
[GOAL]
case h.h₀.intro.intro.intro.H
𝕜 : 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
p : FormalMultilinearSeries 𝕜 E F
n : ℕ
b : Composition n
a✝ : b ∈ Finset.univ
hb : b ≠ Composition.ones n
k : ℕ
hk : k ∈ b.blocks
lt_k : 1 < k
i : Fin (length b.blocks)
hi : List.get b.blocks i = k
j : Fin (Composition.length b) := { val := ↑i, isLt := (_ : ↑i < Composition.length b) }
A : 1 < Composition.blocksFun b j
v : Fin n → E
⊢ applyComposition (id 𝕜 E) b v j = 0
[PROOFSTEP]
dsimp [applyComposition]
[GOAL]
case h.h₀.intro.intro.intro.H
𝕜 : 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
p : FormalMultilinearSeries 𝕜 E F
n : ℕ
b : Composition n
a✝ : b ∈ Finset.univ
hb : b ≠ Composition.ones n
k : ℕ
hk : k ∈ b.blocks
lt_k : 1 < k
i : Fin (length b.blocks)
hi : List.get b.blocks i = k
j : Fin (Composition.length b) := { val := ↑i, isLt := (_ : ↑i < Composition.length b) }
A : 1 < Composition.blocksFun b j
v : Fin n → E
⊢ ↑(id 𝕜 E (Composition.blocksFun b { val := ↑i, isLt := (_ : ↑i < length b.blocks) }))
      (v ∘ ↑(Composition.embedding b { val := ↑i, isLt := (_ : ↑i < length b.blocks) })) =
    0
[PROOFSTEP]
rw [id_apply_ne_one _ _ (ne_of_gt A)]
[GOAL]
case h.h₀.intro.intro.intro.H
𝕜 : 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
p : FormalMultilinearSeries 𝕜 E F
n : ℕ
b : Composition n
a✝ : b ∈ Finset.univ
hb : b ≠ Composition.ones n
k : ℕ
hk : k ∈ b.blocks
lt_k : 1 < k
i : Fin (length b.blocks)
hi : List.get b.blocks i = k
j : Fin (Composition.length b) := { val := ↑i, isLt := (_ : ↑i < Composition.length b) }
A : 1 < Composition.blocksFun b j
v : Fin n → E
⊢ ↑0 (v ∘ ↑(Composition.embedding b { val := ↑i, isLt := (_ : ↑i < length b.blocks) })) = 0
[PROOFSTEP]
rfl
[GOAL]
case h.h₁
𝕜 : 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
p : FormalMultilinearSeries 𝕜 E F
n : ℕ
⊢ ¬Composition.ones n ∈ Finset.univ → compAlongComposition p (id 𝕜 E) (Composition.ones n) = 0
[PROOFSTEP]
simp
[GOAL]
𝕜 : 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
p : FormalMultilinearSeries 𝕜 E F
h : p 0 = 0
⊢ FormalMultilinearSeries.comp (id 𝕜 F) p = p
[PROOFSTEP]
ext1 n
[GOAL]
case h
𝕜 : 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
p : FormalMultilinearSeries 𝕜 E F
h : p 0 = 0
n : ℕ
⊢ FormalMultilinearSeries.comp (id 𝕜 F) p n = p n
[PROOFSTEP]
by_cases hn : n = 0
[GOAL]
case pos
𝕜 : 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
p : FormalMultilinearSeries 𝕜 E F
h : p 0 = 0
n : ℕ
hn : n = 0
⊢ FormalMultilinearSeries.comp (id 𝕜 F) p n = p n
[PROOFSTEP]
rw [hn, h]
[GOAL]
case pos
𝕜 : 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
p : FormalMultilinearSeries 𝕜 E F
h : p 0 = 0
n : ℕ
hn : n = 0
⊢ FormalMultilinearSeries.comp (id 𝕜 F) p 0 = 0
[PROOFSTEP]
ext v
[GOAL]
case pos.H
𝕜 : 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
p : FormalMultilinearSeries 𝕜 E F
h : p 0 = 0
n : ℕ
hn : n = 0
v : Fin 0 → E
⊢ ↑(FormalMultilinearSeries.comp (id 𝕜 F) p 0) v = ↑0 v
[PROOFSTEP]
rw [comp_coeff_zero', id_apply_ne_one _ _ zero_ne_one]
[GOAL]
case pos.H
𝕜 : 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
p : FormalMultilinearSeries 𝕜 E F
h : p 0 = 0
n : ℕ
hn : n = 0
v : Fin 0 → E
⊢ (↑0 fun _i => 0) = ↑0 v
[PROOFSTEP]
rfl
[GOAL]
case neg
𝕜 : 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
p : FormalMultilinearSeries 𝕜 E F
h : p 0 = 0
n : ℕ
hn : ¬n = 0
⊢ FormalMultilinearSeries.comp (id 𝕜 F) p n = p n
[PROOFSTEP]
dsimp [FormalMultilinearSeries.comp]
[GOAL]
case neg
𝕜 : 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
p : FormalMultilinearSeries 𝕜 E F
h : p 0 = 0
n : ℕ
hn : ¬n = 0
⊢ ∑ c : Composition n, compAlongComposition (id 𝕜 F) p c = p n
[PROOFSTEP]
have n_pos : 0 < n := bot_lt_iff_ne_bot.mpr hn
[GOAL]
case neg
𝕜 : 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
p : FormalMultilinearSeries 𝕜 E F
h : p 0 = 0
n : ℕ
hn : ¬n = 0
n_pos : 0 < n
⊢ ∑ c : Composition n, compAlongComposition (id 𝕜 F) p c = p n
[PROOFSTEP]
rw [Finset.sum_eq_single (Composition.single n n_pos)]
[GOAL]
case neg
𝕜 : 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
p : FormalMultilinearSeries 𝕜 E F
h : p 0 = 0
n : ℕ
hn : ¬n = 0
n_pos : 0 < n
⊢ compAlongComposition (id 𝕜 F) p (Composition.single n n_pos) = p n
case neg.h₀
𝕜 : 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
p : FormalMultilinearSeries 𝕜 E F
h : p 0 = 0
n : ℕ
hn : ¬n = 0
n_pos : 0 < n
⊢ ∀ (b : Composition n), b ∈ Finset.univ → b ≠ Composition.single n n_pos → compAlongComposition (id 𝕜 F) p b = 0
case neg.h₁
𝕜 : 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
p : FormalMultilinearSeries 𝕜 E F
h : p 0 = 0
n : ℕ
hn : ¬n = 0
n_pos : 0 < n
⊢ ¬Composition.single n n_pos ∈ Finset.univ → compAlongComposition (id 𝕜 F) p (Composition.single n n_pos) = 0
[PROOFSTEP]
show compAlongComposition (id 𝕜 F) p (Composition.single n n_pos) = p n
[GOAL]
case neg
𝕜 : 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
p : FormalMultilinearSeries 𝕜 E F
h : p 0 = 0
n : ℕ
hn : ¬n = 0
n_pos : 0 < n
⊢ compAlongComposition (id 𝕜 F) p (Composition.single n n_pos) = p n
[PROOFSTEP]
ext v
[GOAL]
case neg.H
𝕜 : 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
p : FormalMultilinearSeries 𝕜 E F
h : p 0 = 0
n : ℕ
hn : ¬n = 0
n_pos : 0 < n
v : Fin n → E
⊢ ↑(compAlongComposition (id 𝕜 F) p (Composition.single n n_pos)) v = ↑(p n) v
[PROOFSTEP]
rw [compAlongComposition_apply, id_apply_one' _ _ (Composition.single_length n_pos)]
[GOAL]
case neg.H
𝕜 : 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
p : FormalMultilinearSeries 𝕜 E F
h : p 0 = 0
n : ℕ
hn : ¬n = 0
n_pos : 0 < n
v : Fin n → E
⊢ applyComposition p (Composition.single n n_pos) v
      { val := 0, isLt := (_ : 0 < Composition.length (Composition.single n n_pos)) } =
    ↑(p n) v
[PROOFSTEP]
dsimp [applyComposition]
[GOAL]
case neg.H
𝕜 : 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
p : FormalMultilinearSeries 𝕜 E F
h : p 0 = 0
n : ℕ
hn : ¬n = 0
n_pos : 0 < n
v : Fin n → E
⊢ ↑(p (Composition.blocksFun (Composition.single n n_pos) 0))
      (v ∘ ↑(Composition.embedding (Composition.single n n_pos) 0)) =
    ↑(p n) v
[PROOFSTEP]
refine' p.congr rfl fun i him hin => congr_arg v <| _
[GOAL]
case neg.H
𝕜 : 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
p : FormalMultilinearSeries 𝕜 E F
h : p 0 = 0
n : ℕ
hn : ¬n = 0
n_pos : 0 < n
v : Fin n → E
i : ℕ
him : i < Composition.blocksFun (Composition.single n n_pos) 0
hin : i < n
⊢ ↑(Composition.embedding (Composition.single n n_pos) 0) { val := i, isLt := him } = { val := i, isLt := hin }
[PROOFSTEP]
ext
[GOAL]
case neg.H.h
𝕜 : 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
p : FormalMultilinearSeries 𝕜 E F
h : p 0 = 0
n : ℕ
hn : ¬n = 0
n_pos : 0 < n
v : Fin n → E
i : ℕ
him : i < Composition.blocksFun (Composition.single n n_pos) 0
hin : i < n
⊢ ↑(↑(Composition.embedding (Composition.single n n_pos) 0) { val := i, isLt := him }) = ↑{ val := i, isLt := hin }
[PROOFSTEP]
simp
[GOAL]
case neg.h₀
𝕜 : 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
p : FormalMultilinearSeries 𝕜 E F
h : p 0 = 0
n : ℕ
hn : ¬n = 0
n_pos : 0 < n
⊢ ∀ (b : Composition n), b ∈ Finset.univ → b ≠ Composition.single n n_pos → compAlongComposition (id 𝕜 F) p b = 0
case neg.h₁
𝕜 : 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
p : FormalMultilinearSeries 𝕜 E F
h : p 0 = 0
n : ℕ
hn : ¬n = 0
n_pos : 0 < n
⊢ ¬Composition.single n n_pos ∈ Finset.univ → compAlongComposition (id 𝕜 F) p (Composition.single n n_pos) = 0
[PROOFSTEP]
show ∀ b : Composition n, b ∈ Finset.univ → b ≠ Composition.single n n_pos → compAlongComposition (id 𝕜 F) p b = 0
[GOAL]
case neg.h₀
𝕜 : 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
p : FormalMultilinearSeries 𝕜 E F
h : p 0 = 0
n : ℕ
hn : ¬n = 0
n_pos : 0 < n
⊢ ∀ (b : Composition n), b ∈ Finset.univ → b ≠ Composition.single n n_pos → compAlongComposition (id 𝕜 F) p b = 0
[PROOFSTEP]
intro b _ hb
[GOAL]
case neg.h₀
𝕜 : 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
p : FormalMultilinearSeries 𝕜 E F
h : p 0 = 0
n : ℕ
hn : ¬n = 0
n_pos : 0 < n
b : Composition n
a✝ : b ∈ Finset.univ
hb : b ≠ Composition.single n n_pos
⊢ compAlongComposition (id 𝕜 F) p b = 0
[PROOFSTEP]
have A : b.length ≠ 1 := by simpa [Composition.eq_single_iff_length] using hb
[GOAL]
𝕜 : 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
p : FormalMultilinearSeries 𝕜 E F
h : p 0 = 0
n : ℕ
hn : ¬n = 0
n_pos : 0 < n
b : Composition n
a✝ : b ∈ Finset.univ
hb : b ≠ Composition.single n n_pos
⊢ Composition.length b ≠ 1
[PROOFSTEP]
simpa [Composition.eq_single_iff_length] using hb
[GOAL]
case neg.h₀
𝕜 : 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
p : FormalMultilinearSeries 𝕜 E F
h : p 0 = 0
n : ℕ
hn : ¬n = 0
n_pos : 0 < n
b : Composition n
a✝ : b ∈ Finset.univ
hb : b ≠ Composition.single n n_pos
A : Composition.length b ≠ 1
⊢ compAlongComposition (id 𝕜 F) p b = 0
[PROOFSTEP]
ext v
[GOAL]
case neg.h₀.H
𝕜 : 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
p : FormalMultilinearSeries 𝕜 E F
h : p 0 = 0
n : ℕ
hn : ¬n = 0
n_pos : 0 < n
b : Composition n
a✝ : b ∈ Finset.univ
hb : b ≠ Composition.single n n_pos
A : Composition.length b ≠ 1
v : Fin n → E
⊢ ↑(compAlongComposition (id 𝕜 F) p b) v = ↑0 v
[PROOFSTEP]
rw [compAlongComposition_apply, id_apply_ne_one _ _ A]
[GOAL]
case neg.h₀.H
𝕜 : 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
p : FormalMultilinearSeries 𝕜 E F
h : p 0 = 0
n : ℕ
hn : ¬n = 0
n_pos : 0 < n
b : Composition n
a✝ : b ∈ Finset.univ
hb : b ≠ Composition.single n n_pos
A : Composition.length b ≠ 1
v : Fin n → E
⊢ ↑0 (applyComposition p b v) = ↑0 v
[PROOFSTEP]
rfl
[GOAL]
case neg.h₁
𝕜 : 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
p : FormalMultilinearSeries 𝕜 E F
h : p 0 = 0
n : ℕ
hn : ¬n = 0
n_pos : 0 < n
⊢ ¬Composition.single n n_pos ∈ Finset.univ → compAlongComposition (id 𝕜 F) p (Composition.single n n_pos) = 0
[PROOFSTEP]
simp
[GOAL]
𝕜 : 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
q : FormalMultilinearSeries 𝕜 F G
p : FormalMultilinearSeries 𝕜 E F
hq : 0 < radius q
hp : 0 < radius p
⊢ ∃ r, r > 0 ∧ Summable fun i => ‖compAlongComposition q p i.snd‖₊ * r ^ i.fst
[PROOFSTEP]
rcases ENNReal.lt_iff_exists_nnreal_btwn.1 (lt_min zero_lt_one hq) with ⟨rq, rq_pos, hrq⟩
[GOAL]
case intro.intro
𝕜 : 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
q : FormalMultilinearSeries 𝕜 F G
p : FormalMultilinearSeries 𝕜 E F
hq : 0 < radius q
hp : 0 < radius p
rq : ℝ≥0
rq_pos : 0 < ↑rq
hrq : ↑rq < min 1 (radius q)
⊢ ∃ r, r > 0 ∧ Summable fun i => ‖compAlongComposition q p i.snd‖₊ * r ^ i.fst
[PROOFSTEP]
rcases ENNReal.lt_iff_exists_nnreal_btwn.1 (lt_min zero_lt_one hp) with ⟨rp, rp_pos, hrp⟩
[GOAL]
case intro.intro.intro.intro
𝕜 : 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
q : FormalMultilinearSeries 𝕜 F G
p : FormalMultilinearSeries 𝕜 E F
hq : 0 < radius q
hp : 0 < radius p
rq : ℝ≥0
rq_pos : 0 < ↑rq
hrq : ↑rq < min 1 (radius q)
rp : ℝ≥0
rp_pos : 0 < ↑rp
hrp : ↑rp < min 1 (radius p)
⊢ ∃ r, r > 0 ∧ Summable fun i => ‖compAlongComposition q p i.snd‖₊ * r ^ i.fst
[PROOFSTEP]
simp only [lt_min_iff, ENNReal.coe_lt_one_iff, ENNReal.coe_pos] at hrp hrq rp_pos rq_pos 
[GOAL]
case intro.intro.intro.intro
𝕜 : 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
q : FormalMultilinearSeries 𝕜 F G
p : FormalMultilinearSeries 𝕜 E F
hq : 0 < radius q
hp : 0 < radius p
rq rp : ℝ≥0
hrp : rp < 1 ∧ ↑rp < radius p
hrq : rq < 1 ∧ ↑rq < radius q
rp_pos : 0 < rp
rq_pos : 0 < rq
⊢ ∃ r, r > 0 ∧ Summable fun i => ‖compAlongComposition q p i.snd‖₊ * r ^ i.fst
[PROOFSTEP]
obtain ⟨Cq, _hCq0, hCq⟩ : ∃ Cq > 0, ∀ n, ‖q n‖₊ * rq ^ n ≤ Cq := q.nnnorm_mul_pow_le_of_lt_radius hrq.2
[GOAL]
case intro.intro.intro.intro.intro.intro
𝕜 : 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
q : FormalMultilinearSeries 𝕜 F G
p : FormalMultilinearSeries 𝕜 E F
hq : 0 < radius q
hp : 0 < radius p
rq rp : ℝ≥0
hrp : rp < 1 ∧ ↑rp < radius p
hrq : rq < 1 ∧ ↑rq < radius q
rp_pos : 0 < rp
rq_pos : 0 < rq
Cq : ℝ≥0
_hCq0 : Cq > 0
hCq : ∀ (n : ℕ), ‖q n‖₊ * rq ^ n ≤ Cq
⊢ ∃ r, r > 0 ∧ Summable fun i => ‖compAlongComposition q p i.snd‖₊ * r ^ i.fst
[PROOFSTEP]
obtain ⟨Cp, hCp1, hCp⟩ : ∃ Cp ≥ 1, ∀ n, ‖p n‖₊ * rp ^ n ≤ Cp :=
  by
  rcases p.nnnorm_mul_pow_le_of_lt_radius hrp.2 with ⟨Cp, -, hCp⟩
  exact ⟨max Cp 1, le_max_right _ _, fun n => (hCp n).trans (le_max_left _ _)⟩
[GOAL]
𝕜 : 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
q : FormalMultilinearSeries 𝕜 F G
p : FormalMultilinearSeries 𝕜 E F
hq : 0 < radius q
hp : 0 < radius p
rq rp : ℝ≥0
hrp : rp < 1 ∧ ↑rp < radius p
hrq : rq < 1 ∧ ↑rq < radius q
rp_pos : 0 < rp
rq_pos : 0 < rq
Cq : ℝ≥0
_hCq0 : Cq > 0
hCq : ∀ (n : ℕ), ‖q n‖₊ * rq ^ n ≤ Cq
⊢ ∃ Cp, Cp ≥ 1 ∧ ∀ (n : ℕ), ‖p n‖₊ * rp ^ n ≤ Cp
[PROOFSTEP]
rcases p.nnnorm_mul_pow_le_of_lt_radius hrp.2 with ⟨Cp, -, hCp⟩
[GOAL]
case intro.intro
𝕜 : 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
q : FormalMultilinearSeries 𝕜 F G
p : FormalMultilinearSeries 𝕜 E F
hq : 0 < radius q
hp : 0 < radius p
rq rp : ℝ≥0
hrp : rp < 1 ∧ ↑rp < radius p
hrq : rq < 1 ∧ ↑rq < radius q
rp_pos : 0 < rp
rq_pos : 0 < rq
Cq : ℝ≥0
_hCq0 : Cq > 0
hCq : ∀ (n : ℕ), ‖q n‖₊ * rq ^ n ≤ Cq
Cp : ℝ≥0
hCp : ∀ (n : ℕ), ‖p n‖₊ * rp ^ n ≤ Cp
⊢ ∃ Cp, Cp ≥ 1 ∧ ∀ (n : ℕ), ‖p n‖₊ * rp ^ n ≤ Cp
[PROOFSTEP]
exact ⟨max Cp 1, le_max_right _ _, fun n => (hCp n).trans (le_max_left _ _)⟩
[GOAL]
case intro.intro.intro.intro.intro.intro.intro.intro
𝕜 : 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
q : FormalMultilinearSeries 𝕜 F G
p : FormalMultilinearSeries 𝕜 E F
hq : 0 < radius q
hp : 0 < radius p
rq rp : ℝ≥0
hrp : rp < 1 ∧ ↑rp < radius p
hrq : rq < 1 ∧ ↑rq < radius q
rp_pos : 0 < rp
rq_pos : 0 < rq
Cq : ℝ≥0
_hCq0 : Cq > 0
hCq : ∀ (n : ℕ), ‖q n‖₊ * rq ^ n ≤ Cq
Cp : ℝ≥0
hCp1 : Cp ≥ 1
hCp : ∀ (n : ℕ), ‖p n‖₊ * rp ^ n ≤ Cp
⊢ ∃ r, r > 0 ∧ Summable fun i => ‖compAlongComposition q p i.snd‖₊ * r ^ i.fst
[PROOFSTEP]
let r0 : ℝ≥0 := (4 * Cp)⁻¹
[GOAL]
case intro.intro.intro.intro.intro.intro.intro.intro
𝕜 : 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
q : FormalMultilinearSeries 𝕜 F G
p : FormalMultilinearSeries 𝕜 E F
hq : 0 < radius q
hp : 0 < radius p
rq rp : ℝ≥0
hrp : rp < 1 ∧ ↑rp < radius p
hrq : rq < 1 ∧ ↑rq < radius q
rp_pos : 0 < rp
rq_pos : 0 < rq
Cq : ℝ≥0
_hCq0 : Cq > 0
hCq : ∀ (n : ℕ), ‖q n‖₊ * rq ^ n ≤ Cq
Cp : ℝ≥0
hCp1 : Cp ≥ 1
hCp : ∀ (n : ℕ), ‖p n‖₊ * rp ^ n ≤ Cp
r0 : ℝ≥0 := (4 * Cp)⁻¹
⊢ ∃ r, r > 0 ∧ Summable fun i => ‖compAlongComposition q p i.snd‖₊ * r ^ i.fst
[PROOFSTEP]
have r0_pos : 0 < r0 := inv_pos.2 (mul_pos zero_lt_four (zero_lt_one.trans_le hCp1))
[GOAL]
case intro.intro.intro.intro.intro.intro.intro.intro
𝕜 : 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
q : FormalMultilinearSeries 𝕜 F G
p : FormalMultilinearSeries 𝕜 E F
hq : 0 < radius q
hp : 0 < radius p
rq rp : ℝ≥0
hrp : rp < 1 ∧ ↑rp < radius p
hrq : rq < 1 ∧ ↑rq < radius q
rp_pos : 0 < rp
rq_pos : 0 < rq
Cq : ℝ≥0
_hCq0 : Cq > 0
hCq : ∀ (n : ℕ), ‖q n‖₊ * rq ^ n ≤ Cq
Cp : ℝ≥0
hCp1 : Cp ≥ 1
hCp : ∀ (n : ℕ), ‖p n‖₊ * rp ^ n ≤ Cp
r0 : ℝ≥0 := (4 * Cp)⁻¹
r0_pos : 0 < r0
⊢ ∃ r, r > 0 ∧ Summable fun i => ‖compAlongComposition q p i.snd‖₊ * r ^ i.fst
[PROOFSTEP]
set r : ℝ≥0 := rp * rq * r0
[GOAL]
case intro.intro.intro.intro.intro.intro.intro.intro
𝕜 : 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
q : FormalMultilinearSeries 𝕜 F G
p : FormalMultilinearSeries 𝕜 E F
hq : 0 < radius q
hp : 0 < radius p
rq rp : ℝ≥0
hrp : rp < 1 ∧ ↑rp < radius p
hrq : rq < 1 ∧ ↑rq < radius q
rp_pos : 0 < rp
rq_pos : 0 < rq
Cq : ℝ≥0
_hCq0 : Cq > 0
hCq : ∀ (n : ℕ), ‖q n‖₊ * rq ^ n ≤ Cq
Cp : ℝ≥0
hCp1 : Cp ≥ 1
hCp : ∀ (n : ℕ), ‖p n‖₊ * rp ^ n ≤ Cp
r0 : ℝ≥0 := (4 * Cp)⁻¹
r0_pos : 0 < r0
r : ℝ≥0 := rp * rq * r0
⊢ ∃ r, r > 0 ∧ Summable fun i => ‖compAlongComposition q p i.snd‖₊ * r ^ i.fst
[PROOFSTEP]
have r_pos : 0 < r := mul_pos (mul_pos rp_pos rq_pos) r0_pos
[GOAL]
case intro.intro.intro.intro.intro.intro.intro.intro
𝕜 : 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
q : FormalMultilinearSeries 𝕜 F G
p : FormalMultilinearSeries 𝕜 E F
hq : 0 < radius q
hp : 0 < radius p
rq rp : ℝ≥0
hrp : rp < 1 ∧ ↑rp < radius p
hrq : rq < 1 ∧ ↑rq < radius q
rp_pos : 0 < rp
rq_pos : 0 < rq
Cq : ℝ≥0
_hCq0 : Cq > 0
hCq : ∀ (n : ℕ), ‖q n‖₊ * rq ^ n ≤ Cq
Cp : ℝ≥0
hCp1 : Cp ≥ 1
hCp : ∀ (n : ℕ), ‖p n‖₊ * rp ^ n ≤ Cp
r0 : ℝ≥0 := (4 * Cp)⁻¹
r0_pos : 0 < r0
r : ℝ≥0 := rp * rq * r0
r_pos : 0 < r
⊢ ∃ r, r > 0 ∧ Summable fun i => ‖compAlongComposition q p i.snd‖₊ * r ^ i.fst
[PROOFSTEP]
have I : ∀ i : Σ n : ℕ, Composition n, ‖q.compAlongComposition p i.2‖₊ * r ^ i.1 ≤ Cq / 4 ^ i.1 :=
  by
  rintro ⟨n, c⟩
  have A
  calc
    ‖q c.length‖₊ * rq ^ n ≤ ‖q c.length‖₊ * rq ^ c.length :=
      mul_le_mul' le_rfl (pow_le_pow_of_le_one rq.2 hrq.1.le c.length_le)
    _ ≤ Cq := hCq _
  have B
  calc
    (∏ i, ‖p (c.blocksFun i)‖₊) * rp ^ n = ∏ i, ‖p (c.blocksFun i)‖₊ * rp ^ c.blocksFun i := by
      simp only [Finset.prod_mul_distrib, Finset.prod_pow_eq_pow_sum, c.sum_blocksFun]
    _ ≤ ∏ _i : Fin c.length, Cp := (Finset.prod_le_prod' fun i _ => hCp _)
    _ = Cp ^ c.length := by simp
    _ ≤ Cp ^ n := pow_le_pow hCp1 c.length_le
  calc
    ‖q.compAlongComposition p c‖₊ * r ^ n ≤ (‖q c.length‖₊ * ∏ i, ‖p (c.blocksFun i)‖₊) * r ^ n :=
      mul_le_mul' (q.compAlongComposition_nnnorm p c) le_rfl
    _ = ‖q c.length‖₊ * rq ^ n * ((∏ i, ‖p (c.blocksFun i)‖₊) * rp ^ n) * r0 ^ n := by simp only [mul_pow]; ring
    _ ≤ Cq * Cp ^ n * r0 ^ n := (mul_le_mul' (mul_le_mul' A B) le_rfl)
    _ = Cq / 4 ^ n := by
      simp only
      field_simp [mul_pow, (zero_lt_one.trans_le hCp1).ne']
      ring
[GOAL]
𝕜 : 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
q : FormalMultilinearSeries 𝕜 F G
p : FormalMultilinearSeries 𝕜 E F
hq : 0 < radius q
hp : 0 < radius p
rq rp : ℝ≥0
hrp : rp < 1 ∧ ↑rp < radius p
hrq : rq < 1 ∧ ↑rq < radius q
rp_pos : 0 < rp
rq_pos : 0 < rq
Cq : ℝ≥0
_hCq0 : Cq > 0
hCq : ∀ (n : ℕ), ‖q n‖₊ * rq ^ n ≤ Cq
Cp : ℝ≥0
hCp1 : Cp ≥ 1
hCp : ∀ (n : ℕ), ‖p n‖₊ * rp ^ n ≤ Cp
r0 : ℝ≥0 := (4 * Cp)⁻¹
r0_pos : 0 < r0
r : ℝ≥0 := rp * rq * r0
r_pos : 0 < r
⊢ ∀ (i : (n : ℕ) × Composition n), ‖compAlongComposition q p i.snd‖₊ * r ^ i.fst ≤ Cq / 4 ^ i.fst
[PROOFSTEP]
rintro ⟨n, c⟩
[GOAL]
case mk
𝕜 : 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
q : FormalMultilinearSeries 𝕜 F G
p : FormalMultilinearSeries 𝕜 E F
hq : 0 < radius q
hp : 0 < radius p
rq rp : ℝ≥0
hrp : rp < 1 ∧ ↑rp < radius p
hrq : rq < 1 ∧ ↑rq < radius q
rp_pos : 0 < rp
rq_pos : 0 < rq
Cq : ℝ≥0
_hCq0 : Cq > 0
hCq : ∀ (n : ℕ), ‖q n‖₊ * rq ^ n ≤ Cq
Cp : ℝ≥0
hCp1 : Cp ≥ 1
hCp : ∀ (n : ℕ), ‖p n‖₊ * rp ^ n ≤ Cp
r0 : ℝ≥0 := (4 * Cp)⁻¹
r0_pos : 0 < r0
r : ℝ≥0 := rp * rq * r0
r_pos : 0 < r
n : ℕ
c : Composition n
⊢ ‖compAlongComposition q p { fst := n, snd := c }.snd‖₊ * r ^ { fst := n, snd := c }.fst ≤
    Cq / 4 ^ { fst := n, snd := c }.fst
[PROOFSTEP]
have A
[GOAL]
case A
𝕜 : 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
q : FormalMultilinearSeries 𝕜 F G
p : FormalMultilinearSeries 𝕜 E F
hq : 0 < radius q
hp : 0 < radius p
rq rp : ℝ≥0
hrp : rp < 1 ∧ ↑rp < radius p
hrq : rq < 1 ∧ ↑rq < radius q
rp_pos : 0 < rp
rq_pos : 0 < rq
Cq : ℝ≥0
_hCq0 : Cq > 0
hCq : ∀ (n : ℕ), ‖q n‖₊ * rq ^ n ≤ Cq
Cp : ℝ≥0
hCp1 : Cp ≥ 1
hCp : ∀ (n : ℕ), ‖p n‖₊ * rp ^ n ≤ Cp
r0 : ℝ≥0 := (4 * Cp)⁻¹
r0_pos : 0 < r0
r : ℝ≥0 := rp * rq * r0
r_pos : 0 < r
n : ℕ
c : Composition n
⊢ ?m.706771
case mk
𝕜 : 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
q : FormalMultilinearSeries 𝕜 F G
p : FormalMultilinearSeries 𝕜 E F
hq : 0 < radius q
hp : 0 < radius p
rq rp : ℝ≥0
hrp : rp < 1 ∧ ↑rp < radius p
hrq : rq < 1 ∧ ↑rq < radius q
rp_pos : 0 < rp
rq_pos : 0 < rq
Cq : ℝ≥0
_hCq0 : Cq > 0
hCq : ∀ (n : ℕ), ‖q n‖₊ * rq ^ n ≤ Cq
Cp : ℝ≥0
hCp1 : Cp ≥ 1
hCp : ∀ (n : ℕ), ‖p n‖₊ * rp ^ n ≤ Cp
r0 : ℝ≥0 := (4 * Cp)⁻¹
r0_pos : 0 < r0
r : ℝ≥0 := rp * rq * r0
r_pos : 0 < r
n : ℕ
c : Composition n
A : ?m.706771
⊢ ‖compAlongComposition q p { fst := n, snd := c }.snd‖₊ * r ^ { fst := n, snd := c }.fst ≤
    Cq / 4 ^ { fst := n, snd := c }.fst
[PROOFSTEP]
calc
  ‖q c.length‖₊ * rq ^ n ≤ ‖q c.length‖₊ * rq ^ c.length :=
    mul_le_mul' le_rfl (pow_le_pow_of_le_one rq.2 hrq.1.le c.length_le)
  _ ≤ Cq := hCq _
[GOAL]
case mk
𝕜 : 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
q : FormalMultilinearSeries 𝕜 F G
p : FormalMultilinearSeries 𝕜 E F
hq : 0 < radius q
hp : 0 < radius p
rq rp : ℝ≥0
hrp : rp < 1 ∧ ↑rp < radius p
hrq : rq < 1 ∧ ↑rq < radius q
rp_pos : 0 < rp
rq_pos : 0 < rq
Cq : ℝ≥0
_hCq0 : Cq > 0
hCq : ∀ (n : ℕ), ‖q n‖₊ * rq ^ n ≤ Cq
Cp : ℝ≥0
hCp1 : Cp ≥ 1
hCp : ∀ (n : ℕ), ‖p n‖₊ * rp ^ n ≤ Cp
r0 : ℝ≥0 := (4 * Cp)⁻¹
r0_pos : 0 < r0
r : ℝ≥0 := rp * rq * r0
r_pos : 0 < r
n : ℕ
c : Composition n
A : ‖q (Composition.length c)‖₊ * rq ^ n ≤ Cq
⊢ ‖compAlongComposition q p { fst := n, snd := c }.snd‖₊ * r ^ { fst := n, snd := c }.fst ≤
    Cq / 4 ^ { fst := n, snd := c }.fst
[PROOFSTEP]
have B
[GOAL]
case B
𝕜 : 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
q : FormalMultilinearSeries 𝕜 F G
p : FormalMultilinearSeries 𝕜 E F
hq : 0 < radius q
hp : 0 < radius p
rq rp : ℝ≥0
hrp : rp < 1 ∧ ↑rp < radius p
hrq : rq < 1 ∧ ↑rq < radius q
rp_pos : 0 < rp
rq_pos : 0 < rq
Cq : ℝ≥0
_hCq0 : Cq > 0
hCq : ∀ (n : ℕ), ‖q n‖₊ * rq ^ n ≤ Cq
Cp : ℝ≥0
hCp1 : Cp ≥ 1
hCp : ∀ (n : ℕ), ‖p n‖₊ * rp ^ n ≤ Cp
r0 : ℝ≥0 := (4 * Cp)⁻¹
r0_pos : 0 < r0
r : ℝ≥0 := rp * rq * r0
r_pos : 0 < r
n : ℕ
c : Composition n
A : ‖q (Composition.length c)‖₊ * rq ^ n ≤ Cq
⊢ ?m.707603
case mk
𝕜 : 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
q : FormalMultilinearSeries 𝕜 F G
p : FormalMultilinearSeries 𝕜 E F
hq : 0 < radius q
hp : 0 < radius p
rq rp : ℝ≥0
hrp : rp < 1 ∧ ↑rp < radius p
hrq : rq < 1 ∧ ↑rq < radius q
rp_pos : 0 < rp
rq_pos : 0 < rq
Cq : ℝ≥0
_hCq0 : Cq > 0
hCq : ∀ (n : ℕ), ‖q n‖₊ * rq ^ n ≤ Cq
Cp : ℝ≥0
hCp1 : Cp ≥ 1
hCp : ∀ (n : ℕ), ‖p n‖₊ * rp ^ n ≤ Cp
r0 : ℝ≥0 := (4 * Cp)⁻¹
r0_pos : 0 < r0
r : ℝ≥0 := rp * rq * r0
r_pos : 0 < r
n : ℕ
c : Composition n
A : ‖q (Composition.length c)‖₊ * rq ^ n ≤ Cq
B : ?m.707603
⊢ ‖compAlongComposition q p { fst := n, snd := c }.snd‖₊ * r ^ { fst := n, snd := c }.fst ≤
    Cq / 4 ^ { fst := n, snd := c }.fst
[PROOFSTEP]
calc
  (∏ i, ‖p (c.blocksFun i)‖₊) * rp ^ n = ∏ i, ‖p (c.blocksFun i)‖₊ * rp ^ c.blocksFun i := by
    simp only [Finset.prod_mul_distrib, Finset.prod_pow_eq_pow_sum, c.sum_blocksFun]
  _ ≤ ∏ _i : Fin c.length, Cp := (Finset.prod_le_prod' fun i _ => hCp _)
  _ = Cp ^ c.length := by simp
  _ ≤ Cp ^ n := pow_le_pow hCp1 c.length_le
[GOAL]
𝕜 : 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
q : FormalMultilinearSeries 𝕜 F G
p : FormalMultilinearSeries 𝕜 E F
hq : 0 < radius q
hp : 0 < radius p
rq rp : ℝ≥0
hrp : rp < 1 ∧ ↑rp < radius p
hrq : rq < 1 ∧ ↑rq < radius q
rp_pos : 0 < rp
rq_pos : 0 < rq
Cq : ℝ≥0
_hCq0 : Cq > 0
hCq : ∀ (n : ℕ), ‖q n‖₊ * rq ^ n ≤ Cq
Cp : ℝ≥0
hCp1 : Cp ≥ 1
hCp : ∀ (n : ℕ), ‖p n‖₊ * rp ^ n ≤ Cp
r0 : ℝ≥0 := (4 * Cp)⁻¹
r0_pos : 0 < r0
r : ℝ≥0 := rp * rq * r0
r_pos : 0 < r
n : ℕ
c : Composition n
A : ‖q (Composition.length c)‖₊ * rq ^ n ≤ Cq
⊢ (∏ i : Fin (Composition.length c), ‖p (Composition.blocksFun c i)‖₊) * rp ^ n =
    ∏ i : Fin (Composition.length c), ‖p (Composition.blocksFun c i)‖₊ * rp ^ Composition.blocksFun c i
[PROOFSTEP]
simp only [Finset.prod_mul_distrib, Finset.prod_pow_eq_pow_sum, c.sum_blocksFun]
[GOAL]
𝕜 : 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
q : FormalMultilinearSeries 𝕜 F G
p : FormalMultilinearSeries 𝕜 E F
hq : 0 < radius q
hp : 0 < radius p
rq rp : ℝ≥0
hrp : rp < 1 ∧ ↑rp < radius p
hrq : rq < 1 ∧ ↑rq < radius q
rp_pos : 0 < rp
rq_pos : 0 < rq
Cq : ℝ≥0
_hCq0 : Cq > 0
hCq : ∀ (n : ℕ), ‖q n‖₊ * rq ^ n ≤ Cq
Cp : ℝ≥0
hCp1 : Cp ≥ 1
hCp : ∀ (n : ℕ), ‖p n‖₊ * rp ^ n ≤ Cp
r0 : ℝ≥0 := (4 * Cp)⁻¹
r0_pos : 0 < r0
r : ℝ≥0 := rp * rq * r0
r_pos : 0 < r
n : ℕ
c : Composition n
A : ‖q (Composition.length c)‖₊ * rq ^ n ≤ Cq
⊢ ∏ _i : Fin (Composition.length c), Cp = Cp ^ Composition.length c
[PROOFSTEP]
simp
[GOAL]
case mk
𝕜 : 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
q : FormalMultilinearSeries 𝕜 F G
p : FormalMultilinearSeries 𝕜 E F
hq : 0 < radius q
hp : 0 < radius p
rq rp : ℝ≥0
hrp : rp < 1 ∧ ↑rp < radius p
hrq : rq < 1 ∧ ↑rq < radius q
rp_pos : 0 < rp
rq_pos : 0 < rq
Cq : ℝ≥0
_hCq0 : Cq > 0
hCq : ∀ (n : ℕ), ‖q n‖₊ * rq ^ n ≤ Cq
Cp : ℝ≥0
hCp1 : Cp ≥ 1
hCp : ∀ (n : ℕ), ‖p n‖₊ * rp ^ n ≤ Cp
r0 : ℝ≥0 := (4 * Cp)⁻¹
r0_pos : 0 < r0
r : ℝ≥0 := rp * rq * r0
r_pos : 0 < r
n : ℕ
c : Composition n
A : ‖q (Composition.length c)‖₊ * rq ^ n ≤ Cq
B : (∏ i : Fin (Composition.length c), ‖p (Composition.blocksFun c i)‖₊) * rp ^ n ≤ Cp ^ n
⊢ ‖compAlongComposition q p { fst := n, snd := c }.snd‖₊ * r ^ { fst := n, snd := c }.fst ≤
    Cq / 4 ^ { fst := n, snd := c }.fst
[PROOFSTEP]
calc
  ‖q.compAlongComposition p c‖₊ * r ^ n ≤ (‖q c.length‖₊ * ∏ i, ‖p (c.blocksFun i)‖₊) * r ^ n :=
    mul_le_mul' (q.compAlongComposition_nnnorm p c) le_rfl
  _ = ‖q c.length‖₊ * rq ^ n * ((∏ i, ‖p (c.blocksFun i)‖₊) * rp ^ n) * r0 ^ n := by simp only [mul_pow]; ring
  _ ≤ Cq * Cp ^ n * r0 ^ n := (mul_le_mul' (mul_le_mul' A B) le_rfl)
  _ = Cq / 4 ^ n := by
    simp only
    field_simp [mul_pow, (zero_lt_one.trans_le hCp1).ne']
    ring
[GOAL]
𝕜 : 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
q : FormalMultilinearSeries 𝕜 F G
p : FormalMultilinearSeries 𝕜 E F
hq : 0 < radius q
hp : 0 < radius p
rq rp : ℝ≥0
hrp : rp < 1 ∧ ↑rp < radius p
hrq : rq < 1 ∧ ↑rq < radius q
rp_pos : 0 < rp
rq_pos : 0 < rq
Cq : ℝ≥0
_hCq0 : Cq > 0
hCq : ∀ (n : ℕ), ‖q n‖₊ * rq ^ n ≤ Cq
Cp : ℝ≥0
hCp1 : Cp ≥ 1
hCp : ∀ (n : ℕ), ‖p n‖₊ * rp ^ n ≤ Cp
r0 : ℝ≥0 := (4 * Cp)⁻¹
r0_pos : 0 < r0
r : ℝ≥0 := rp * rq * r0
r_pos : 0 < r
n : ℕ
c : Composition n
A : ‖q (Composition.length c)‖₊ * rq ^ n ≤ Cq
B : (∏ i : Fin (Composition.length c), ‖p (Composition.blocksFun c i)‖₊) * rp ^ n ≤ Cp ^ n
⊢ (‖q (Composition.length c)‖₊ * ∏ i : Fin (Composition.length c), ‖p (Composition.blocksFun c i)‖₊) * r ^ n =
    ‖q (Composition.length c)‖₊ * rq ^ n *
        ((∏ i : Fin (Composition.length c), ‖p (Composition.blocksFun c i)‖₊) * rp ^ n) *
      r0 ^ n
[PROOFSTEP]
simp only [mul_pow]
[GOAL]
𝕜 : 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
q : FormalMultilinearSeries 𝕜 F G
p : FormalMultilinearSeries 𝕜 E F
hq : 0 < radius q
hp : 0 < radius p
rq rp : ℝ≥0
hrp : rp < 1 ∧ ↑rp < radius p
hrq : rq < 1 ∧ ↑rq < radius q
rp_pos : 0 < rp
rq_pos : 0 < rq
Cq : ℝ≥0
_hCq0 : Cq > 0
hCq : ∀ (n : ℕ), ‖q n‖₊ * rq ^ n ≤ Cq
Cp : ℝ≥0
hCp1 : Cp ≥ 1
hCp : ∀ (n : ℕ), ‖p n‖₊ * rp ^ n ≤ Cp
r0 : ℝ≥0 := (4 * Cp)⁻¹
r0_pos : 0 < r0
r : ℝ≥0 := rp * rq * r0
r_pos : 0 < r
n : ℕ
c : Composition n
A : ‖q (Composition.length c)‖₊ * rq ^ n ≤ Cq
B : (∏ i : Fin (Composition.length c), ‖p (Composition.blocksFun c i)‖₊) * rp ^ n ≤ Cp ^ n
⊢ (‖q (Composition.length c)‖₊ * ∏ x : Fin (Composition.length c), ‖p (Composition.blocksFun c x)‖₊) *
      (rp ^ n * rq ^ n * (4 * Cp)⁻¹ ^ n) =
    ‖q (Composition.length c)‖₊ * rq ^ n *
        ((∏ x : Fin (Composition.length c), ‖p (Composition.blocksFun c x)‖₊) * rp ^ n) *
      (4 * Cp)⁻¹ ^ n
[PROOFSTEP]
ring
[GOAL]
𝕜 : 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
q : FormalMultilinearSeries 𝕜 F G
p : FormalMultilinearSeries 𝕜 E F
hq : 0 < radius q
hp : 0 < radius p
rq rp : ℝ≥0
hrp : rp < 1 ∧ ↑rp < radius p
hrq : rq < 1 ∧ ↑rq < radius q
rp_pos : 0 < rp
rq_pos : 0 < rq
Cq : ℝ≥0
_hCq0 : Cq > 0
hCq : ∀ (n : ℕ), ‖q n‖₊ * rq ^ n ≤ Cq
Cp : ℝ≥0
hCp1 : Cp ≥ 1
hCp : ∀ (n : ℕ), ‖p n‖₊ * rp ^ n ≤ Cp
r0 : ℝ≥0 := (4 * Cp)⁻¹
r0_pos : 0 < r0
r : ℝ≥0 := rp * rq * r0
r_pos : 0 < r
n : ℕ
c : Composition n
A : ‖q (Composition.length c)‖₊ * rq ^ n ≤ Cq
B : (∏ i : Fin (Composition.length c), ‖p (Composition.blocksFun c i)‖₊) * rp ^ n ≤ Cp ^ n
⊢ Cq * Cp ^ n * r0 ^ n = Cq / 4 ^ n
[PROOFSTEP]
simp only
[GOAL]
𝕜 : 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
q : FormalMultilinearSeries 𝕜 F G
p : FormalMultilinearSeries 𝕜 E F
hq : 0 < radius q
hp : 0 < radius p
rq rp : ℝ≥0
hrp : rp < 1 ∧ ↑rp < radius p
hrq : rq < 1 ∧ ↑rq < radius q
rp_pos : 0 < rp
rq_pos : 0 < rq
Cq : ℝ≥0
_hCq0 : Cq > 0
hCq : ∀ (n : ℕ), ‖q n‖₊ * rq ^ n ≤ Cq
Cp : ℝ≥0
hCp1 : Cp ≥ 1
hCp : ∀ (n : ℕ), ‖p n‖₊ * rp ^ n ≤ Cp
r0 : ℝ≥0 := (4 * Cp)⁻¹
r0_pos : 0 < r0
r : ℝ≥0 := rp * rq * r0
r_pos : 0 < r
n : ℕ
c : Composition n
A : ‖q (Composition.length c)‖₊ * rq ^ n ≤ Cq
B : (∏ i : Fin (Composition.length c), ‖p (Composition.blocksFun c i)‖₊) * rp ^ n ≤ Cp ^ n
⊢ Cq * Cp ^ n * (4 * Cp)⁻¹ ^ n = Cq / 4 ^ n
[PROOFSTEP]
field_simp [mul_pow, (zero_lt_one.trans_le hCp1).ne']
[GOAL]
𝕜 : 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
q : FormalMultilinearSeries 𝕜 F G
p : FormalMultilinearSeries 𝕜 E F
hq : 0 < radius q
hp : 0 < radius p
rq rp : ℝ≥0
hrp : rp < 1 ∧ ↑rp < radius p
hrq : rq < 1 ∧ ↑rq < radius q
rp_pos : 0 < rp
rq_pos : 0 < rq
Cq : ℝ≥0
_hCq0 : Cq > 0
hCq : ∀ (n : ℕ), ‖q n‖₊ * rq ^ n ≤ Cq
Cp : ℝ≥0
hCp1 : Cp ≥ 1
hCp : ∀ (n : ℕ), ‖p n‖₊ * rp ^ n ≤ Cp
r0 : ℝ≥0 := (4 * Cp)⁻¹
r0_pos : 0 < r0
r : ℝ≥0 := rp * rq * r0
r_pos : 0 < r
n : ℕ
c : Composition n
A : ‖q (Composition.length c)‖₊ * rq ^ n ≤ Cq
B : (∏ i : Fin (Composition.length c), ‖p (Composition.blocksFun c i)‖₊) * rp ^ n ≤ Cp ^ n
⊢ Cq * Cp ^ n * 4 ^ n = Cq * (4 ^ n * Cp ^ n)
[PROOFSTEP]
ring
[GOAL]
case intro.intro.intro.intro.intro.intro.intro.intro
𝕜 : 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
q : FormalMultilinearSeries 𝕜 F G
p : FormalMultilinearSeries 𝕜 E F
hq : 0 < radius q
hp : 0 < radius p
rq rp : ℝ≥0
hrp : rp < 1 ∧ ↑rp < radius p
hrq : rq < 1 ∧ ↑rq < radius q
rp_pos : 0 < rp
rq_pos : 0 < rq
Cq : ℝ≥0
_hCq0 : Cq > 0
hCq : ∀ (n : ℕ), ‖q n‖₊ * rq ^ n ≤ Cq
Cp : ℝ≥0
hCp1 : Cp ≥ 1
hCp : ∀ (n : ℕ), ‖p n‖₊ * rp ^ n ≤ Cp
r0 : ℝ≥0 := (4 * Cp)⁻¹
r0_pos : 0 < r0
r : ℝ≥0 := rp * rq * r0
r_pos : 0 < r
I : ∀ (i : (n : ℕ) × Composition n), ‖compAlongComposition q p i.snd‖₊ * r ^ i.fst ≤ Cq / 4 ^ i.fst
⊢ ∃ r, r > 0 ∧ Summable fun i => ‖compAlongComposition q p i.snd‖₊ * r ^ i.fst
[PROOFSTEP]
refine' ⟨r, r_pos, NNReal.summable_of_le I _⟩
[GOAL]
case intro.intro.intro.intro.intro.intro.intro.intro
𝕜 : 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
q : FormalMultilinearSeries 𝕜 F G
p : FormalMultilinearSeries 𝕜 E F
hq : 0 < radius q
hp : 0 < radius p
rq rp : ℝ≥0
hrp : rp < 1 ∧ ↑rp < radius p
hrq : rq < 1 ∧ ↑rq < radius q
rp_pos : 0 < rp
rq_pos : 0 < rq
Cq : ℝ≥0
_hCq0 : Cq > 0
hCq : ∀ (n : ℕ), ‖q n‖₊ * rq ^ n ≤ Cq
Cp : ℝ≥0
hCp1 : Cp ≥ 1
hCp : ∀ (n : ℕ), ‖p n‖₊ * rp ^ n ≤ Cp
r0 : ℝ≥0 := (4 * Cp)⁻¹
r0_pos : 0 < r0
r : ℝ≥0 := rp * rq * r0
r_pos : 0 < r
I : ∀ (i : (n : ℕ) × Composition n), ‖compAlongComposition q p i.snd‖₊ * r ^ i.fst ≤ Cq / 4 ^ i.fst
⊢ Summable fun b => Cq / 4 ^ b.fst
[PROOFSTEP]
simp_rw [div_eq_mul_inv]
[GOAL]
case intro.intro.intro.intro.intro.intro.intro.intro
𝕜 : 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
q : FormalMultilinearSeries 𝕜 F G
p : FormalMultilinearSeries 𝕜 E F
hq : 0 < radius q
hp : 0 < radius p
rq rp : ℝ≥0
hrp : rp < 1 ∧ ↑rp < radius p
hrq : rq < 1 ∧ ↑rq < radius q
rp_pos : 0 < rp
rq_pos : 0 < rq
Cq : ℝ≥0
_hCq0 : Cq > 0
hCq : ∀ (n : ℕ), ‖q n‖₊ * rq ^ n ≤ Cq
Cp : ℝ≥0
hCp1 : Cp ≥ 1
hCp : ∀ (n : ℕ), ‖p n‖₊ * rp ^ n ≤ Cp
r0 : ℝ≥0 := (4 * Cp)⁻¹
r0_pos : 0 < r0
r : ℝ≥0 := rp * rq * r0
r_pos : 0 < r
I : ∀ (i : (n : ℕ) × Composition n), ‖compAlongComposition q p i.snd‖₊ * r ^ i.fst ≤ Cq / 4 ^ i.fst
⊢ Summable fun b => Cq * (4 ^ b.fst)⁻¹
[PROOFSTEP]
refine' Summable.mul_left _ _
[GOAL]
case intro.intro.intro.intro.intro.intro.intro.intro
𝕜 : 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
q : FormalMultilinearSeries 𝕜 F G
p : FormalMultilinearSeries 𝕜 E F
hq : 0 < radius q
hp : 0 < radius p
rq rp : ℝ≥0
hrp : rp < 1 ∧ ↑rp < radius p
hrq : rq < 1 ∧ ↑rq < radius q
rp_pos : 0 < rp
rq_pos : 0 < rq
Cq : ℝ≥0
_hCq0 : Cq > 0
hCq : ∀ (n : ℕ), ‖q n‖₊ * rq ^ n ≤ Cq
Cp : ℝ≥0
hCp1 : Cp ≥ 1
hCp : ∀ (n : ℕ), ‖p n‖₊ * rp ^ n ≤ Cp
r0 : ℝ≥0 := (4 * Cp)⁻¹
r0_pos : 0 < r0
r : ℝ≥0 := rp * rq * r0
r_pos : 0 < r
I : ∀ (i : (n : ℕ) × Composition n), ‖compAlongComposition q p i.snd‖₊ * r ^ i.fst ≤ Cq / 4 ^ i.fst
⊢ Summable fun b => (4 ^ b.fst)⁻¹
[PROOFSTEP]
have : ∀ n : ℕ, HasSum (fun c : Composition n => (4 ^ n : ℝ≥0)⁻¹) (2 ^ (n - 1) / 4 ^ n) :=
  by
  intro n
  convert hasSum_fintype fun c : Composition n => (4 ^ n : ℝ≥0)⁻¹
  simp [Finset.card_univ, composition_card, div_eq_mul_inv]
[GOAL]
𝕜 : 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
q : FormalMultilinearSeries 𝕜 F G
p : FormalMultilinearSeries 𝕜 E F
hq : 0 < radius q
hp : 0 < radius p
rq rp : ℝ≥0
hrp : rp < 1 ∧ ↑rp < radius p
hrq : rq < 1 ∧ ↑rq < radius q
rp_pos : 0 < rp
rq_pos : 0 < rq
Cq : ℝ≥0
_hCq0 : Cq > 0
hCq : ∀ (n : ℕ), ‖q n‖₊ * rq ^ n ≤ Cq
Cp : ℝ≥0
hCp1 : Cp ≥ 1
hCp : ∀ (n : ℕ), ‖p n‖₊ * rp ^ n ≤ Cp
r0 : ℝ≥0 := (4 * Cp)⁻¹
r0_pos : 0 < r0
r : ℝ≥0 := rp * rq * r0
r_pos : 0 < r
I : ∀ (i : (n : ℕ) × Composition n), ‖compAlongComposition q p i.snd‖₊ * r ^ i.fst ≤ Cq / 4 ^ i.fst
⊢ ∀ (n : ℕ), HasSum (fun c => (4 ^ n)⁻¹) (2 ^ (n - 1) / 4 ^ n)
[PROOFSTEP]
intro n
[GOAL]
𝕜 : 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
q : FormalMultilinearSeries 𝕜 F G
p : FormalMultilinearSeries 𝕜 E F
hq : 0 < radius q
hp : 0 < radius p
rq rp : ℝ≥0
hrp : rp < 1 ∧ ↑rp < radius p
hrq : rq < 1 ∧ ↑rq < radius q
rp_pos : 0 < rp
rq_pos : 0 < rq
Cq : ℝ≥0
_hCq0 : Cq > 0
hCq : ∀ (n : ℕ), ‖q n‖₊ * rq ^ n ≤ Cq
Cp : ℝ≥0
hCp1 : Cp ≥ 1
hCp : ∀ (n : ℕ), ‖p n‖₊ * rp ^ n ≤ Cp
r0 : ℝ≥0 := (4 * Cp)⁻¹
r0_pos : 0 < r0
r : ℝ≥0 := rp * rq * r0
r_pos : 0 < r
I : ∀ (i : (n : ℕ) × Composition n), ‖compAlongComposition q p i.snd‖₊ * r ^ i.fst ≤ Cq / 4 ^ i.fst
n : ℕ
⊢ HasSum (fun c => (4 ^ n)⁻¹) (2 ^ (n - 1) / 4 ^ n)
[PROOFSTEP]
convert hasSum_fintype fun c : Composition n => (4 ^ n : ℝ≥0)⁻¹
[GOAL]
case h.e'_6
𝕜 : 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
q : FormalMultilinearSeries 𝕜 F G
p : FormalMultilinearSeries 𝕜 E F
hq : 0 < radius q
hp : 0 < radius p
rq rp : ℝ≥0
hrp : rp < 1 ∧ ↑rp < radius p
hrq : rq < 1 ∧ ↑rq < radius q
rp_pos : 0 < rp
rq_pos : 0 < rq
Cq : ℝ≥0
_hCq0 : Cq > 0
hCq : ∀ (n : ℕ), ‖q n‖₊ * rq ^ n ≤ Cq
Cp : ℝ≥0
hCp1 : Cp ≥ 1
hCp : ∀ (n : ℕ), ‖p n‖₊ * rp ^ n ≤ Cp
r0 : ℝ≥0 := (4 * Cp)⁻¹
r0_pos : 0 < r0
r : ℝ≥0 := rp * rq * r0
r_pos : 0 < r
I : ∀ (i : (n : ℕ) × Composition n), ‖compAlongComposition q p i.snd‖₊ * r ^ i.fst ≤ Cq / 4 ^ i.fst
n : ℕ
⊢ 2 ^ (n - 1) / 4 ^ n = ∑ b : Composition n, (4 ^ n)⁻¹
[PROOFSTEP]
simp [Finset.card_univ, composition_card, div_eq_mul_inv]
[GOAL]
case intro.intro.intro.intro.intro.intro.intro.intro
𝕜 : 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
q : FormalMultilinearSeries 𝕜 F G
p : FormalMultilinearSeries 𝕜 E F
hq : 0 < radius q
hp : 0 < radius p
rq rp : ℝ≥0
hrp : rp < 1 ∧ ↑rp < radius p
hrq : rq < 1 ∧ ↑rq < radius q
rp_pos : 0 < rp
rq_pos : 0 < rq
Cq : ℝ≥0
_hCq0 : Cq > 0
hCq : ∀ (n : ℕ), ‖q n‖₊ * rq ^ n ≤ Cq
Cp : ℝ≥0
hCp1 : Cp ≥ 1
hCp : ∀ (n : ℕ), ‖p n‖₊ * rp ^ n ≤ Cp
r0 : ℝ≥0 := (4 * Cp)⁻¹
r0_pos : 0 < r0
r : ℝ≥0 := rp * rq * r0
r_pos : 0 < r
I : ∀ (i : (n : ℕ) × Composition n), ‖compAlongComposition q p i.snd‖₊ * r ^ i.fst ≤ Cq / 4 ^ i.fst
this : ∀ (n : ℕ), HasSum (fun c => (4 ^ n)⁻¹) (2 ^ (n - 1) / 4 ^ n)
⊢ Summable fun b => (4 ^ b.fst)⁻¹
[PROOFSTEP]
refine' NNReal.summable_sigma.2 ⟨fun n => (this n).summable, (NNReal.summable_nat_add_iff 1).1 _⟩
[GOAL]
case intro.intro.intro.intro.intro.intro.intro.intro
𝕜 : 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
q : FormalMultilinearSeries 𝕜 F G
p : FormalMultilinearSeries 𝕜 E F
hq : 0 < radius q
hp : 0 < radius p
rq rp : ℝ≥0
hrp : rp < 1 ∧ ↑rp < radius p
hrq : rq < 1 ∧ ↑rq < radius q
rp_pos : 0 < rp
rq_pos : 0 < rq
Cq : ℝ≥0
_hCq0 : Cq > 0
hCq : ∀ (n : ℕ), ‖q n‖₊ * rq ^ n ≤ Cq
Cp : ℝ≥0
hCp1 : Cp ≥ 1
hCp : ∀ (n : ℕ), ‖p n‖₊ * rp ^ n ≤ Cp
r0 : ℝ≥0 := (4 * Cp)⁻¹
r0_pos : 0 < r0
r : ℝ≥0 := rp * rq * r0
r_pos : 0 < r
I : ∀ (i : (n : ℕ) × Composition n), ‖compAlongComposition q p i.snd‖₊ * r ^ i.fst ≤ Cq / 4 ^ i.fst
this : ∀ (n : ℕ), HasSum (fun c => (4 ^ n)⁻¹) (2 ^ (n - 1) / 4 ^ n)
⊢ Summable fun i => ∑' (y : Composition (i + 1)), (4 ^ { fst := i + 1, snd := y }.fst)⁻¹
[PROOFSTEP]
convert (NNReal.summable_geometric (NNReal.div_lt_one_of_lt one_lt_two)).mul_left (1 / 4) using 1
[GOAL]
case h.e'_5
𝕜 : 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
q : FormalMultilinearSeries 𝕜 F G
p : FormalMultilinearSeries 𝕜 E F
hq : 0 < radius q
hp : 0 < radius p
rq rp : ℝ≥0
hrp : rp < 1 ∧ ↑rp < radius p
hrq : rq < 1 ∧ ↑rq < radius q
rp_pos : 0 < rp
rq_pos : 0 < rq
Cq : ℝ≥0
_hCq0 : Cq > 0
hCq : ∀ (n : ℕ), ‖q n‖₊ * rq ^ n ≤ Cq
Cp : ℝ≥0
hCp1 : Cp ≥ 1
hCp : ∀ (n : ℕ), ‖p n‖₊ * rp ^ n ≤ Cp
r0 : ℝ≥0 := (4 * Cp)⁻¹
r0_pos : 0 < r0
r : ℝ≥0 := rp * rq * r0
r_pos : 0 < r
I : ∀ (i : (n : ℕ) × Composition n), ‖compAlongComposition q p i.snd‖₊ * r ^ i.fst ≤ Cq / 4 ^ i.fst
this : ∀ (n : ℕ), HasSum (fun c => (4 ^ n)⁻¹) (2 ^ (n - 1) / 4 ^ n)
⊢ (fun i => ∑' (y : Composition (i + 1)), (4 ^ { fst := i + 1, snd := y }.fst)⁻¹) = fun i => 1 / 4 * (1 / 2) ^ i
[PROOFSTEP]
ext1 n
[GOAL]
case h.e'_5.h
𝕜 : 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
q : FormalMultilinearSeries 𝕜 F G
p : FormalMultilinearSeries 𝕜 E F
hq : 0 < radius q
hp : 0 < radius p
rq rp : ℝ≥0
hrp : rp < 1 ∧ ↑rp < radius p
hrq : rq < 1 ∧ ↑rq < radius q
rp_pos : 0 < rp
rq_pos : 0 < rq
Cq : ℝ≥0
_hCq0 : Cq > 0
hCq : ∀ (n : ℕ), ‖q n‖₊ * rq ^ n ≤ Cq
Cp : ℝ≥0
hCp1 : Cp ≥ 1
hCp : ∀ (n : ℕ), ‖p n‖₊ * rp ^ n ≤ Cp
r0 : ℝ≥0 := (4 * Cp)⁻¹
r0_pos : 0 < r0
r : ℝ≥0 := rp * rq * r0
r_pos : 0 < r
I : ∀ (i : (n : ℕ) × Composition n), ‖compAlongComposition q p i.snd‖₊ * r ^ i.fst ≤ Cq / 4 ^ i.fst
this : ∀ (n : ℕ), HasSum (fun c => (4 ^ n)⁻¹) (2 ^ (n - 1) / 4 ^ n)
n : ℕ
⊢ ∑' (y : Composition (n + 1)), (4 ^ { fst := n + 1, snd := y }.fst)⁻¹ = 1 / 4 * (1 / 2) ^ n
[PROOFSTEP]
rw [(this _).tsum_eq, add_tsub_cancel_right]
[GOAL]
case h.e'_5.h
𝕜 : 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
q : FormalMultilinearSeries 𝕜 F G
p : FormalMultilinearSeries 𝕜 E F
hq : 0 < radius q
hp : 0 < radius p
rq rp : ℝ≥0
hrp : rp < 1 ∧ ↑rp < radius p
hrq : rq < 1 ∧ ↑rq < radius q
rp_pos : 0 < rp
rq_pos : 0 < rq
Cq : ℝ≥0
_hCq0 : Cq > 0
hCq : ∀ (n : ℕ), ‖q n‖₊ * rq ^ n ≤ Cq
Cp : ℝ≥0
hCp1 : Cp ≥ 1
hCp : ∀ (n : ℕ), ‖p n‖₊ * rp ^ n ≤ Cp
r0 : ℝ≥0 := (4 * Cp)⁻¹
r0_pos : 0 < r0
r : ℝ≥0 := rp * rq * r0
r_pos : 0 < r
I : ∀ (i : (n : ℕ) × Composition n), ‖compAlongComposition q p i.snd‖₊ * r ^ i.fst ≤ Cq / 4 ^ i.fst
this : ∀ (n : ℕ), HasSum (fun c => (4 ^ n)⁻¹) (2 ^ (n - 1) / 4 ^ n)
n : ℕ
⊢ 2 ^ n / 4 ^ (n + 1) = 1 / 4 * (1 / 2) ^ n
[PROOFSTEP]
field_simp [← mul_assoc, pow_succ', mul_pow, show (4 : ℝ≥0) = 2 * 2 by norm_num, mul_right_comm]
[GOAL]
𝕜 : 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
q : FormalMultilinearSeries 𝕜 F G
p : FormalMultilinearSeries 𝕜 E F
hq : 0 < radius q
hp : 0 < radius p
rq rp : ℝ≥0
hrp : rp < 1 ∧ ↑rp < radius p
hrq : rq < 1 ∧ ↑rq < radius q
rp_pos : 0 < rp
rq_pos : 0 < rq
Cq : ℝ≥0
_hCq0 : Cq > 0
hCq : ∀ (n : ℕ), ‖q n‖₊ * rq ^ n ≤ Cq
Cp : ℝ≥0
hCp1 : Cp ≥ 1
hCp : ∀ (n : ℕ), ‖p n‖₊ * rp ^ n ≤ Cp
r0 : ℝ≥0 := (4 * Cp)⁻¹
r0_pos : 0 < r0
r : ℝ≥0 := rp * rq * r0
r_pos : 0 < r
I : ∀ (i : (n : ℕ) × Composition n), ‖compAlongComposition q p i.snd‖₊ * r ^ i.fst ≤ Cq / 4 ^ i.fst
this : ∀ (n : ℕ), HasSum (fun c => (4 ^ n)⁻¹) (2 ^ (n - 1) / 4 ^ n)
n : ℕ
⊢ 4 = 2 * 2
[PROOFSTEP]
norm_num
[GOAL]
𝕜 : 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
q : FormalMultilinearSeries 𝕜 F G
p : FormalMultilinearSeries 𝕜 E F
r : ℝ≥0
hr : Summable fun i => ‖compAlongComposition q p i.snd‖₊ * r ^ i.fst
⊢ ↑r ≤ radius (FormalMultilinearSeries.comp q p)
[PROOFSTEP]
refine'
  le_radius_of_bound_nnreal _ (∑' i : Σ n, Composition n, ‖compAlongComposition q p i.snd‖₊ * r ^ i.fst) fun n => _
[GOAL]
𝕜 : 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
q : FormalMultilinearSeries 𝕜 F G
p : FormalMultilinearSeries 𝕜 E F
r : ℝ≥0
hr : Summable fun i => ‖compAlongComposition q p i.snd‖₊ * r ^ i.fst
n : ℕ
⊢ ‖FormalMultilinearSeries.comp q p n‖₊ * r ^ n ≤
    ∑' (i : (n : ℕ) × Composition n), ‖compAlongComposition q p i.snd‖₊ * r ^ i.fst
[PROOFSTEP]
calc
  ‖FormalMultilinearSeries.comp q p n‖₊ * r ^ n ≤ ∑' c : Composition n, ‖compAlongComposition q p c‖₊ * r ^ n :=
    by
    rw [tsum_fintype, ← Finset.sum_mul]
    exact mul_le_mul' (nnnorm_sum_le _ _) le_rfl
  _ ≤ ∑' i : Σ n : ℕ, Composition n, ‖compAlongComposition q p i.snd‖₊ * r ^ i.fst :=
    NNReal.tsum_comp_le_tsum_of_inj hr sigma_mk_injective
[GOAL]
𝕜 : 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
q : FormalMultilinearSeries 𝕜 F G
p : FormalMultilinearSeries 𝕜 E F
r : ℝ≥0
hr : Summable fun i => ‖compAlongComposition q p i.snd‖₊ * r ^ i.fst
n : ℕ
⊢ ‖FormalMultilinearSeries.comp q p n‖₊ * r ^ n ≤ ∑' (c : Composition n), ‖compAlongComposition q p c‖₊ * r ^ n
[PROOFSTEP]
rw [tsum_fintype, ← Finset.sum_mul]
[GOAL]
𝕜 : 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
q : FormalMultilinearSeries 𝕜 F G
p : FormalMultilinearSeries 𝕜 E F
r : ℝ≥0
hr : Summable fun i => ‖compAlongComposition q p i.snd‖₊ * r ^ i.fst
n : ℕ
⊢ ‖FormalMultilinearSeries.comp q p n‖₊ * r ^ n ≤ (∑ x : Composition n, ‖compAlongComposition q p x‖₊) * r ^ n
[PROOFSTEP]
exact mul_le_mul' (nnnorm_sum_le _ _) le_rfl
[GOAL]
𝕜 : 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
m M N : ℕ
i : (n : ℕ) × (Fin n → ℕ)
⊢ i ∈ compPartialSumSource m M N ↔ (m ≤ i.fst ∧ i.fst < M) ∧ ∀ (a : Fin i.fst), 1 ≤ Sigma.snd i a ∧ Sigma.snd i a < N
[PROOFSTEP]
simp only [compPartialSumSource, Finset.mem_Ico, Fintype.mem_piFinset, Finset.mem_sigma, iff_self_iff]
[GOAL]
𝕜 : 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
m M N : ℕ
i : (n : ℕ) × (Fin n → ℕ)
hi : i ∈ compPartialSumSource m M N
⊢ (n : ℕ) × Composition n
[PROOFSTEP]
rcases i with ⟨n, f⟩
[GOAL]
case mk
𝕜 : 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
m M N n : ℕ
f : Fin n → ℕ
hi : { fst := n, snd := f } ∈ compPartialSumSource m M N
⊢ (n : ℕ) × Composition n
[PROOFSTEP]
rw [mem_compPartialSumSource_iff] at hi 
[GOAL]
case mk
𝕜 : 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
m M N n : ℕ
f : Fin n → ℕ
hi :
  (m ≤ { fst := n, snd := f }.fst ∧ { fst := n, snd := f }.fst < M) ∧
    ∀ (a : Fin { fst := n, snd := f }.fst),
      1 ≤ Sigma.snd { fst := n, snd := f } a ∧ Sigma.snd { fst := n, snd := f } a < N
⊢ (n : ℕ) × Composition n
[PROOFSTEP]
refine' ⟨∑ j, f j, ofFn fun a => f a, fun hi' => _, by simp [sum_ofFn]⟩
[GOAL]
𝕜 : 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
m M N n : ℕ
f : Fin n → ℕ
hi :
  (m ≤ { fst := n, snd := f }.fst ∧ { fst := n, snd := f }.fst < M) ∧
    ∀ (a : Fin { fst := n, snd := f }.fst),
      1 ≤ Sigma.snd { fst := n, snd := f } a ∧ Sigma.snd { fst := n, snd := f } a < N
⊢ sum (ofFn fun a => f a) = ∑ j : Fin n, f j
[PROOFSTEP]
simp [sum_ofFn]
[GOAL]
case mk
𝕜 : 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
m M N n : ℕ
f : Fin n → ℕ
hi :
  (m ≤ { fst := n, snd := f }.fst ∧ { fst := n, snd := f }.fst < M) ∧
    ∀ (a : Fin { fst := n, snd := f }.fst),
      1 ≤ Sigma.snd { fst := n, snd := f } a ∧ Sigma.snd { fst := n, snd := f } a < N
i✝ : ℕ
hi' : i✝ ∈ ofFn fun a => f a
⊢ 0 < i✝
[PROOFSTEP]
rename_i i
[GOAL]
case mk
𝕜 : 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
m M N n : ℕ
f : Fin n → ℕ
hi :
  (m ≤ { fst := n, snd := f }.fst ∧ { fst := n, snd := f }.fst < M) ∧
    ∀ (a : Fin { fst := n, snd := f }.fst),
      1 ≤ Sigma.snd { fst := n, snd := f } a ∧ Sigma.snd { fst := n, snd := f } a < N
i : ℕ
hi' : i ∈ ofFn fun a => f a
⊢ 0 < i
[PROOFSTEP]
obtain ⟨j, rfl⟩ : ∃ j : Fin n, f j = i := by rwa [mem_ofFn, Set.mem_range] at hi' 
[GOAL]
𝕜 : 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
m M N n : ℕ
f : Fin n → ℕ
hi :
  (m ≤ { fst := n, snd := f }.fst ∧ { fst := n, snd := f }.fst < M) ∧
    ∀ (a : Fin { fst := n, snd := f }.fst),
      1 ≤ Sigma.snd { fst := n, snd := f } a ∧ Sigma.snd { fst := n, snd := f } a < N
i : ℕ
hi' : i ∈ ofFn fun a => f a
⊢ ∃ j, f j = i
[PROOFSTEP]
rwa [mem_ofFn, Set.mem_range] at hi' 
[GOAL]
case mk.intro
𝕜 : 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
m M N n : ℕ
f : Fin n → ℕ
hi :
  (m ≤ { fst := n, snd := f }.fst ∧ { fst := n, snd := f }.fst < M) ∧
    ∀ (a : Fin { fst := n, snd := f }.fst),
      1 ≤ Sigma.snd { fst := n, snd := f } a ∧ Sigma.snd { fst := n, snd := f } a < N
j : Fin n
hi' : f j ∈ ofFn fun a => f a
⊢ 0 < f j
[PROOFSTEP]
exact (hi.2 j).1
[GOAL]
𝕜 : 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
m M N : ℕ
i : (n : ℕ) × (Fin n → ℕ)
hi : i ∈ compPartialSumSource m M N
⊢ Composition.length (compChangeOfVariables m M N i hi).snd = i.fst
[PROOFSTEP]
rcases i with ⟨k, blocks_fun⟩
[GOAL]
case mk
𝕜 : 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
m M N k : ℕ
blocks_fun : Fin k → ℕ
hi : { fst := k, snd := blocks_fun } ∈ compPartialSumSource m M N
⊢ Composition.length (compChangeOfVariables m M N { fst := k, snd := blocks_fun } hi).snd =
    { fst := k, snd := blocks_fun }.fst
[PROOFSTEP]
dsimp [compChangeOfVariables]
[GOAL]
case mk
𝕜 : 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
m M N k : ℕ
blocks_fun : Fin k → ℕ
hi : { fst := k, snd := blocks_fun } ∈ compPartialSumSource m M N
⊢ Composition.length
      { blocks := ofFn fun a => blocks_fun a, blocks_pos := (_ : ∀ {i : ℕ}, (i ∈ ofFn fun a => blocks_fun a) → 0 < i),
        blocks_sum := (_ : sum (ofFn fun a => blocks_fun a) = ∑ a : Fin k, blocks_fun a) } =
    k
[PROOFSTEP]
simp only [Composition.length, map_ofFn, length_ofFn]
[GOAL]
𝕜 : 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
m M N : ℕ
i : (n : ℕ) × (Fin n → ℕ)
hi : i ∈ compPartialSumSource m M N
j : Fin i.fst
⊢ Composition.blocksFun (compChangeOfVariables m M N i hi).snd
      { val := ↑j, isLt := (_ : ↑j < Composition.length (compChangeOfVariables m M N i hi).snd) } =
    Sigma.snd i j
[PROOFSTEP]
rcases i with ⟨n, f⟩
[GOAL]
case mk
𝕜 : 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
m M N n : ℕ
f : Fin n → ℕ
hi : { fst := n, snd := f } ∈ compPartialSumSource m M N
j : Fin { fst := n, snd := f }.fst
⊢ Composition.blocksFun (compChangeOfVariables m M N { fst := n, snd := f } hi).snd
      { val := ↑j, isLt := (_ : ↑j < Composition.length (compChangeOfVariables m M N { fst := n, snd := f } hi).snd) } =
    Sigma.snd { fst := n, snd := f } j
[PROOFSTEP]
dsimp [Composition.blocksFun, Composition.blocks, compChangeOfVariables]
[GOAL]
case mk
𝕜 : 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
m M N n : ℕ
f : Fin n → ℕ
hi : { fst := n, snd := f } ∈ compPartialSumSource m M N
j : Fin { fst := n, snd := f }.fst
⊢ nthLe (ofFn fun a => f a) ↑j
      (_ :
        ↑{ val := ↑j,
              isLt :=
                (_ :
                  ↑j <
                    Composition.length
                      { blocks := ofFn fun a => f a, blocks_pos := (_ : ∀ {i : ℕ}, (i ∈ ofFn fun a => f a) → 0 < i),
                        blocks_sum := (_ : sum (ofFn fun a => f a) = ∑ a : Fin n, f a) }) } <
          Composition.length
            { blocks := ofFn fun a => f a, blocks_pos := (_ : ∀ {i : ℕ}, (i ∈ ofFn fun a => f a) → 0 < i),
              blocks_sum := (_ : sum (ofFn fun a => f a) = ∑ a : Fin n, f a) }) =
    f j
[PROOFSTEP]
simp only [map_ofFn, List.nthLe_ofFn, Function.comp_apply]
[GOAL]
𝕜 : 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
m M N : ℕ
i : (n : ℕ) × Composition n
hi : i ∈ compPartialSumTargetSet m M N
⊢ ∃ j hj, i = compChangeOfVariables m M N j hj
[PROOFSTEP]
rcases i with ⟨n, c⟩
[GOAL]
case mk
𝕜 : 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
m M N n : ℕ
c : Composition n
hi : { fst := n, snd := c } ∈ compPartialSumTargetSet m M N
⊢ ∃ j hj, { fst := n, snd := c } = compChangeOfVariables m M N j hj
[PROOFSTEP]
refine' ⟨⟨c.length, c.blocksFun⟩, _, _⟩
[GOAL]
case mk.refine'_1
𝕜 : 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
m M N n : ℕ
c : Composition n
hi : { fst := n, snd := c } ∈ compPartialSumTargetSet m M N
⊢ { fst := Composition.length c, snd := Composition.blocksFun c } ∈ compPartialSumSource m M N
[PROOFSTEP]
simp only [compPartialSumTargetSet, Set.mem_setOf_eq] at hi 
[GOAL]
case mk.refine'_1
𝕜 : 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
m M N n : ℕ
c : Composition n
hi :
  m ≤ Composition.length c ∧
    Composition.length c < M ∧
      ∀ (j : Fin (Composition.length { fst := n, snd := c }.snd)), Composition.blocksFun c j < N
⊢ { fst := Composition.length c, snd := Composition.blocksFun c } ∈ compPartialSumSource m M N
[PROOFSTEP]
simp only [mem_compPartialSumSource_iff, hi.left, hi.right, true_and_iff, and_true_iff]
[GOAL]
case mk.refine'_1
𝕜 : 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
m M N n : ℕ
c : Composition n
hi :
  m ≤ Composition.length c ∧
    Composition.length c < M ∧
      ∀ (j : Fin (Composition.length { fst := n, snd := c }.snd)), Composition.blocksFun c j < N
⊢ ∀ (a : Fin { fst := Composition.length c, snd := Composition.blocksFun c }.fst), 1 ≤ Composition.blocksFun c a
[PROOFSTEP]
exact fun a => c.one_le_blocks' _
[GOAL]
case mk.refine'_2
𝕜 : 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
m M N n : ℕ
c : Composition n
hi : { fst := n, snd := c } ∈ compPartialSumTargetSet m M N
⊢ { fst := n, snd := c } =
    compChangeOfVariables m M N { fst := Composition.length c, snd := Composition.blocksFun c }
      (_ : { fst := Composition.length c, snd := Composition.blocksFun c } ∈ compPartialSumSource m M N)
[PROOFSTEP]
dsimp [compChangeOfVariables]
[GOAL]
case mk.refine'_2
𝕜 : 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
m M N n : ℕ
c : Composition n
hi : { fst := n, snd := c } ∈ compPartialSumTargetSet m M N
⊢ { fst := n, snd := c } =
    { fst := ∑ j : Fin (Composition.length c), Composition.blocksFun c j,
      snd :=
        { blocks := ofFn fun a => Composition.blocksFun c a,
          blocks_pos := (_ : ∀ {i : ℕ}, (i ∈ ofFn fun a => Composition.blocksFun c a) → 0 < i),
          blocks_sum :=
            (_ :
              sum (ofFn fun a => Composition.blocksFun c a) =
                ∑ a : Fin (Composition.length c), Composition.blocksFun c a) } }
[PROOFSTEP]
rw [Composition.sigma_eq_iff_blocks_eq]
[GOAL]
case mk.refine'_2
𝕜 : 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
m M N n : ℕ
c : Composition n
hi : { fst := n, snd := c } ∈ compPartialSumTargetSet m M N
⊢ { fst := n, snd := c }.snd.blocks =
    { fst := ∑ j : Fin (Composition.length c), Composition.blocksFun c j,
          snd :=
            { blocks := ofFn fun a => Composition.blocksFun c a,
              blocks_pos := (_ : ∀ {i : ℕ}, (i ∈ ofFn fun a => Composition.blocksFun c a) → 0 < i),
              blocks_sum :=
                (_ :
                  sum (ofFn fun a => Composition.blocksFun c a) =
                    ∑ a : Fin (Composition.length c), Composition.blocksFun c a) } }.snd.blocks
[PROOFSTEP]
simp only [Composition.blocksFun, Composition.blocks, Subtype.coe_eta, List.get_map]
[GOAL]
case mk.refine'_2
𝕜 : 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
m M N n : ℕ
c : Composition n
hi : { fst := n, snd := c } ∈ compPartialSumTargetSet m M N
⊢ c.blocks = ofFn fun a => nthLe c.blocks ↑a (_ : ↑a < Composition.length c)
[PROOFSTEP]
conv_lhs => rw [← List.ofFn_get c.blocks]
[GOAL]
𝕜 : 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
m M N n : ℕ
c : Composition n
hi : { fst := n, snd := c } ∈ compPartialSumTargetSet m M N
| c.blocks
[PROOFSTEP]
rw [← List.ofFn_get c.blocks]
[GOAL]
𝕜 : 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
m M N n : ℕ
c : Composition n
hi : { fst := n, snd := c } ∈ compPartialSumTargetSet m M N
| c.blocks
[PROOFSTEP]
rw [← List.ofFn_get c.blocks]
[GOAL]
𝕜 : 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
m M N n : ℕ
c : Composition n
hi : { fst := n, snd := c } ∈ compPartialSumTargetSet m M N
| c.blocks
[PROOFSTEP]
rw [← List.ofFn_get c.blocks]
[GOAL]
𝕜 : 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
m M N : ℕ
a : (n : ℕ) × Composition n
⊢ a ∈ compPartialSumTarget m M N ↔
    m ≤ Composition.length a.snd ∧
      Composition.length a.snd < M ∧ ∀ (j : Fin (Composition.length a.snd)), Composition.blocksFun a.snd j < N
[PROOFSTEP]
simp [compPartialSumTarget, compPartialSumTargetSet]
[GOAL]
𝕜 : 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
α : Type u_6
inst✝ : AddCommMonoid α
m M N : ℕ
f : (n : ℕ) × (Fin n → ℕ) → α
g : (n : ℕ) × Composition n → α
h : ∀ (e : (n : ℕ) × (Fin n → ℕ)) (he : e ∈ compPartialSumSource m M N), f e = g (compChangeOfVariables m M N e he)
⊢ ∑ e in compPartialSumSource m M N, f e = ∑ e in compPartialSumTarget m M N, g e
[PROOFSTEP]
apply
  Finset.sum_bij
    (compChangeOfVariables m M N)
      -- We should show that the correspondance we have set up is indeed a bijection
        -- between the index sets of the two sums.
        -- 1 - show that the image belongs to `comp_partial_sum_target m N N`
[GOAL]
case hi
𝕜 : 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
α : Type u_6
inst✝ : AddCommMonoid α
m M N : ℕ
f : (n : ℕ) × (Fin n → ℕ) → α
g : (n : ℕ) × Composition n → α
h : ∀ (e : (n : ℕ) × (Fin n → ℕ)) (he : e ∈ compPartialSumSource m M N), f e = g (compChangeOfVariables m M N e he)
⊢ ∀ (a : (n : ℕ) × (Fin n → ℕ)) (ha : a ∈ compPartialSumSource m M N),
    compChangeOfVariables m M N a ha ∈ compPartialSumTarget m M N
[PROOFSTEP]
rintro ⟨k, blocks_fun⟩ H
[GOAL]
case hi.mk
𝕜 : 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✝
α : Type u_6
inst✝ : AddCommMonoid α
m M N : ℕ
f : (n : ℕ) × (Fin n → ℕ) → α
g : (n : ℕ) × Composition n → α
h : ∀ (e : (n : ℕ) × (Fin n → ℕ)) (he : e ∈ compPartialSumSource m M N), f e = g (compChangeOfVariables m M N e he)
k : ℕ
blocks_fun : Fin k → ℕ
H : { fst := k, snd := blocks_fun } ∈ compPartialSumSource m M N
⊢ compChangeOfVariables m M N { fst := k, snd := blocks_fun } H ∈ compPartialSumTarget m M N
[PROOFSTEP]
rw [mem_compPartialSumSource_iff] at H 
[GOAL]
case hi.mk
𝕜 : 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✝¹
α : Type u_6
inst✝ : AddCommMonoid α
m M N : ℕ
f : (n : ℕ) × (Fin n → ℕ) → α
g : (n : ℕ) × Composition n → α
h : ∀ (e : (n : ℕ) × (Fin n → ℕ)) (he : e ∈ compPartialSumSource m M N), f e = g (compChangeOfVariables m M N e he)
k : ℕ
blocks_fun : Fin k → ℕ
H✝ : { fst := k, snd := blocks_fun } ∈ compPartialSumSource m M N
H :
  (m ≤ { fst := k, snd := blocks_fun }.fst ∧ { fst := k, snd := blocks_fun }.fst < M) ∧
    ∀ (a : Fin { fst := k, snd := blocks_fun }.fst),
      1 ≤ Sigma.snd { fst := k, snd := blocks_fun } a ∧ Sigma.snd { fst := k, snd := blocks_fun } a < N
⊢ compChangeOfVariables m M N { fst := k, snd := blocks_fun } H✝ ∈ compPartialSumTarget m M N
[PROOFSTEP]
simp only at H 
[GOAL]
case hi.mk
𝕜 : 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✝¹
α : Type u_6
inst✝ : AddCommMonoid α
m M N : ℕ
f : (n : ℕ) × (Fin n → ℕ) → α
g : (n : ℕ) × Composition n → α
h : ∀ (e : (n : ℕ) × (Fin n → ℕ)) (he : e ∈ compPartialSumSource m M N), f e = g (compChangeOfVariables m M N e he)
k : ℕ
blocks_fun : Fin k → ℕ
H✝ : { fst := k, snd := blocks_fun } ∈ compPartialSumSource m M N
H : (m ≤ k ∧ k < M) ∧ ∀ (a : Fin { fst := k, snd := blocks_fun }.fst), 1 ≤ blocks_fun a ∧ blocks_fun a < N
⊢ compChangeOfVariables m M N { fst := k, snd := blocks_fun } H✝ ∈ compPartialSumTarget m M N
[PROOFSTEP]
simp only [mem_compPartialSumTarget_iff, Composition.length, Composition.blocks, H.left, map_ofFn, length_ofFn,
  true_and_iff, compChangeOfVariables]
[GOAL]
case hi.mk
𝕜 : 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✝¹
α : Type u_6
inst✝ : AddCommMonoid α
m M N : ℕ
f : (n : ℕ) × (Fin n → ℕ) → α
g : (n : ℕ) × Composition n → α
h : ∀ (e : (n : ℕ) × (Fin n → ℕ)) (he : e ∈ compPartialSumSource m M N), f e = g (compChangeOfVariables m M N e he)
k : ℕ
blocks_fun : Fin k → ℕ
H✝ : { fst := k, snd := blocks_fun } ∈ compPartialSumSource m M N
H : (m ≤ k ∧ k < M) ∧ ∀ (a : Fin { fst := k, snd := blocks_fun }.fst), 1 ≤ blocks_fun a ∧ blocks_fun a < N
⊢ ∀
    (j :
      Fin
        (Composition.length
          { fst := ∑ j : Fin k, blocks_fun j,
              snd :=
                { blocks := ofFn fun a => blocks_fun a,
                  blocks_pos := (_ : ∀ {i : ℕ}, (i ∈ ofFn fun a => blocks_fun a) → 0 < i),
                  blocks_sum := (_ : sum (ofFn fun a => blocks_fun a) = ∑ a : Fin k, blocks_fun a) } }.snd)),
    Composition.blocksFun
        { blocks := ofFn fun a => blocks_fun a, blocks_pos := (_ : ∀ {i : ℕ}, (i ∈ ofFn fun a => blocks_fun a) → 0 < i),
          blocks_sum := (_ : sum (ofFn fun a => blocks_fun a) = ∑ a : Fin k, blocks_fun a) }
        j <
      N
[PROOFSTEP]
intro j
[GOAL]
case hi.mk
𝕜 : 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✝¹
α : Type u_6
inst✝ : AddCommMonoid α
m M N : ℕ
f : (n : ℕ) × (Fin n → ℕ) → α
g : (n : ℕ) × Composition n → α
h : ∀ (e : (n : ℕ) × (Fin n → ℕ)) (he : e ∈ compPartialSumSource m M N), f e = g (compChangeOfVariables m M N e he)
k : ℕ
blocks_fun : Fin k → ℕ
H✝ : { fst := k, snd := blocks_fun } ∈ compPartialSumSource m M N
H : (m ≤ k ∧ k < M) ∧ ∀ (a : Fin { fst := k, snd := blocks_fun }.fst), 1 ≤ blocks_fun a ∧ blocks_fun a < N
j :
  Fin
    (Composition.length
      { fst := ∑ j : Fin k, blocks_fun j,
          snd :=
            { blocks := ofFn fun a => blocks_fun a,
              blocks_pos := (_ : ∀ {i : ℕ}, (i ∈ ofFn fun a => blocks_fun a) → 0 < i),
              blocks_sum := (_ : sum (ofFn fun a => blocks_fun a) = ∑ a : Fin k, blocks_fun a) } }.snd)
⊢ Composition.blocksFun
      { blocks := ofFn fun a => blocks_fun a, blocks_pos := (_ : ∀ {i : ℕ}, (i ∈ ofFn fun a => blocks_fun a) → 0 < i),
        blocks_sum := (_ : sum (ofFn fun a => blocks_fun a) = ∑ a : Fin k, blocks_fun a) }
      j <
    N
[PROOFSTEP]
simp only [Composition.blocksFun, (H.right _).right, List.nthLe_ofFn]
[GOAL]
case hi.mk
𝕜 : 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✝¹
α : Type u_6
inst✝ : AddCommMonoid α
m M N : ℕ
f : (n : ℕ) × (Fin n → ℕ) → α
g : (n : ℕ) × Composition n → α
h : ∀ (e : (n : ℕ) × (Fin n → ℕ)) (he : e ∈ compPartialSumSource m M N), f e = g (compChangeOfVariables m M N e he)
k : ℕ
blocks_fun : Fin k → ℕ
H✝ : { fst := k, snd := blocks_fun } ∈ compPartialSumSource m M N
H : (m ≤ k ∧ k < M) ∧ ∀ (a : Fin { fst := k, snd := blocks_fun }.fst), 1 ≤ blocks_fun a ∧ blocks_fun a < N
j :
  Fin
    (Composition.length
      { fst := ∑ j : Fin k, blocks_fun j,
          snd :=
            { blocks := ofFn fun a => blocks_fun a,
              blocks_pos := (_ : ∀ {i : ℕ}, (i ∈ ofFn fun a => blocks_fun a) → 0 < i),
              blocks_sum := (_ : sum (ofFn fun a => blocks_fun a) = ∑ a : Fin k, blocks_fun a) } }.snd)
⊢ nthLe (ofFn fun a => blocks_fun a) ↑j
      (_ :
        ↑j <
          Composition.length
            { blocks := ofFn fun a => blocks_fun a,
              blocks_pos := (_ : ∀ {i : ℕ}, (i ∈ ofFn fun a => blocks_fun a) → 0 < i),
              blocks_sum := (_ : sum (ofFn fun a => blocks_fun a) = ∑ a : Fin k, blocks_fun a) }) <
    N
[PROOFSTEP]
convert (H.right ⟨j, ?_⟩).right
[GOAL]
case h.e'_3
𝕜 : 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✝¹
α : Type u_6
inst✝ : AddCommMonoid α
m M N : ℕ
f : (n : ℕ) × (Fin n → ℕ) → α
g : (n : ℕ) × Composition n → α
h : ∀ (e : (n : ℕ) × (Fin n → ℕ)) (he : e ∈ compPartialSumSource m M N), f e = g (compChangeOfVariables m M N e he)
k : ℕ
blocks_fun : Fin k → ℕ
H✝ : { fst := k, snd := blocks_fun } ∈ compPartialSumSource m M N
H : (m ≤ k ∧ k < M) ∧ ∀ (a : Fin { fst := k, snd := blocks_fun }.fst), 1 ≤ blocks_fun a ∧ blocks_fun a < N
j :
  Fin
    (Composition.length
      { fst := ∑ j : Fin k, blocks_fun j,
          snd :=
            { blocks := ofFn fun a => blocks_fun a,
              blocks_pos := (_ : ∀ {i : ℕ}, (i ∈ ofFn fun a => blocks_fun a) → 0 < i),
              blocks_sum := (_ : sum (ofFn fun a => blocks_fun a) = ∑ a : Fin k, blocks_fun a) } }.snd)
⊢ nthLe (ofFn fun a => blocks_fun a) ↑j
      (_ :
        ↑j <
          Composition.length
            { blocks := ofFn fun a => blocks_fun a,
              blocks_pos := (_ : ∀ {i : ℕ}, (i ∈ ofFn fun a => blocks_fun a) → 0 < i),
              blocks_sum := (_ : sum (ofFn fun a => blocks_fun a) = ∑ a : Fin k, blocks_fun a) }) =
    blocks_fun { val := ↑j, isLt := ?hi.mk }
[PROOFSTEP]
convert List.nthLe_ofFn _ _ using 2
[GOAL]
case h.e'_2.h.e'_3
𝕜 : 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✝¹
α : Type u_6
inst✝ : AddCommMonoid α
m M N : ℕ
f : (n : ℕ) × (Fin n → ℕ) → α
g : (n : ℕ) × Composition n → α
h : ∀ (e : (n : ℕ) × (Fin n → ℕ)) (he : e ∈ compPartialSumSource m M N), f e = g (compChangeOfVariables m M N e he)
k : ℕ
blocks_fun : Fin k → ℕ
H✝ : { fst := k, snd := blocks_fun } ∈ compPartialSumSource m M N
H : (m ≤ k ∧ k < M) ∧ ∀ (a : Fin { fst := k, snd := blocks_fun }.fst), 1 ≤ blocks_fun a ∧ blocks_fun a < N
j :
  Fin
    (Composition.length
      { fst := ∑ j : Fin k, blocks_fun j,
          snd :=
            { blocks := ofFn fun a => blocks_fun a,
              blocks_pos := (_ : ∀ {i : ℕ}, (i ∈ ofFn fun a => blocks_fun a) → 0 < i),
              blocks_sum := (_ : sum (ofFn fun a => blocks_fun a) = ∑ a : Fin k, blocks_fun a) } }.snd)
⊢ ↑j = ↑{ val := ↑j, isLt := ?hi.mk }
[PROOFSTEP]
rfl
[GOAL]
case hi.mk
𝕜 : 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✝¹
α : Type u_6
inst✝ : AddCommMonoid α
m M N : ℕ
f : (n : ℕ) × (Fin n → ℕ) → α
g : (n : ℕ) × Composition n → α
h : ∀ (e : (n : ℕ) × (Fin n → ℕ)) (he : e ∈ compPartialSumSource m M N), f e = g (compChangeOfVariables m M N e he)
k : ℕ
blocks_fun : Fin k → ℕ
H✝ : { fst := k, snd := blocks_fun } ∈ compPartialSumSource m M N
H : (m ≤ k ∧ k < M) ∧ ∀ (a : Fin { fst := k, snd := blocks_fun }.fst), 1 ≤ blocks_fun a ∧ blocks_fun a < N
j :
  Fin
    (Composition.length
      { fst := ∑ j : Fin k, blocks_fun j,
          snd :=
            { blocks := ofFn fun a => blocks_fun a,
              blocks_pos := (_ : ∀ {i : ℕ}, (i ∈ ofFn fun a => blocks_fun a) → 0 < i),
              blocks_sum := (_ : sum (ofFn fun a => blocks_fun a) = ∑ a : Fin k, blocks_fun a) } }.snd)
⊢ ↑j < { fst := k, snd := blocks_fun }.fst
[PROOFSTEP]
apply j.prop.trans_eq
[GOAL]
case hi.mk
𝕜 : 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✝¹
α : Type u_6
inst✝ : AddCommMonoid α
m M N : ℕ
f : (n : ℕ) × (Fin n → ℕ) → α
g : (n : ℕ) × Composition n → α
h : ∀ (e : (n : ℕ) × (Fin n → ℕ)) (he : e ∈ compPartialSumSource m M N), f e = g (compChangeOfVariables m M N e he)
k : ℕ
blocks_fun : Fin k → ℕ
H✝ : { fst := k, snd := blocks_fun } ∈ compPartialSumSource m M N
H : (m ≤ k ∧ k < M) ∧ ∀ (a : Fin { fst := k, snd := blocks_fun }.fst), 1 ≤ blocks_fun a ∧ blocks_fun a < N
j :
  Fin
    (Composition.length
      { fst := ∑ j : Fin k, blocks_fun j,
          snd :=
            { blocks := ofFn fun a => blocks_fun a,
              blocks_pos := (_ : ∀ {i : ℕ}, (i ∈ ofFn fun a => blocks_fun a) → 0 < i),
              blocks_sum := (_ : sum (ofFn fun a => blocks_fun a) = ∑ a : Fin k, blocks_fun a) } }.snd)
⊢ Composition.length
      { fst := ∑ j : Fin k, blocks_fun j,
          snd :=
            { blocks := ofFn fun a => blocks_fun a,
              blocks_pos := (_ : ∀ {i : ℕ}, (i ∈ ofFn fun a => blocks_fun a) → 0 < i),
              blocks_sum := (_ : sum (ofFn fun a => blocks_fun a) = ∑ a : Fin k, blocks_fun a) } }.snd =
    { fst := k, snd := blocks_fun }.fst
[PROOFSTEP]
simp [Composition.length]
  -- 2 - show that the composition gives the `comp_along_composition` application
[GOAL]
case h
𝕜 : 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
α : Type u_6
inst✝ : AddCommMonoid α
m M N : ℕ
f : (n : ℕ) × (Fin n → ℕ) → α
g : (n : ℕ) × Composition n → α
h : ∀ (e : (n : ℕ) × (Fin n → ℕ)) (he : e ∈ compPartialSumSource m M N), f e = g (compChangeOfVariables m M N e he)
⊢ ∀ (a : (n : ℕ) × (Fin n → ℕ)) (ha : a ∈ compPartialSumSource m M N), f a = g (compChangeOfVariables m M N a ha)
[PROOFSTEP]
rintro ⟨k, blocks_fun⟩ H
[GOAL]
case h.mk
𝕜 : 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✝
α : Type u_6
inst✝ : AddCommMonoid α
m M N : ℕ
f : (n : ℕ) × (Fin n → ℕ) → α
g : (n : ℕ) × Composition n → α
h : ∀ (e : (n : ℕ) × (Fin n → ℕ)) (he : e ∈ compPartialSumSource m M N), f e = g (compChangeOfVariables m M N e he)
k : ℕ
blocks_fun : Fin k → ℕ
H : { fst := k, snd := blocks_fun } ∈ compPartialSumSource m M N
⊢ f { fst := k, snd := blocks_fun } = g (compChangeOfVariables m M N { fst := k, snd := blocks_fun } H)
[PROOFSTEP]
rw [h]
  -- 3 - show that the map is injective
[GOAL]
case i_inj
𝕜 : 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
α : Type u_6
inst✝ : AddCommMonoid α
m M N : ℕ
f : (n : ℕ) × (Fin n → ℕ) → α
g : (n : ℕ) × Composition n → α
h : ∀ (e : (n : ℕ) × (Fin n → ℕ)) (he : e ∈ compPartialSumSource m M N), f e = g (compChangeOfVariables m M N e he)
⊢ ∀ (a₁ a₂ : (n : ℕ) × (Fin n → ℕ)) (ha₁ : a₁ ∈ compPartialSumSource m M N) (ha₂ : a₂ ∈ compPartialSumSource m M N),
    compChangeOfVariables m M N a₁ ha₁ = compChangeOfVariables m M N a₂ ha₂ → a₁ = a₂
[PROOFSTEP]
rintro ⟨k, blocks_fun⟩ ⟨k', blocks_fun'⟩ H H' heq
[GOAL]
case i_inj.mk.mk
𝕜 : 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✝
α : Type u_6
inst✝ : AddCommMonoid α
m M N : ℕ
f : (n : ℕ) × (Fin n → ℕ) → α
g : (n : ℕ) × Composition n → α
h : ∀ (e : (n : ℕ) × (Fin n → ℕ)) (he : e ∈ compPartialSumSource m M N), f e = g (compChangeOfVariables m M N e he)
k : ℕ
blocks_fun : Fin k → ℕ
k' : ℕ
blocks_fun' : Fin k' → ℕ
H : { fst := k, snd := blocks_fun } ∈ compPartialSumSource m M N
H' : { fst := k', snd := blocks_fun' } ∈ compPartialSumSource m M N
heq :
  compChangeOfVariables m M N { fst := k, snd := blocks_fun } H =
    compChangeOfVariables m M N { fst := k', snd := blocks_fun' } H'
⊢ { fst := k, snd := blocks_fun } = { fst := k', snd := blocks_fun' }
[PROOFSTEP]
obtain rfl : k = k' := by
  have := (compChangeOfVariables_length m M N H).symm
  rwa [heq, compChangeOfVariables_length] at this 
[GOAL]
𝕜 : 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✝
α : Type u_6
inst✝ : AddCommMonoid α
m M N : ℕ
f : (n : ℕ) × (Fin n → ℕ) → α
g : (n : ℕ) × Composition n → α
h : ∀ (e : (n : ℕ) × (Fin n → ℕ)) (he : e ∈ compPartialSumSource m M N), f e = g (compChangeOfVariables m M N e he)
k : ℕ
blocks_fun : Fin k → ℕ
k' : ℕ
blocks_fun' : Fin k' → ℕ
H : { fst := k, snd := blocks_fun } ∈ compPartialSumSource m M N
H' : { fst := k', snd := blocks_fun' } ∈ compPartialSumSource m M N
heq :
  compChangeOfVariables m M N { fst := k, snd := blocks_fun } H =
    compChangeOfVariables m M N { fst := k', snd := blocks_fun' } H'
⊢ k = k'
[PROOFSTEP]
have := (compChangeOfVariables_length m M N H).symm
[GOAL]
𝕜 : 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✝
α : Type u_6
inst✝ : AddCommMonoid α
m M N : ℕ
f : (n : ℕ) × (Fin n → ℕ) → α
g : (n : ℕ) × Composition n → α
h : ∀ (e : (n : ℕ) × (Fin n → ℕ)) (he : e ∈ compPartialSumSource m M N), f e = g (compChangeOfVariables m M N e he)
k : ℕ
blocks_fun : Fin k → ℕ
k' : ℕ
blocks_fun' : Fin k' → ℕ
H : { fst := k, snd := blocks_fun } ∈ compPartialSumSource m M N
H' : { fst := k', snd := blocks_fun' } ∈ compPartialSumSource m M N
heq :
  compChangeOfVariables m M N { fst := k, snd := blocks_fun } H =
    compChangeOfVariables m M N { fst := k', snd := blocks_fun' } H'
this :
  { fst := k, snd := blocks_fun }.fst =
    Composition.length (compChangeOfVariables m M N { fst := k, snd := blocks_fun } H).snd
⊢ k = k'
[PROOFSTEP]
rwa [heq, compChangeOfVariables_length] at this 
[GOAL]
case i_inj.mk.mk
𝕜 : 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✝
α : Type u_6
inst✝ : AddCommMonoid α
m M N : ℕ
f : (n : ℕ) × (Fin n → ℕ) → α
g : (n : ℕ) × Composition n → α
h : ∀ (e : (n : ℕ) × (Fin n → ℕ)) (he : e ∈ compPartialSumSource m M N), f e = g (compChangeOfVariables m M N e he)
k : ℕ
blocks_fun : Fin k → ℕ
H : { fst := k, snd := blocks_fun } ∈ compPartialSumSource m M N
blocks_fun' : Fin k → ℕ
H' : { fst := k, snd := blocks_fun' } ∈ compPartialSumSource m M N
heq :
  compChangeOfVariables m M N { fst := k, snd := blocks_fun } H =
    compChangeOfVariables m M N { fst := k, snd := blocks_fun' } H'
⊢ { fst := k, snd := blocks_fun } = { fst := k, snd := blocks_fun' }
[PROOFSTEP]
congr
[GOAL]
case i_inj.mk.mk.e_snd
𝕜 : 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✝
α : Type u_6
inst✝ : AddCommMonoid α
m M N : ℕ
f : (n : ℕ) × (Fin n → ℕ) → α
g : (n : ℕ) × Composition n → α
h : ∀ (e : (n : ℕ) × (Fin n → ℕ)) (he : e ∈ compPartialSumSource m M N), f e = g (compChangeOfVariables m M N e he)
k : ℕ
blocks_fun : Fin k → ℕ
H : { fst := k, snd := blocks_fun } ∈ compPartialSumSource m M N
blocks_fun' : Fin k → ℕ
H' : { fst := k, snd := blocks_fun' } ∈ compPartialSumSource m M N
heq :
  compChangeOfVariables m M N { fst := k, snd := blocks_fun } H =
    compChangeOfVariables m M N { fst := k, snd := blocks_fun' } H'
⊢ blocks_fun = blocks_fun'
[PROOFSTEP]
funext i
[GOAL]
case i_inj.mk.mk.e_snd.h
𝕜 : 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✝
α : Type u_6
inst✝ : AddCommMonoid α
m M N : ℕ
f : (n : ℕ) × (Fin n → ℕ) → α
g : (n : ℕ) × Composition n → α
h : ∀ (e : (n : ℕ) × (Fin n → ℕ)) (he : e ∈ compPartialSumSource m M N), f e = g (compChangeOfVariables m M N e he)
k : ℕ
blocks_fun : Fin k → ℕ
H : { fst := k, snd := blocks_fun } ∈ compPartialSumSource m M N
blocks_fun' : Fin k → ℕ
H' : { fst := k, snd := blocks_fun' } ∈ compPartialSumSource m M N
heq :
  compChangeOfVariables m M N { fst := k, snd := blocks_fun } H =
    compChangeOfVariables m M N { fst := k, snd := blocks_fun' } H'
i : Fin k
⊢ blocks_fun i = blocks_fun' i
[PROOFSTEP]
calc
  blocks_fun i = (compChangeOfVariables m M N _ H).2.blocksFun _ := (compChangeOfVariables_blocksFun m M N H i).symm
  _ = (compChangeOfVariables m M N _ H').2.blocksFun _ := by
    apply Composition.blocksFun_congr <;>
      first
      | rw [heq]
      | rfl
  _ = blocks_fun' i := compChangeOfVariables_blocksFun m M N H' i
[GOAL]
𝕜 : 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✝
α : Type u_6
inst✝ : AddCommMonoid α
m M N : ℕ
f : (n : ℕ) × (Fin n → ℕ) → α
g : (n : ℕ) × Composition n → α
h : ∀ (e : (n : ℕ) × (Fin n → ℕ)) (he : e ∈ compPartialSumSource m M N), f e = g (compChangeOfVariables m M N e he)
k : ℕ
blocks_fun : Fin k → ℕ
H : { fst := k, snd := blocks_fun } ∈ compPartialSumSource m M N
blocks_fun' : Fin k → ℕ
H' : { fst := k, snd := blocks_fun' } ∈ compPartialSumSource m M N
heq :
  compChangeOfVariables m M N { fst := k, snd := blocks_fun } H =
    compChangeOfVariables m M N { fst := k, snd := blocks_fun' } H'
i : Fin k
⊢ Composition.blocksFun (compChangeOfVariables m M N { fst := k, snd := blocks_fun } H).snd
      { val := ↑i,
        isLt := (_ : ↑i < Composition.length (compChangeOfVariables m M N { fst := k, snd := blocks_fun } H).snd) } =
    Composition.blocksFun (compChangeOfVariables m M N { fst := k, snd := blocks_fun' } H').snd
      { val := ↑i,
        isLt := (_ : ↑i < Composition.length (compChangeOfVariables m M N { fst := k, snd := blocks_fun' } H').snd) }
[PROOFSTEP]
apply Composition.blocksFun_congr
[GOAL]
case hn
𝕜 : 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✝
α : Type u_6
inst✝ : AddCommMonoid α
m M N : ℕ
f : (n : ℕ) × (Fin n → ℕ) → α
g : (n : ℕ) × Composition n → α
h : ∀ (e : (n : ℕ) × (Fin n → ℕ)) (he : e ∈ compPartialSumSource m M N), f e = g (compChangeOfVariables m M N e he)
k : ℕ
blocks_fun : Fin k → ℕ
H : { fst := k, snd := blocks_fun } ∈ compPartialSumSource m M N
blocks_fun' : Fin k → ℕ
H' : { fst := k, snd := blocks_fun' } ∈ compPartialSumSource m M N
heq :
  compChangeOfVariables m M N { fst := k, snd := blocks_fun } H =
    compChangeOfVariables m M N { fst := k, snd := blocks_fun' } H'
i : Fin k
⊢ (compChangeOfVariables m M N { fst := k, snd := blocks_fun } H).fst =
    (compChangeOfVariables m M N { fst := k, snd := blocks_fun' } H').fst
[PROOFSTEP]
first
| rw [heq]
| rfl
[GOAL]
case hn
𝕜 : 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✝
α : Type u_6
inst✝ : AddCommMonoid α
m M N : ℕ
f : (n : ℕ) × (Fin n → ℕ) → α
g : (n : ℕ) × Composition n → α
h : ∀ (e : (n : ℕ) × (Fin n → ℕ)) (he : e ∈ compPartialSumSource m M N), f e = g (compChangeOfVariables m M N e he)
k : ℕ
blocks_fun : Fin k → ℕ
H : { fst := k, snd := blocks_fun } ∈ compPartialSumSource m M N
blocks_fun' : Fin k → ℕ
H' : { fst := k, snd := blocks_fun' } ∈ compPartialSumSource m M N
heq :
  compChangeOfVariables m M N { fst := k, snd := blocks_fun } H =
    compChangeOfVariables m M N { fst := k, snd := blocks_fun' } H'
i : Fin k
⊢ (compChangeOfVariables m M N { fst := k, snd := blocks_fun } H).fst =
    (compChangeOfVariables m M N { fst := k, snd := blocks_fun' } H').fst
[PROOFSTEP]
rw [heq]
[GOAL]
case hc
𝕜 : 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✝
α : Type u_6
inst✝ : AddCommMonoid α
m M N : ℕ
f : (n : ℕ) × (Fin n → ℕ) → α
g : (n : ℕ) × Composition n → α
h : ∀ (e : (n : ℕ) × (Fin n → ℕ)) (he : e ∈ compPartialSumSource m M N), f e = g (compChangeOfVariables m M N e he)
k : ℕ
blocks_fun : Fin k → ℕ
H : { fst := k, snd := blocks_fun } ∈ compPartialSumSource m M N
blocks_fun' : Fin k → ℕ
H' : { fst := k, snd := blocks_fun' } ∈ compPartialSumSource m M N
heq :
  compChangeOfVariables m M N { fst := k, snd := blocks_fun } H =
    compChangeOfVariables m M N { fst := k, snd := blocks_fun' } H'
i : Fin k
⊢ (compChangeOfVariables m M N { fst := k, snd := blocks_fun } H).snd.blocks =
    (compChangeOfVariables m M N { fst := k, snd := blocks_fun' } H').snd.blocks
[PROOFSTEP]
first
| rw [heq]
| rfl
[GOAL]
case hc
𝕜 : 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✝
α : Type u_6
inst✝ : AddCommMonoid α
m M N : ℕ
f : (n : ℕ) × (Fin n → ℕ) → α
g : (n : ℕ) × Composition n → α
h : ∀ (e : (n : ℕ) × (Fin n → ℕ)) (he : e ∈ compPartialSumSource m M N), f e = g (compChangeOfVariables m M N e he)
k : ℕ
blocks_fun : Fin k → ℕ
H : { fst := k, snd := blocks_fun } ∈ compPartialSumSource m M N
blocks_fun' : Fin k → ℕ
H' : { fst := k, snd := blocks_fun' } ∈ compPartialSumSource m M N
heq :
  compChangeOfVariables m M N { fst := k, snd := blocks_fun } H =
    compChangeOfVariables m M N { fst := k, snd := blocks_fun' } H'
i : Fin k
⊢ (compChangeOfVariables m M N { fst := k, snd := blocks_fun } H).snd.blocks =
    (compChangeOfVariables m M N { fst := k, snd := blocks_fun' } H').snd.blocks
[PROOFSTEP]
rw [heq]
[GOAL]
case hi
𝕜 : 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✝
α : Type u_6
inst✝ : AddCommMonoid α
m M N : ℕ
f : (n : ℕ) × (Fin n → ℕ) → α
g : (n : ℕ) × Composition n → α
h : ∀ (e : (n : ℕ) × (Fin n → ℕ)) (he : e ∈ compPartialSumSource m M N), f e = g (compChangeOfVariables m M N e he)
k : ℕ
blocks_fun : Fin k → ℕ
H : { fst := k, snd := blocks_fun } ∈ compPartialSumSource m M N
blocks_fun' : Fin k → ℕ
H' : { fst := k, snd := blocks_fun' } ∈ compPartialSumSource m M N
heq :
  compChangeOfVariables m M N { fst := k, snd := blocks_fun } H =
    compChangeOfVariables m M N { fst := k, snd := blocks_fun' } H'
i : Fin k
⊢ ↑{ val := ↑i,
        isLt := (_ : ↑i < Composition.length (compChangeOfVariables m M N { fst := k, snd := blocks_fun } H).snd) } =
    ↑{ val := ↑i,
        isLt := (_ : ↑i < Composition.length (compChangeOfVariables m M N { fst := k, snd := blocks_fun' } H').snd) }
[PROOFSTEP]
first
| rw [heq]
| rfl
[GOAL]
case hi
𝕜 : 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✝
α : Type u_6
inst✝ : AddCommMonoid α
m M N : ℕ
f : (n : ℕ) × (Fin n → ℕ) → α
g : (n : ℕ) × Composition n → α
h : ∀ (e : (n : ℕ) × (Fin n → ℕ)) (he : e ∈ compPartialSumSource m M N), f e = g (compChangeOfVariables m M N e he)
k : ℕ
blocks_fun : Fin k → ℕ
H : { fst := k, snd := blocks_fun } ∈ compPartialSumSource m M N
blocks_fun' : Fin k → ℕ
H' : { fst := k, snd := blocks_fun' } ∈ compPartialSumSource m M N
heq :
  compChangeOfVariables m M N { fst := k, snd := blocks_fun } H =
    compChangeOfVariables m M N { fst := k, snd := blocks_fun' } H'
i : Fin k
⊢ ↑{ val := ↑i,
        isLt := (_ : ↑i < Composition.length (compChangeOfVariables m M N { fst := k, snd := blocks_fun } H).snd) } =
    ↑{ val := ↑i,
        isLt := (_ : ↑i < Composition.length (compChangeOfVariables m M N { fst := k, snd := blocks_fun' } H').snd) }
[PROOFSTEP]
rw [heq]
[GOAL]
case hi
𝕜 : 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✝
α : Type u_6
inst✝ : AddCommMonoid α
m M N : ℕ
f : (n : ℕ) × (Fin n → ℕ) → α
g : (n : ℕ) × Composition n → α
h : ∀ (e : (n : ℕ) × (Fin n → ℕ)) (he : e ∈ compPartialSumSource m M N), f e = g (compChangeOfVariables m M N e he)
k : ℕ
blocks_fun : Fin k → ℕ
H : { fst := k, snd := blocks_fun } ∈ compPartialSumSource m M N
blocks_fun' : Fin k → ℕ
H' : { fst := k, snd := blocks_fun' } ∈ compPartialSumSource m M N
heq :
  compChangeOfVariables m M N { fst := k, snd := blocks_fun } H =
    compChangeOfVariables m M N { fst := k, snd := blocks_fun' } H'
i : Fin k
⊢ ↑{ val := ↑i,
        isLt := (_ : ↑i < Composition.length (compChangeOfVariables m M N { fst := k, snd := blocks_fun } H).snd) } =
    ↑{ val := ↑i,
        isLt := (_ : ↑i < Composition.length (compChangeOfVariables m M N { fst := k, snd := blocks_fun' } H').snd) }
[PROOFSTEP]
rfl
[GOAL]
case i_surj
𝕜 : 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
α : Type u_6
inst✝ : AddCommMonoid α
m M N : ℕ
f : (n : ℕ) × (Fin n → ℕ) → α
g : (n : ℕ) × Composition n → α
h : ∀ (e : (n : ℕ) × (Fin n → ℕ)) (he : e ∈ compPartialSumSource m M N), f e = g (compChangeOfVariables m M N e he)
⊢ ∀ (b : (n : ℕ) × Composition n), b ∈ compPartialSumTarget m M N → ∃ a ha, b = compChangeOfVariables m M N a ha
[PROOFSTEP]
intro i hi
[GOAL]
case i_surj
𝕜 : 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
α : Type u_6
inst✝ : AddCommMonoid α
m M N : ℕ
f : (n : ℕ) × (Fin n → ℕ) → α
g : (n : ℕ) × Composition n → α
h : ∀ (e : (n : ℕ) × (Fin n → ℕ)) (he : e ∈ compPartialSumSource m M N), f e = g (compChangeOfVariables m M N e he)
i : (n : ℕ) × Composition n
hi : i ∈ compPartialSumTarget m M N
⊢ ∃ a ha, i = compChangeOfVariables m M N a ha
[PROOFSTEP]
apply compPartialSumTargetSet_image_compPartialSumSource m M N i
[GOAL]
case i_surj
𝕜 : 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
α : Type u_6
inst✝ : AddCommMonoid α
m M N : ℕ
f : (n : ℕ) × (Fin n → ℕ) → α
g : (n : ℕ) × Composition n → α
h : ∀ (e : (n : ℕ) × (Fin n → ℕ)) (he : e ∈ compPartialSumSource m M N), f e = g (compChangeOfVariables m M N e he)
i : (n : ℕ) × Composition n
hi : i ∈ compPartialSumTarget m M N
⊢ i ∈ compPartialSumTargetSet m M N
[PROOFSTEP]
simpa [compPartialSumTarget] using hi
[GOAL]
𝕜 : 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
⊢ Tendsto (fun N => compPartialSumTarget 0 N N) atTop atTop
[PROOFSTEP]
apply Monotone.tendsto_atTop_finset
[GOAL]
case h
𝕜 : 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
⊢ Monotone fun N => compPartialSumTarget 0 N N
[PROOFSTEP]
intro m n hmn a ha
[GOAL]
case h
𝕜 : 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
m n : ℕ
hmn : m ≤ n
a : (n : ℕ) × Composition n
ha : a ∈ (fun N => compPartialSumTarget 0 N N) m
⊢ a ∈ (fun N => compPartialSumTarget 0 N N) n
[PROOFSTEP]
have : ∀ i, i < m → i < n := fun i hi => lt_of_lt_of_le hi hmn
[GOAL]
case h
𝕜 : 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
m n : ℕ
hmn : m ≤ n
a : (n : ℕ) × Composition n
ha : a ∈ (fun N => compPartialSumTarget 0 N N) m
this : ∀ (i : ℕ), i < m → i < n
⊢ a ∈ (fun N => compPartialSumTarget 0 N N) n
[PROOFSTEP]
aesop
[GOAL]
case h'
𝕜 : 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
⊢ ∀ (x : (n : ℕ) × Composition n), ∃ n, x ∈ compPartialSumTarget 0 n n
[PROOFSTEP]
rintro ⟨n, c⟩
[GOAL]
case h'.mk
𝕜 : 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 : ℕ
c : Composition n
⊢ ∃ n_1, { fst := n, snd := c } ∈ compPartialSumTarget 0 n_1 n_1
[PROOFSTEP]
simp only [mem_compPartialSumTarget_iff]
[GOAL]
case h'.mk
𝕜 : 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 : ℕ
c : Composition n
⊢ ∃ n_1,
    0 ≤ Composition.length c ∧
      Composition.length c < n_1 ∧
        ∀ (j : Fin (Composition.length { fst := n, snd := c }.snd)), Composition.blocksFun c j < n_1
[PROOFSTEP]
obtain ⟨n, hn⟩ : BddAbove ((Finset.univ.image fun i : Fin c.length => c.blocksFun i) : Set ℕ) := Finset.bddAbove _
[GOAL]
case h'.mk.intro
𝕜 : 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✝ : ℕ
c : Composition n✝
n : ℕ
hn : n ∈ upperBounds ↑(Finset.image (fun i => Composition.blocksFun c i) Finset.univ)
⊢ ∃ n,
    0 ≤ Composition.length c ∧
      Composition.length c < n ∧
        ∀ (j : Fin (Composition.length { fst := n✝, snd := c }.snd)), Composition.blocksFun c j < n
[PROOFSTEP]
refine'
  ⟨max n c.length + 1, bot_le, lt_of_le_of_lt (le_max_right n c.length) (lt_add_one _), fun j =>
    lt_of_le_of_lt (le_trans _ (le_max_left _ _)) (lt_add_one _)⟩
[GOAL]
case h'.mk.intro
𝕜 : 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✝ : ℕ
c : Composition n✝
n : ℕ
hn : n ∈ upperBounds ↑(Finset.image (fun i => Composition.blocksFun c i) Finset.univ)
j : Fin (Composition.length { fst := n✝, snd := c }.snd)
⊢ Composition.blocksFun c j ≤ n
[PROOFSTEP]
apply hn
[GOAL]
case h'.mk.intro.a
𝕜 : 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✝ : ℕ
c : Composition n✝
n : ℕ
hn : n ∈ upperBounds ↑(Finset.image (fun i => Composition.blocksFun c i) Finset.univ)
j : Fin (Composition.length { fst := n✝, snd := c }.snd)
⊢ Composition.blocksFun c j ∈ ↑(Finset.image (fun i => Composition.blocksFun c i) Finset.univ)
[PROOFSTEP]
simp only [Finset.mem_image_of_mem, Finset.mem_coe, Finset.mem_univ]
[GOAL]
𝕜 : 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
q : FormalMultilinearSeries 𝕜 F G
p : FormalMultilinearSeries 𝕜 E F
N : ℕ
z : E
⊢ partialSum q N (∑ i in Finset.Ico 1 N, ↑(p i) fun _j => z) =
    ∑ i in compPartialSumTarget 0 N N, ↑(compAlongComposition q p i.snd) fun _j => z
[PROOFSTEP]
suffices H :
  (∑ n in Finset.range N,
      ∑ r in Fintype.piFinset fun i : Fin n => Finset.Ico 1 N, q n fun i : Fin n => p (r i) fun _j => z) =
    ∑ i in compPartialSumTarget 0 N N, q.compAlongComposition p i.2 fun _j => z
[GOAL]
𝕜 : 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✝
q : FormalMultilinearSeries 𝕜 F G
p : FormalMultilinearSeries 𝕜 E F
N : ℕ
z : E
H :
  (∑ n in Finset.range N, ∑ r in Fintype.piFinset fun i => Finset.Ico 1 N, ↑(q n) fun i => ↑(p (r i)) fun _j => z) =
    ∑ i in compPartialSumTarget 0 N N, ↑(compAlongComposition q p i.snd) fun _j => z
⊢ partialSum q N (∑ i in Finset.Ico 1 N, ↑(p i) fun _j => z) =
    ∑ i in compPartialSumTarget 0 N N, ↑(compAlongComposition q p i.snd) fun _j => z
[PROOFSTEP]
simpa only [FormalMultilinearSeries.partialSum, ContinuousMultilinearMap.map_sum_finset] using H
[GOAL]
case H
𝕜 : 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
q : FormalMultilinearSeries 𝕜 F G
p : FormalMultilinearSeries 𝕜 E F
N : ℕ
z : E
⊢ (∑ n in Finset.range N, ∑ r in Fintype.piFinset fun i => Finset.Ico 1 N, ↑(q n) fun i => ↑(p (r i)) fun _j => z) =
    ∑ i in compPartialSumTarget 0 N N, ↑(compAlongComposition q p i.snd) fun _j => z
[PROOFSTEP]
rw [Finset.range_eq_Ico, Finset.sum_sigma']
  -- use `comp_change_of_variables_sum`, saying that this change of variables respects sums
[GOAL]
case H
𝕜 : 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
q : FormalMultilinearSeries 𝕜 F G
p : FormalMultilinearSeries 𝕜 E F
N : ℕ
z : E
⊢ (∑ x in Finset.sigma (Finset.Ico 0 N) fun n => Fintype.piFinset fun i => Finset.Ico 1 N,
      ↑(q x.fst) fun i => ↑(p (Sigma.snd x i)) fun _j => z) =
    ∑ i in compPartialSumTarget 0 N N, ↑(compAlongComposition q p i.snd) fun _j => z
[PROOFSTEP]
apply compChangeOfVariables_sum 0 N N
[GOAL]
case H.h
𝕜 : 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
q : FormalMultilinearSeries 𝕜 F G
p : FormalMultilinearSeries 𝕜 E F
N : ℕ
z : E
⊢ ∀ (e : (n : ℕ) × (Fin n → ℕ)) (he : e ∈ compPartialSumSource 0 N N),
    (↑(q e.fst) fun i => ↑(p (Sigma.snd e i)) fun _j => z) =
      ↑(compAlongComposition q p (compChangeOfVariables 0 N N e he).snd) fun _j => z
[PROOFSTEP]
rintro ⟨k, blocks_fun⟩ H
[GOAL]
case H.h.mk
𝕜 : 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✝
q : FormalMultilinearSeries 𝕜 F G
p : FormalMultilinearSeries 𝕜 E F
N : ℕ
z : E
k : ℕ
blocks_fun : Fin k → ℕ
H : { fst := k, snd := blocks_fun } ∈ compPartialSumSource 0 N N
⊢ (↑(q { fst := k, snd := blocks_fun }.fst) fun i => ↑(p (Sigma.snd { fst := k, snd := blocks_fun } i)) fun _j => z) =
    ↑(compAlongComposition q p (compChangeOfVariables 0 N N { fst := k, snd := blocks_fun } H).snd) fun _j => z
[PROOFSTEP]
apply congr _ (compChangeOfVariables_length 0 N N H).symm
[GOAL]
case H.h.mk
𝕜 : 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✝
q : FormalMultilinearSeries 𝕜 F G
p : FormalMultilinearSeries 𝕜 E F
N : ℕ
z : E
k : ℕ
blocks_fun : Fin k → ℕ
H : { fst := k, snd := blocks_fun } ∈ compPartialSumSource 0 N N
⊢ ∀ (i : ℕ) (him : i < { fst := k, snd := blocks_fun }.fst)
    (hin : i < Composition.length (compChangeOfVariables 0 N N { fst := k, snd := blocks_fun } H).snd),
    (↑(p (Sigma.snd { fst := k, snd := blocks_fun } { val := i, isLt := him })) fun _j => z) =
      applyComposition p (compChangeOfVariables 0 N N { fst := k, snd := blocks_fun } H).snd (fun _j => z)
        { val := i, isLt := hin }
[PROOFSTEP]
intros
[GOAL]
case H.h.mk
𝕜 : 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✝
q : FormalMultilinearSeries 𝕜 F G
p : FormalMultilinearSeries 𝕜 E F
N : ℕ
z : E
k : ℕ
blocks_fun : Fin k → ℕ
H : { fst := k, snd := blocks_fun } ∈ compPartialSumSource 0 N N
i✝ : ℕ
him✝ : i✝ < { fst := k, snd := blocks_fun }.fst
hin✝ : i✝ < Composition.length (compChangeOfVariables 0 N N { fst := k, snd := blocks_fun } H).snd
⊢ (↑(p (Sigma.snd { fst := k, snd := blocks_fun } { val := i✝, isLt := him✝ })) fun _j => z) =
    applyComposition p (compChangeOfVariables 0 N N { fst := k, snd := blocks_fun } H).snd (fun _j => z)
      { val := i✝, isLt := hin✝ }
[PROOFSTEP]
rw [← compChangeOfVariables_blocksFun 0 N N H]
[GOAL]
case H.h.mk
𝕜 : 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✝
q : FormalMultilinearSeries 𝕜 F G
p : FormalMultilinearSeries 𝕜 E F
N : ℕ
z : E
k : ℕ
blocks_fun : Fin k → ℕ
H : { fst := k, snd := blocks_fun } ∈ compPartialSumSource 0 N N
i✝ : ℕ
him✝ : i✝ < { fst := k, snd := blocks_fun }.fst
hin✝ : i✝ < Composition.length (compChangeOfVariables 0 N N { fst := k, snd := blocks_fun } H).snd
⊢ (↑(p
          (Composition.blocksFun (compChangeOfVariables 0 N N { fst := k, snd := blocks_fun } H).snd
            { val := ↑{ val := i✝, isLt := him✝ },
              isLt :=
                (_ :
                  ↑{ val := i✝, isLt := him✝ } <
                    Composition.length (compChangeOfVariables 0 N N { fst := k, snd := blocks_fun } H).snd) }))
      fun _j => z) =
    applyComposition p (compChangeOfVariables 0 N N { fst := k, snd := blocks_fun } H).snd (fun _j => z)
      { val := i✝, isLt := hin✝ }
[PROOFSTEP]
rfl
[GOAL]
𝕜 : 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
g : F → G
f : E → F
q : FormalMultilinearSeries 𝕜 F G
p : FormalMultilinearSeries 𝕜 E F
x : E
hg : HasFPowerSeriesAt g q (f x)
hf : HasFPowerSeriesAt f p x
⊢ HasFPowerSeriesAt (g ∘ f) (FormalMultilinearSeries.comp q p) x
[PROOFSTEP]
rcases hg with ⟨rg, Hg⟩
[GOAL]
case intro
𝕜 : 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
g : F → G
f : E → F
q : FormalMultilinearSeries 𝕜 F G
p : FormalMultilinearSeries 𝕜 E F
x : E
hf : HasFPowerSeriesAt f p x
rg : ℝ≥0∞
Hg : HasFPowerSeriesOnBall g q (f x) rg
⊢ HasFPowerSeriesAt (g ∘ f) (FormalMultilinearSeries.comp q p) x
[PROOFSTEP]
rcases hf with
  ⟨rf, Hf⟩
    -- The terms defining `q.comp p` are geometrically summable in a disk of some radius `r`.
[GOAL]
case intro.intro
𝕜 : 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
g : F → G
f : E → F
q : FormalMultilinearSeries 𝕜 F G
p : FormalMultilinearSeries 𝕜 E F
x : E
rg : ℝ≥0∞
Hg : HasFPowerSeriesOnBall g q (f x) rg
rf : ℝ≥0∞
Hf : HasFPowerSeriesOnBall f p x rf
⊢ HasFPowerSeriesAt (g ∘ f) (FormalMultilinearSeries.comp q p) x
[PROOFSTEP]
rcases q.comp_summable_nnreal p Hg.radius_pos Hf.radius_pos with
  ⟨r, r_pos : 0 < r, hr⟩
    /- We will consider `y` which is smaller than `r` and `rf`, and also small enough that
        `f (x + y)` is close enough to `f x` to be in the disk where `g` is well behaved. Let
        `min (r, rf, δ)` be this new radius.-/
[GOAL]
case intro.intro.intro.intro
𝕜 : 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
g : F → G
f : E → F
q : FormalMultilinearSeries 𝕜 F G
p : FormalMultilinearSeries 𝕜 E F
x : E
rg : ℝ≥0∞
Hg : HasFPowerSeriesOnBall g q (f x) rg
rf : ℝ≥0∞
Hf : HasFPowerSeriesOnBall f p x rf
r : ℝ≥0
r_pos : 0 < r
hr : Summable fun i => ‖compAlongComposition q p i.snd‖₊ * r ^ i.fst
⊢ HasFPowerSeriesAt (g ∘ f) (FormalMultilinearSeries.comp q p) x
[PROOFSTEP]
obtain ⟨δ, δpos, hδ⟩ : ∃ (δ : ℝ≥0∞) (_H : 0 < δ), ∀ {z : E}, z ∈ EMetric.ball x δ → f z ∈ EMetric.ball (f x) rg :=
  by
  have : EMetric.ball (f x) rg ∈ 𝓝 (f x) := EMetric.ball_mem_nhds _ Hg.r_pos
  rcases EMetric.mem_nhds_iff.1 (Hf.analyticAt.continuousAt this) with ⟨δ, δpos, Hδ⟩
  exact ⟨δ, δpos, fun hz => Hδ hz⟩
[GOAL]
𝕜 : 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
g : F → G
f : E → F
q : FormalMultilinearSeries 𝕜 F G
p : FormalMultilinearSeries 𝕜 E F
x : E
rg : ℝ≥0∞
Hg : HasFPowerSeriesOnBall g q (f x) rg
rf : ℝ≥0∞
Hf : HasFPowerSeriesOnBall f p x rf
r : ℝ≥0
r_pos : 0 < r
hr : Summable fun i => ‖compAlongComposition q p i.snd‖₊ * r ^ i.fst
⊢ ∃ δ _H, ∀ {z : E}, z ∈ EMetric.ball x δ → f z ∈ EMetric.ball (f x) rg
[PROOFSTEP]
have : EMetric.ball (f x) rg ∈ 𝓝 (f x) := EMetric.ball_mem_nhds _ Hg.r_pos
[GOAL]
𝕜 : 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
g : F → G
f : E → F
q : FormalMultilinearSeries 𝕜 F G
p : FormalMultilinearSeries 𝕜 E F
x : E
rg : ℝ≥0∞
Hg : HasFPowerSeriesOnBall g q (f x) rg
rf : ℝ≥0∞
Hf : HasFPowerSeriesOnBall f p x rf
r : ℝ≥0
r_pos : 0 < r
hr : Summable fun i => ‖compAlongComposition q p i.snd‖₊ * r ^ i.fst
this : EMetric.ball (f x) rg ∈ 𝓝 (f x)
⊢ ∃ δ _H, ∀ {z : E}, z ∈ EMetric.ball x δ → f z ∈ EMetric.ball (f x) rg
[PROOFSTEP]
rcases EMetric.mem_nhds_iff.1 (Hf.analyticAt.continuousAt this) with ⟨δ, δpos, Hδ⟩
[GOAL]
case intro.intro
𝕜 : 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
g : F → G
f : E → F
q : FormalMultilinearSeries 𝕜 F G
p : FormalMultilinearSeries 𝕜 E F
x : E
rg : ℝ≥0∞
Hg : HasFPowerSeriesOnBall g q (f x) rg
rf : ℝ≥0∞
Hf : HasFPowerSeriesOnBall f p x rf
r : ℝ≥0
r_pos : 0 < r
hr : Summable fun i => ‖compAlongComposition q p i.snd‖₊ * r ^ i.fst
this : EMetric.ball (f x) rg ∈ 𝓝 (f x)
δ : ℝ≥0∞
δpos : δ > 0
Hδ : EMetric.ball x δ ⊆ f ⁻¹' EMetric.ball (f x) rg
⊢ ∃ δ _H, ∀ {z : E}, z ∈ EMetric.ball x δ → f z ∈ EMetric.ball (f x) rg
[PROOFSTEP]
exact ⟨δ, δpos, fun hz => Hδ hz⟩
[GOAL]
case intro.intro.intro.intro.intro.intro
𝕜 : 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
g : F → G
f : E → F
q : FormalMultilinearSeries 𝕜 F G
p : FormalMultilinearSeries 𝕜 E F
x : E
rg : ℝ≥0∞
Hg : HasFPowerSeriesOnBall g q (f x) rg
rf : ℝ≥0∞
Hf : HasFPowerSeriesOnBall f p x rf
r : ℝ≥0
r_pos : 0 < r
hr : Summable fun i => ‖compAlongComposition q p i.snd‖₊ * r ^ i.fst
δ : ℝ≥0∞
δpos : 0 < δ
hδ : ∀ {z : E}, z ∈ EMetric.ball x δ → f z ∈ EMetric.ball (f x) rg
⊢ HasFPowerSeriesAt (g ∘ f) (FormalMultilinearSeries.comp q p) x
[PROOFSTEP]
let rf' := min rf δ
[GOAL]
case intro.intro.intro.intro.intro.intro
𝕜 : 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
g : F → G
f : E → F
q : FormalMultilinearSeries 𝕜 F G
p : FormalMultilinearSeries 𝕜 E F
x : E
rg : ℝ≥0∞
Hg : HasFPowerSeriesOnBall g q (f x) rg
rf : ℝ≥0∞
Hf : HasFPowerSeriesOnBall f p x rf
r : ℝ≥0
r_pos : 0 < r
hr : Summable fun i => ‖compAlongComposition q p i.snd‖₊ * r ^ i.fst
δ : ℝ≥0∞
δpos : 0 < δ
hδ : ∀ {z : E}, z ∈ EMetric.ball x δ → f z ∈ EMetric.ball (f x) rg
rf' : ℝ≥0∞ := min rf δ
⊢ HasFPowerSeriesAt (g ∘ f) (FormalMultilinearSeries.comp q p) x
[PROOFSTEP]
have min_pos : 0 < min rf' r := by
  simp only [r_pos, Hf.r_pos, δpos, lt_min_iff, ENNReal.coe_pos, and_self_iff]
    /- We will show that `g ∘ f` admits the power series `q.comp p` in the disk of
        radius `min (r, rf', δ)`. -/
[GOAL]
𝕜 : 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
g : F → G
f : E → F
q : FormalMultilinearSeries 𝕜 F G
p : FormalMultilinearSeries 𝕜 E F
x : E
rg : ℝ≥0∞
Hg : HasFPowerSeriesOnBall g q (f x) rg
rf : ℝ≥0∞
Hf : HasFPowerSeriesOnBall f p x rf
r : ℝ≥0
r_pos : 0 < r
hr : Summable fun i => ‖compAlongComposition q p i.snd‖₊ * r ^ i.fst
δ : ℝ≥0∞
δpos : 0 < δ
hδ : ∀ {z : E}, z ∈ EMetric.ball x δ → f z ∈ EMetric.ball (f x) rg
rf' : ℝ≥0∞ := min rf δ
⊢ 0 < min rf' ↑r
[PROOFSTEP]
simp only [r_pos, Hf.r_pos, δpos, lt_min_iff, ENNReal.coe_pos, and_self_iff]
  /- We will show that `g ∘ f` admits the power series `q.comp p` in the disk of
      radius `min (r, rf', δ)`. -/
[GOAL]
case intro.intro.intro.intro.intro.intro
𝕜 : 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
g : F → G
f : E → F
q : FormalMultilinearSeries 𝕜 F G
p : FormalMultilinearSeries 𝕜 E F
x : E
rg : ℝ≥0∞
Hg : HasFPowerSeriesOnBall g q (f x) rg
rf : ℝ≥0∞
Hf : HasFPowerSeriesOnBall f p x rf
r : ℝ≥0
r_pos : 0 < r
hr : Summable fun i => ‖compAlongComposition q p i.snd‖₊ * r ^ i.fst
δ : ℝ≥0∞
δpos : 0 < δ
hδ : ∀ {z : E}, z ∈ EMetric.ball x δ → f z ∈ EMetric.ball (f x) rg
rf' : ℝ≥0∞ := min rf δ
min_pos : 0 < min rf' ↑r
⊢ HasFPowerSeriesAt (g ∘ f) (FormalMultilinearSeries.comp q p) x
[PROOFSTEP]
refine' ⟨min rf' r, _⟩
[GOAL]
case intro.intro.intro.intro.intro.intro
𝕜 : 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
g : F → G
f : E → F
q : FormalMultilinearSeries 𝕜 F G
p : FormalMultilinearSeries 𝕜 E F
x : E
rg : ℝ≥0∞
Hg : HasFPowerSeriesOnBall g q (f x) rg
rf : ℝ≥0∞
Hf : HasFPowerSeriesOnBall f p x rf
r : ℝ≥0
r_pos : 0 < r
hr : Summable fun i => ‖compAlongComposition q p i.snd‖₊ * r ^ i.fst
δ : ℝ≥0∞
δpos : 0 < δ
hδ : ∀ {z : E}, z ∈ EMetric.ball x δ → f z ∈ EMetric.ball (f x) rg
rf' : ℝ≥0∞ := min rf δ
min_pos : 0 < min rf' ↑r
⊢ HasFPowerSeriesOnBall (g ∘ f) (FormalMultilinearSeries.comp q p) x (min rf' ↑r)
[PROOFSTEP]
refine'
  ⟨le_trans (min_le_right rf' r) (FormalMultilinearSeries.le_comp_radius_of_summable q p r hr), min_pos, @fun y hy => _⟩
    /- Let `y` satisfy `‖y‖ < min (r, rf', δ)`. We want to show that `g (f (x + y))` is the sum of
        `q.comp p` applied to `y`. -/
      -- First, check that `y` is small enough so that estimates for `f` and `g` apply.
[GOAL]
case intro.intro.intro.intro.intro.intro
𝕜 : 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
g : F → G
f : E → F
q : FormalMultilinearSeries 𝕜 F G
p : FormalMultilinearSeries 𝕜 E F
x : E
rg : ℝ≥0∞
Hg : HasFPowerSeriesOnBall g q (f x) rg
rf : ℝ≥0∞
Hf : HasFPowerSeriesOnBall f p x rf
r : ℝ≥0
r_pos : 0 < r
hr : Summable fun i => ‖compAlongComposition q p i.snd‖₊ * r ^ i.fst
δ : ℝ≥0∞
δpos : 0 < δ
hδ : ∀ {z : E}, z ∈ EMetric.ball x δ → f z ∈ EMetric.ball (f x) rg
rf' : ℝ≥0∞ := min rf δ
min_pos : 0 < min rf' ↑r
y : E
hy : y ∈ EMetric.ball 0 (min rf' ↑r)
⊢ HasSum (fun n => ↑(FormalMultilinearSeries.comp q p n) fun x => y) ((g ∘ f) (x + y))
[PROOFSTEP]
have y_mem : y ∈ EMetric.ball (0 : E) rf := (EMetric.ball_subset_ball (le_trans (min_le_left _ _) (min_le_left _ _))) hy
[GOAL]
case intro.intro.intro.intro.intro.intro
𝕜 : 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
g : F → G
f : E → F
q : FormalMultilinearSeries 𝕜 F G
p : FormalMultilinearSeries 𝕜 E F
x : E
rg : ℝ≥0∞
Hg : HasFPowerSeriesOnBall g q (f x) rg
rf : ℝ≥0∞
Hf : HasFPowerSeriesOnBall f p x rf
r : ℝ≥0
r_pos : 0 < r
hr : Summable fun i => ‖compAlongComposition q p i.snd‖₊ * r ^ i.fst
δ : ℝ≥0∞
δpos : 0 < δ
hδ : ∀ {z : E}, z ∈ EMetric.ball x δ → f z ∈ EMetric.ball (f x) rg
rf' : ℝ≥0∞ := min rf δ
min_pos : 0 < min rf' ↑r
y : E
hy : y ∈ EMetric.ball 0 (min rf' ↑r)
y_mem : y ∈ EMetric.ball 0 rf
⊢ HasSum (fun n => ↑(FormalMultilinearSeries.comp q p n) fun x => y) ((g ∘ f) (x + y))
[PROOFSTEP]
have fy_mem : f (x + y) ∈ EMetric.ball (f x) rg := by
  apply hδ
  have : y ∈ EMetric.ball (0 : E) δ := (EMetric.ball_subset_ball (le_trans (min_le_left _ _) (min_le_right _ _))) hy
  simpa [edist_eq_coe_nnnorm_sub, edist_eq_coe_nnnorm]
    /- Now the proof starts. To show that the sum of `q.comp p` at `y` is `g (f (x + y))`,
        we will write `q.comp p` applied to `y` as a big sum over all compositions.
        Since the sum is summable, to get its convergence it suffices to get
        the convergence along some increasing sequence of sets.
        We will use the sequence of sets `comp_partial_sum_target 0 n n`,
        along which the sum is exactly the composition of the partial sums of `q` and `p`, by design.
        To show that it converges to `g (f (x + y))`, pointwise convergence would not be enough,
        but we have uniform convergence to save the day. -/
      -- First step: the partial sum of `p` converges to `f (x + y)`.
[GOAL]
𝕜 : 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
g : F → G
f : E → F
q : FormalMultilinearSeries 𝕜 F G
p : FormalMultilinearSeries 𝕜 E F
x : E
rg : ℝ≥0∞
Hg : HasFPowerSeriesOnBall g q (f x) rg
rf : ℝ≥0∞
Hf : HasFPowerSeriesOnBall f p x rf
r : ℝ≥0
r_pos : 0 < r
hr : Summable fun i => ‖compAlongComposition q p i.snd‖₊ * r ^ i.fst
δ : ℝ≥0∞
δpos : 0 < δ
hδ : ∀ {z : E}, z ∈ EMetric.ball x δ → f z ∈ EMetric.ball (f x) rg
rf' : ℝ≥0∞ := min rf δ
min_pos : 0 < min rf' ↑r
y : E
hy : y ∈ EMetric.ball 0 (min rf' ↑r)
y_mem : y ∈ EMetric.ball 0 rf
⊢ f (x + y) ∈ EMetric.ball (f x) rg
[PROOFSTEP]
apply hδ
[GOAL]
case a
𝕜 : 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
g : F → G
f : E → F
q : FormalMultilinearSeries 𝕜 F G
p : FormalMultilinearSeries 𝕜 E F
x : E
rg : ℝ≥0∞
Hg : HasFPowerSeriesOnBall g q (f x) rg
rf : ℝ≥0∞
Hf : HasFPowerSeriesOnBall f p x rf
r : ℝ≥0
r_pos : 0 < r
hr : Summable fun i => ‖compAlongComposition q p i.snd‖₊ * r ^ i.fst
δ : ℝ≥0∞
δpos : 0 < δ
hδ : ∀ {z : E}, z ∈ EMetric.ball x δ → f z ∈ EMetric.ball (f x) rg
rf' : ℝ≥0∞ := min rf δ
min_pos : 0 < min rf' ↑r
y : E
hy : y ∈ EMetric.ball 0 (min rf' ↑r)
y_mem : y ∈ EMetric.ball 0 rf
⊢ x + y ∈ EMetric.ball x δ
[PROOFSTEP]
have : y ∈ EMetric.ball (0 : E) δ := (EMetric.ball_subset_ball (le_trans (min_le_left _ _) (min_le_right _ _))) hy
[GOAL]
case a
𝕜 : 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
g : F → G
f : E → F
q : FormalMultilinearSeries 𝕜 F G
p : FormalMultilinearSeries 𝕜 E F
x : E
rg : ℝ≥0∞
Hg : HasFPowerSeriesOnBall g q (f x) rg
rf : ℝ≥0∞
Hf : HasFPowerSeriesOnBall f p x rf
r : ℝ≥0
r_pos : 0 < r
hr : Summable fun i => ‖compAlongComposition q p i.snd‖₊ * r ^ i.fst
δ : ℝ≥0∞
δpos : 0 < δ
hδ : ∀ {z : E}, z ∈ EMetric.ball x δ → f z ∈ EMetric.ball (f x) rg
rf' : ℝ≥0∞ := min rf δ
min_pos : 0 < min rf' ↑r
y : E
hy : y ∈ EMetric.ball 0 (min rf' ↑r)
y_mem : y ∈ EMetric.ball 0 rf
this : y ∈ EMetric.ball 0 δ
⊢ x + y ∈ EMetric.ball x δ
[PROOFSTEP]
simpa [edist_eq_coe_nnnorm_sub, edist_eq_coe_nnnorm]
  /- Now the proof starts. To show that the sum of `q.comp p` at `y` is `g (f (x + y))`,
      we will write `q.comp p` applied to `y` as a big sum over all compositions.
      Since the sum is summable, to get its convergence it suffices to get
      the convergence along some increasing sequence of sets.
      We will use the sequence of sets `comp_partial_sum_target 0 n n`,
      along which the sum is exactly the composition of the partial sums of `q` and `p`, by design.
      To show that it converges to `g (f (x + y))`, pointwise convergence would not be enough,
      but we have uniform convergence to save the day. -/
    -- First step: the partial sum of `p` converges to `f (x + y)`.
[GOAL]
case intro.intro.intro.intro.intro.intro
𝕜 : 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
g : F → G
f : E → F
q : FormalMultilinearSeries 𝕜 F G
p : FormalMultilinearSeries 𝕜 E F
x : E
rg : ℝ≥0∞
Hg : HasFPowerSeriesOnBall g q (f x) rg
rf : ℝ≥0∞
Hf : HasFPowerSeriesOnBall f p x rf
r : ℝ≥0
r_pos : 0 < r
hr : Summable fun i => ‖compAlongComposition q p i.snd‖₊ * r ^ i.fst
δ : ℝ≥0∞
δpos : 0 < δ
hδ : ∀ {z : E}, z ∈ EMetric.ball x δ → f z ∈ EMetric.ball (f x) rg
rf' : ℝ≥0∞ := min rf δ
min_pos : 0 < min rf' ↑r
y : E
hy : y ∈ EMetric.ball 0 (min rf' ↑r)
y_mem : y ∈ EMetric.ball 0 rf
fy_mem : f (x + y) ∈ EMetric.ball (f x) rg
⊢ HasSum (fun n => ↑(FormalMultilinearSeries.comp q p n) fun x => y) ((g ∘ f) (x + y))
[PROOFSTEP]
have A : Tendsto (fun n => ∑ a in Finset.Ico 1 n, p a fun _b => y) atTop (𝓝 (f (x + y) - f x)) :=
  by
  have L : ∀ᶠ n in atTop, (∑ a in Finset.range n, p a fun _b => y) - f x = ∑ a in Finset.Ico 1 n, p a fun _b => y :=
    by
    rw [eventually_atTop]
    refine' ⟨1, fun n hn => _⟩
    symm
    rw [eq_sub_iff_add_eq', Finset.range_eq_Ico, ← Hf.coeff_zero fun _i => y, Finset.sum_eq_sum_Ico_succ_bot hn]
  have : Tendsto (fun n => (∑ a in Finset.range n, p a fun _b => y) - f x) atTop (𝓝 (f (x + y) - f x)) :=
    (Hf.hasSum y_mem).tendsto_sum_nat.sub tendsto_const_nhds
  exact Tendsto.congr' L this
[GOAL]
𝕜 : 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
g : F → G
f : E → F
q : FormalMultilinearSeries 𝕜 F G
p : FormalMultilinearSeries 𝕜 E F
x : E
rg : ℝ≥0∞
Hg : HasFPowerSeriesOnBall g q (f x) rg
rf : ℝ≥0∞
Hf : HasFPowerSeriesOnBall f p x rf
r : ℝ≥0
r_pos : 0 < r
hr : Summable fun i => ‖compAlongComposition q p i.snd‖₊ * r ^ i.fst
δ : ℝ≥0∞
δpos : 0 < δ
hδ : ∀ {z : E}, z ∈ EMetric.ball x δ → f z ∈ EMetric.ball (f x) rg
rf' : ℝ≥0∞ := min rf δ
min_pos : 0 < min rf' ↑r
y : E
hy : y ∈ EMetric.ball 0 (min rf' ↑r)
y_mem : y ∈ EMetric.ball 0 rf
fy_mem : f (x + y) ∈ EMetric.ball (f x) rg
⊢ Tendsto (fun n => ∑ a in Finset.Ico 1 n, ↑(p a) fun _b => y) atTop (𝓝 (f (x + y) - f x))
[PROOFSTEP]
have L : ∀ᶠ n in atTop, (∑ a in Finset.range n, p a fun _b => y) - f x = ∑ a in Finset.Ico 1 n, p a fun _b => y :=
  by
  rw [eventually_atTop]
  refine' ⟨1, fun n hn => _⟩
  symm
  rw [eq_sub_iff_add_eq', Finset.range_eq_Ico, ← Hf.coeff_zero fun _i => y, Finset.sum_eq_sum_Ico_succ_bot hn]
[GOAL]
𝕜 : 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
g : F → G
f : E → F
q : FormalMultilinearSeries 𝕜 F G
p : FormalMultilinearSeries 𝕜 E F
x : E
rg : ℝ≥0∞
Hg : HasFPowerSeriesOnBall g q (f x) rg
rf : ℝ≥0∞
Hf : HasFPowerSeriesOnBall f p x rf
r : ℝ≥0
r_pos : 0 < r
hr : Summable fun i => ‖compAlongComposition q p i.snd‖₊ * r ^ i.fst
δ : ℝ≥0∞
δpos : 0 < δ
hδ : ∀ {z : E}, z ∈ EMetric.ball x δ → f z ∈ EMetric.ball (f x) rg
rf' : ℝ≥0∞ := min rf δ
min_pos : 0 < min rf' ↑r
y : E
hy : y ∈ EMetric.ball 0 (min rf' ↑r)
y_mem : y ∈ EMetric.ball 0 rf
fy_mem : f (x + y) ∈ EMetric.ball (f x) rg
⊢ ∀ᶠ (n : ℕ) in atTop, (∑ a in Finset.range n, ↑(p a) fun _b => y) - f x = ∑ a in Finset.Ico 1 n, ↑(p a) fun _b => y
[PROOFSTEP]
rw [eventually_atTop]
[GOAL]
𝕜 : 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
g : F → G
f : E → F
q : FormalMultilinearSeries 𝕜 F G
p : FormalMultilinearSeries 𝕜 E F
x : E
rg : ℝ≥0∞
Hg : HasFPowerSeriesOnBall g q (f x) rg
rf : ℝ≥0∞
Hf : HasFPowerSeriesOnBall f p x rf
r : ℝ≥0
r_pos : 0 < r
hr : Summable fun i => ‖compAlongComposition q p i.snd‖₊ * r ^ i.fst
δ : ℝ≥0∞
δpos : 0 < δ
hδ : ∀ {z : E}, z ∈ EMetric.ball x δ → f z ∈ EMetric.ball (f x) rg
rf' : ℝ≥0∞ := min rf δ
min_pos : 0 < min rf' ↑r
y : E
hy : y ∈ EMetric.ball 0 (min rf' ↑r)
y_mem : y ∈ EMetric.ball 0 rf
fy_mem : f (x + y) ∈ EMetric.ball (f x) rg
⊢ ∃ a, ∀ (b : ℕ), b ≥ a → (∑ a in Finset.range b, ↑(p a) fun _b => y) - f x = ∑ a in Finset.Ico 1 b, ↑(p a) fun _b => y
[PROOFSTEP]
refine' ⟨1, fun n hn => _⟩
[GOAL]
𝕜 : 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
g : F → G
f : E → F
q : FormalMultilinearSeries 𝕜 F G
p : FormalMultilinearSeries 𝕜 E F
x : E
rg : ℝ≥0∞
Hg : HasFPowerSeriesOnBall g q (f x) rg
rf : ℝ≥0∞
Hf : HasFPowerSeriesOnBall f p x rf
r : ℝ≥0
r_pos : 0 < r
hr : Summable fun i => ‖compAlongComposition q p i.snd‖₊ * r ^ i.fst
δ : ℝ≥0∞
δpos : 0 < δ
hδ : ∀ {z : E}, z ∈ EMetric.ball x δ → f z ∈ EMetric.ball (f x) rg
rf' : ℝ≥0∞ := min rf δ
min_pos : 0 < min rf' ↑r
y : E
hy : y ∈ EMetric.ball 0 (min rf' ↑r)
y_mem : y ∈ EMetric.ball 0 rf
fy_mem : f (x + y) ∈ EMetric.ball (f x) rg
n : ℕ
hn : n ≥ 1
⊢ (∑ a in Finset.range n, ↑(p a) fun _b => y) - f x = ∑ a in Finset.Ico 1 n, ↑(p a) fun _b => y
[PROOFSTEP]
symm
[GOAL]
𝕜 : 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
g : F → G
f : E → F
q : FormalMultilinearSeries 𝕜 F G
p : FormalMultilinearSeries 𝕜 E F
x : E
rg : ℝ≥0∞
Hg : HasFPowerSeriesOnBall g q (f x) rg
rf : ℝ≥0∞
Hf : HasFPowerSeriesOnBall f p x rf
r : ℝ≥0
r_pos : 0 < r
hr : Summable fun i => ‖compAlongComposition q p i.snd‖₊ * r ^ i.fst
δ : ℝ≥0∞
δpos : 0 < δ
hδ : ∀ {z : E}, z ∈ EMetric.ball x δ → f z ∈ EMetric.ball (f x) rg
rf' : ℝ≥0∞ := min rf δ
min_pos : 0 < min rf' ↑r
y : E
hy : y ∈ EMetric.ball 0 (min rf' ↑r)
y_mem : y ∈ EMetric.ball 0 rf
fy_mem : f (x + y) ∈ EMetric.ball (f x) rg
n : ℕ
hn : n ≥ 1
⊢ (∑ a in Finset.Ico 1 n, ↑(p a) fun _b => y) = (∑ a in Finset.range n, ↑(p a) fun _b => y) - f x
[PROOFSTEP]
rw [eq_sub_iff_add_eq', Finset.range_eq_Ico, ← Hf.coeff_zero fun _i => y, Finset.sum_eq_sum_Ico_succ_bot hn]
[GOAL]
𝕜 : 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
g : F → G
f : E → F
q : FormalMultilinearSeries 𝕜 F G
p : FormalMultilinearSeries 𝕜 E F
x : E
rg : ℝ≥0∞
Hg : HasFPowerSeriesOnBall g q (f x) rg
rf : ℝ≥0∞
Hf : HasFPowerSeriesOnBall f p x rf
r : ℝ≥0
r_pos : 0 < r
hr : Summable fun i => ‖compAlongComposition q p i.snd‖₊ * r ^ i.fst
δ : ℝ≥0∞
δpos : 0 < δ
hδ : ∀ {z : E}, z ∈ EMetric.ball x δ → f z ∈ EMetric.ball (f x) rg
rf' : ℝ≥0∞ := min rf δ
min_pos : 0 < min rf' ↑r
y : E
hy : y ∈ EMetric.ball 0 (min rf' ↑r)
y_mem : y ∈ EMetric.ball 0 rf
fy_mem : f (x + y) ∈ EMetric.ball (f x) rg
L : ∀ᶠ (n : ℕ) in atTop, (∑ a in Finset.range n, ↑(p a) fun _b => y) - f x = ∑ a in Finset.Ico 1 n, ↑(p a) fun _b => y
⊢ Tendsto (fun n => ∑ a in Finset.Ico 1 n, ↑(p a) fun _b => y) atTop (𝓝 (f (x + y) - f x))
[PROOFSTEP]
have : Tendsto (fun n => (∑ a in Finset.range n, p a fun _b => y) - f x) atTop (𝓝 (f (x + y) - f x)) :=
  (Hf.hasSum y_mem).tendsto_sum_nat.sub tendsto_const_nhds
[GOAL]
𝕜 : 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
g : F → G
f : E → F
q : FormalMultilinearSeries 𝕜 F G
p : FormalMultilinearSeries 𝕜 E F
x : E
rg : ℝ≥0∞
Hg : HasFPowerSeriesOnBall g q (f x) rg
rf : ℝ≥0∞
Hf : HasFPowerSeriesOnBall f p x rf
r : ℝ≥0
r_pos : 0 < r
hr : Summable fun i => ‖compAlongComposition q p i.snd‖₊ * r ^ i.fst
δ : ℝ≥0∞
δpos : 0 < δ
hδ : ∀ {z : E}, z ∈ EMetric.ball x δ → f z ∈ EMetric.ball (f x) rg
rf' : ℝ≥0∞ := min rf δ
min_pos : 0 < min rf' ↑r
y : E
hy : y ∈ EMetric.ball 0 (min rf' ↑r)
y_mem : y ∈ EMetric.ball 0 rf
fy_mem : f (x + y) ∈ EMetric.ball (f x) rg
L : ∀ᶠ (n : ℕ) in atTop, (∑ a in Finset.range n, ↑(p a) fun _b => y) - f x = ∑ a in Finset.Ico 1 n, ↑(p a) fun _b => y
this : Tendsto (fun n => (∑ a in Finset.range n, ↑(p a) fun _b => y) - f x) atTop (𝓝 (f (x + y) - f x))
⊢ Tendsto (fun n => ∑ a in Finset.Ico 1 n, ↑(p a) fun _b => y) atTop (𝓝 (f (x + y) - f x))
[PROOFSTEP]
exact Tendsto.congr' L this
[GOAL]
case intro.intro.intro.intro.intro.intro
𝕜 : 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
g : F → G
f : E → F
q : FormalMultilinearSeries 𝕜 F G
p : FormalMultilinearSeries 𝕜 E F
x : E
rg : ℝ≥0∞
Hg : HasFPowerSeriesOnBall g q (f x) rg
rf : ℝ≥0∞
Hf : HasFPowerSeriesOnBall f p x rf
r : ℝ≥0
r_pos : 0 < r
hr : Summable fun i => ‖compAlongComposition q p i.snd‖₊ * r ^ i.fst
δ : ℝ≥0∞
δpos : 0 < δ
hδ : ∀ {z : E}, z ∈ EMetric.ball x δ → f z ∈ EMetric.ball (f x) rg
rf' : ℝ≥0∞ := min rf δ
min_pos : 0 < min rf' ↑r
y : E
hy : y ∈ EMetric.ball 0 (min rf' ↑r)
y_mem : y ∈ EMetric.ball 0 rf
fy_mem : f (x + y) ∈ EMetric.ball (f x) rg
A : Tendsto (fun n => ∑ a in Finset.Ico 1 n, ↑(p a) fun _b => y) atTop (𝓝 (f (x + y) - f x))
⊢ HasSum (fun n => ↑(FormalMultilinearSeries.comp q p n) fun x => y) ((g ∘ f) (x + y))
[PROOFSTEP]
have B : Tendsto (fun n => q.partialSum n (∑ a in Finset.Ico 1 n, p a fun _b => y)) atTop (𝓝 (g (f (x + y)))) := by
  -- we use the fact that the partial sums of `q` converge locally uniformly to `g`, and that
      -- composition passes to the limit under locally uniform convergence.
  have B₁ : ContinuousAt (fun z : F => g (f x + z)) (f (x + y) - f x) :=
    by
    refine' ContinuousAt.comp _ (continuous_const.add continuous_id).continuousAt
    simp only [add_sub_cancel'_right, id.def]
    exact Hg.continuousOn.continuousAt (IsOpen.mem_nhds EMetric.isOpen_ball fy_mem)
  have B₂ : f (x + y) - f x ∈ EMetric.ball (0 : F) rg := by
    simpa [edist_eq_coe_nnnorm, edist_eq_coe_nnnorm_sub] using fy_mem
  rw [← EMetric.isOpen_ball.nhdsWithin_eq B₂] at A 
  convert Hg.tendstoLocallyUniformlyOn.tendsto_comp B₁.continuousWithinAt B₂ A
  simp only [add_sub_cancel'_right]
    -- Third step: the sum over all compositions in `comp_partial_sum_target 0 n n` converges to
      -- `g (f (x + y))`. As this sum is exactly the composition of the partial sum, this is a direct
      -- consequence of the second step
[GOAL]
𝕜 : 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
g : F → G
f : E → F
q : FormalMultilinearSeries 𝕜 F G
p : FormalMultilinearSeries 𝕜 E F
x : E
rg : ℝ≥0∞
Hg : HasFPowerSeriesOnBall g q (f x) rg
rf : ℝ≥0∞
Hf : HasFPowerSeriesOnBall f p x rf
r : ℝ≥0
r_pos : 0 < r
hr : Summable fun i => ‖compAlongComposition q p i.snd‖₊ * r ^ i.fst
δ : ℝ≥0∞
δpos : 0 < δ
hδ : ∀ {z : E}, z ∈ EMetric.ball x δ → f z ∈ EMetric.ball (f x) rg
rf' : ℝ≥0∞ := min rf δ
min_pos : 0 < min rf' ↑r
y : E
hy : y ∈ EMetric.ball 0 (min rf' ↑r)
y_mem : y ∈ EMetric.ball 0 rf
fy_mem : f (x + y) ∈ EMetric.ball (f x) rg
A : Tendsto (fun n => ∑ a in Finset.Ico 1 n, ↑(p a) fun _b => y) atTop (𝓝 (f (x + y) - f x))
⊢ Tendsto (fun n => partialSum q n (∑ a in Finset.Ico 1 n, ↑(p a) fun _b => y)) atTop (𝓝 (g (f (x + y))))
[PROOFSTEP]
have B₁ : ContinuousAt (fun z : F => g (f x + z)) (f (x + y) - f x) :=
  by
  refine' ContinuousAt.comp _ (continuous_const.add continuous_id).continuousAt
  simp only [add_sub_cancel'_right, id.def]
  exact Hg.continuousOn.continuousAt (IsOpen.mem_nhds EMetric.isOpen_ball fy_mem)
[GOAL]
𝕜 : 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
g : F → G
f : E → F
q : FormalMultilinearSeries 𝕜 F G
p : FormalMultilinearSeries 𝕜 E F
x : E
rg : ℝ≥0∞
Hg : HasFPowerSeriesOnBall g q (f x) rg
rf : ℝ≥0∞
Hf : HasFPowerSeriesOnBall f p x rf
r : ℝ≥0
r_pos : 0 < r
hr : Summable fun i => ‖compAlongComposition q p i.snd‖₊ * r ^ i.fst
δ : ℝ≥0∞
δpos : 0 < δ
hδ : ∀ {z : E}, z ∈ EMetric.ball x δ → f z ∈ EMetric.ball (f x) rg
rf' : ℝ≥0∞ := min rf δ
min_pos : 0 < min rf' ↑r
y : E
hy : y ∈ EMetric.ball 0 (min rf' ↑r)
y_mem : y ∈ EMetric.ball 0 rf
fy_mem : f (x + y) ∈ EMetric.ball (f x) rg
A : Tendsto (fun n => ∑ a in Finset.Ico 1 n, ↑(p a) fun _b => y) atTop (𝓝 (f (x + y) - f x))
⊢ ContinuousAt (fun z => g (f x + z)) (f (x + y) - f x)
[PROOFSTEP]
refine' ContinuousAt.comp _ (continuous_const.add continuous_id).continuousAt
[GOAL]
𝕜 : 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
g : F → G
f : E → F
q : FormalMultilinearSeries 𝕜 F G
p : FormalMultilinearSeries 𝕜 E F
x : E
rg : ℝ≥0∞
Hg : HasFPowerSeriesOnBall g q (f x) rg
rf : ℝ≥0∞
Hf : HasFPowerSeriesOnBall f p x rf
r : ℝ≥0
r_pos : 0 < r
hr : Summable fun i => ‖compAlongComposition q p i.snd‖₊ * r ^ i.fst
δ : ℝ≥0∞
δpos : 0 < δ
hδ : ∀ {z : E}, z ∈ EMetric.ball x δ → f z ∈ EMetric.ball (f x) rg
rf' : ℝ≥0∞ := min rf δ
min_pos : 0 < min rf' ↑r
y : E
hy : y ∈ EMetric.ball 0 (min rf' ↑r)
y_mem : y ∈ EMetric.ball 0 rf
fy_mem : f (x + y) ∈ EMetric.ball (f x) rg
A : Tendsto (fun n => ∑ a in Finset.Ico 1 n, ↑(p a) fun _b => y) atTop (𝓝 (f (x + y) - f x))
⊢ ContinuousAt g (f x + (f (x + y) - f x))
[PROOFSTEP]
simp only [add_sub_cancel'_right, id.def]
[GOAL]
𝕜 : 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
g : F → G
f : E → F
q : FormalMultilinearSeries 𝕜 F G
p : FormalMultilinearSeries 𝕜 E F
x : E
rg : ℝ≥0∞
Hg : HasFPowerSeriesOnBall g q (f x) rg
rf : ℝ≥0∞
Hf : HasFPowerSeriesOnBall f p x rf
r : ℝ≥0
r_pos : 0 < r
hr : Summable fun i => ‖compAlongComposition q p i.snd‖₊ * r ^ i.fst
δ : ℝ≥0∞
δpos : 0 < δ
hδ : ∀ {z : E}, z ∈ EMetric.ball x δ → f z ∈ EMetric.ball (f x) rg
rf' : ℝ≥0∞ := min rf δ
min_pos : 0 < min rf' ↑r
y : E
hy : y ∈ EMetric.ball 0 (min rf' ↑r)
y_mem : y ∈ EMetric.ball 0 rf
fy_mem : f (x + y) ∈ EMetric.ball (f x) rg
A : Tendsto (fun n => ∑ a in Finset.Ico 1 n, ↑(p a) fun _b => y) atTop (𝓝 (f (x + y) - f x))
⊢ ContinuousAt g (f (x + y))
[PROOFSTEP]
exact Hg.continuousOn.continuousAt (IsOpen.mem_nhds EMetric.isOpen_ball fy_mem)
[GOAL]
𝕜 : 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
g : F → G
f : E → F
q : FormalMultilinearSeries 𝕜 F G
p : FormalMultilinearSeries 𝕜 E F
x : E
rg : ℝ≥0∞
Hg : HasFPowerSeriesOnBall g q (f x) rg
rf : ℝ≥0∞
Hf : HasFPowerSeriesOnBall f p x rf
r : ℝ≥0
r_pos : 0 < r
hr : Summable fun i => ‖compAlongComposition q p i.snd‖₊ * r ^ i.fst
δ : ℝ≥0∞
δpos : 0 < δ
hδ : ∀ {z : E}, z ∈ EMetric.ball x δ → f z ∈ EMetric.ball (f x) rg
rf' : ℝ≥0∞ := min rf δ
min_pos : 0 < min rf' ↑r
y : E
hy : y ∈ EMetric.ball 0 (min rf' ↑r)
y_mem : y ∈ EMetric.ball 0 rf
fy_mem : f (x + y) ∈ EMetric.ball (f x) rg
A : Tendsto (fun n => ∑ a in Finset.Ico 1 n, ↑(p a) fun _b => y) atTop (𝓝 (f (x + y) - f x))
B₁ : ContinuousAt (fun z => g (f x + z)) (f (x + y) - f x)
⊢ Tendsto (fun n => partialSum q n (∑ a in Finset.Ico 1 n, ↑(p a) fun _b => y)) atTop (𝓝 (g (f (x + y))))
[PROOFSTEP]
have B₂ : f (x + y) - f x ∈ EMetric.ball (0 : F) rg := by
  simpa [edist_eq_coe_nnnorm, edist_eq_coe_nnnorm_sub] using fy_mem
[GOAL]
𝕜 : 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
g : F → G
f : E → F
q : FormalMultilinearSeries 𝕜 F G
p : FormalMultilinearSeries 𝕜 E F
x : E
rg : ℝ≥0∞
Hg : HasFPowerSeriesOnBall g q (f x) rg
rf : ℝ≥0∞
Hf : HasFPowerSeriesOnBall f p x rf
r : ℝ≥0
r_pos : 0 < r
hr : Summable fun i => ‖compAlongComposition q p i.snd‖₊ * r ^ i.fst
δ : ℝ≥0∞
δpos : 0 < δ
hδ : ∀ {z : E}, z ∈ EMetric.ball x δ → f z ∈ EMetric.ball (f x) rg
rf' : ℝ≥0∞ := min rf δ
min_pos : 0 < min rf' ↑r
y : E
hy : y ∈ EMetric.ball 0 (min rf' ↑r)
y_mem : y ∈ EMetric.ball 0 rf
fy_mem : f (x + y) ∈ EMetric.ball (f x) rg
A : Tendsto (fun n => ∑ a in Finset.Ico 1 n, ↑(p a) fun _b => y) atTop (𝓝 (f (x + y) - f x))
B₁ : ContinuousAt (fun z => g (f x + z)) (f (x + y) - f x)
⊢ f (x + y) - f x ∈ EMetric.ball 0 rg
[PROOFSTEP]
simpa [edist_eq_coe_nnnorm, edist_eq_coe_nnnorm_sub] using fy_mem
[GOAL]
𝕜 : 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
g : F → G
f : E → F
q : FormalMultilinearSeries 𝕜 F G
p : FormalMultilinearSeries 𝕜 E F
x : E
rg : ℝ≥0∞
Hg : HasFPowerSeriesOnBall g q (f x) rg
rf : ℝ≥0∞
Hf : HasFPowerSeriesOnBall f p x rf
r : ℝ≥0
r_pos : 0 < r
hr : Summable fun i => ‖compAlongComposition q p i.snd‖₊ * r ^ i.fst
δ : ℝ≥0∞
δpos : 0 < δ
hδ : ∀ {z : E}, z ∈ EMetric.ball x δ → f z ∈ EMetric.ball (f x) rg
rf' : ℝ≥0∞ := min rf δ
min_pos : 0 < min rf' ↑r
y : E
hy : y ∈ EMetric.ball 0 (min rf' ↑r)
y_mem : y ∈ EMetric.ball 0 rf
fy_mem : f (x + y) ∈ EMetric.ball (f x) rg
A : Tendsto (fun n => ∑ a in Finset.Ico 1 n, ↑(p a) fun _b => y) atTop (𝓝 (f (x + y) - f x))
B₁ : ContinuousAt (fun z => g (f x + z)) (f (x + y) - f x)
B₂ : f (x + y) - f x ∈ EMetric.ball 0 rg
⊢ Tendsto (fun n => partialSum q n (∑ a in Finset.Ico 1 n, ↑(p a) fun _b => y)) atTop (𝓝 (g (f (x + y))))
[PROOFSTEP]
rw [← EMetric.isOpen_ball.nhdsWithin_eq B₂] at A 
[GOAL]
𝕜 : 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
g : F → G
f : E → F
q : FormalMultilinearSeries 𝕜 F G
p : FormalMultilinearSeries 𝕜 E F
x : E
rg : ℝ≥0∞
Hg : HasFPowerSeriesOnBall g q (f x) rg
rf : ℝ≥0∞
Hf : HasFPowerSeriesOnBall f p x rf
r : ℝ≥0
r_pos : 0 < r
hr : Summable fun i => ‖compAlongComposition q p i.snd‖₊ * r ^ i.fst
δ : ℝ≥0∞
δpos : 0 < δ
hδ : ∀ {z : E}, z ∈ EMetric.ball x δ → f z ∈ EMetric.ball (f x) rg
rf' : ℝ≥0∞ := min rf δ
min_pos : 0 < min rf' ↑r
y : E
hy : y ∈ EMetric.ball 0 (min rf' ↑r)
y_mem : y ∈ EMetric.ball 0 rf
fy_mem : f (x + y) ∈ EMetric.ball (f x) rg
A : Tendsto (fun n => ∑ a in Finset.Ico 1 n, ↑(p a) fun _b => y) atTop (𝓝[EMetric.ball 0 rg] (f (x + y) - f x))
B₁ : ContinuousAt (fun z => g (f x + z)) (f (x + y) - f x)
B₂ : f (x + y) - f x ∈ EMetric.ball 0 rg
⊢ Tendsto (fun n => partialSum q n (∑ a in Finset.Ico 1 n, ↑(p a) fun _b => y)) atTop (𝓝 (g (f (x + y))))
[PROOFSTEP]
convert Hg.tendstoLocallyUniformlyOn.tendsto_comp B₁.continuousWithinAt B₂ A
[GOAL]
case h.e'_5.h.e'_3.h.e'_1
𝕜 : 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
g : F → G
f : E → F
q : FormalMultilinearSeries 𝕜 F G
p : FormalMultilinearSeries 𝕜 E F
x : E
rg : ℝ≥0∞
Hg : HasFPowerSeriesOnBall g q (f x) rg
rf : ℝ≥0∞
Hf : HasFPowerSeriesOnBall f p x rf
r : ℝ≥0
r_pos : 0 < r
hr : Summable fun i => ‖compAlongComposition q p i.snd‖₊ * r ^ i.fst
δ : ℝ≥0∞
δpos : 0 < δ
hδ : ∀ {z : E}, z ∈ EMetric.ball x δ → f z ∈ EMetric.ball (f x) rg
rf' : ℝ≥0∞ := min rf δ
min_pos : 0 < min rf' ↑r
y : E
hy : y ∈ EMetric.ball 0 (min rf' ↑r)
y_mem : y ∈ EMetric.ball 0 rf
fy_mem : f (x + y) ∈ EMetric.ball (f x) rg
A : Tendsto (fun n => ∑ a in Finset.Ico 1 n, ↑(p a) fun _b => y) atTop (𝓝[EMetric.ball 0 rg] (f (x + y) - f x))
B₁ : ContinuousAt (fun z => g (f x + z)) (f (x + y) - f x)
B₂ : f (x + y) - f x ∈ EMetric.ball 0 rg
⊢ f (x + y) = f x + (f (x + y) - f x)
[PROOFSTEP]
simp only [add_sub_cancel'_right]
  -- Third step: the sum over all compositions in `comp_partial_sum_target 0 n n` converges to
    -- `g (f (x + y))`. As this sum is exactly the composition of the partial sum, this is a direct
    -- consequence of the second step
[GOAL]
case intro.intro.intro.intro.intro.intro
𝕜 : 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
g : F → G
f : E → F
q : FormalMultilinearSeries 𝕜 F G
p : FormalMultilinearSeries 𝕜 E F
x : E
rg : ℝ≥0∞
Hg : HasFPowerSeriesOnBall g q (f x) rg
rf : ℝ≥0∞
Hf : HasFPowerSeriesOnBall f p x rf
r : ℝ≥0
r_pos : 0 < r
hr : Summable fun i => ‖compAlongComposition q p i.snd‖₊ * r ^ i.fst
δ : ℝ≥0∞
δpos : 0 < δ
hδ : ∀ {z : E}, z ∈ EMetric.ball x δ → f z ∈ EMetric.ball (f x) rg
rf' : ℝ≥0∞ := min rf δ
min_pos : 0 < min rf' ↑r
y : E
hy : y ∈ EMetric.ball 0 (min rf' ↑r)
y_mem : y ∈ EMetric.ball 0 rf
fy_mem : f (x + y) ∈ EMetric.ball (f x) rg
A : Tendsto (fun n => ∑ a in Finset.Ico 1 n, ↑(p a) fun _b => y) atTop (𝓝 (f (x + y) - f x))
B : Tendsto (fun n => partialSum q n (∑ a in Finset.Ico 1 n, ↑(p a) fun _b => y)) atTop (𝓝 (g (f (x + y))))
⊢ HasSum (fun n => ↑(FormalMultilinearSeries.comp q p n) fun x => y) ((g ∘ f) (x + y))
[PROOFSTEP]
have C :
  Tendsto (fun n => ∑ i in compPartialSumTarget 0 n n, q.compAlongComposition p i.2 fun _j => y) atTop
    (𝓝 (g (f (x + y)))) :=
  by simpa [comp_partialSum] using B
[GOAL]
𝕜 : 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
g : F → G
f : E → F
q : FormalMultilinearSeries 𝕜 F G
p : FormalMultilinearSeries 𝕜 E F
x : E
rg : ℝ≥0∞
Hg : HasFPowerSeriesOnBall g q (f x) rg
rf : ℝ≥0∞
Hf : HasFPowerSeriesOnBall f p x rf
r : ℝ≥0
r_pos : 0 < r
hr : Summable fun i => ‖compAlongComposition q p i.snd‖₊ * r ^ i.fst
δ : ℝ≥0∞
δpos : 0 < δ
hδ : ∀ {z : E}, z ∈ EMetric.ball x δ → f z ∈ EMetric.ball (f x) rg
rf' : ℝ≥0∞ := min rf δ
min_pos : 0 < min rf' ↑r
y : E
hy : y ∈ EMetric.ball 0 (min rf' ↑r)
y_mem : y ∈ EMetric.ball 0 rf
fy_mem : f (x + y) ∈ EMetric.ball (f x) rg
A : Tendsto (fun n => ∑ a in Finset.Ico 1 n, ↑(p a) fun _b => y) atTop (𝓝 (f (x + y) - f x))
B : Tendsto (fun n => partialSum q n (∑ a in Finset.Ico 1 n, ↑(p a) fun _b => y)) atTop (𝓝 (g (f (x + y))))
⊢ Tendsto (fun n => ∑ i in compPartialSumTarget 0 n n, ↑(compAlongComposition q p i.snd) fun _j => y) atTop
    (𝓝 (g (f (x + y))))
[PROOFSTEP]
simpa [comp_partialSum] using B
[GOAL]
case intro.intro.intro.intro.intro.intro
𝕜 : 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
g : F → G
f : E → F
q : FormalMultilinearSeries 𝕜 F G
p : FormalMultilinearSeries 𝕜 E F
x : E
rg : ℝ≥0∞
Hg : HasFPowerSeriesOnBall g q (f x) rg
rf : ℝ≥0∞
Hf : HasFPowerSeriesOnBall f p x rf
r : ℝ≥0
r_pos : 0 < r
hr : Summable fun i => ‖compAlongComposition q p i.snd‖₊ * r ^ i.fst
δ : ℝ≥0∞
δpos : 0 < δ
hδ : ∀ {z : E}, z ∈ EMetric.ball x δ → f z ∈ EMetric.ball (f x) rg
rf' : ℝ≥0∞ := min rf δ
min_pos : 0 < min rf' ↑r
y : E
hy : y ∈ EMetric.ball 0 (min rf' ↑r)
y_mem : y ∈ EMetric.ball 0 rf
fy_mem : f (x + y) ∈ EMetric.ball (f x) rg
A : Tendsto (fun n => ∑ a in Finset.Ico 1 n, ↑(p a) fun _b => y) atTop (𝓝 (f (x + y) - f x))
B : Tendsto (fun n => partialSum q n (∑ a in Finset.Ico 1 n, ↑(p a) fun _b => y)) atTop (𝓝 (g (f (x + y))))
C :
  Tendsto (fun n => ∑ i in compPartialSumTarget 0 n n, ↑(compAlongComposition q p i.snd) fun _j => y) atTop
    (𝓝 (g (f (x + y))))
⊢ HasSum (fun n => ↑(FormalMultilinearSeries.comp q p n) fun x => y) ((g ∘ f) (x + y))
[PROOFSTEP]
have D : HasSum (fun i : Σ n, Composition n => q.compAlongComposition p i.2 fun _j => y) (g (f (x + y))) :=
  haveI cau : CauchySeq fun s : Finset (Σ n, Composition n) => ∑ i in s, q.compAlongComposition p i.2 fun _j => y :=
    by
    apply cauchySeq_finset_of_norm_bounded _ (NNReal.summable_coe.2 hr) _
    simp only [coe_nnnorm, NNReal.coe_mul, NNReal.coe_pow]
    rintro ⟨n, c⟩
    calc
      ‖(compAlongComposition q p c) fun _j : Fin n => y‖ ≤ ‖compAlongComposition q p c‖ * ∏ _j : Fin n, ‖y‖ := by
        apply ContinuousMultilinearMap.le_op_norm
      _ ≤ ‖compAlongComposition q p c‖ * (r : ℝ) ^ n :=
        by
        apply mul_le_mul_of_nonneg_left _ (norm_nonneg _)
        rw [Finset.prod_const, Finset.card_fin]
        apply pow_le_pow_of_le_left (norm_nonneg _)
        rw [EMetric.mem_ball, edist_eq_coe_nnnorm] at hy 
        have := le_trans (le_of_lt hy) (min_le_right _ _)
        rwa [ENNReal.coe_le_coe, ← NNReal.coe_le_coe, coe_nnnorm] at this 
  tendsto_nhds_of_cauchySeq_of_subseq cau compPartialSumTarget_tendsto_atTop C
[GOAL]
𝕜 : 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
g : F → G
f : E → F
q : FormalMultilinearSeries 𝕜 F G
p : FormalMultilinearSeries 𝕜 E F
x : E
rg : ℝ≥0∞
Hg : HasFPowerSeriesOnBall g q (f x) rg
rf : ℝ≥0∞
Hf : HasFPowerSeriesOnBall f p x rf
r : ℝ≥0
r_pos : 0 < r
hr : Summable fun i => ‖compAlongComposition q p i.snd‖₊ * r ^ i.fst
δ : ℝ≥0∞
δpos : 0 < δ
hδ : ∀ {z : E}, z ∈ EMetric.ball x δ → f z ∈ EMetric.ball (f x) rg
rf' : ℝ≥0∞ := min rf δ
min_pos : 0 < min rf' ↑r
y : E
hy : y ∈ EMetric.ball 0 (min rf' ↑r)
y_mem : y ∈ EMetric.ball 0 rf
fy_mem : f (x + y) ∈ EMetric.ball (f x) rg
A : Tendsto (fun n => ∑ a in Finset.Ico 1 n, ↑(p a) fun _b => y) atTop (𝓝 (f (x + y) - f x))
B : Tendsto (fun n => partialSum q n (∑ a in Finset.Ico 1 n, ↑(p a) fun _b => y)) atTop (𝓝 (g (f (x + y))))
C :
  Tendsto (fun n => ∑ i in compPartialSumTarget 0 n n, ↑(compAlongComposition q p i.snd) fun _j => y) atTop
    (𝓝 (g (f (x + y))))
⊢ CauchySeq fun s => ∑ i in s, ↑(compAlongComposition q p i.snd) fun _j => y
[PROOFSTEP]
apply cauchySeq_finset_of_norm_bounded _ (NNReal.summable_coe.2 hr) _
[GOAL]
𝕜 : 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
g : F → G
f : E → F
q : FormalMultilinearSeries 𝕜 F G
p : FormalMultilinearSeries 𝕜 E F
x : E
rg : ℝ≥0∞
Hg : HasFPowerSeriesOnBall g q (f x) rg
rf : ℝ≥0∞
Hf : HasFPowerSeriesOnBall f p x rf
r : ℝ≥0
r_pos : 0 < r
hr : Summable fun i => ‖compAlongComposition q p i.snd‖₊ * r ^ i.fst
δ : ℝ≥0∞
δpos : 0 < δ
hδ : ∀ {z : E}, z ∈ EMetric.ball x δ → f z ∈ EMetric.ball (f x) rg
rf' : ℝ≥0∞ := min rf δ
min_pos : 0 < min rf' ↑r
y : E
hy : y ∈ EMetric.ball 0 (min rf' ↑r)
y_mem : y ∈ EMetric.ball 0 rf
fy_mem : f (x + y) ∈ EMetric.ball (f x) rg
A : Tendsto (fun n => ∑ a in Finset.Ico 1 n, ↑(p a) fun _b => y) atTop (𝓝 (f (x + y) - f x))
B : Tendsto (fun n => partialSum q n (∑ a in Finset.Ico 1 n, ↑(p a) fun _b => y)) atTop (𝓝 (g (f (x + y))))
C :
  Tendsto (fun n => ∑ i in compPartialSumTarget 0 n n, ↑(compAlongComposition q p i.snd) fun _j => y) atTop
    (𝓝 (g (f (x + y))))
⊢ ∀ (i : (n : ℕ) × Composition n),
    ‖↑(compAlongComposition q p i.snd) fun _j => y‖ ≤ ↑(‖compAlongComposition q p i.snd‖₊ * r ^ i.fst)
[PROOFSTEP]
simp only [coe_nnnorm, NNReal.coe_mul, NNReal.coe_pow]
[GOAL]
𝕜 : 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
g : F → G
f : E → F
q : FormalMultilinearSeries 𝕜 F G
p : FormalMultilinearSeries 𝕜 E F
x : E
rg : ℝ≥0∞
Hg : HasFPowerSeriesOnBall g q (f x) rg
rf : ℝ≥0∞
Hf : HasFPowerSeriesOnBall f p x rf
r : ℝ≥0
r_pos : 0 < r
hr : Summable fun i => ‖compAlongComposition q p i.snd‖₊ * r ^ i.fst
δ : ℝ≥0∞
δpos : 0 < δ
hδ : ∀ {z : E}, z ∈ EMetric.ball x δ → f z ∈ EMetric.ball (f x) rg
rf' : ℝ≥0∞ := min rf δ
min_pos : 0 < min rf' ↑r
y : E
hy : y ∈ EMetric.ball 0 (min rf' ↑r)
y_mem : y ∈ EMetric.ball 0 rf
fy_mem : f (x + y) ∈ EMetric.ball (f x) rg
A : Tendsto (fun n => ∑ a in Finset.Ico 1 n, ↑(p a) fun _b => y) atTop (𝓝 (f (x + y) - f x))
B : Tendsto (fun n => partialSum q n (∑ a in Finset.Ico 1 n, ↑(p a) fun _b => y)) atTop (𝓝 (g (f (x + y))))
C :
  Tendsto (fun n => ∑ i in compPartialSumTarget 0 n n, ↑(compAlongComposition q p i.snd) fun _j => y) atTop
    (𝓝 (g (f (x + y))))
⊢ ∀ (i : (n : ℕ) × Composition n),
    ‖↑(compAlongComposition q p i.snd) fun _j => y‖ ≤ ‖compAlongComposition q p i.snd‖ * ↑r ^ i.fst
[PROOFSTEP]
rintro ⟨n, c⟩
[GOAL]
case mk
𝕜 : 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
g : F → G
f : E → F
q : FormalMultilinearSeries 𝕜 F G
p : FormalMultilinearSeries 𝕜 E F
x : E
rg : ℝ≥0∞
Hg : HasFPowerSeriesOnBall g q (f x) rg
rf : ℝ≥0∞
Hf : HasFPowerSeriesOnBall f p x rf
r : ℝ≥0
r_pos : 0 < r
hr : Summable fun i => ‖compAlongComposition q p i.snd‖₊ * r ^ i.fst
δ : ℝ≥0∞
δpos : 0 < δ
hδ : ∀ {z : E}, z ∈ EMetric.ball x δ → f z ∈ EMetric.ball (f x) rg
rf' : ℝ≥0∞ := min rf δ
min_pos : 0 < min rf' ↑r
y : E
hy : y ∈ EMetric.ball 0 (min rf' ↑r)
y_mem : y ∈ EMetric.ball 0 rf
fy_mem : f (x + y) ∈ EMetric.ball (f x) rg
A : Tendsto (fun n => ∑ a in Finset.Ico 1 n, ↑(p a) fun _b => y) atTop (𝓝 (f (x + y) - f x))
B : Tendsto (fun n => partialSum q n (∑ a in Finset.Ico 1 n, ↑(p a) fun _b => y)) atTop (𝓝 (g (f (x + y))))
C :
  Tendsto (fun n => ∑ i in compPartialSumTarget 0 n n, ↑(compAlongComposition q p i.snd) fun _j => y) atTop
    (𝓝 (g (f (x + y))))
n : ℕ
c : Composition n
⊢ ‖↑(compAlongComposition q p { fst := n, snd := c }.snd) fun _j => y‖ ≤
    ‖compAlongComposition q p { fst := n, snd := c }.snd‖ * ↑r ^ { fst := n, snd := c }.fst
[PROOFSTEP]
calc
  ‖(compAlongComposition q p c) fun _j : Fin n => y‖ ≤ ‖compAlongComposition q p c‖ * ∏ _j : Fin n, ‖y‖ := by
    apply ContinuousMultilinearMap.le_op_norm
  _ ≤ ‖compAlongComposition q p c‖ * (r : ℝ) ^ n :=
    by
    apply mul_le_mul_of_nonneg_left _ (norm_nonneg _)
    rw [Finset.prod_const, Finset.card_fin]
    apply pow_le_pow_of_le_left (norm_nonneg _)
    rw [EMetric.mem_ball, edist_eq_coe_nnnorm] at hy 
    have := le_trans (le_of_lt hy) (min_le_right _ _)
    rwa [ENNReal.coe_le_coe, ← NNReal.coe_le_coe, coe_nnnorm] at this 
[GOAL]
𝕜 : 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
g : F → G
f : E → F
q : FormalMultilinearSeries 𝕜 F G
p : FormalMultilinearSeries 𝕜 E F
x : E
rg : ℝ≥0∞
Hg : HasFPowerSeriesOnBall g q (f x) rg
rf : ℝ≥0∞
Hf : HasFPowerSeriesOnBall f p x rf
r : ℝ≥0
r_pos : 0 < r
hr : Summable fun i => ‖compAlongComposition q p i.snd‖₊ * r ^ i.fst
δ : ℝ≥0∞
δpos : 0 < δ
hδ : ∀ {z : E}, z ∈ EMetric.ball x δ → f z ∈ EMetric.ball (f x) rg
rf' : ℝ≥0∞ := min rf δ
min_pos : 0 < min rf' ↑r
y : E
hy : y ∈ EMetric.ball 0 (min rf' ↑r)
y_mem : y ∈ EMetric.ball 0 rf
fy_mem : f (x + y) ∈ EMetric.ball (f x) rg
A : Tendsto (fun n => ∑ a in Finset.Ico 1 n, ↑(p a) fun _b => y) atTop (𝓝 (f (x + y) - f x))
B : Tendsto (fun n => partialSum q n (∑ a in Finset.Ico 1 n, ↑(p a) fun _b => y)) atTop (𝓝 (g (f (x + y))))
C :
  Tendsto (fun n => ∑ i in compPartialSumTarget 0 n n, ↑(compAlongComposition q p i.snd) fun _j => y) atTop
    (𝓝 (g (f (x + y))))
n : ℕ
c : Composition n
⊢ ‖↑(compAlongComposition q p c) fun _j => y‖ ≤ ‖compAlongComposition q p c‖ * ∏ _j : Fin n, ‖y‖
[PROOFSTEP]
apply ContinuousMultilinearMap.le_op_norm
[GOAL]
𝕜 : 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
g : F → G
f : E → F
q : FormalMultilinearSeries 𝕜 F G
p : FormalMultilinearSeries 𝕜 E F
x : E
rg : ℝ≥0∞
Hg : HasFPowerSeriesOnBall g q (f x) rg
rf : ℝ≥0∞
Hf : HasFPowerSeriesOnBall f p x rf
r : ℝ≥0
r_pos : 0 < r
hr : Summable fun i => ‖compAlongComposition q p i.snd‖₊ * r ^ i.fst
δ : ℝ≥0∞
δpos : 0 < δ
hδ : ∀ {z : E}, z ∈ EMetric.ball x δ → f z ∈ EMetric.ball (f x) rg
rf' : ℝ≥0∞ := min rf δ
min_pos : 0 < min rf' ↑r
y : E
hy : y ∈ EMetric.ball 0 (min rf' ↑r)
y_mem : y ∈ EMetric.ball 0 rf
fy_mem : f (x + y) ∈ EMetric.ball (f x) rg
A : Tendsto (fun n => ∑ a in Finset.Ico 1 n, ↑(p a) fun _b => y) atTop (𝓝 (f (x + y) - f x))
B : Tendsto (fun n => partialSum q n (∑ a in Finset.Ico 1 n, ↑(p a) fun _b => y)) atTop (𝓝 (g (f (x + y))))
C :
  Tendsto (fun n => ∑ i in compPartialSumTarget 0 n n, ↑(compAlongComposition q p i.snd) fun _j => y) atTop
    (𝓝 (g (f (x + y))))
n : ℕ
c : Composition n
⊢ ‖compAlongComposition q p c‖ * ∏ _j : Fin n, ‖y‖ ≤ ‖compAlongComposition q p c‖ * ↑r ^ n
[PROOFSTEP]
apply mul_le_mul_of_nonneg_left _ (norm_nonneg _)
[GOAL]
𝕜 : 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
g : F → G
f : E → F
q : FormalMultilinearSeries 𝕜 F G
p : FormalMultilinearSeries 𝕜 E F
x : E
rg : ℝ≥0∞
Hg : HasFPowerSeriesOnBall g q (f x) rg
rf : ℝ≥0∞
Hf : HasFPowerSeriesOnBall f p x rf
r : ℝ≥0
r_pos : 0 < r
hr : Summable fun i => ‖compAlongComposition q p i.snd‖₊ * r ^ i.fst
δ : ℝ≥0∞
δpos : 0 < δ
hδ : ∀ {z : E}, z ∈ EMetric.ball x δ → f z ∈ EMetric.ball (f x) rg
rf' : ℝ≥0∞ := min rf δ
min_pos : 0 < min rf' ↑r
y : E
hy : y ∈ EMetric.ball 0 (min rf' ↑r)
y_mem : y ∈ EMetric.ball 0 rf
fy_mem : f (x + y) ∈ EMetric.ball (f x) rg
A : Tendsto (fun n => ∑ a in Finset.Ico 1 n, ↑(p a) fun _b => y) atTop (𝓝 (f (x + y) - f x))
B : Tendsto (fun n => partialSum q n (∑ a in Finset.Ico 1 n, ↑(p a) fun _b => y)) atTop (𝓝 (g (f (x + y))))
C :
  Tendsto (fun n => ∑ i in compPartialSumTarget 0 n n, ↑(compAlongComposition q p i.snd) fun _j => y) atTop
    (𝓝 (g (f (x + y))))
n : ℕ
c : Composition n
⊢ ∏ _j : Fin n, ‖y‖ ≤ ↑r ^ n
[PROOFSTEP]
rw [Finset.prod_const, Finset.card_fin]
[GOAL]
𝕜 : 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
g : F → G
f : E → F
q : FormalMultilinearSeries 𝕜 F G
p : FormalMultilinearSeries 𝕜 E F
x : E
rg : ℝ≥0∞
Hg : HasFPowerSeriesOnBall g q (f x) rg
rf : ℝ≥0∞
Hf : HasFPowerSeriesOnBall f p x rf
r : ℝ≥0
r_pos : 0 < r
hr : Summable fun i => ‖compAlongComposition q p i.snd‖₊ * r ^ i.fst
δ : ℝ≥0∞
δpos : 0 < δ
hδ : ∀ {z : E}, z ∈ EMetric.ball x δ → f z ∈ EMetric.ball (f x) rg
rf' : ℝ≥0∞ := min rf δ
min_pos : 0 < min rf' ↑r
y : E
hy : y ∈ EMetric.ball 0 (min rf' ↑r)
y_mem : y ∈ EMetric.ball 0 rf
fy_mem : f (x + y) ∈ EMetric.ball (f x) rg
A : Tendsto (fun n => ∑ a in Finset.Ico 1 n, ↑(p a) fun _b => y) atTop (𝓝 (f (x + y) - f x))
B : Tendsto (fun n => partialSum q n (∑ a in Finset.Ico 1 n, ↑(p a) fun _b => y)) atTop (𝓝 (g (f (x + y))))
C :
  Tendsto (fun n => ∑ i in compPartialSumTarget 0 n n, ↑(compAlongComposition q p i.snd) fun _j => y) atTop
    (𝓝 (g (f (x + y))))
n : ℕ
c : Composition n
⊢ ‖y‖ ^ n ≤ ↑r ^ n
[PROOFSTEP]
apply pow_le_pow_of_le_left (norm_nonneg _)
[GOAL]
case hab
𝕜 : 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
g : F → G
f : E → F
q : FormalMultilinearSeries 𝕜 F G
p : FormalMultilinearSeries 𝕜 E F
x : E
rg : ℝ≥0∞
Hg : HasFPowerSeriesOnBall g q (f x) rg
rf : ℝ≥0∞
Hf : HasFPowerSeriesOnBall f p x rf
r : ℝ≥0
r_pos : 0 < r
hr : Summable fun i => ‖compAlongComposition q p i.snd‖₊ * r ^ i.fst
δ : ℝ≥0∞
δpos : 0 < δ
hδ : ∀ {z : E}, z ∈ EMetric.ball x δ → f z ∈ EMetric.ball (f x) rg
rf' : ℝ≥0∞ := min rf δ
min_pos : 0 < min rf' ↑r
y : E
hy : y ∈ EMetric.ball 0 (min rf' ↑r)
y_mem : y ∈ EMetric.ball 0 rf
fy_mem : f (x + y) ∈ EMetric.ball (f x) rg
A : Tendsto (fun n => ∑ a in Finset.Ico 1 n, ↑(p a) fun _b => y) atTop (𝓝 (f (x + y) - f x))
B : Tendsto (fun n => partialSum q n (∑ a in Finset.Ico 1 n, ↑(p a) fun _b => y)) atTop (𝓝 (g (f (x + y))))
C :
  Tendsto (fun n => ∑ i in compPartialSumTarget 0 n n, ↑(compAlongComposition q p i.snd) fun _j => y) atTop
    (𝓝 (g (f (x + y))))
n : ℕ
c : Composition n
⊢ ‖y‖ ≤ ↑r
[PROOFSTEP]
rw [EMetric.mem_ball, edist_eq_coe_nnnorm] at hy 
[GOAL]
case hab
𝕜 : 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
g : F → G
f : E → F
q : FormalMultilinearSeries 𝕜 F G
p : FormalMultilinearSeries 𝕜 E F
x : E
rg : ℝ≥0∞
Hg : HasFPowerSeriesOnBall g q (f x) rg
rf : ℝ≥0∞
Hf : HasFPowerSeriesOnBall f p x rf
r : ℝ≥0
r_pos : 0 < r
hr : Summable fun i => ‖compAlongComposition q p i.snd‖₊ * r ^ i.fst
δ : ℝ≥0∞
δpos : 0 < δ
hδ : ∀ {z : E}, z ∈ EMetric.ball x δ → f z ∈ EMetric.ball (f x) rg
rf' : ℝ≥0∞ := min rf δ
min_pos : 0 < min rf' ↑r
y : E
hy : ↑‖y‖₊ < min rf' ↑r
y_mem : y ∈ EMetric.ball 0 rf
fy_mem : f (x + y) ∈ EMetric.ball (f x) rg
A : Tendsto (fun n => ∑ a in Finset.Ico 1 n, ↑(p a) fun _b => y) atTop (𝓝 (f (x + y) - f x))
B : Tendsto (fun n => partialSum q n (∑ a in Finset.Ico 1 n, ↑(p a) fun _b => y)) atTop (𝓝 (g (f (x + y))))
C :
  Tendsto (fun n => ∑ i in compPartialSumTarget 0 n n, ↑(compAlongComposition q p i.snd) fun _j => y) atTop
    (𝓝 (g (f (x + y))))
n : ℕ
c : Composition n
⊢ ‖y‖ ≤ ↑r
[PROOFSTEP]
have := le_trans (le_of_lt hy) (min_le_right _ _)
[GOAL]
case hab
𝕜 : 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
g : F → G
f : E → F
q : FormalMultilinearSeries 𝕜 F G
p : FormalMultilinearSeries 𝕜 E F
x : E
rg : ℝ≥0∞
Hg : HasFPowerSeriesOnBall g q (f x) rg
rf : ℝ≥0∞
Hf : HasFPowerSeriesOnBall f p x rf
r : ℝ≥0
r_pos : 0 < r
hr : Summable fun i => ‖compAlongComposition q p i.snd‖₊ * r ^ i.fst
δ : ℝ≥0∞
δpos : 0 < δ
hδ : ∀ {z : E}, z ∈ EMetric.ball x δ → f z ∈ EMetric.ball (f x) rg
rf' : ℝ≥0∞ := min rf δ
min_pos : 0 < min rf' ↑r
y : E
hy : ↑‖y‖₊ < min rf' ↑r
y_mem : y ∈ EMetric.ball 0 rf
fy_mem : f (x + y) ∈ EMetric.ball (f x) rg
A : Tendsto (fun n => ∑ a in Finset.Ico 1 n, ↑(p a) fun _b => y) atTop (𝓝 (f (x + y) - f x))
B : Tendsto (fun n => partialSum q n (∑ a in Finset.Ico 1 n, ↑(p a) fun _b => y)) atTop (𝓝 (g (f (x + y))))
C :
  Tendsto (fun n => ∑ i in compPartialSumTarget 0 n n, ↑(compAlongComposition q p i.snd) fun _j => y) atTop
    (𝓝 (g (f (x + y))))
n : ℕ
c : Composition n
this : ↑‖y‖₊ ≤ ↑r
⊢ ‖y‖ ≤ ↑r
[PROOFSTEP]
rwa [ENNReal.coe_le_coe, ← NNReal.coe_le_coe, coe_nnnorm] at this 
[GOAL]
case intro.intro.intro.intro.intro.intro
𝕜 : 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
g : F → G
f : E → F
q : FormalMultilinearSeries 𝕜 F G
p : FormalMultilinearSeries 𝕜 E F
x : E
rg : ℝ≥0∞
Hg : HasFPowerSeriesOnBall g q (f x) rg
rf : ℝ≥0∞
Hf : HasFPowerSeriesOnBall f p x rf
r : ℝ≥0
r_pos : 0 < r
hr : Summable fun i => ‖compAlongComposition q p i.snd‖₊ * r ^ i.fst
δ : ℝ≥0∞
δpos : 0 < δ
hδ : ∀ {z : E}, z ∈ EMetric.ball x δ → f z ∈ EMetric.ball (f x) rg
rf' : ℝ≥0∞ := min rf δ
min_pos : 0 < min rf' ↑r
y : E
hy : y ∈ EMetric.ball 0 (min rf' ↑r)
y_mem : y ∈ EMetric.ball 0 rf
fy_mem : f (x + y) ∈ EMetric.ball (f x) rg
A : Tendsto (fun n => ∑ a in Finset.Ico 1 n, ↑(p a) fun _b => y) atTop (𝓝 (f (x + y) - f x))
B : Tendsto (fun n => partialSum q n (∑ a in Finset.Ico 1 n, ↑(p a) fun _b => y)) atTop (𝓝 (g (f (x + y))))
C :
  Tendsto (fun n => ∑ i in compPartialSumTarget 0 n n, ↑(compAlongComposition q p i.snd) fun _j => y) atTop
    (𝓝 (g (f (x + y))))
D : HasSum (fun i => ↑(compAlongComposition q p i.snd) fun _j => y) (g (f (x + y)))
⊢ HasSum (fun n => ↑(FormalMultilinearSeries.comp q p n) fun x => y) ((g ∘ f) (x + y))
[PROOFSTEP]
have E : HasSum (fun n => (q.comp p) n fun _j => y) (g (f (x + y))) :=
  by
  apply D.sigma
  intro n
  dsimp [FormalMultilinearSeries.comp]
  convert hasSum_fintype (α := G) (β := Composition n) _
  simp only [ContinuousMultilinearMap.sum_apply]
  rfl
[GOAL]
𝕜 : 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
g : F → G
f : E → F
q : FormalMultilinearSeries 𝕜 F G
p : FormalMultilinearSeries 𝕜 E F
x : E
rg : ℝ≥0∞
Hg : HasFPowerSeriesOnBall g q (f x) rg
rf : ℝ≥0∞
Hf : HasFPowerSeriesOnBall f p x rf
r : ℝ≥0
r_pos : 0 < r
hr : Summable fun i => ‖compAlongComposition q p i.snd‖₊ * r ^ i.fst
δ : ℝ≥0∞
δpos : 0 < δ
hδ : ∀ {z : E}, z ∈ EMetric.ball x δ → f z ∈ EMetric.ball (f x) rg
rf' : ℝ≥0∞ := min rf δ
min_pos : 0 < min rf' ↑r
y : E
hy : y ∈ EMetric.ball 0 (min rf' ↑r)
y_mem : y ∈ EMetric.ball 0 rf
fy_mem : f (x + y) ∈ EMetric.ball (f x) rg
A : Tendsto (fun n => ∑ a in Finset.Ico 1 n, ↑(p a) fun _b => y) atTop (𝓝 (f (x + y) - f x))
B : Tendsto (fun n => partialSum q n (∑ a in Finset.Ico 1 n, ↑(p a) fun _b => y)) atTop (𝓝 (g (f (x + y))))
C :
  Tendsto (fun n => ∑ i in compPartialSumTarget 0 n n, ↑(compAlongComposition q p i.snd) fun _j => y) atTop
    (𝓝 (g (f (x + y))))
D : HasSum (fun i => ↑(compAlongComposition q p i.snd) fun _j => y) (g (f (x + y)))
⊢ HasSum (fun n => ↑(FormalMultilinearSeries.comp q p n) fun _j => y) (g (f (x + y)))
[PROOFSTEP]
apply D.sigma
[GOAL]
𝕜 : 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
g : F → G
f : E → F
q : FormalMultilinearSeries 𝕜 F G
p : FormalMultilinearSeries 𝕜 E F
x : E
rg : ℝ≥0∞
Hg : HasFPowerSeriesOnBall g q (f x) rg
rf : ℝ≥0∞
Hf : HasFPowerSeriesOnBall f p x rf
r : ℝ≥0
r_pos : 0 < r
hr : Summable fun i => ‖compAlongComposition q p i.snd‖₊ * r ^ i.fst
δ : ℝ≥0∞
δpos : 0 < δ
hδ : ∀ {z : E}, z ∈ EMetric.ball x δ → f z ∈ EMetric.ball (f x) rg
rf' : ℝ≥0∞ := min rf δ
min_pos : 0 < min rf' ↑r
y : E
hy : y ∈ EMetric.ball 0 (min rf' ↑r)
y_mem : y ∈ EMetric.ball 0 rf
fy_mem : f (x + y) ∈ EMetric.ball (f x) rg
A : Tendsto (fun n => ∑ a in Finset.Ico 1 n, ↑(p a) fun _b => y) atTop (𝓝 (f (x + y) - f x))
B : Tendsto (fun n => partialSum q n (∑ a in Finset.Ico 1 n, ↑(p a) fun _b => y)) atTop (𝓝 (g (f (x + y))))
C :
  Tendsto (fun n => ∑ i in compPartialSumTarget 0 n n, ↑(compAlongComposition q p i.snd) fun _j => y) atTop
    (𝓝 (g (f (x + y))))
D : HasSum (fun i => ↑(compAlongComposition q p i.snd) fun _j => y) (g (f (x + y)))
⊢ ∀ (b : ℕ),
    HasSum (fun c => ↑(compAlongComposition q p { fst := b, snd := c }.snd) fun _j => y)
      (↑(FormalMultilinearSeries.comp q p b) fun _j => y)
[PROOFSTEP]
intro n
[GOAL]
𝕜 : 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
g : F → G
f : E → F
q : FormalMultilinearSeries 𝕜 F G
p : FormalMultilinearSeries 𝕜 E F
x : E
rg : ℝ≥0∞
Hg : HasFPowerSeriesOnBall g q (f x) rg
rf : ℝ≥0∞
Hf : HasFPowerSeriesOnBall f p x rf
r : ℝ≥0
r_pos : 0 < r
hr : Summable fun i => ‖compAlongComposition q p i.snd‖₊ * r ^ i.fst
δ : ℝ≥0∞
δpos : 0 < δ
hδ : ∀ {z : E}, z ∈ EMetric.ball x δ → f z ∈ EMetric.ball (f x) rg
rf' : ℝ≥0∞ := min rf δ
min_pos : 0 < min rf' ↑r
y : E
hy : y ∈ EMetric.ball 0 (min rf' ↑r)
y_mem : y ∈ EMetric.ball 0 rf
fy_mem : f (x + y) ∈ EMetric.ball (f x) rg
A : Tendsto (fun n => ∑ a in Finset.Ico 1 n, ↑(p a) fun _b => y) atTop (𝓝 (f (x + y) - f x))
B : Tendsto (fun n => partialSum q n (∑ a in Finset.Ico 1 n, ↑(p a) fun _b => y)) atTop (𝓝 (g (f (x + y))))
C :
  Tendsto (fun n => ∑ i in compPartialSumTarget 0 n n, ↑(compAlongComposition q p i.snd) fun _j => y) atTop
    (𝓝 (g (f (x + y))))
D : HasSum (fun i => ↑(compAlongComposition q p i.snd) fun _j => y) (g (f (x + y)))
n : ℕ
⊢ HasSum (fun c => ↑(compAlongComposition q p { fst := n, snd := c }.snd) fun _j => y)
    (↑(FormalMultilinearSeries.comp q p n) fun _j => y)
[PROOFSTEP]
dsimp [FormalMultilinearSeries.comp]
[GOAL]
𝕜 : 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
g : F → G
f : E → F
q : FormalMultilinearSeries 𝕜 F G
p : FormalMultilinearSeries 𝕜 E F
x : E
rg : ℝ≥0∞
Hg : HasFPowerSeriesOnBall g q (f x) rg
rf : ℝ≥0∞
Hf : HasFPowerSeriesOnBall f p x rf
r : ℝ≥0
r_pos : 0 < r
hr : Summable fun i => ‖compAlongComposition q p i.snd‖₊ * r ^ i.fst
δ : ℝ≥0∞
δpos : 0 < δ
hδ : ∀ {z : E}, z ∈ EMetric.ball x δ → f z ∈ EMetric.ball (f x) rg
rf' : ℝ≥0∞ := min rf δ
min_pos : 0 < min rf' ↑r
y : E
hy : y ∈ EMetric.ball 0 (min rf' ↑r)
y_mem : y ∈ EMetric.ball 0 rf
fy_mem : f (x + y) ∈ EMetric.ball (f x) rg
A : Tendsto (fun n => ∑ a in Finset.Ico 1 n, ↑(p a) fun _b => y) atTop (𝓝 (f (x + y) - f x))
B : Tendsto (fun n => partialSum q n (∑ a in Finset.Ico 1 n, ↑(p a) fun _b => y)) atTop (𝓝 (g (f (x + y))))
C :
  Tendsto (fun n => ∑ i in compPartialSumTarget 0 n n, ↑(compAlongComposition q p i.snd) fun _j => y) atTop
    (𝓝 (g (f (x + y))))
D : HasSum (fun i => ↑(compAlongComposition q p i.snd) fun _j => y) (g (f (x + y)))
n : ℕ
⊢ HasSum (fun c => ↑(q (Composition.length c)) (applyComposition p c fun _j => y))
    (↑(∑ c : Composition n, compAlongComposition q p c) fun _j => y)
[PROOFSTEP]
convert hasSum_fintype (α := G) (β := Composition n) _
[GOAL]
case h.e'_6
𝕜 : 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
g : F → G
f : E → F
q : FormalMultilinearSeries 𝕜 F G
p : FormalMultilinearSeries 𝕜 E F
x : E
rg : ℝ≥0∞
Hg : HasFPowerSeriesOnBall g q (f x) rg
rf : ℝ≥0∞
Hf : HasFPowerSeriesOnBall f p x rf
r : ℝ≥0
r_pos : 0 < r
hr : Summable fun i => ‖compAlongComposition q p i.snd‖₊ * r ^ i.fst
δ : ℝ≥0∞
δpos : 0 < δ
hδ : ∀ {z : E}, z ∈ EMetric.ball x δ → f z ∈ EMetric.ball (f x) rg
rf' : ℝ≥0∞ := min rf δ
min_pos : 0 < min rf' ↑r
y : E
hy : y ∈ EMetric.ball 0 (min rf' ↑r)
y_mem : y ∈ EMetric.ball 0 rf
fy_mem : f (x + y) ∈ EMetric.ball (f x) rg
A : Tendsto (fun n => ∑ a in Finset.Ico 1 n, ↑(p a) fun _b => y) atTop (𝓝 (f (x + y) - f x))
B : Tendsto (fun n => partialSum q n (∑ a in Finset.Ico 1 n, ↑(p a) fun _b => y)) atTop (𝓝 (g (f (x + y))))
C :
  Tendsto (fun n => ∑ i in compPartialSumTarget 0 n n, ↑(compAlongComposition q p i.snd) fun _j => y) atTop
    (𝓝 (g (f (x + y))))
D : HasSum (fun i => ↑(compAlongComposition q p i.snd) fun _j => y) (g (f (x + y)))
n : ℕ
⊢ (↑(∑ c : Composition n, compAlongComposition q p c) fun _j => y) =
    ∑ b : Composition n, ↑(q (Composition.length b)) (applyComposition p b fun _j => y)
[PROOFSTEP]
simp only [ContinuousMultilinearMap.sum_apply]
[GOAL]
case h.e'_6
𝕜 : 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
g : F → G
f : E → F
q : FormalMultilinearSeries 𝕜 F G
p : FormalMultilinearSeries 𝕜 E F
x : E
rg : ℝ≥0∞
Hg : HasFPowerSeriesOnBall g q (f x) rg
rf : ℝ≥0∞
Hf : HasFPowerSeriesOnBall f p x rf
r : ℝ≥0
r_pos : 0 < r
hr : Summable fun i => ‖compAlongComposition q p i.snd‖₊ * r ^ i.fst
δ : ℝ≥0∞
δpos : 0 < δ
hδ : ∀ {z : E}, z ∈ EMetric.ball x δ → f z ∈ EMetric.ball (f x) rg
rf' : ℝ≥0∞ := min rf δ
min_pos : 0 < min rf' ↑r
y : E
hy : y ∈ EMetric.ball 0 (min rf' ↑r)
y_mem : y ∈ EMetric.ball 0 rf
fy_mem : f (x + y) ∈ EMetric.ball (f x) rg
A : Tendsto (fun n => ∑ a in Finset.Ico 1 n, ↑(p a) fun _b => y) atTop (𝓝 (f (x + y) - f x))
B : Tendsto (fun n => partialSum q n (∑ a in Finset.Ico 1 n, ↑(p a) fun _b => y)) atTop (𝓝 (g (f (x + y))))
C :
  Tendsto (fun n => ∑ i in compPartialSumTarget 0 n n, ↑(compAlongComposition q p i.snd) fun _j => y) atTop
    (𝓝 (g (f (x + y))))
D : HasSum (fun i => ↑(compAlongComposition q p i.snd) fun _j => y) (g (f (x + y)))
n : ℕ
⊢ (∑ x : Composition n, ↑(compAlongComposition q p x) fun _j => y) =
    ∑ b : Composition n, ↑(q (Composition.length b)) (applyComposition p b fun _j => y)
[PROOFSTEP]
rfl
[GOAL]
case intro.intro.intro.intro.intro.intro
𝕜 : 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
g : F → G
f : E✝ → F
q : FormalMultilinearSeries 𝕜 F G
p : FormalMultilinearSeries 𝕜 E✝ F
x : E✝
rg : ℝ≥0∞
Hg : HasFPowerSeriesOnBall g q (f x) rg
rf : ℝ≥0∞
Hf : HasFPowerSeriesOnBall f p x rf
r : ℝ≥0
r_pos : 0 < r
hr : Summable fun i => ‖compAlongComposition q p i.snd‖₊ * r ^ i.fst
δ : ℝ≥0∞
δpos : 0 < δ
hδ : ∀ {z : E✝}, z ∈ EMetric.ball x δ → f z ∈ EMetric.ball (f x) rg
rf' : ℝ≥0∞ := min rf δ
min_pos : 0 < min rf' ↑r
y : E✝
hy : y ∈ EMetric.ball 0 (min rf' ↑r)
y_mem : y ∈ EMetric.ball 0 rf
fy_mem : f (x + y) ∈ EMetric.ball (f x) rg
A : Tendsto (fun n => ∑ a in Finset.Ico 1 n, ↑(p a) fun _b => y) atTop (𝓝 (f (x + y) - f x))
B : Tendsto (fun n => partialSum q n (∑ a in Finset.Ico 1 n, ↑(p a) fun _b => y)) atTop (𝓝 (g (f (x + y))))
C :
  Tendsto (fun n => ∑ i in compPartialSumTarget 0 n n, ↑(compAlongComposition q p i.snd) fun _j => y) atTop
    (𝓝 (g (f (x + y))))
D : HasSum (fun i => ↑(compAlongComposition q p i.snd) fun _j => y) (g (f (x + y)))
E : HasSum (fun n => ↑(FormalMultilinearSeries.comp q p n) fun _j => y) (g (f (x + y)))
⊢ HasSum (fun n => ↑(FormalMultilinearSeries.comp q p n) fun x => y) ((g ∘ f) (x + y))
[PROOFSTEP]
rw [Function.comp_apply]
[GOAL]
case intro.intro.intro.intro.intro.intro
𝕜 : 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
g : F → G
f : E✝ → F
q : FormalMultilinearSeries 𝕜 F G
p : FormalMultilinearSeries 𝕜 E✝ F
x : E✝
rg : ℝ≥0∞
Hg : HasFPowerSeriesOnBall g q (f x) rg
rf : ℝ≥0∞
Hf : HasFPowerSeriesOnBall f p x rf
r : ℝ≥0
r_pos : 0 < r
hr : Summable fun i => ‖compAlongComposition q p i.snd‖₊ * r ^ i.fst
δ : ℝ≥0∞
δpos : 0 < δ
hδ : ∀ {z : E✝}, z ∈ EMetric.ball x δ → f z ∈ EMetric.ball (f x) rg
rf' : ℝ≥0∞ := min rf δ
min_pos : 0 < min rf' ↑r
y : E✝
hy : y ∈ EMetric.ball 0 (min rf' ↑r)
y_mem : y ∈ EMetric.ball 0 rf
fy_mem : f (x + y) ∈ EMetric.ball (f x) rg
A : Tendsto (fun n => ∑ a in Finset.Ico 1 n, ↑(p a) fun _b => y) atTop (𝓝 (f (x + y) - f x))
B : Tendsto (fun n => partialSum q n (∑ a in Finset.Ico 1 n, ↑(p a) fun _b => y)) atTop (𝓝 (g (f (x + y))))
C :
  Tendsto (fun n => ∑ i in compPartialSumTarget 0 n n, ↑(compAlongComposition q p i.snd) fun _j => y) atTop
    (𝓝 (g (f (x + y))))
D : HasSum (fun i => ↑(compAlongComposition q p i.snd) fun _j => y) (g (f (x + y)))
E : HasSum (fun n => ↑(FormalMultilinearSeries.comp q p n) fun _j => y) (g (f (x + y)))
⊢ HasSum (fun n => ↑(FormalMultilinearSeries.comp q p n) fun x => y) (g (f (x + y)))
[PROOFSTEP]
exact E
[GOAL]
𝕜 : 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 : ℕ
i j : (a : Composition n) × Composition (length a)
⊢ i = j ↔ i.fst.blocks = j.fst.blocks ∧ i.snd.blocks = j.snd.blocks
[PROOFSTEP]
refine' ⟨by rintro rfl; exact ⟨rfl, rfl⟩, _⟩
[GOAL]
𝕜 : 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 : ℕ
i j : (a : Composition n) × Composition (length a)
⊢ i = j → i.fst.blocks = j.fst.blocks ∧ i.snd.blocks = j.snd.blocks
[PROOFSTEP]
rintro rfl
[GOAL]
𝕜 : 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 : ℕ
i : (a : Composition n) × Composition (length a)
⊢ i.fst.blocks = i.fst.blocks ∧ i.snd.blocks = i.snd.blocks
[PROOFSTEP]
exact ⟨rfl, rfl⟩
[GOAL]
𝕜 : 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 : ℕ
i j : (a : Composition n) × Composition (length a)
⊢ i.fst.blocks = j.fst.blocks ∧ i.snd.blocks = j.snd.blocks → i = j
[PROOFSTEP]
rcases i with ⟨a, b⟩
[GOAL]
case mk
𝕜 : 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 : ℕ
j : (a : Composition n) × Composition (length a)
a : Composition n
b : Composition (length a)
⊢ { fst := a, snd := b }.fst.blocks = j.fst.blocks ∧ { fst := a, snd := b }.snd.blocks = j.snd.blocks →
    { fst := a, snd := b } = j
[PROOFSTEP]
rcases j with ⟨a', b'⟩
[GOAL]
case mk.mk
𝕜 : 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 : ℕ
a : Composition n
b : Composition (length a)
a' : Composition n
b' : Composition (length a')
⊢ { fst := a, snd := b }.fst.blocks = { fst := a', snd := b' }.fst.blocks ∧
      { fst := a, snd := b }.snd.blocks = { fst := a', snd := b' }.snd.blocks →
    { fst := a, snd := b } = { fst := a', snd := b' }
[PROOFSTEP]
rintro ⟨h, h'⟩
[GOAL]
case mk.mk.intro
𝕜 : 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 : ℕ
a : Composition n
b : Composition (length a)
a' : Composition n
b' : Composition (length a')
h : { fst := a, snd := b }.fst.blocks = { fst := a', snd := b' }.fst.blocks
h' : { fst := a, snd := b }.snd.blocks = { fst := a', snd := b' }.snd.blocks
⊢ { fst := a, snd := b } = { fst := a', snd := b' }
[PROOFSTEP]
have H : a = a' := by ext1; exact h
[GOAL]
𝕜 : 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 : ℕ
a : Composition n
b : Composition (length a)
a' : Composition n
b' : Composition (length a')
h : { fst := a, snd := b }.fst.blocks = { fst := a', snd := b' }.fst.blocks
h' : { fst := a, snd := b }.snd.blocks = { fst := a', snd := b' }.snd.blocks
⊢ a = a'
[PROOFSTEP]
ext1
[GOAL]
case blocks
𝕜 : 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 : ℕ
a : Composition n
b : Composition (length a)
a' : Composition n
b' : Composition (length a')
h : { fst := a, snd := b }.fst.blocks = { fst := a', snd := b' }.fst.blocks
h' : { fst := a, snd := b }.snd.blocks = { fst := a', snd := b' }.snd.blocks
⊢ a.blocks = a'.blocks
[PROOFSTEP]
exact h
[GOAL]
case mk.mk.intro
𝕜 : 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 : ℕ
a : Composition n
b : Composition (length a)
a' : Composition n
b' : Composition (length a')
h : { fst := a, snd := b }.fst.blocks = { fst := a', snd := b' }.fst.blocks
h' : { fst := a, snd := b }.snd.blocks = { fst := a', snd := b' }.snd.blocks
H : a = a'
⊢ { fst := a, snd := b } = { fst := a', snd := b' }
[PROOFSTEP]
induction H
[GOAL]
case mk.mk.intro.refl
𝕜 : 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 : ℕ
a : Composition n
b : Composition (length a)
a' : Composition n
b' : Composition (length a)
h : { fst := a, snd := b }.fst.blocks = { fst := a, snd := b' }.fst.blocks
h' : { fst := a, snd := b }.snd.blocks = { fst := a, snd := b' }.snd.blocks
⊢ { fst := a, snd := b } = { fst := a, snd := b' }
[PROOFSTEP]
congr
[GOAL]
case mk.mk.intro.refl.e_snd
𝕜 : 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 : ℕ
a : Composition n
b : Composition (length a)
a' : Composition n
b' : Composition (length a)
h : { fst := a, snd := b }.fst.blocks = { fst := a, snd := b' }.fst.blocks
h' : { fst := a, snd := b }.snd.blocks = { fst := a, snd := b' }.snd.blocks
⊢ b = b'
[PROOFSTEP]
ext1
[GOAL]
case mk.mk.intro.refl.e_snd.blocks
𝕜 : 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 : ℕ
a : Composition n
b : Composition (length a)
a' : Composition n
b' : Composition (length a)
h : { fst := a, snd := b }.fst.blocks = { fst := a, snd := b' }.fst.blocks
h' : { fst := a, snd := b }.snd.blocks = { fst := a, snd := b' }.snd.blocks
⊢ b.blocks = b'.blocks
[PROOFSTEP]
exact h'
[GOAL]
𝕜 : 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 : ℕ
u v : (c : Composition n) × ((i : Fin (length c)) → Composition (blocksFun c i))
⊢ u = v ↔ (ofFn fun i => (Sigma.snd u i).blocks) = ofFn fun i => (Sigma.snd v i).blocks
[PROOFSTEP]
refine' ⟨fun H => by rw [H], fun H => _⟩
[GOAL]
𝕜 : 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 : ℕ
u v : (c : Composition n) × ((i : Fin (length c)) → Composition (blocksFun c i))
H : u = v
⊢ (ofFn fun i => (Sigma.snd u i).blocks) = ofFn fun i => (Sigma.snd v i).blocks
[PROOFSTEP]
rw [H]
[GOAL]
𝕜 : 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 : ℕ
u v : (c : Composition n) × ((i : Fin (length c)) → Composition (blocksFun c i))
H : (ofFn fun i => (Sigma.snd u i).blocks) = ofFn fun i => (Sigma.snd v i).blocks
⊢ u = v
[PROOFSTEP]
rcases u with ⟨a, b⟩
[GOAL]
case mk
𝕜 : 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 : ℕ
v : (c : Composition n) × ((i : Fin (length c)) → Composition (blocksFun c i))
a : Composition n
b : (i : Fin (length a)) → Composition (blocksFun a i)
H : (ofFn fun i => (Sigma.snd { fst := a, snd := b } i).blocks) = ofFn fun i => (Sigma.snd v i).blocks
⊢ { fst := a, snd := b } = v
[PROOFSTEP]
rcases v with ⟨a', b'⟩
[GOAL]
case mk.mk
𝕜 : 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 : ℕ
a : Composition n
b : (i : Fin (length a)) → Composition (blocksFun a i)
a' : Composition n
b' : (i : Fin (length a')) → Composition (blocksFun a' i)
H :
  (ofFn fun i => (Sigma.snd { fst := a, snd := b } i).blocks) =
    ofFn fun i => (Sigma.snd { fst := a', snd := b' } i).blocks
⊢ { fst := a, snd := b } = { fst := a', snd := b' }
[PROOFSTEP]
dsimp at H 
[GOAL]
case mk.mk
𝕜 : 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 : ℕ
a : Composition n
b : (i : Fin (length a)) → Composition (blocksFun a i)
a' : Composition n
b' : (i : Fin (length a')) → Composition (blocksFun a' i)
H : (ofFn fun i => (b i).blocks) = ofFn fun i => (b' i).blocks
⊢ { fst := a, snd := b } = { fst := a', snd := b' }
[PROOFSTEP]
have h : a = a' := by
  ext1
  have :
    map List.sum (ofFn fun i : Fin (Composition.length a) => (b i).blocks) =
      map List.sum (ofFn fun i : Fin (Composition.length a') => (b' i).blocks) :=
    by rw [H]
  simp only [map_ofFn] at this 
  change
    (ofFn fun i : Fin (Composition.length a) => (b i).blocks.sum) =
      ofFn fun i : Fin (Composition.length a') => (b' i).blocks.sum at
    this 
  simpa [Composition.blocks_sum, Composition.ofFn_blocksFun] using this
[GOAL]
𝕜 : 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 : ℕ
a : Composition n
b : (i : Fin (length a)) → Composition (blocksFun a i)
a' : Composition n
b' : (i : Fin (length a')) → Composition (blocksFun a' i)
H : (ofFn fun i => (b i).blocks) = ofFn fun i => (b' i).blocks
⊢ a = a'
[PROOFSTEP]
ext1
[GOAL]
case blocks
𝕜 : 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 : ℕ
a : Composition n
b : (i : Fin (length a)) → Composition (blocksFun a i)
a' : Composition n
b' : (i : Fin (length a')) → Composition (blocksFun a' i)
H : (ofFn fun i => (b i).blocks) = ofFn fun i => (b' i).blocks
⊢ a.blocks = a'.blocks
[PROOFSTEP]
have :
  map List.sum (ofFn fun i : Fin (Composition.length a) => (b i).blocks) =
    map List.sum (ofFn fun i : Fin (Composition.length a') => (b' i).blocks) :=
  by rw [H]
[GOAL]
𝕜 : 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 : ℕ
a : Composition n
b : (i : Fin (length a)) → Composition (blocksFun a i)
a' : Composition n
b' : (i : Fin (length a')) → Composition (blocksFun a' i)
H : (ofFn fun i => (b i).blocks) = ofFn fun i => (b' i).blocks
⊢ List.map sum (ofFn fun i => (b i).blocks) = List.map sum (ofFn fun i => (b' i).blocks)
[PROOFSTEP]
rw [H]
[GOAL]
case blocks
𝕜 : 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 : ℕ
a : Composition n
b : (i : Fin (length a)) → Composition (blocksFun a i)
a' : Composition n
b' : (i : Fin (length a')) → Composition (blocksFun a' i)
H : (ofFn fun i => (b i).blocks) = ofFn fun i => (b' i).blocks
this : List.map sum (ofFn fun i => (b i).blocks) = List.map sum (ofFn fun i => (b' i).blocks)
⊢ a.blocks = a'.blocks
[PROOFSTEP]
simp only [map_ofFn] at this 
[GOAL]
case blocks
𝕜 : 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 : ℕ
a : Composition n
b : (i : Fin (length a)) → Composition (blocksFun a i)
a' : Composition n
b' : (i : Fin (length a')) → Composition (blocksFun a' i)
H : (ofFn fun i => (b i).blocks) = ofFn fun i => (b' i).blocks
this : ofFn (sum ∘ fun i => (b i).blocks) = ofFn (sum ∘ fun i => (b' i).blocks)
⊢ a.blocks = a'.blocks
[PROOFSTEP]
change
  (ofFn fun i : Fin (Composition.length a) => (b i).blocks.sum) =
    ofFn fun i : Fin (Composition.length a') => (b' i).blocks.sum at
  this 
[GOAL]
case blocks
𝕜 : 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 : ℕ
a : Composition n
b : (i : Fin (length a)) → Composition (blocksFun a i)
a' : Composition n
b' : (i : Fin (length a')) → Composition (blocksFun a' i)
H : (ofFn fun i => (b i).blocks) = ofFn fun i => (b' i).blocks
this : (ofFn fun i => sum (b i).blocks) = ofFn fun i => sum (b' i).blocks
⊢ a.blocks = a'.blocks
[PROOFSTEP]
simpa [Composition.blocks_sum, Composition.ofFn_blocksFun] using this
[GOAL]
case mk.mk
𝕜 : 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 : ℕ
a : Composition n
b : (i : Fin (length a)) → Composition (blocksFun a i)
a' : Composition n
b' : (i : Fin (length a')) → Composition (blocksFun a' i)
H : (ofFn fun i => (b i).blocks) = ofFn fun i => (b' i).blocks
h : a = a'
⊢ { fst := a, snd := b } = { fst := a', snd := b' }
[PROOFSTEP]
induction h
[GOAL]
case mk.mk.refl
𝕜 : 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 : ℕ
a : Composition n
b : (i : Fin (length a)) → Composition (blocksFun a i)
a' : Composition n
b' : (i : Fin (length a)) → Composition (blocksFun a i)
H : (ofFn fun i => (b i).blocks) = ofFn fun i => (b' i).blocks
⊢ { fst := a, snd := b } = { fst := a, snd := b' }
[PROOFSTEP]
ext1
[GOAL]
case mk.mk.refl.h₀
𝕜 : 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 : ℕ
a : Composition n
b : (i : Fin (length a)) → Composition (blocksFun a i)
a' : Composition n
b' : (i : Fin (length a)) → Composition (blocksFun a i)
H : (ofFn fun i => (b i).blocks) = ofFn fun i => (b' i).blocks
⊢ { fst := a, snd := b }.fst = { fst := a, snd := b' }.fst
[PROOFSTEP]
rfl
[GOAL]
case mk.mk.refl.h₁
𝕜 : 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 : ℕ
a : Composition n
b : (i : Fin (length a)) → Composition (blocksFun a i)
a' : Composition n
b' : (i : Fin (length a)) → Composition (blocksFun a i)
H : (ofFn fun i => (b i).blocks) = ofFn fun i => (b' i).blocks
⊢ HEq { fst := a, snd := b }.snd { fst := a, snd := b' }.snd
[PROOFSTEP]
simp only [heq_eq_eq, ofFn_inj] at H ⊢
[GOAL]
case mk.mk.refl.h₁
𝕜 : 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 : ℕ
a : Composition n
b : (i : Fin (length a)) → Composition (blocksFun a i)
a' : Composition n
b' : (i : Fin (length a)) → Composition (blocksFun a i)
H : (fun i => (b i).blocks) = fun i => (b' i).blocks
⊢ b = b'
[PROOFSTEP]
ext1 i
[GOAL]
case mk.mk.refl.h₁.h
𝕜 : 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 : ℕ
a : Composition n
b : (i : Fin (length a)) → Composition (blocksFun a i)
a' : Composition n
b' : (i : Fin (length a)) → Composition (blocksFun a i)
H : (fun i => (b i).blocks) = fun i => (b' i).blocks
i : Fin (length a)
⊢ b i = b' i
[PROOFSTEP]
ext1
[GOAL]
case mk.mk.refl.h₁.h.blocks
𝕜 : 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 : ℕ
a : Composition n
b : (i : Fin (length a)) → Composition (blocksFun a i)
a' : Composition n
b' : (i : Fin (length a)) → Composition (blocksFun a i)
H : (fun i => (b i).blocks) = fun i => (b' i).blocks
i : Fin (length a)
⊢ (b i).blocks = (b' i).blocks
[PROOFSTEP]
exact congrFun H i
[GOAL]
𝕜 : 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 : ℕ
a : Composition n
b : Composition (length a)
⊢ ∀ {i : ℕ}, i ∈ List.map sum (splitWrtComposition a.blocks b) → 0 < i
[PROOFSTEP]
rw [forall_mem_map_iff]
[GOAL]
𝕜 : 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 : ℕ
a : Composition n
b : Composition (length a)
⊢ ∀ (j : List ℕ), j ∈ splitWrtComposition a.blocks b → 0 < sum j
[PROOFSTEP]
intro j hj
[GOAL]
𝕜 : 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 : ℕ
a : Composition n
b : Composition (length a)
j : List ℕ
hj : j ∈ splitWrtComposition a.blocks b
⊢ 0 < sum j
[PROOFSTEP]
suffices H : ∀ i ∈ j, 1 ≤ i
[GOAL]
𝕜 : 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 : ℕ
a : Composition n
b : Composition (length a)
j : List ℕ
hj : j ∈ splitWrtComposition a.blocks b
H : ∀ (i : ℕ), i ∈ j → 1 ≤ i
⊢ 0 < sum j
case H
𝕜 : 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 : ℕ
a : Composition n
b : Composition (length a)
j : List ℕ
hj : j ∈ splitWrtComposition a.blocks b
⊢ ∀ (i : ℕ), i ∈ j → 1 ≤ i
[PROOFSTEP]
exact
  calc
    0 < j.length := length_pos_of_mem_splitWrtComposition hj
    _ ≤ j.sum := length_le_sum_of_one_le _ H
[GOAL]
case H
𝕜 : 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 : ℕ
a : Composition n
b : Composition (length a)
j : List ℕ
hj : j ∈ splitWrtComposition a.blocks b
⊢ ∀ (i : ℕ), i ∈ j → 1 ≤ i
[PROOFSTEP]
intro i hi
[GOAL]
case H
𝕜 : 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 : ℕ
a : Composition n
b : Composition (length a)
j : List ℕ
hj : j ∈ splitWrtComposition a.blocks b
i : ℕ
hi : i ∈ j
⊢ 1 ≤ i
[PROOFSTEP]
apply a.one_le_blocks
[GOAL]
case H
𝕜 : 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 : ℕ
a : Composition n
b : Composition (length a)
j : List ℕ
hj : j ∈ splitWrtComposition a.blocks b
i : ℕ
hi : i ∈ j
⊢ i ∈ a.blocks
[PROOFSTEP]
rw [← a.blocks.join_splitWrtComposition b]
[GOAL]
case H
𝕜 : 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 : ℕ
a : Composition n
b : Composition (length a)
j : List ℕ
hj : j ∈ splitWrtComposition a.blocks b
i : ℕ
hi : i ∈ j
⊢ i ∈ List.join (splitWrtComposition a.blocks b)
[PROOFSTEP]
exact mem_join_of_mem hj hi
[GOAL]
𝕜 : 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 : ℕ
a : Composition n
b : Composition (length a)
⊢ sum (List.map sum (splitWrtComposition a.blocks b)) = n
[PROOFSTEP]
rw [← sum_join, join_splitWrtComposition, a.blocks_sum]
[GOAL]
𝕜 : 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 : ℕ
a : Composition n
b : Composition (length a)
⊢ List.length (List.map sum (splitWrtComposition a.blocks b)) = List.length b.blocks
[PROOFSTEP]
rw [length_map, length_splitWrtComposition]
[GOAL]
𝕜 : 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 : ℕ
a : Composition n
b : Composition (length a)
i : Fin (length (gather a b))
⊢ ↑i < List.length (splitWrtComposition a.blocks b)
[PROOFSTEP]
rw [length_splitWrtComposition, ← length_gather]
[GOAL]
𝕜 : 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 : ℕ
a : Composition n
b : Composition (length a)
i : Fin (length (gather a b))
⊢ ↑i < length (gather a b)
[PROOFSTEP]
exact i.2
[GOAL]
𝕜 : 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 : ℕ
a : Composition n
b : Composition (length a)
i✝ : Fin (length (gather a b))
i : ℕ
hi :
  i ∈
    List.get (splitWrtComposition a.blocks b)
      { val := ↑i✝, isLt := (_ : ↑i✝ < List.length (splitWrtComposition a.blocks b)) }
⊢ i ∈ a.blocks
[PROOFSTEP]
rw [← a.blocks.join_splitWrtComposition b]
[GOAL]
𝕜 : 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 : ℕ
a : Composition n
b : Composition (length a)
i✝ : Fin (length (gather a b))
i : ℕ
hi :
  i ∈
    List.get (splitWrtComposition a.blocks b)
      { val := ↑i✝, isLt := (_ : ↑i✝ < List.length (splitWrtComposition a.blocks b)) }
⊢ i ∈ List.join (splitWrtComposition a.blocks b)
[PROOFSTEP]
exact mem_join_of_mem (List.get_mem _ _ _) hi
[GOAL]
𝕜 : 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 : ℕ
a : Composition n
b : Composition (length a)
i : Fin (length (gather a b))
⊢ sum
      (List.get (splitWrtComposition a.blocks b)
        { val := ↑i, isLt := (_ : ↑i < List.length (splitWrtComposition a.blocks b)) }) =
    blocksFun (gather a b) i
[PROOFSTEP]
simp only [Composition.blocksFun, nthLe_map', Composition.gather]
[GOAL]
𝕜 : 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 : ℕ
a : Composition n
b : Composition (length a)
i : Fin (length (gather a b))
⊢ sum
      (List.get (splitWrtComposition a.blocks b)
        { val := ↑i, isLt := (_ : ↑i < List.length (splitWrtComposition a.blocks b)) }) =
    sum (nthLe (splitWrtComposition a.blocks b) ↑i (_ : ↑i < List.length (splitWrtComposition a.blocks b)))
[PROOFSTEP]
rfl
[GOAL]
𝕜 : 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 : ℕ
a : Composition n
b : Composition (length a)
i : Fin (length b)
⊢ List.length
      (nthLe (splitWrtComposition a.blocks b) ↑i
        (_ : ↑{ val := ↑i, isLt := (_ : ↑i < length (gather a b)) } < List.length (splitWrtComposition a.blocks b))) =
    blocksFun b i
[PROOFSTEP]
rw [nthLe_map_rev List.length, nthLe_of_eq (map_length_splitWrtComposition _ _)]
[GOAL]
𝕜 : 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 : ℕ
a : Composition n
b : Composition (length a)
i : Fin (length b)
⊢ nthLe b.blocks ↑i (_ : ↑i < List.length b.blocks) = blocksFun b i
[PROOFSTEP]
rfl
[GOAL]
𝕜 : 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 : ℕ
a : Composition n
b : Composition (length a)
i : Fin (length b)
j : Fin (blocksFun b i)
⊢ nthLe
      (nthLe (splitWrtComposition a.blocks b) ↑{ val := ↑i, isLt := (_ : ↑i < length (gather a b)) }
        (_ : ↑{ val := ↑i, isLt := (_ : ↑i < length (gather a b)) } < List.length (splitWrtComposition a.blocks b)))
      ↑{ val := ↑j,
          isLt := (_ : ↑j < length (sigmaCompositionAux a b { val := ↑i, isLt := (_ : ↑i < length (gather a b)) })) }
      (_ :
        ↑{ val := ↑j,
              isLt :=
                (_ : ↑j < length (sigmaCompositionAux a b { val := ↑i, isLt := (_ : ↑i < length (gather a b)) })) } <
          length (sigmaCompositionAux a b { val := ↑i, isLt := (_ : ↑i < length (gather a b)) })) =
    nthLe a.blocks ↑(↑(embedding b i) j) (_ : ↑(↑(embedding b i) j) < length a)
[PROOFSTEP]
rw [nthLe_of_eq (nthLe_splitWrtComposition _ _ _), nthLe_drop', nthLe_take']
[GOAL]
𝕜 : 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 : ℕ
a : Composition n
b : Composition (length a)
i : Fin (length b)
j : Fin (blocksFun b i)
⊢ nthLe a.blocks
      (sizeUpTo b ↑{ val := ↑i, isLt := (_ : ↑i < length (gather a b)) } +
        ↑{ val := ↑j,
            isLt := (_ : ↑j < length (sigmaCompositionAux a b { val := ↑i, isLt := (_ : ↑i < length (gather a b)) })) })
      (_ :
        sizeUpTo b ↑{ val := ↑i, isLt := (_ : ↑i < length (gather a b)) } +
            ↑{ val := ↑j,
                isLt :=
                  (_ : ↑j < length (sigmaCompositionAux a b { val := ↑i, isLt := (_ : ↑i < length (gather a b)) })) } <
          List.length a.blocks) =
    nthLe a.blocks ↑(↑(embedding b i) j) (_ : ↑(↑(embedding b i) j) < length a)
[PROOFSTEP]
rfl
[GOAL]
𝕜 : 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 : ℕ
a : Composition n
b : Composition (length a)
i j : ℕ
hi : i < length b
hj : j < blocksFun b { val := i, isLt := hi }
⊢ sizeUpTo a (sizeUpTo b i + j) =
    sizeUpTo (gather a b) i + sizeUpTo (sigmaCompositionAux a b { val := i, isLt := (_ : i < length (gather a b)) }) j
[PROOFSTEP]
induction j with
| zero =>
  show sum (take (b.blocks.take i).sum a.blocks) = sum (take i (map sum (splitWrtComposition a.blocks b)))
  induction' i with i IH
  · rfl
  · have A : i < b.length := Nat.lt_of_succ_lt hi
    have B : i < List.length (map List.sum (splitWrtComposition a.blocks b)) := by simp [A]
    have C : 0 < blocksFun b ⟨i, A⟩ := Composition.blocks_pos' _ _ _
    rw [sum_take_succ _ _ B, ← IH A C]
    have :
      take (sum (take i b.blocks)) a.blocks =
        take (sum (take i b.blocks)) (take (sum (take (i + 1) b.blocks)) a.blocks) :=
      by
      rw [take_take, min_eq_left]
      apply monotone_sum_take _ (Nat.le_succ _)
    rw [this, nthLe_map', nthLe_splitWrtComposition, ←
      take_append_drop (sum (take i b.blocks)) (take (sum (take (Nat.succ i) b.blocks)) a.blocks), sum_append]
    congr
    rw [take_append_drop]
| succ j IHj =>
  have A : j < blocksFun b ⟨i, hi⟩ := lt_trans (lt_add_one j) hj
  have B : j < length (sigmaCompositionAux a b ⟨i, (length_gather a b).symm ▸ hi⟩) := by convert A;
    rw [← length_sigmaCompositionAux]
  have C : sizeUpTo b i + j < sizeUpTo b (i + 1) :=
    by
    simp only [sizeUpTo_succ b hi, add_lt_add_iff_left]
    exact A
  have D : sizeUpTo b i + j < length a := lt_of_lt_of_le C (b.sizeUpTo_le _)
  have : sizeUpTo b i + Nat.succ j = (sizeUpTo b i + j).succ := rfl
  rw [this, sizeUpTo_succ _ D, IHj A, sizeUpTo_succ _ B]
  simp only [sigmaCompositionAux, add_assoc, add_left_inj, Fin.val_mk]
  simp_rw [← nthLe_eq]
  rw [nthLe_of_eq (nthLe_splitWrtComposition _ _ _), nthLe_drop', nthLe_take _ _ C]
[GOAL]
𝕜 : 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 : ℕ
a : Composition n
b : Composition (length a)
i j : ℕ
hi : i < length b
hj : j < blocksFun b { val := i, isLt := hi }
⊢ sizeUpTo a (sizeUpTo b i + j) =
    sizeUpTo (gather a b) i + sizeUpTo (sigmaCompositionAux a b { val := i, isLt := (_ : i < length (gather a b)) }) j
[PROOFSTEP]
induction j with
| zero =>
  show sum (take (b.blocks.take i).sum a.blocks) = sum (take i (map sum (splitWrtComposition a.blocks b)))
  induction' i with i IH
  · rfl
  · have A : i < b.length := Nat.lt_of_succ_lt hi
    have B : i < List.length (map List.sum (splitWrtComposition a.blocks b)) := by simp [A]
    have C : 0 < blocksFun b ⟨i, A⟩ := Composition.blocks_pos' _ _ _
    rw [sum_take_succ _ _ B, ← IH A C]
    have :
      take (sum (take i b.blocks)) a.blocks =
        take (sum (take i b.blocks)) (take (sum (take (i + 1) b.blocks)) a.blocks) :=
      by
      rw [take_take, min_eq_left]
      apply monotone_sum_take _ (Nat.le_succ _)
    rw [this, nthLe_map', nthLe_splitWrtComposition, ←
      take_append_drop (sum (take i b.blocks)) (take (sum (take (Nat.succ i) b.blocks)) a.blocks), sum_append]
    congr
    rw [take_append_drop]
| succ j IHj =>
  have A : j < blocksFun b ⟨i, hi⟩ := lt_trans (lt_add_one j) hj
  have B : j < length (sigmaCompositionAux a b ⟨i, (length_gather a b).symm ▸ hi⟩) := by convert A;
    rw [← length_sigmaCompositionAux]
  have C : sizeUpTo b i + j < sizeUpTo b (i + 1) :=
    by
    simp only [sizeUpTo_succ b hi, add_lt_add_iff_left]
    exact A
  have D : sizeUpTo b i + j < length a := lt_of_lt_of_le C (b.sizeUpTo_le _)
  have : sizeUpTo b i + Nat.succ j = (sizeUpTo b i + j).succ := rfl
  rw [this, sizeUpTo_succ _ D, IHj A, sizeUpTo_succ _ B]
  simp only [sigmaCompositionAux, add_assoc, add_left_inj, Fin.val_mk]
  simp_rw [← nthLe_eq]
  rw [nthLe_of_eq (nthLe_splitWrtComposition _ _ _), nthLe_drop', nthLe_take _ _ C]
[GOAL]
case zero
𝕜 : 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 : ℕ
a : Composition n
b : Composition (length a)
i : ℕ
hi : i < length b
hj : Nat.zero < blocksFun b { val := i, isLt := hi }
⊢ sizeUpTo a (sizeUpTo b i + Nat.zero) =
    sizeUpTo (gather a b) i +
      sizeUpTo (sigmaCompositionAux a b { val := i, isLt := (_ : i < length (gather a b)) }) Nat.zero
[PROOFSTEP]

| zero =>
  show sum (take (b.blocks.take i).sum a.blocks) = sum (take i (map sum (splitWrtComposition a.blocks b)))
  induction' i with i IH
  · rfl
  · have A : i < b.length := Nat.lt_of_succ_lt hi
    have B : i < List.length (map List.sum (splitWrtComposition a.blocks b)) := by simp [A]
    have C : 0 < blocksFun b ⟨i, A⟩ := Composition.blocks_pos' _ _ _
    rw [sum_take_succ _ _ B, ← IH A C]
    have :
      take (sum (take i b.blocks)) a.blocks =
        take (sum (take i b.blocks)) (take (sum (take (i + 1) b.blocks)) a.blocks) :=
      by
      rw [take_take, min_eq_left]
      apply monotone_sum_take _ (Nat.le_succ _)
    rw [this, nthLe_map', nthLe_splitWrtComposition, ←
      take_append_drop (sum (take i b.blocks)) (take (sum (take (Nat.succ i) b.blocks)) a.blocks), sum_append]
    congr
    rw [take_append_drop]
[GOAL]
case zero
𝕜 : 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 : ℕ
a : Composition n
b : Composition (length a)
i : ℕ
hi : i < length b
hj : Nat.zero < blocksFun b { val := i, isLt := hi }
⊢ sizeUpTo a (sizeUpTo b i + Nat.zero) =
    sizeUpTo (gather a b) i +
      sizeUpTo (sigmaCompositionAux a b { val := i, isLt := (_ : i < length (gather a b)) }) Nat.zero
[PROOFSTEP]
show sum (take (b.blocks.take i).sum a.blocks) = sum (take i (map sum (splitWrtComposition a.blocks b)))
[GOAL]
case zero
𝕜 : 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 : ℕ
a : Composition n
b : Composition (length a)
i : ℕ
hi : i < length b
hj : Nat.zero < blocksFun b { val := i, isLt := hi }
⊢ sum (take (sum (take i b.blocks)) a.blocks) = sum (take i (List.map sum (splitWrtComposition a.blocks b)))
[PROOFSTEP]
induction' i with i IH
[GOAL]
case zero.zero
𝕜 : 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 : ℕ
a : Composition n
b : Composition (length a)
i : ℕ
hi✝ : i < length b
hj✝ : Nat.zero < blocksFun b { val := i, isLt := hi✝ }
hi : Nat.zero < length b
hj : Nat.zero < blocksFun b { val := Nat.zero, isLt := hi }
⊢ sum (take (sum (take Nat.zero b.blocks)) a.blocks) =
    sum (take Nat.zero (List.map sum (splitWrtComposition a.blocks b)))
[PROOFSTEP]
rfl
[GOAL]
case zero.succ
𝕜 : 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 : ℕ
a : Composition n
b : Composition (length a)
i✝ : ℕ
hi✝ : i✝ < length b
hj✝ : Nat.zero < blocksFun b { val := i✝, isLt := hi✝ }
i : ℕ
IH :
  ∀ (hi : i < length b),
    Nat.zero < blocksFun b { val := i, isLt := hi } →
      sum (take (sum (take i b.blocks)) a.blocks) = sum (take i (List.map sum (splitWrtComposition a.blocks b)))
hi : Nat.succ i < length b
hj : Nat.zero < blocksFun b { val := Nat.succ i, isLt := hi }
⊢ sum (take (sum (take (Nat.succ i) b.blocks)) a.blocks) =
    sum (take (Nat.succ i) (List.map sum (splitWrtComposition a.blocks b)))
[PROOFSTEP]
have A : i < b.length := Nat.lt_of_succ_lt hi
[GOAL]
case zero.succ
𝕜 : 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 : ℕ
a : Composition n
b : Composition (length a)
i✝ : ℕ
hi✝ : i✝ < length b
hj✝ : Nat.zero < blocksFun b { val := i✝, isLt := hi✝ }
i : ℕ
IH :
  ∀ (hi : i < length b),
    Nat.zero < blocksFun b { val := i, isLt := hi } →
      sum (take (sum (take i b.blocks)) a.blocks) = sum (take i (List.map sum (splitWrtComposition a.blocks b)))
hi : Nat.succ i < length b
hj : Nat.zero < blocksFun b { val := Nat.succ i, isLt := hi }
A : i < length b
⊢ sum (take (sum (take (Nat.succ i) b.blocks)) a.blocks) =
    sum (take (Nat.succ i) (List.map sum (splitWrtComposition a.blocks b)))
[PROOFSTEP]
have B : i < List.length (map List.sum (splitWrtComposition a.blocks b)) := by simp [A]
[GOAL]
𝕜 : 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 : ℕ
a : Composition n
b : Composition (length a)
i✝ : ℕ
hi✝ : i✝ < length b
hj✝ : Nat.zero < blocksFun b { val := i✝, isLt := hi✝ }
i : ℕ
IH :
  ∀ (hi : i < length b),
    Nat.zero < blocksFun b { val := i, isLt := hi } →
      sum (take (sum (take i b.blocks)) a.blocks) = sum (take i (List.map sum (splitWrtComposition a.blocks b)))
hi : Nat.succ i < length b
hj : Nat.zero < blocksFun b { val := Nat.succ i, isLt := hi }
A : i < length b
⊢ i < List.length (List.map sum (splitWrtComposition a.blocks b))
[PROOFSTEP]
simp [A]
[GOAL]
case zero.succ
𝕜 : 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 : ℕ
a : Composition n
b : Composition (length a)
i✝ : ℕ
hi✝ : i✝ < length b
hj✝ : Nat.zero < blocksFun b { val := i✝, isLt := hi✝ }
i : ℕ
IH :
  ∀ (hi : i < length b),
    Nat.zero < blocksFun b { val := i, isLt := hi } →
      sum (take (sum (take i b.blocks)) a.blocks) = sum (take i (List.map sum (splitWrtComposition a.blocks b)))
hi : Nat.succ i < length b
hj : Nat.zero < blocksFun b { val := Nat.succ i, isLt := hi }
A : i < length b
B : i < List.length (List.map sum (splitWrtComposition a.blocks b))
⊢ sum (take (sum (take (Nat.succ i) b.blocks)) a.blocks) =
    sum (take (Nat.succ i) (List.map sum (splitWrtComposition a.blocks b)))
[PROOFSTEP]
have C : 0 < blocksFun b ⟨i, A⟩ := Composition.blocks_pos' _ _ _
[GOAL]
case zero.succ
𝕜 : 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 : ℕ
a : Composition n
b : Composition (length a)
i✝ : ℕ
hi✝ : i✝ < length b
hj✝ : Nat.zero < blocksFun b { val := i✝, isLt := hi✝ }
i : ℕ
IH :
  ∀ (hi : i < length b),
    Nat.zero < blocksFun b { val := i, isLt := hi } →
      sum (take (sum (take i b.blocks)) a.blocks) = sum (take i (List.map sum (splitWrtComposition a.blocks b)))
hi : Nat.succ i < length b
hj : Nat.zero < blocksFun b { val := Nat.succ i, isLt := hi }
A : i < length b
B : i < List.length (List.map sum (splitWrtComposition a.blocks b))
C : 0 < blocksFun b { val := i, isLt := A }
⊢ sum (take (sum (take (Nat.succ i) b.blocks)) a.blocks) =
    sum (take (Nat.succ i) (List.map sum (splitWrtComposition a.blocks b)))
[PROOFSTEP]
rw [sum_take_succ _ _ B, ← IH A C]
[GOAL]
case zero.succ
𝕜 : 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 : ℕ
a : Composition n
b : Composition (length a)
i✝ : ℕ
hi✝ : i✝ < length b
hj✝ : Nat.zero < blocksFun b { val := i✝, isLt := hi✝ }
i : ℕ
IH :
  ∀ (hi : i < length b),
    Nat.zero < blocksFun b { val := i, isLt := hi } →
      sum (take (sum (take i b.blocks)) a.blocks) = sum (take i (List.map sum (splitWrtComposition a.blocks b)))
hi : Nat.succ i < length b
hj : Nat.zero < blocksFun b { val := Nat.succ i, isLt := hi }
A : i < length b
B : i < List.length (List.map sum (splitWrtComposition a.blocks b))
C : 0 < blocksFun b { val := i, isLt := A }
⊢ sum (take (sum (take (Nat.succ i) b.blocks)) a.blocks) =
    sum (take (sum (take i b.blocks)) a.blocks) + nthLe (List.map sum (splitWrtComposition a.blocks b)) i B
[PROOFSTEP]
have :
  take (sum (take i b.blocks)) a.blocks = take (sum (take i b.blocks)) (take (sum (take (i + 1) b.blocks)) a.blocks) :=
  by
  rw [take_take, min_eq_left]
  apply monotone_sum_take _ (Nat.le_succ _)
[GOAL]
𝕜 : 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 : ℕ
a : Composition n
b : Composition (length a)
i✝ : ℕ
hi✝ : i✝ < length b
hj✝ : Nat.zero < blocksFun b { val := i✝, isLt := hi✝ }
i : ℕ
IH :
  ∀ (hi : i < length b),
    Nat.zero < blocksFun b { val := i, isLt := hi } →
      sum (take (sum (take i b.blocks)) a.blocks) = sum (take i (List.map sum (splitWrtComposition a.blocks b)))
hi : Nat.succ i < length b
hj : Nat.zero < blocksFun b { val := Nat.succ i, isLt := hi }
A : i < length b
B : i < List.length (List.map sum (splitWrtComposition a.blocks b))
C : 0 < blocksFun b { val := i, isLt := A }
⊢ take (sum (take i b.blocks)) a.blocks = take (sum (take i b.blocks)) (take (sum (take (i + 1) b.blocks)) a.blocks)
[PROOFSTEP]
rw [take_take, min_eq_left]
[GOAL]
𝕜 : 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 : ℕ
a : Composition n
b : Composition (length a)
i✝ : ℕ
hi✝ : i✝ < length b
hj✝ : Nat.zero < blocksFun b { val := i✝, isLt := hi✝ }
i : ℕ
IH :
  ∀ (hi : i < length b),
    Nat.zero < blocksFun b { val := i, isLt := hi } →
      sum (take (sum (take i b.blocks)) a.blocks) = sum (take i (List.map sum (splitWrtComposition a.blocks b)))
hi : Nat.succ i < length b
hj : Nat.zero < blocksFun b { val := Nat.succ i, isLt := hi }
A : i < length b
B : i < List.length (List.map sum (splitWrtComposition a.blocks b))
C : 0 < blocksFun b { val := i, isLt := A }
⊢ sum (take i b.blocks) ≤ sum (take (i + 1) b.blocks)
[PROOFSTEP]
apply monotone_sum_take _ (Nat.le_succ _)
[GOAL]
case zero.succ
𝕜 : 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 : ℕ
a : Composition n
b : Composition (length a)
i✝ : ℕ
hi✝ : i✝ < length b
hj✝ : Nat.zero < blocksFun b { val := i✝, isLt := hi✝ }
i : ℕ
IH :
  ∀ (hi : i < length b),
    Nat.zero < blocksFun b { val := i, isLt := hi } →
      sum (take (sum (take i b.blocks)) a.blocks) = sum (take i (List.map sum (splitWrtComposition a.blocks b)))
hi : Nat.succ i < length b
hj : Nat.zero < blocksFun b { val := Nat.succ i, isLt := hi }
A : i < length b
B : i < List.length (List.map sum (splitWrtComposition a.blocks b))
C : 0 < blocksFun b { val := i, isLt := A }
this :
  take (sum (take i b.blocks)) a.blocks = take (sum (take i b.blocks)) (take (sum (take (i + 1) b.blocks)) a.blocks)
⊢ sum (take (sum (take (Nat.succ i) b.blocks)) a.blocks) =
    sum (take (sum (take i b.blocks)) a.blocks) + nthLe (List.map sum (splitWrtComposition a.blocks b)) i B
[PROOFSTEP]
rw [this, nthLe_map', nthLe_splitWrtComposition, ←
  take_append_drop (sum (take i b.blocks)) (take (sum (take (Nat.succ i) b.blocks)) a.blocks), sum_append]
[GOAL]
case zero.succ
𝕜 : 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 : ℕ
a : Composition n
b : Composition (length a)
i✝ : ℕ
hi✝ : i✝ < length b
hj✝ : Nat.zero < blocksFun b { val := i✝, isLt := hi✝ }
i : ℕ
IH :
  ∀ (hi : i < length b),
    Nat.zero < blocksFun b { val := i, isLt := hi } →
      sum (take (sum (take i b.blocks)) a.blocks) = sum (take i (List.map sum (splitWrtComposition a.blocks b)))
hi : Nat.succ i < length b
hj : Nat.zero < blocksFun b { val := Nat.succ i, isLt := hi }
A : i < length b
B : i < List.length (List.map sum (splitWrtComposition a.blocks b))
C : 0 < blocksFun b { val := i, isLt := A }
this :
  take (sum (take i b.blocks)) a.blocks = take (sum (take i b.blocks)) (take (sum (take (i + 1) b.blocks)) a.blocks)
⊢ sum (take (sum (take i b.blocks)) (take (sum (take (Nat.succ i) b.blocks)) a.blocks)) +
      sum (drop (sum (take i b.blocks)) (take (sum (take (Nat.succ i) b.blocks)) a.blocks)) =
    sum
        (take (sum (take i b.blocks))
          (take (sum (take i b.blocks)) (take (sum (take (Nat.succ i) b.blocks)) a.blocks) ++
            drop (sum (take i b.blocks)) (take (sum (take (Nat.succ i) b.blocks)) a.blocks))) +
      sum (drop (sizeUpTo b i) (take (sizeUpTo b (i + 1)) a.blocks))
[PROOFSTEP]
congr
[GOAL]
case zero.succ.e_a.e_a.e_a
𝕜 : 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 : ℕ
a : Composition n
b : Composition (length a)
i✝ : ℕ
hi✝ : i✝ < length b
hj✝ : Nat.zero < blocksFun b { val := i✝, isLt := hi✝ }
i : ℕ
IH :
  ∀ (hi : i < length b),
    Nat.zero < blocksFun b { val := i, isLt := hi } →
      sum (take (sum (take i b.blocks)) a.blocks) = sum (take i (List.map sum (splitWrtComposition a.blocks b)))
hi : Nat.succ i < length b
hj : Nat.zero < blocksFun b { val := Nat.succ i, isLt := hi }
A : i < length b
B : i < List.length (List.map sum (splitWrtComposition a.blocks b))
C : 0 < blocksFun b { val := i, isLt := A }
this :
  take (sum (take i b.blocks)) a.blocks = take (sum (take i b.blocks)) (take (sum (take (i + 1) b.blocks)) a.blocks)
⊢ take (sum (take (Nat.succ i) b.blocks)) a.blocks =
    take (sum (take i b.blocks)) (take (sum (take (Nat.succ i) b.blocks)) a.blocks) ++
      drop (sum (take i b.blocks)) (take (sum (take (Nat.succ i) b.blocks)) a.blocks)
[PROOFSTEP]
rw [take_append_drop]
[GOAL]
case succ
𝕜 : 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 : ℕ
a : Composition n
b : Composition (length a)
i : ℕ
hi : i < length b
j : ℕ
IHj :
  j < blocksFun b { val := i, isLt := hi } →
    sizeUpTo a (sizeUpTo b i + j) =
      sizeUpTo (gather a b) i + sizeUpTo (sigmaCompositionAux a b { val := i, isLt := (_ : i < length (gather a b)) }) j
hj : Nat.succ j < blocksFun b { val := i, isLt := hi }
⊢ sizeUpTo a (sizeUpTo b i + Nat.succ j) =
    sizeUpTo (gather a b) i +
      sizeUpTo (sigmaCompositionAux a b { val := i, isLt := (_ : i < length (gather a b)) }) (Nat.succ j)
[PROOFSTEP]

| succ j IHj =>
  have A : j < blocksFun b ⟨i, hi⟩ := lt_trans (lt_add_one j) hj
  have B : j < length (sigmaCompositionAux a b ⟨i, (length_gather a b).symm ▸ hi⟩) := by convert A;
    rw [← length_sigmaCompositionAux]
  have C : sizeUpTo b i + j < sizeUpTo b (i + 1) :=
    by
    simp only [sizeUpTo_succ b hi, add_lt_add_iff_left]
    exact A
  have D : sizeUpTo b i + j < length a := lt_of_lt_of_le C (b.sizeUpTo_le _)
  have : sizeUpTo b i + Nat.succ j = (sizeUpTo b i + j).succ := rfl
  rw [this, sizeUpTo_succ _ D, IHj A, sizeUpTo_succ _ B]
  simp only [sigmaCompositionAux, add_assoc, add_left_inj, Fin.val_mk]
  simp_rw [← nthLe_eq]
  rw [nthLe_of_eq (nthLe_splitWrtComposition _ _ _), nthLe_drop', nthLe_take _ _ C]
[GOAL]
case succ
𝕜 : 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 : ℕ
a : Composition n
b : Composition (length a)
i : ℕ
hi : i < length b
j : ℕ
IHj :
  j < blocksFun b { val := i, isLt := hi } →
    sizeUpTo a (sizeUpTo b i + j) =
      sizeUpTo (gather a b) i + sizeUpTo (sigmaCompositionAux a b { val := i, isLt := (_ : i < length (gather a b)) }) j
hj : Nat.succ j < blocksFun b { val := i, isLt := hi }
⊢ sizeUpTo a (sizeUpTo b i + Nat.succ j) =
    sizeUpTo (gather a b) i +
      sizeUpTo (sigmaCompositionAux a b { val := i, isLt := (_ : i < length (gather a b)) }) (Nat.succ j)
[PROOFSTEP]
have A : j < blocksFun b ⟨i, hi⟩ := lt_trans (lt_add_one j) hj
[GOAL]
case succ
𝕜 : 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 : ℕ
a : Composition n
b : Composition (length a)
i : ℕ
hi : i < length b
j : ℕ
IHj :
  j < blocksFun b { val := i, isLt := hi } →
    sizeUpTo a (sizeUpTo b i + j) =
      sizeUpTo (gather a b) i + sizeUpTo (sigmaCompositionAux a b { val := i, isLt := (_ : i < length (gather a b)) }) j
hj : Nat.succ j < blocksFun b { val := i, isLt := hi }
A : j < blocksFun b { val := i, isLt := hi }
⊢ sizeUpTo a (sizeUpTo b i + Nat.succ j) =
    sizeUpTo (gather a b) i +
      sizeUpTo (sigmaCompositionAux a b { val := i, isLt := (_ : i < length (gather a b)) }) (Nat.succ j)
[PROOFSTEP]
have B : j < length (sigmaCompositionAux a b ⟨i, (length_gather a b).symm ▸ hi⟩) := by convert A;
  rw [← length_sigmaCompositionAux]
[GOAL]
𝕜 : 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 : ℕ
a : Composition n
b : Composition (length a)
i : ℕ
hi : i < length b
j : ℕ
IHj :
  j < blocksFun b { val := i, isLt := hi } →
    sizeUpTo a (sizeUpTo b i + j) =
      sizeUpTo (gather a b) i + sizeUpTo (sigmaCompositionAux a b { val := i, isLt := (_ : i < length (gather a b)) }) j
hj : Nat.succ j < blocksFun b { val := i, isLt := hi }
A : j < blocksFun b { val := i, isLt := hi }
⊢ j < length (sigmaCompositionAux a b { val := i, isLt := (_ : i < length (gather a b)) })
[PROOFSTEP]
convert A
[GOAL]
case h.e'_4
𝕜 : 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 : ℕ
a : Composition n
b : Composition (length a)
i : ℕ
hi : i < length b
j : ℕ
IHj :
  j < blocksFun b { val := i, isLt := hi } →
    sizeUpTo a (sizeUpTo b i + j) =
      sizeUpTo (gather a b) i + sizeUpTo (sigmaCompositionAux a b { val := i, isLt := (_ : i < length (gather a b)) }) j
hj : Nat.succ j < blocksFun b { val := i, isLt := hi }
A : j < blocksFun b { val := i, isLt := hi }
⊢ length (sigmaCompositionAux a b { val := i, isLt := (_ : i < length (gather a b)) }) =
    blocksFun b { val := i, isLt := hi }
[PROOFSTEP]
rw [← length_sigmaCompositionAux]
[GOAL]
case succ
𝕜 : 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 : ℕ
a : Composition n
b : Composition (length a)
i : ℕ
hi : i < length b
j : ℕ
IHj :
  j < blocksFun b { val := i, isLt := hi } →
    sizeUpTo a (sizeUpTo b i + j) =
      sizeUpTo (gather a b) i + sizeUpTo (sigmaCompositionAux a b { val := i, isLt := (_ : i < length (gather a b)) }) j
hj : Nat.succ j < blocksFun b { val := i, isLt := hi }
A : j < blocksFun b { val := i, isLt := hi }
B : j < length (sigmaCompositionAux a b { val := i, isLt := (_ : i < length (gather a b)) })
⊢ sizeUpTo a (sizeUpTo b i + Nat.succ j) =
    sizeUpTo (gather a b) i +
      sizeUpTo (sigmaCompositionAux a b { val := i, isLt := (_ : i < length (gather a b)) }) (Nat.succ j)
[PROOFSTEP]
have C : sizeUpTo b i + j < sizeUpTo b (i + 1) :=
  by
  simp only [sizeUpTo_succ b hi, add_lt_add_iff_left]
  exact A
[GOAL]
𝕜 : 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 : ℕ
a : Composition n
b : Composition (length a)
i : ℕ
hi : i < length b
j : ℕ
IHj :
  j < blocksFun b { val := i, isLt := hi } →
    sizeUpTo a (sizeUpTo b i + j) =
      sizeUpTo (gather a b) i + sizeUpTo (sigmaCompositionAux a b { val := i, isLt := (_ : i < length (gather a b)) }) j
hj : Nat.succ j < blocksFun b { val := i, isLt := hi }
A : j < blocksFun b { val := i, isLt := hi }
B : j < length (sigmaCompositionAux a b { val := i, isLt := (_ : i < length (gather a b)) })
⊢ sizeUpTo b i + j < sizeUpTo b (i + 1)
[PROOFSTEP]
simp only [sizeUpTo_succ b hi, add_lt_add_iff_left]
[GOAL]
𝕜 : 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 : ℕ
a : Composition n
b : Composition (length a)
i : ℕ
hi : i < length b
j : ℕ
IHj :
  j < blocksFun b { val := i, isLt := hi } →
    sizeUpTo a (sizeUpTo b i + j) =
      sizeUpTo (gather a b) i + sizeUpTo (sigmaCompositionAux a b { val := i, isLt := (_ : i < length (gather a b)) }) j
hj : Nat.succ j < blocksFun b { val := i, isLt := hi }
A : j < blocksFun b { val := i, isLt := hi }
B : j < length (sigmaCompositionAux a b { val := i, isLt := (_ : i < length (gather a b)) })
⊢ j < nthLe b.blocks i hi
[PROOFSTEP]
exact A
[GOAL]
case succ
𝕜 : 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 : ℕ
a : Composition n
b : Composition (length a)
i : ℕ
hi : i < length b
j : ℕ
IHj :
  j < blocksFun b { val := i, isLt := hi } →
    sizeUpTo a (sizeUpTo b i + j) =
      sizeUpTo (gather a b) i + sizeUpTo (sigmaCompositionAux a b { val := i, isLt := (_ : i < length (gather a b)) }) j
hj : Nat.succ j < blocksFun b { val := i, isLt := hi }
A : j < blocksFun b { val := i, isLt := hi }
B : j < length (sigmaCompositionAux a b { val := i, isLt := (_ : i < length (gather a b)) })
C : sizeUpTo b i + j < sizeUpTo b (i + 1)
⊢ sizeUpTo a (sizeUpTo b i + Nat.succ j) =
    sizeUpTo (gather a b) i +
      sizeUpTo (sigmaCompositionAux a b { val := i, isLt := (_ : i < length (gather a b)) }) (Nat.succ j)
[PROOFSTEP]
have D : sizeUpTo b i + j < length a := lt_of_lt_of_le C (b.sizeUpTo_le _)
[GOAL]
case succ
𝕜 : 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 : ℕ
a : Composition n
b : Composition (length a)
i : ℕ
hi : i < length b
j : ℕ
IHj :
  j < blocksFun b { val := i, isLt := hi } →
    sizeUpTo a (sizeUpTo b i + j) =
      sizeUpTo (gather a b) i + sizeUpTo (sigmaCompositionAux a b { val := i, isLt := (_ : i < length (gather a b)) }) j
hj : Nat.succ j < blocksFun b { val := i, isLt := hi }
A : j < blocksFun b { val := i, isLt := hi }
B : j < length (sigmaCompositionAux a b { val := i, isLt := (_ : i < length (gather a b)) })
C : sizeUpTo b i + j < sizeUpTo b (i + 1)
D : sizeUpTo b i + j < length a
⊢ sizeUpTo a (sizeUpTo b i + Nat.succ j) =
    sizeUpTo (gather a b) i +
      sizeUpTo (sigmaCompositionAux a b { val := i, isLt := (_ : i < length (gather a b)) }) (Nat.succ j)
[PROOFSTEP]
have : sizeUpTo b i + Nat.succ j = (sizeUpTo b i + j).succ := rfl
[GOAL]
case succ
𝕜 : 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 : ℕ
a : Composition n
b : Composition (length a)
i : ℕ
hi : i < length b
j : ℕ
IHj :
  j < blocksFun b { val := i, isLt := hi } →
    sizeUpTo a (sizeUpTo b i + j) =
      sizeUpTo (gather a b) i + sizeUpTo (sigmaCompositionAux a b { val := i, isLt := (_ : i < length (gather a b)) }) j
hj : Nat.succ j < blocksFun b { val := i, isLt := hi }
A : j < blocksFun b { val := i, isLt := hi }
B : j < length (sigmaCompositionAux a b { val := i, isLt := (_ : i < length (gather a b)) })
C : sizeUpTo b i + j < sizeUpTo b (i + 1)
D : sizeUpTo b i + j < length a
this : sizeUpTo b i + Nat.succ j = Nat.succ (sizeUpTo b i + j)
⊢ sizeUpTo a (sizeUpTo b i + Nat.succ j) =
    sizeUpTo (gather a b) i +
      sizeUpTo (sigmaCompositionAux a b { val := i, isLt := (_ : i < length (gather a b)) }) (Nat.succ j)
[PROOFSTEP]
rw [this, sizeUpTo_succ _ D, IHj A, sizeUpTo_succ _ B]
[GOAL]
case succ
𝕜 : 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 : ℕ
a : Composition n
b : Composition (length a)
i : ℕ
hi : i < length b
j : ℕ
IHj :
  j < blocksFun b { val := i, isLt := hi } →
    sizeUpTo a (sizeUpTo b i + j) =
      sizeUpTo (gather a b) i + sizeUpTo (sigmaCompositionAux a b { val := i, isLt := (_ : i < length (gather a b)) }) j
hj : Nat.succ j < blocksFun b { val := i, isLt := hi }
A : j < blocksFun b { val := i, isLt := hi }
B : j < length (sigmaCompositionAux a b { val := i, isLt := (_ : i < length (gather a b)) })
C : sizeUpTo b i + j < sizeUpTo b (i + 1)
D : sizeUpTo b i + j < length a
this : sizeUpTo b i + Nat.succ j = Nat.succ (sizeUpTo b i + j)
⊢ sizeUpTo (gather a b) i + sizeUpTo (sigmaCompositionAux a b { val := i, isLt := (_ : i < length (gather a b)) }) j +
      nthLe a.blocks (sizeUpTo b i + j) D =
    sizeUpTo (gather a b) i +
      (sizeUpTo (sigmaCompositionAux a b { val := i, isLt := (_ : i < length (gather a b)) }) j +
        nthLe (sigmaCompositionAux a b { val := i, isLt := (_ : i < length (gather a b)) }).blocks j B)
[PROOFSTEP]
simp only [sigmaCompositionAux, add_assoc, add_left_inj, Fin.val_mk]
[GOAL]
case succ
𝕜 : 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 : ℕ
a : Composition n
b : Composition (length a)
i : ℕ
hi : i < length b
j : ℕ
IHj :
  j < blocksFun b { val := i, isLt := hi } →
    sizeUpTo a (sizeUpTo b i + j) =
      sizeUpTo (gather a b) i + sizeUpTo (sigmaCompositionAux a b { val := i, isLt := (_ : i < length (gather a b)) }) j
hj : Nat.succ j < blocksFun b { val := i, isLt := hi }
A : j < blocksFun b { val := i, isLt := hi }
B : j < length (sigmaCompositionAux a b { val := i, isLt := (_ : i < length (gather a b)) })
C : sizeUpTo b i + j < sizeUpTo b (i + 1)
D : sizeUpTo b i + j < length a
this : sizeUpTo b i + Nat.succ j = Nat.succ (sizeUpTo b i + j)
⊢ sizeUpTo (gather a b) i +
      (sizeUpTo
          {
            blocks :=
              List.get (splitWrtComposition a.blocks b)
                { val := i,
                  isLt :=
                    (_ :
                      ↑{ val := i, isLt := (_ : i < length (gather a b)) } <
                        List.length (splitWrtComposition a.blocks b)) },
            blocks_pos :=
              (_ :
                ∀ {i_1 : ℕ},
                  i_1 ∈
                      List.get (splitWrtComposition a.blocks b)
                        { val := ↑{ val := i, isLt := (_ : i < length (gather a b)) },
                          isLt :=
                            (_ :
                              ↑{ val := i, isLt := (_ : i < length (gather a b)) } <
                                List.length (splitWrtComposition a.blocks b)) } →
                    0 < i_1),
            blocks_sum :=
              (_ :
                sum
                    (List.get (splitWrtComposition a.blocks b)
                      { val := ↑{ val := i, isLt := (_ : i < length (gather a b)) },
                        isLt :=
                          (_ :
                            ↑{ val := i, isLt := (_ : i < length (gather a b)) } <
                              List.length (splitWrtComposition a.blocks b)) }) =
                  blocksFun (gather a b) { val := i, isLt := (_ : i < length (gather a b)) }) }
          j +
        nthLe a.blocks (sizeUpTo b i + j) D) =
    sizeUpTo (gather a b) i +
      (sizeUpTo
          {
            blocks :=
              List.get (splitWrtComposition a.blocks b)
                { val := i,
                  isLt :=
                    (_ :
                      ↑{ val := i, isLt := (_ : i < length (gather a b)) } <
                        List.length (splitWrtComposition a.blocks b)) },
            blocks_pos :=
              (_ :
                ∀ {i_1 : ℕ},
                  i_1 ∈
                      List.get (splitWrtComposition a.blocks b)
                        { val := ↑{ val := i, isLt := (_ : i < length (gather a b)) },
                          isLt :=
                            (_ :
                              ↑{ val := i, isLt := (_ : i < length (gather a b)) } <
                                List.length (splitWrtComposition a.blocks b)) } →
                    0 < i_1),
            blocks_sum :=
              (_ :
                sum
                    (List.get (splitWrtComposition a.blocks b)
                      { val := ↑{ val := i, isLt := (_ : i < length (gather a b)) },
                        isLt :=
                          (_ :
                            ↑{ val := i, isLt := (_ : i < length (gather a b)) } <
                              List.length (splitWrtComposition a.blocks b)) }) =
                  blocksFun (gather a b) { val := i, isLt := (_ : i < length (gather a b)) }) }
          j +
        nthLe
          (List.get (splitWrtComposition a.blocks b)
            { val := i,
              isLt :=
                (_ :
                  ↑{ val := i, isLt := (_ : i < length (gather a b)) } <
                    List.length (splitWrtComposition a.blocks b)) })
          j
          (_ :
            j <
              List.length
                (List.get (splitWrtComposition a.blocks b)
                  { val := i,
                    isLt :=
                      (_ :
                        ↑{ val := i, isLt := (_ : i < length (gather a b)) } <
                          List.length (splitWrtComposition a.blocks b)) })))
[PROOFSTEP]
simp_rw [← nthLe_eq]
[GOAL]
case succ
𝕜 : 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 : ℕ
a : Composition n
b : Composition (length a)
i : ℕ
hi : i < length b
j : ℕ
IHj :
  j < blocksFun b { val := i, isLt := hi } →
    sizeUpTo a (sizeUpTo b i + j) =
      sizeUpTo (gather a b) i + sizeUpTo (sigmaCompositionAux a b { val := i, isLt := (_ : i < length (gather a b)) }) j
hj : Nat.succ j < blocksFun b { val := i, isLt := hi }
A : j < blocksFun b { val := i, isLt := hi }
B : j < length (sigmaCompositionAux a b { val := i, isLt := (_ : i < length (gather a b)) })
C : sizeUpTo b i + j < sizeUpTo b (i + 1)
D : sizeUpTo b i + j < length a
this : sizeUpTo b i + Nat.succ j = Nat.succ (sizeUpTo b i + j)
⊢ sizeUpTo (gather a b) i +
      (sizeUpTo
          {
            blocks :=
              nthLe (splitWrtComposition a.blocks b) i
                (_ :
                  ↑{ val := i, isLt := (_ : i < length (gather a b)) } < List.length (splitWrtComposition a.blocks b)),
            blocks_pos :=
              (_ :
                ∀ {i_1 : ℕ},
                  i_1 ∈
                      nthLe (splitWrtComposition a.blocks b) i
                        (_ :
                          ↑{ val := i, isLt := (_ : i < length (gather a b)) } <
                            List.length (splitWrtComposition a.blocks b)) →
                    0 < i_1),
            blocks_sum :=
              (_ :
                sum
                    (nthLe (splitWrtComposition a.blocks b) i
                      (_ :
                        ↑{ val := i, isLt := (_ : i < length (gather a b)) } <
                          List.length (splitWrtComposition a.blocks b))) =
                  blocksFun (gather a b) { val := i, isLt := (_ : i < length (gather a b)) }) }
          j +
        nthLe a.blocks (sizeUpTo b i + j) D) =
    sizeUpTo (gather a b) i +
      (sizeUpTo
          {
            blocks :=
              nthLe (splitWrtComposition a.blocks b) i
                (_ :
                  ↑{ val := i, isLt := (_ : i < length (gather a b)) } < List.length (splitWrtComposition a.blocks b)),
            blocks_pos :=
              (_ :
                ∀ {i_1 : ℕ},
                  i_1 ∈
                      nthLe (splitWrtComposition a.blocks b) i
                        (_ :
                          ↑{ val := i, isLt := (_ : i < length (gather a b)) } <
                            List.length (splitWrtComposition a.blocks b)) →
                    0 < i_1),
            blocks_sum :=
              (_ :
                sum
                    (nthLe (splitWrtComposition a.blocks b) i
                      (_ :
                        ↑{ val := i, isLt := (_ : i < length (gather a b)) } <
                          List.length (splitWrtComposition a.blocks b))) =
                  blocksFun (gather a b) { val := i, isLt := (_ : i < length (gather a b)) }) }
          j +
        nthLe
          (nthLe (splitWrtComposition a.blocks b) i
            (_ : ↑{ val := i, isLt := (_ : i < length (gather a b)) } < List.length (splitWrtComposition a.blocks b)))
          j
          (_ :
            j <
              List.length
                (nthLe (splitWrtComposition a.blocks b) i
                  (_ :
                    ↑{ val := i, isLt := (_ : i < length (gather a b)) } <
                      List.length (splitWrtComposition a.blocks b)))))
[PROOFSTEP]
rw [nthLe_of_eq (nthLe_splitWrtComposition _ _ _), nthLe_drop', nthLe_take _ _ C]
[GOAL]
𝕜 : 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✝ n : ℕ
i : (c : Composition n) × ((i : Fin (length c)) → Composition (blocksFun c i))
⊢ ∀ {i_1 : ℕ}, i_1 ∈ List.join (ofFn fun j => (Sigma.snd i j).blocks) → 0 < i_1
[PROOFSTEP]
simp only [and_imp, List.mem_join, exists_imp, forall_mem_ofFn_iff]
[GOAL]
𝕜 : 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✝ n : ℕ
i : (c : Composition n) × ((i : Fin (length c)) → Composition (blocksFun c i))
⊢ ∀ {i_1 : ℕ} (j : Fin (length i.fst)), i_1 ∈ (Sigma.snd i j).blocks → 0 < i_1
[PROOFSTEP]
exact @fun i j hj => Composition.blocks_pos _ hj
[GOAL]
𝕜 : 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✝ n : ℕ
i : (c : Composition n) × ((i : Fin (length c)) → Composition (blocksFun c i))
⊢ sum (List.join (ofFn fun j => (Sigma.snd i j).blocks)) = n
[PROOFSTEP]
simp [sum_ofFn, Composition.blocks_sum, Composition.sum_blocksFun]
[GOAL]
𝕜 : 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✝ n : ℕ
i : (c : Composition n) × ((i : Fin (length c)) → Composition (blocksFun c i))
⊢ ∀ {i_1 : ℕ}, (i_1 ∈ ofFn fun j => length (Sigma.snd i j)) → 0 < i_1
[PROOFSTEP]
intro k hk
[GOAL]
𝕜 : 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✝ n : ℕ
i : (c : Composition n) × ((i : Fin (length c)) → Composition (blocksFun c i))
k : ℕ
hk : k ∈ ofFn fun j => length (Sigma.snd i j)
⊢ 0 < k
[PROOFSTEP]
refine' ((forall_mem_ofFn_iff (P := fun i => 0 < i)).2 fun j => _) k hk
[GOAL]
𝕜 : 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✝ n : ℕ
i : (c : Composition n) × ((i : Fin (length c)) → Composition (blocksFun c i))
k : ℕ
hk : k ∈ ofFn fun j => length (Sigma.snd i j)
j : Fin (length i.fst)
⊢ 0 < length (Sigma.snd i j)
[PROOFSTEP]
exact Composition.length_pos_of_pos _ (Composition.blocks_pos' _ _ _)
[GOAL]
𝕜 : 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✝ n : ℕ
i : (c : Composition n) × ((i : Fin (length c)) → Composition (blocksFun c i))
⊢ sum (ofFn fun j => length (Sigma.snd i j)) =
    length
      { blocks := List.join (ofFn fun j => (Sigma.snd i j).blocks),
        blocks_pos := (_ : ∀ {i_1 : ℕ}, i_1 ∈ List.join (ofFn fun j => (Sigma.snd i j).blocks) → 0 < i_1),
        blocks_sum := (_ : sum (List.join (ofFn fun j => (Sigma.snd i j).blocks)) = n) }
[PROOFSTEP]
dsimp only [Composition.length]
[GOAL]
𝕜 : 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✝ n : ℕ
i : (c : Composition n) × ((i : Fin (length c)) → Composition (blocksFun c i))
⊢ sum (ofFn fun j => List.length (Sigma.snd i j).blocks) =
    List.length (List.join (ofFn fun j => (Sigma.snd i j).blocks))
[PROOFSTEP]
simp [sum_ofFn]
[GOAL]
𝕜 : 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✝ n : ℕ
⊢ Function.LeftInverse
    (fun i =>
      {
        fst :=
          { blocks := List.join (ofFn fun j => (Sigma.snd i j).blocks),
            blocks_pos := (_ : ∀ {i_1 : ℕ}, i_1 ∈ List.join (ofFn fun j => (Sigma.snd i j).blocks) → 0 < i_1),
            blocks_sum := (_ : sum (List.join (ofFn fun j => (Sigma.snd i j).blocks)) = n) },
        snd :=
          { blocks := ofFn fun j => length (Sigma.snd i j),
            blocks_pos := (_ : ∀ {k : ℕ}, (k ∈ ofFn fun j => length (Sigma.snd i j)) → 0 < k),
            blocks_sum :=
              (_ :
                sum (ofFn fun j => length (Sigma.snd i j)) =
                  length
                    { blocks := List.join (ofFn fun j => (Sigma.snd i j).blocks),
                      blocks_pos := (_ : ∀ {i_1 : ℕ}, i_1 ∈ List.join (ofFn fun j => (Sigma.snd i j).blocks) → 0 < i_1),
                      blocks_sum := (_ : sum (List.join (ofFn fun j => (Sigma.snd i j).blocks)) = n) }) } })
    fun i => { fst := gather i.fst i.snd, snd := sigmaCompositionAux i.fst i.snd }
[PROOFSTEP]
rintro ⟨a, b⟩
[GOAL]
case mk
𝕜 : 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✝ n : ℕ
a : Composition n
b : Composition (length a)
⊢ (fun i =>
        {
          fst :=
            { blocks := List.join (ofFn fun j => (Sigma.snd i j).blocks),
              blocks_pos := (_ : ∀ {i_1 : ℕ}, i_1 ∈ List.join (ofFn fun j => (Sigma.snd i j).blocks) → 0 < i_1),
              blocks_sum := (_ : sum (List.join (ofFn fun j => (Sigma.snd i j).blocks)) = n) },
          snd :=
            { blocks := ofFn fun j => length (Sigma.snd i j),
              blocks_pos := (_ : ∀ {k : ℕ}, (k ∈ ofFn fun j => length (Sigma.snd i j)) → 0 < k),
              blocks_sum :=
                (_ :
                  sum (ofFn fun j => length (Sigma.snd i j)) =
                    length
                      { blocks := List.join (ofFn fun j => (Sigma.snd i j).blocks),
                        blocks_pos :=
                          (_ : ∀ {i_1 : ℕ}, i_1 ∈ List.join (ofFn fun j => (Sigma.snd i j).blocks) → 0 < i_1),
                        blocks_sum := (_ : sum (List.join (ofFn fun j => (Sigma.snd i j).blocks)) = n) }) } })
      ((fun i => { fst := gather i.fst i.snd, snd := sigmaCompositionAux i.fst i.snd }) { fst := a, snd := b }) =
    { fst := a, snd := b }
[PROOFSTEP]
rw [sigma_composition_eq_iff]
[GOAL]
case mk
𝕜 : 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✝ n : ℕ
a : Composition n
b : Composition (length a)
⊢ ((fun i =>
              {
                fst :=
                  { blocks := List.join (ofFn fun j => (Sigma.snd i j).blocks),
                    blocks_pos := (_ : ∀ {i_1 : ℕ}, i_1 ∈ List.join (ofFn fun j => (Sigma.snd i j).blocks) → 0 < i_1),
                    blocks_sum := (_ : sum (List.join (ofFn fun j => (Sigma.snd i j).blocks)) = n) },
                snd :=
                  { blocks := ofFn fun j => length (Sigma.snd i j),
                    blocks_pos := (_ : ∀ {k : ℕ}, (k ∈ ofFn fun j => length (Sigma.snd i j)) → 0 < k),
                    blocks_sum :=
                      (_ :
                        sum (ofFn fun j => length (Sigma.snd i j)) =
                          length
                            { blocks := List.join (ofFn fun j => (Sigma.snd i j).blocks),
                              blocks_pos :=
                                (_ : ∀ {i_1 : ℕ}, i_1 ∈ List.join (ofFn fun j => (Sigma.snd i j).blocks) → 0 < i_1),
                              blocks_sum := (_ : sum (List.join (ofFn fun j => (Sigma.snd i j).blocks)) = n) }) } })
            ((fun i => { fst := gather i.fst i.snd, snd := sigmaCompositionAux i.fst i.snd })
              { fst := a, snd := b })).fst.blocks =
      { fst := a, snd := b }.fst.blocks ∧
    ((fun i =>
              {
                fst :=
                  { blocks := List.join (ofFn fun j => (Sigma.snd i j).blocks),
                    blocks_pos := (_ : ∀ {i_1 : ℕ}, i_1 ∈ List.join (ofFn fun j => (Sigma.snd i j).blocks) → 0 < i_1),
                    blocks_sum := (_ : sum (List.join (ofFn fun j => (Sigma.snd i j).blocks)) = n) },
                snd :=
                  { blocks := ofFn fun j => length (Sigma.snd i j),
                    blocks_pos := (_ : ∀ {k : ℕ}, (k ∈ ofFn fun j => length (Sigma.snd i j)) → 0 < k),
                    blocks_sum :=
                      (_ :
                        sum (ofFn fun j => length (Sigma.snd i j)) =
                          length
                            { blocks := List.join (ofFn fun j => (Sigma.snd i j).blocks),
                              blocks_pos :=
                                (_ : ∀ {i_1 : ℕ}, i_1 ∈ List.join (ofFn fun j => (Sigma.snd i j).blocks) → 0 < i_1),
                              blocks_sum := (_ : sum (List.join (ofFn fun j => (Sigma.snd i j).blocks)) = n) }) } })
            ((fun i => { fst := gather i.fst i.snd, snd := sigmaCompositionAux i.fst i.snd })
              { fst := a, snd := b })).snd.blocks =
      { fst := a, snd := b }.snd.blocks
[PROOFSTEP]
dsimp
[GOAL]
case mk
𝕜 : 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✝ n : ℕ
a : Composition n
b : Composition (length a)
⊢ List.join (ofFn fun j => (sigmaCompositionAux a b j).blocks) = a.blocks ∧
    (ofFn fun j => length (sigmaCompositionAux a b j)) = b.blocks
[PROOFSTEP]
constructor
[GOAL]
case mk.left
𝕜 : 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✝ n : ℕ
a : Composition n
b : Composition (length a)
⊢ List.join (ofFn fun j => (sigmaCompositionAux a b j).blocks) = a.blocks
[PROOFSTEP]
conv_rhs => rw [← join_splitWrtComposition a.blocks b, ← ofFn_get (splitWrtComposition a.blocks b)]
[GOAL]
𝕜 : 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✝ n : ℕ
a : Composition n
b : Composition (length a)
| a.blocks
[PROOFSTEP]
rw [← join_splitWrtComposition a.blocks b, ← ofFn_get (splitWrtComposition a.blocks b)]
[GOAL]
𝕜 : 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✝ n : ℕ
a : Composition n
b : Composition (length a)
| a.blocks
[PROOFSTEP]
rw [← join_splitWrtComposition a.blocks b, ← ofFn_get (splitWrtComposition a.blocks b)]
[GOAL]
𝕜 : 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✝ n : ℕ
a : Composition n
b : Composition (length a)
| a.blocks
[PROOFSTEP]
rw [← join_splitWrtComposition a.blocks b, ← ofFn_get (splitWrtComposition a.blocks b)]
[GOAL]
case mk.left
𝕜 : 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✝ n : ℕ
a : Composition n
b : Composition (length a)
⊢ List.join (ofFn fun j => (sigmaCompositionAux a b j).blocks) =
    List.join (ofFn (List.get (splitWrtComposition a.blocks b)))
[PROOFSTEP]
have A : length (gather a b) = List.length (splitWrtComposition a.blocks b) := by
  simp only [length, gather, length_map, length_splitWrtComposition]
[GOAL]
𝕜 : 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✝ n : ℕ
a : Composition n
b : Composition (length a)
⊢ length (gather a b) = List.length (splitWrtComposition a.blocks b)
[PROOFSTEP]
simp only [length, gather, length_map, length_splitWrtComposition]
[GOAL]
case mk.left
𝕜 : 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✝ n : ℕ
a : Composition n
b : Composition (length a)
A : length (gather a b) = List.length (splitWrtComposition a.blocks b)
⊢ List.join (ofFn fun j => (sigmaCompositionAux a b j).blocks) =
    List.join (ofFn (List.get (splitWrtComposition a.blocks b)))
[PROOFSTEP]
congr! 2
[GOAL]
case mk.left.h.e'_2.h.e'_3
𝕜 : 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✝ n : ℕ
a : Composition n
b : Composition (length a)
A : length (gather a b) = List.length (splitWrtComposition a.blocks b)
⊢ HEq (fun j => (sigmaCompositionAux a b j).blocks) (List.get (splitWrtComposition a.blocks b))
[PROOFSTEP]
exact (Fin.heq_fun_iff A (α := List ℕ)).2 fun i => rfl
[GOAL]
case mk.right
𝕜 : 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✝ n : ℕ
a : Composition n
b : Composition (length a)
⊢ (ofFn fun j => length (sigmaCompositionAux a b j)) = b.blocks
[PROOFSTEP]
have B : Composition.length (Composition.gather a b) = List.length b.blocks := Composition.length_gather _ _
[GOAL]
case mk.right
𝕜 : 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✝ n : ℕ
a : Composition n
b : Composition (length a)
B : length (gather a b) = List.length b.blocks
⊢ (ofFn fun j => length (sigmaCompositionAux a b j)) = b.blocks
[PROOFSTEP]
conv_rhs => rw [← ofFn_get b.blocks]
[GOAL]
𝕜 : 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✝ n : ℕ
a : Composition n
b : Composition (length a)
B : length (gather a b) = List.length b.blocks
| b.blocks
[PROOFSTEP]
rw [← ofFn_get b.blocks]
[GOAL]
𝕜 : 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✝ n : ℕ
a : Composition n
b : Composition (length a)
B : length (gather a b) = List.length b.blocks
| b.blocks
[PROOFSTEP]
rw [← ofFn_get b.blocks]
[GOAL]
𝕜 : 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✝ n : ℕ
a : Composition n
b : Composition (length a)
B : length (gather a b) = List.length b.blocks
| b.blocks
[PROOFSTEP]
rw [← ofFn_get b.blocks]
[GOAL]
case mk.right
𝕜 : 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✝ n : ℕ
a : Composition n
b : Composition (length a)
B : length (gather a b) = List.length b.blocks
⊢ (ofFn fun j => length (sigmaCompositionAux a b j)) = ofFn (List.get b.blocks)
[PROOFSTEP]
congr 1
[GOAL]
case mk.right.h.e_3
𝕜 : 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✝ n : ℕ
a : Composition n
b : Composition (length a)
B : length (gather a b) = List.length b.blocks
⊢ HEq (fun j => length (sigmaCompositionAux a b j)) (List.get b.blocks)
[PROOFSTEP]
refine' (Fin.heq_fun_iff B).2 fun i => _
[GOAL]
case mk.right.h.e_3
𝕜 : 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✝ n : ℕ
a : Composition n
b : Composition (length a)
B : length (gather a b) = List.length b.blocks
i : Fin (length (gather a b))
⊢ length (sigmaCompositionAux a b i) = List.get b.blocks { val := ↑i, isLt := (_ : ↑i < List.length b.blocks) }
[PROOFSTEP]
rw [sigmaCompositionAux, Composition.length, List.get_map_rev List.length,
  List.get_of_eq (map_length_splitWrtComposition _ _)]
[GOAL]
𝕜 : 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✝ n : ℕ
⊢ Function.RightInverse
    (fun i =>
      {
        fst :=
          { blocks := List.join (ofFn fun j => (Sigma.snd i j).blocks),
            blocks_pos := (_ : ∀ {i_1 : ℕ}, i_1 ∈ List.join (ofFn fun j => (Sigma.snd i j).blocks) → 0 < i_1),
            blocks_sum := (_ : sum (List.join (ofFn fun j => (Sigma.snd i j).blocks)) = n) },
        snd :=
          { blocks := ofFn fun j => length (Sigma.snd i j),
            blocks_pos := (_ : ∀ {k : ℕ}, (k ∈ ofFn fun j => length (Sigma.snd i j)) → 0 < k),
            blocks_sum :=
              (_ :
                sum (ofFn fun j => length (Sigma.snd i j)) =
                  length
                    { blocks := List.join (ofFn fun j => (Sigma.snd i j).blocks),
                      blocks_pos := (_ : ∀ {i_1 : ℕ}, i_1 ∈ List.join (ofFn fun j => (Sigma.snd i j).blocks) → 0 < i_1),
                      blocks_sum := (_ : sum (List.join (ofFn fun j => (Sigma.snd i j).blocks)) = n) }) } })
    fun i => { fst := gather i.fst i.snd, snd := sigmaCompositionAux i.fst i.snd }
[PROOFSTEP]
rintro ⟨c, d⟩
[GOAL]
case mk
𝕜 : 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✝ n : ℕ
c : Composition n
d : (i : Fin (length c)) → Composition (blocksFun c i)
⊢ (fun i => { fst := gather i.fst i.snd, snd := sigmaCompositionAux i.fst i.snd })
      ((fun i =>
          {
            fst :=
              { blocks := List.join (ofFn fun j => (Sigma.snd i j).blocks),
                blocks_pos := (_ : ∀ {i_1 : ℕ}, i_1 ∈ List.join (ofFn fun j => (Sigma.snd i j).blocks) → 0 < i_1),
                blocks_sum := (_ : sum (List.join (ofFn fun j => (Sigma.snd i j).blocks)) = n) },
            snd :=
              { blocks := ofFn fun j => length (Sigma.snd i j),
                blocks_pos := (_ : ∀ {k : ℕ}, (k ∈ ofFn fun j => length (Sigma.snd i j)) → 0 < k),
                blocks_sum :=
                  (_ :
                    sum (ofFn fun j => length (Sigma.snd i j)) =
                      length
                        { blocks := List.join (ofFn fun j => (Sigma.snd i j).blocks),
                          blocks_pos :=
                            (_ : ∀ {i_1 : ℕ}, i_1 ∈ List.join (ofFn fun j => (Sigma.snd i j).blocks) → 0 < i_1),
                          blocks_sum := (_ : sum (List.join (ofFn fun j => (Sigma.snd i j).blocks)) = n) }) } })
        { fst := c, snd := d }) =
    { fst := c, snd := d }
[PROOFSTEP]
have : map List.sum (ofFn fun i : Fin (Composition.length c) => (d i).blocks) = c.blocks := by
  simp [map_ofFn, (· ∘ ·), Composition.blocks_sum, Composition.ofFn_blocksFun]
[GOAL]
𝕜 : 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✝ n : ℕ
c : Composition n
d : (i : Fin (length c)) → Composition (blocksFun c i)
⊢ List.map sum (ofFn fun i => (d i).blocks) = c.blocks
[PROOFSTEP]
simp [map_ofFn, (· ∘ ·), Composition.blocks_sum, Composition.ofFn_blocksFun]
[GOAL]
case mk
𝕜 : 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✝ n : ℕ
c : Composition n
d : (i : Fin (length c)) → Composition (blocksFun c i)
this : List.map sum (ofFn fun i => (d i).blocks) = c.blocks
⊢ (fun i => { fst := gather i.fst i.snd, snd := sigmaCompositionAux i.fst i.snd })
      ((fun i =>
          {
            fst :=
              { blocks := List.join (ofFn fun j => (Sigma.snd i j).blocks),
                blocks_pos := (_ : ∀ {i_1 : ℕ}, i_1 ∈ List.join (ofFn fun j => (Sigma.snd i j).blocks) → 0 < i_1),
                blocks_sum := (_ : sum (List.join (ofFn fun j => (Sigma.snd i j).blocks)) = n) },
            snd :=
              { blocks := ofFn fun j => length (Sigma.snd i j),
                blocks_pos := (_ : ∀ {k : ℕ}, (k ∈ ofFn fun j => length (Sigma.snd i j)) → 0 < k),
                blocks_sum :=
                  (_ :
                    sum (ofFn fun j => length (Sigma.snd i j)) =
                      length
                        { blocks := List.join (ofFn fun j => (Sigma.snd i j).blocks),
                          blocks_pos :=
                            (_ : ∀ {i_1 : ℕ}, i_1 ∈ List.join (ofFn fun j => (Sigma.snd i j).blocks) → 0 < i_1),
                          blocks_sum := (_ : sum (List.join (ofFn fun j => (Sigma.snd i j).blocks)) = n) }) } })
        { fst := c, snd := d }) =
    { fst := c, snd := d }
[PROOFSTEP]
rw [sigma_pi_composition_eq_iff]
[GOAL]
case mk
𝕜 : 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✝ n : ℕ
c : Composition n
d : (i : Fin (length c)) → Composition (blocksFun c i)
this : List.map sum (ofFn fun i => (d i).blocks) = c.blocks
⊢ (ofFn fun i =>
      (Sigma.snd
          ((fun i => { fst := gather i.fst i.snd, snd := sigmaCompositionAux i.fst i.snd })
            ((fun i =>
                {
                  fst :=
                    { blocks := List.join (ofFn fun j => (Sigma.snd i j).blocks),
                      blocks_pos := (_ : ∀ {i_1 : ℕ}, i_1 ∈ List.join (ofFn fun j => (Sigma.snd i j).blocks) → 0 < i_1),
                      blocks_sum := (_ : sum (List.join (ofFn fun j => (Sigma.snd i j).blocks)) = n) },
                  snd :=
                    { blocks := ofFn fun j => length (Sigma.snd i j),
                      blocks_pos := (_ : ∀ {k : ℕ}, (k ∈ ofFn fun j => length (Sigma.snd i j)) → 0 < k),
                      blocks_sum :=
                        (_ :
                          sum (ofFn fun j => length (Sigma.snd i j)) =
                            length
                              { blocks := List.join (ofFn fun j => (Sigma.snd i j).blocks),
                                blocks_pos :=
                                  (_ : ∀ {i_1 : ℕ}, i_1 ∈ List.join (ofFn fun j => (Sigma.snd i j).blocks) → 0 < i_1),
                                blocks_sum := (_ : sum (List.join (ofFn fun j => (Sigma.snd i j).blocks)) = n) }) } })
              { fst := c, snd := d }))
          i).blocks) =
    ofFn fun i => (Sigma.snd { fst := c, snd := d } i).blocks
[PROOFSTEP]
dsimp
[GOAL]
case mk
𝕜 : 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✝ n : ℕ
c : Composition n
d : (i : Fin (length c)) → Composition (blocksFun c i)
this : List.map sum (ofFn fun i => (d i).blocks) = c.blocks
⊢ (ofFn fun i =>
      (sigmaCompositionAux
          { blocks := List.join (ofFn fun j => (d j).blocks),
            blocks_pos := (_ : ∀ {i : ℕ}, i ∈ List.join (ofFn fun j => (d j).blocks) → 0 < i),
            blocks_sum := (_ : sum (List.join (ofFn fun j => (d j).blocks)) = n) }
          { blocks := ofFn fun j => length (d j),
            blocks_pos := (_ : ∀ {k : ℕ}, (k ∈ ofFn fun j => length (d j)) → 0 < k),
            blocks_sum :=
              (_ :
                sum (ofFn fun j => List.length (d j).blocks) = List.length (List.join (ofFn fun j => (d j).blocks))) }
          i).blocks) =
    ofFn fun i => (d i).blocks
[PROOFSTEP]
congr! 1
[GOAL]
case mk.h.e'_2
𝕜 : 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✝ n : ℕ
c : Composition n
d : (i : Fin (length c)) → Composition (blocksFun c i)
this : List.map sum (ofFn fun i => (d i).blocks) = c.blocks
⊢ length
      (gather
        { blocks := List.join (ofFn fun j => (d j).blocks),
          blocks_pos := (_ : ∀ {i : ℕ}, i ∈ List.join (ofFn fun j => (d j).blocks) → 0 < i),
          blocks_sum := (_ : sum (List.join (ofFn fun j => (d j).blocks)) = n) }
        { blocks := ofFn fun j => length (d j), blocks_pos := (_ : ∀ {k : ℕ}, (k ∈ ofFn fun j => length (d j)) → 0 < k),
          blocks_sum :=
            (_ :
              sum (ofFn fun j => List.length (d j).blocks) = List.length (List.join (ofFn fun j => (d j).blocks))) }) =
    length c
[PROOFSTEP]
congr
[GOAL]
case mk.h.e'_2.e_c
𝕜 : 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✝ n : ℕ
c : Composition n
d : (i : Fin (length c)) → Composition (blocksFun c i)
this : List.map sum (ofFn fun i => (d i).blocks) = c.blocks
⊢ gather
      { blocks := List.join (ofFn fun j => (d j).blocks),
        blocks_pos := (_ : ∀ {i : ℕ}, i ∈ List.join (ofFn fun j => (d j).blocks) → 0 < i),
        blocks_sum := (_ : sum (List.join (ofFn fun j => (d j).blocks)) = n) }
      { blocks := ofFn fun j => length (d j), blocks_pos := (_ : ∀ {k : ℕ}, (k ∈ ofFn fun j => length (d j)) → 0 < k),
        blocks_sum :=
          (_ : sum (ofFn fun j => List.length (d j).blocks) = List.length (List.join (ofFn fun j => (d j).blocks))) } =
    c
[PROOFSTEP]
ext1
[GOAL]
case mk.h.e'_2.e_c.blocks
𝕜 : 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✝ n : ℕ
c : Composition n
d : (i : Fin (length c)) → Composition (blocksFun c i)
this : List.map sum (ofFn fun i => (d i).blocks) = c.blocks
⊢ (gather
        { blocks := List.join (ofFn fun j => (d j).blocks),
          blocks_pos := (_ : ∀ {i : ℕ}, i ∈ List.join (ofFn fun j => (d j).blocks) → 0 < i),
          blocks_sum := (_ : sum (List.join (ofFn fun j => (d j).blocks)) = n) }
        { blocks := ofFn fun j => length (d j), blocks_pos := (_ : ∀ {k : ℕ}, (k ∈ ofFn fun j => length (d j)) → 0 < k),
          blocks_sum :=
            (_ :
              sum (ofFn fun j => List.length (d j).blocks) =
                List.length (List.join (ofFn fun j => (d j).blocks))) }).blocks =
    c.blocks
[PROOFSTEP]
dsimp [Composition.gather]
[GOAL]
case mk.h.e'_2.e_c.blocks
𝕜 : 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✝ n : ℕ
c : Composition n
d : (i : Fin (length c)) → Composition (blocksFun c i)
this : List.map sum (ofFn fun i => (d i).blocks) = c.blocks
⊢ List.map sum
      (splitWrtComposition (List.join (ofFn fun j => (d j).blocks))
        { blocks := ofFn fun j => length (d j), blocks_pos := (_ : ∀ {k : ℕ}, (k ∈ ofFn fun j => length (d j)) → 0 < k),
          blocks_sum :=
            (_ :
              sum (ofFn fun j => List.length (d j).blocks) = List.length (List.join (ofFn fun j => (d j).blocks))) }) =
    c.blocks
[PROOFSTEP]
rwa [splitWrtComposition_join]
[GOAL]
case mk.h.e'_2.e_c.blocks.h
𝕜 : 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✝ n : ℕ
c : Composition n
d : (i : Fin (length c)) → Composition (blocksFun c i)
this : List.map sum (ofFn fun i => (d i).blocks) = c.blocks
⊢ List.map List.length (ofFn fun j => (d j).blocks) =
    { blocks := ofFn fun j => length (d j), blocks_pos := (_ : ∀ {k : ℕ}, (k ∈ ofFn fun j => length (d j)) → 0 < k),
        blocks_sum :=
          (_ :
            sum (ofFn fun j => List.length (d j).blocks) =
              List.length (List.join (ofFn fun j => (d j).blocks))) }.blocks
[PROOFSTEP]
simp only [map_ofFn]
[GOAL]
case mk.h.e'_2.e_c.blocks.h
𝕜 : 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✝ n : ℕ
c : Composition n
d : (i : Fin (length c)) → Composition (blocksFun c i)
this : List.map sum (ofFn fun i => (d i).blocks) = c.blocks
⊢ ofFn (List.length ∘ fun j => (d j).blocks) = ofFn fun j => length (d j)
[PROOFSTEP]
rfl
[GOAL]
case mk.h.e'_3
𝕜 : 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✝ n : ℕ
c : Composition n
d : (i : Fin (length c)) → Composition (blocksFun c i)
this : List.map sum (ofFn fun i => (d i).blocks) = c.blocks
e_2✝ :
  length
      (gather
        { blocks := List.join (ofFn fun j => (d j).blocks),
          blocks_pos := (_ : ∀ {i : ℕ}, i ∈ List.join (ofFn fun j => (d j).blocks) → 0 < i),
          blocks_sum := (_ : sum (List.join (ofFn fun j => (d j).blocks)) = n) }
        { blocks := ofFn fun j => length (d j), blocks_pos := (_ : ∀ {k : ℕ}, (k ∈ ofFn fun j => length (d j)) → 0 < k),
          blocks_sum :=
            (_ :
              sum (ofFn fun j => List.length (d j).blocks) = List.length (List.join (ofFn fun j => (d j).blocks))) }) =
    length c
⊢ HEq
    (fun i =>
      (sigmaCompositionAux
          { blocks := List.join (ofFn fun j => (d j).blocks),
            blocks_pos := (_ : ∀ {i : ℕ}, i ∈ List.join (ofFn fun j => (d j).blocks) → 0 < i),
            blocks_sum := (_ : sum (List.join (ofFn fun j => (d j).blocks)) = n) }
          { blocks := ofFn fun j => length (d j),
            blocks_pos := (_ : ∀ {k : ℕ}, (k ∈ ofFn fun j => length (d j)) → 0 < k),
            blocks_sum :=
              (_ :
                sum (ofFn fun j => List.length (d j).blocks) = List.length (List.join (ofFn fun j => (d j).blocks))) }
          i).blocks)
    fun i => (d i).blocks
[PROOFSTEP]
rw [Fin.heq_fun_iff]
[GOAL]
case mk.h.e'_3
𝕜 : 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✝ n : ℕ
c : Composition n
d : (i : Fin (length c)) → Composition (blocksFun c i)
this : List.map sum (ofFn fun i => (d i).blocks) = c.blocks
e_2✝ :
  length
      (gather
        { blocks := List.join (ofFn fun j => (d j).blocks),
          blocks_pos := (_ : ∀ {i : ℕ}, i ∈ List.join (ofFn fun j => (d j).blocks) → 0 < i),
          blocks_sum := (_ : sum (List.join (ofFn fun j => (d j).blocks)) = n) }
        { blocks := ofFn fun j => length (d j), blocks_pos := (_ : ∀ {k : ℕ}, (k ∈ ofFn fun j => length (d j)) → 0 < k),
          blocks_sum :=
            (_ :
              sum (ofFn fun j => List.length (d j).blocks) = List.length (List.join (ofFn fun j => (d j).blocks))) }) =
    length c
⊢ ∀
    (i :
      Fin
        (length
          (gather
            { blocks := List.join (ofFn fun j => (d j).blocks),
              blocks_pos := (_ : ∀ {i : ℕ}, i ∈ List.join (ofFn fun j => (d j).blocks) → 0 < i),
              blocks_sum := (_ : sum (List.join (ofFn fun j => (d j).blocks)) = n) }
            { blocks := ofFn fun j => length (d j),
              blocks_pos := (_ : ∀ {k : ℕ}, (k ∈ ofFn fun j => length (d j)) → 0 < k),
              blocks_sum :=
                (_ :
                  sum (ofFn fun j => List.length (d j).blocks) =
                    List.length (List.join (ofFn fun j => (d j).blocks))) }))),
    (sigmaCompositionAux
          { blocks := List.join (ofFn fun j => (d j).blocks),
            blocks_pos := (_ : ∀ {i : ℕ}, i ∈ List.join (ofFn fun j => (d j).blocks) → 0 < i),
            blocks_sum := (_ : sum (List.join (ofFn fun j => (d j).blocks)) = n) }
          { blocks := ofFn fun j => length (d j),
            blocks_pos := (_ : ∀ {k : ℕ}, (k ∈ ofFn fun j => length (d j)) → 0 < k),
            blocks_sum :=
              (_ :
                sum (ofFn fun j => List.length (d j).blocks) = List.length (List.join (ofFn fun j => (d j).blocks))) }
          i).blocks =
      (d { val := ↑i, isLt := (_ : ↑i < length c) }).blocks
case mk.h.e'_3.h
𝕜 : 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✝ n : ℕ
c : Composition n
d : (i : Fin (length c)) → Composition (blocksFun c i)
this : List.map sum (ofFn fun i => (d i).blocks) = c.blocks
e_2✝ :
  length
      (gather
        { blocks := List.join (ofFn fun j => (d j).blocks),
          blocks_pos := (_ : ∀ {i : ℕ}, i ∈ List.join (ofFn fun j => (d j).blocks) → 0 < i),
          blocks_sum := (_ : sum (List.join (ofFn fun j => (d j).blocks)) = n) }
        { blocks := ofFn fun j => length (d j), blocks_pos := (_ : ∀ {k : ℕ}, (k ∈ ofFn fun j => length (d j)) → 0 < k),
          blocks_sum :=
            (_ :
              sum (ofFn fun j => List.length (d j).blocks) = List.length (List.join (ofFn fun j => (d j).blocks))) }) =
    length c
⊢ length
      (gather
        { blocks := List.join (ofFn fun j => (d j).blocks),
          blocks_pos := (_ : ∀ {i : ℕ}, i ∈ List.join (ofFn fun j => (d j).blocks) → 0 < i),
          blocks_sum := (_ : sum (List.join (ofFn fun j => (d j).blocks)) = n) }
        { blocks := ofFn fun j => length (d j), blocks_pos := (_ : ∀ {k : ℕ}, (k ∈ ofFn fun j => length (d j)) → 0 < k),
          blocks_sum :=
            (_ :
              sum (ofFn fun j => List.length (d j).blocks) = List.length (List.join (ofFn fun j => (d j).blocks))) }) =
    length c
[PROOFSTEP]
intro i
[GOAL]
case mk.h.e'_3
𝕜 : 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✝ n : ℕ
c : Composition n
d : (i : Fin (length c)) → Composition (blocksFun c i)
this : List.map sum (ofFn fun i => (d i).blocks) = c.blocks
e_2✝ :
  length
      (gather
        { blocks := List.join (ofFn fun j => (d j).blocks),
          blocks_pos := (_ : ∀ {i : ℕ}, i ∈ List.join (ofFn fun j => (d j).blocks) → 0 < i),
          blocks_sum := (_ : sum (List.join (ofFn fun j => (d j).blocks)) = n) }
        { blocks := ofFn fun j => length (d j), blocks_pos := (_ : ∀ {k : ℕ}, (k ∈ ofFn fun j => length (d j)) → 0 < k),
          blocks_sum :=
            (_ :
              sum (ofFn fun j => List.length (d j).blocks) = List.length (List.join (ofFn fun j => (d j).blocks))) }) =
    length c
i :
  Fin
    (length
      (gather
        { blocks := List.join (ofFn fun j => (d j).blocks),
          blocks_pos := (_ : ∀ {i : ℕ}, i ∈ List.join (ofFn fun j => (d j).blocks) → 0 < i),
          blocks_sum := (_ : sum (List.join (ofFn fun j => (d j).blocks)) = n) }
        { blocks := ofFn fun j => length (d j), blocks_pos := (_ : ∀ {k : ℕ}, (k ∈ ofFn fun j => length (d j)) → 0 < k),
          blocks_sum :=
            (_ :
              sum (ofFn fun j => List.length (d j).blocks) = List.length (List.join (ofFn fun j => (d j).blocks))) }))
⊢ (sigmaCompositionAux
        { blocks := List.join (ofFn fun j => (d j).blocks),
          blocks_pos := (_ : ∀ {i : ℕ}, i ∈ List.join (ofFn fun j => (d j).blocks) → 0 < i),
          blocks_sum := (_ : sum (List.join (ofFn fun j => (d j).blocks)) = n) }
        { blocks := ofFn fun j => length (d j), blocks_pos := (_ : ∀ {k : ℕ}, (k ∈ ofFn fun j => length (d j)) → 0 < k),
          blocks_sum :=
            (_ : sum (ofFn fun j => List.length (d j).blocks) = List.length (List.join (ofFn fun j => (d j).blocks))) }
        i).blocks =
    (d { val := ↑i, isLt := (_ : ↑i < length c) }).blocks
case mk.h.e'_3.h
𝕜 : 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✝ n : ℕ
c : Composition n
d : (i : Fin (length c)) → Composition (blocksFun c i)
this : List.map sum (ofFn fun i => (d i).blocks) = c.blocks
e_2✝ :
  length
      (gather
        { blocks := List.join (ofFn fun j => (d j).blocks),
          blocks_pos := (_ : ∀ {i : ℕ}, i ∈ List.join (ofFn fun j => (d j).blocks) → 0 < i),
          blocks_sum := (_ : sum (List.join (ofFn fun j => (d j).blocks)) = n) }
        { blocks := ofFn fun j => length (d j), blocks_pos := (_ : ∀ {k : ℕ}, (k ∈ ofFn fun j => length (d j)) → 0 < k),
          blocks_sum :=
            (_ :
              sum (ofFn fun j => List.length (d j).blocks) = List.length (List.join (ofFn fun j => (d j).blocks))) }) =
    length c
⊢ length
      (gather
        { blocks := List.join (ofFn fun j => (d j).blocks),
          blocks_pos := (_ : ∀ {i : ℕ}, i ∈ List.join (ofFn fun j => (d j).blocks) → 0 < i),
          blocks_sum := (_ : sum (List.join (ofFn fun j => (d j).blocks)) = n) }
        { blocks := ofFn fun j => length (d j), blocks_pos := (_ : ∀ {k : ℕ}, (k ∈ ofFn fun j => length (d j)) → 0 < k),
          blocks_sum :=
            (_ :
              sum (ofFn fun j => List.length (d j).blocks) = List.length (List.join (ofFn fun j => (d j).blocks))) }) =
    length c
[PROOFSTEP]
dsimp [Composition.sigmaCompositionAux]
[GOAL]
case mk.h.e'_3
𝕜 : 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✝ n : ℕ
c : Composition n
d : (i : Fin (length c)) → Composition (blocksFun c i)
this : List.map sum (ofFn fun i => (d i).blocks) = c.blocks
e_2✝ :
  length
      (gather
        { blocks := List.join (ofFn fun j => (d j).blocks),
          blocks_pos := (_ : ∀ {i : ℕ}, i ∈ List.join (ofFn fun j => (d j).blocks) → 0 < i),
          blocks_sum := (_ : sum (List.join (ofFn fun j => (d j).blocks)) = n) }
        { blocks := ofFn fun j => length (d j), blocks_pos := (_ : ∀ {k : ℕ}, (k ∈ ofFn fun j => length (d j)) → 0 < k),
          blocks_sum :=
            (_ :
              sum (ofFn fun j => List.length (d j).blocks) = List.length (List.join (ofFn fun j => (d j).blocks))) }) =
    length c
i :
  Fin
    (length
      (gather
        { blocks := List.join (ofFn fun j => (d j).blocks),
          blocks_pos := (_ : ∀ {i : ℕ}, i ∈ List.join (ofFn fun j => (d j).blocks) → 0 < i),
          blocks_sum := (_ : sum (List.join (ofFn fun j => (d j).blocks)) = n) }
        { blocks := ofFn fun j => length (d j), blocks_pos := (_ : ∀ {k : ℕ}, (k ∈ ofFn fun j => length (d j)) → 0 < k),
          blocks_sum :=
            (_ :
              sum (ofFn fun j => List.length (d j).blocks) = List.length (List.join (ofFn fun j => (d j).blocks))) }))
⊢ List.get
      (splitWrtComposition (List.join (ofFn fun j => (d j).blocks))
        { blocks := ofFn fun j => length (d j), blocks_pos := (_ : ∀ {k : ℕ}, (k ∈ ofFn fun j => length (d j)) → 0 < k),
          blocks_sum :=
            (_ : sum (ofFn fun j => List.length (d j).blocks) = List.length (List.join (ofFn fun j => (d j).blocks))) })
      { val := ↑i,
        isLt :=
          (_ :
            ↑i <
              List.length
                (splitWrtComposition
                  { blocks := List.join (ofFn fun j => (d j).blocks),
                      blocks_pos := (_ : ∀ {i : ℕ}, i ∈ List.join (ofFn fun j => (d j).blocks) → 0 < i),
                      blocks_sum := (_ : sum (List.join (ofFn fun j => (d j).blocks)) = n) }.blocks
                  { blocks := ofFn fun j => length (d j),
                    blocks_pos := (_ : ∀ {k : ℕ}, (k ∈ ofFn fun j => length (d j)) → 0 < k),
                    blocks_sum :=
                      (_ :
                        sum (ofFn fun j => List.length (d j).blocks) =
                          List.length (List.join (ofFn fun j => (d j).blocks))) })) } =
    (d { val := ↑i, isLt := (_ : ↑i < length c) }).blocks
case mk.h.e'_3.h
𝕜 : 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✝ n : ℕ
c : Composition n
d : (i : Fin (length c)) → Composition (blocksFun c i)
this : List.map sum (ofFn fun i => (d i).blocks) = c.blocks
e_2✝ :
  length
      (gather
        { blocks := List.join (ofFn fun j => (d j).blocks),
          blocks_pos := (_ : ∀ {i : ℕ}, i ∈ List.join (ofFn fun j => (d j).blocks) → 0 < i),
          blocks_sum := (_ : sum (List.join (ofFn fun j => (d j).blocks)) = n) }
        { blocks := ofFn fun j => length (d j), blocks_pos := (_ : ∀ {k : ℕ}, (k ∈ ofFn fun j => length (d j)) → 0 < k),
          blocks_sum :=
            (_ :
              sum (ofFn fun j => List.length (d j).blocks) = List.length (List.join (ofFn fun j => (d j).blocks))) }) =
    length c
⊢ length
      (gather
        { blocks := List.join (ofFn fun j => (d j).blocks),
          blocks_pos := (_ : ∀ {i : ℕ}, i ∈ List.join (ofFn fun j => (d j).blocks) → 0 < i),
          blocks_sum := (_ : sum (List.join (ofFn fun j => (d j).blocks)) = n) }
        { blocks := ofFn fun j => length (d j), blocks_pos := (_ : ∀ {k : ℕ}, (k ∈ ofFn fun j => length (d j)) → 0 < k),
          blocks_sum :=
            (_ :
              sum (ofFn fun j => List.length (d j).blocks) = List.length (List.join (ofFn fun j => (d j).blocks))) }) =
    length c
[PROOFSTEP]
rw [get_of_eq (splitWrtComposition_join _ _ _)]
[GOAL]
case mk.h.e'_3
𝕜 : 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✝ n : ℕ
c : Composition n
d : (i : Fin (length c)) → Composition (blocksFun c i)
this : List.map sum (ofFn fun i => (d i).blocks) = c.blocks
e_2✝ :
  length
      (gather
        { blocks := List.join (ofFn fun j => (d j).blocks),
          blocks_pos := (_ : ∀ {i : ℕ}, i ∈ List.join (ofFn fun j => (d j).blocks) → 0 < i),
          blocks_sum := (_ : sum (List.join (ofFn fun j => (d j).blocks)) = n) }
        { blocks := ofFn fun j => length (d j), blocks_pos := (_ : ∀ {k : ℕ}, (k ∈ ofFn fun j => length (d j)) → 0 < k),
          blocks_sum :=
            (_ :
              sum (ofFn fun j => List.length (d j).blocks) = List.length (List.join (ofFn fun j => (d j).blocks))) }) =
    length c
i :
  Fin
    (length
      (gather
        { blocks := List.join (ofFn fun j => (d j).blocks),
          blocks_pos := (_ : ∀ {i : ℕ}, i ∈ List.join (ofFn fun j => (d j).blocks) → 0 < i),
          blocks_sum := (_ : sum (List.join (ofFn fun j => (d j).blocks)) = n) }
        { blocks := ofFn fun j => length (d j), blocks_pos := (_ : ∀ {k : ℕ}, (k ∈ ofFn fun j => length (d j)) → 0 < k),
          blocks_sum :=
            (_ :
              sum (ofFn fun j => List.length (d j).blocks) = List.length (List.join (ofFn fun j => (d j).blocks))) }))
⊢ List.get (ofFn fun j => (d j).blocks)
      {
        val :=
          ↑{ val := ↑i,
              isLt :=
                (_ :
                  ↑i <
                    List.length
                      (splitWrtComposition
                        { blocks := List.join (ofFn fun j => (d j).blocks),
                            blocks_pos := (_ : ∀ {i : ℕ}, i ∈ List.join (ofFn fun j => (d j).blocks) → 0 < i),
                            blocks_sum := (_ : sum (List.join (ofFn fun j => (d j).blocks)) = n) }.blocks
                        { blocks := ofFn fun j => length (d j),
                          blocks_pos := (_ : ∀ {k : ℕ}, (k ∈ ofFn fun j => length (d j)) → 0 < k),
                          blocks_sum :=
                            (_ :
                              sum (ofFn fun j => List.length (d j).blocks) =
                                List.length (List.join (ofFn fun j => (d j).blocks))) })) },
        isLt :=
          (_ :
            ↑{ val := ↑i,
                  isLt :=
                    (_ :
                      ↑i <
                        List.length
                          (splitWrtComposition
                            { blocks := List.join (ofFn fun j => (d j).blocks),
                                blocks_pos := (_ : ∀ {i : ℕ}, i ∈ List.join (ofFn fun j => (d j).blocks) → 0 < i),
                                blocks_sum := (_ : sum (List.join (ofFn fun j => (d j).blocks)) = n) }.blocks
                            { blocks := ofFn fun j => length (d j),
                              blocks_pos := (_ : ∀ {k : ℕ}, (k ∈ ofFn fun j => length (d j)) → 0 < k),
                              blocks_sum :=
                                (_ :
                                  sum (ofFn fun j => List.length (d j).blocks) =
                                    List.length (List.join (ofFn fun j => (d j).blocks))) })) } <
              List.length (ofFn fun j => (d j).blocks)) } =
    (d { val := ↑i, isLt := (_ : ↑i < length c) }).blocks
[PROOFSTEP]
simp only [get_ofFn]
[GOAL]
case mk.h.e'_3
𝕜 : 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✝ n : ℕ
c : Composition n
d : (i : Fin (length c)) → Composition (blocksFun c i)
this : List.map sum (ofFn fun i => (d i).blocks) = c.blocks
e_2✝ :
  length
      (gather
        { blocks := List.join (ofFn fun j => (d j).blocks),
          blocks_pos := (_ : ∀ {i : ℕ}, i ∈ List.join (ofFn fun j => (d j).blocks) → 0 < i),
          blocks_sum := (_ : sum (List.join (ofFn fun j => (d j).blocks)) = n) }
        { blocks := ofFn fun j => length (d j), blocks_pos := (_ : ∀ {k : ℕ}, (k ∈ ofFn fun j => length (d j)) → 0 < k),
          blocks_sum :=
            (_ :
              sum (ofFn fun j => List.length (d j).blocks) = List.length (List.join (ofFn fun j => (d j).blocks))) }) =
    length c
i :
  Fin
    (length
      (gather
        { blocks := List.join (ofFn fun j => (d j).blocks),
          blocks_pos := (_ : ∀ {i : ℕ}, i ∈ List.join (ofFn fun j => (d j).blocks) → 0 < i),
          blocks_sum := (_ : sum (List.join (ofFn fun j => (d j).blocks)) = n) }
        { blocks := ofFn fun j => length (d j), blocks_pos := (_ : ∀ {k : ℕ}, (k ∈ ofFn fun j => length (d j)) → 0 < k),
          blocks_sum :=
            (_ :
              sum (ofFn fun j => List.length (d j).blocks) = List.length (List.join (ofFn fun j => (d j).blocks))) }))
⊢ (d
        (↑(Fin.castIso (_ : List.length (ofFn fun j => (d j).blocks) = length c))
          { val := ↑i, isLt := (_ : ↑i < List.length (ofFn fun j => (d j).blocks)) })).blocks =
    (d { val := ↑i, isLt := (_ : ↑i < length c) }).blocks
[PROOFSTEP]
rfl
[GOAL]
case mk.h.e'_3.h
𝕜 : 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✝ n : ℕ
c : Composition n
d : (i : Fin (length c)) → Composition (blocksFun c i)
this : List.map sum (ofFn fun i => (d i).blocks) = c.blocks
e_2✝ :
  length
      (gather
        { blocks := List.join (ofFn fun j => (d j).blocks),
          blocks_pos := (_ : ∀ {i : ℕ}, i ∈ List.join (ofFn fun j => (d j).blocks) → 0 < i),
          blocks_sum := (_ : sum (List.join (ofFn fun j => (d j).blocks)) = n) }
        { blocks := ofFn fun j => length (d j), blocks_pos := (_ : ∀ {k : ℕ}, (k ∈ ofFn fun j => length (d j)) → 0 < k),
          blocks_sum :=
            (_ :
              sum (ofFn fun j => List.length (d j).blocks) = List.length (List.join (ofFn fun j => (d j).blocks))) }) =
    length c
⊢ length
      (gather
        { blocks := List.join (ofFn fun j => (d j).blocks),
          blocks_pos := (_ : ∀ {i : ℕ}, i ∈ List.join (ofFn fun j => (d j).blocks) → 0 < i),
          blocks_sum := (_ : sum (List.join (ofFn fun j => (d j).blocks)) = n) }
        { blocks := ofFn fun j => length (d j), blocks_pos := (_ : ∀ {k : ℕ}, (k ∈ ofFn fun j => length (d j)) → 0 < k),
          blocks_sum :=
            (_ :
              sum (ofFn fun j => List.length (d j).blocks) = List.length (List.join (ofFn fun j => (d j).blocks))) }) =
    length c
[PROOFSTEP]
congr
[GOAL]
𝕜 : 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✝ n : ℕ
c : Composition n
d : (i : Fin (length c)) → Composition (blocksFun c i)
this : List.map sum (ofFn fun i => (d i).blocks) = c.blocks
e_2✝ :
  length
      (gather
        { blocks := List.join (ofFn fun j => (d j).blocks),
          blocks_pos := (_ : ∀ {i : ℕ}, i ∈ List.join (ofFn fun j => (d j).blocks) → 0 < i),
          blocks_sum := (_ : sum (List.join (ofFn fun j => (d j).blocks)) = n) }
        { blocks := ofFn fun j => length (d j), blocks_pos := (_ : ∀ {k : ℕ}, (k ∈ ofFn fun j => length (d j)) → 0 < k),
          blocks_sum :=
            (_ :
              sum (ofFn fun j => List.length (d j).blocks) = List.length (List.join (ofFn fun j => (d j).blocks))) }) =
    length c
i :
  Fin
    (length
      (gather
        { blocks := List.join (ofFn fun j => (d j).blocks),
          blocks_pos := (_ : ∀ {i : ℕ}, i ∈ List.join (ofFn fun j => (d j).blocks) → 0 < i),
          blocks_sum := (_ : sum (List.join (ofFn fun j => (d j).blocks)) = n) }
        { blocks := ofFn fun j => length (d j), blocks_pos := (_ : ∀ {k : ℕ}, (k ∈ ofFn fun j => length (d j)) → 0 < k),
          blocks_sum :=
            (_ :
              sum (ofFn fun j => List.length (d j).blocks) = List.length (List.join (ofFn fun j => (d j).blocks))) }))
⊢ List.map List.length (ofFn fun j => (d j).blocks) =
    { blocks := ofFn fun j => length (d j), blocks_pos := (_ : ∀ {k : ℕ}, (k ∈ ofFn fun j => length (d j)) → 0 < k),
        blocks_sum :=
          (_ :
            sum (ofFn fun j => List.length (d j).blocks) =
              List.length (List.join (ofFn fun j => (d j).blocks))) }.blocks
[PROOFSTEP]
simp only [map_ofFn]
[GOAL]
𝕜 : 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✝ n : ℕ
c : Composition n
d : (i : Fin (length c)) → Composition (blocksFun c i)
this : List.map sum (ofFn fun i => (d i).blocks) = c.blocks
e_2✝ :
  length
      (gather
        { blocks := List.join (ofFn fun j => (d j).blocks),
          blocks_pos := (_ : ∀ {i : ℕ}, i ∈ List.join (ofFn fun j => (d j).blocks) → 0 < i),
          blocks_sum := (_ : sum (List.join (ofFn fun j => (d j).blocks)) = n) }
        { blocks := ofFn fun j => length (d j), blocks_pos := (_ : ∀ {k : ℕ}, (k ∈ ofFn fun j => length (d j)) → 0 < k),
          blocks_sum :=
            (_ :
              sum (ofFn fun j => List.length (d j).blocks) = List.length (List.join (ofFn fun j => (d j).blocks))) }) =
    length c
i :
  Fin
    (length
      (gather
        { blocks := List.join (ofFn fun j => (d j).blocks),
          blocks_pos := (_ : ∀ {i : ℕ}, i ∈ List.join (ofFn fun j => (d j).blocks) → 0 < i),
          blocks_sum := (_ : sum (List.join (ofFn fun j => (d j).blocks)) = n) }
        { blocks := ofFn fun j => length (d j), blocks_pos := (_ : ∀ {k : ℕ}, (k ∈ ofFn fun j => length (d j)) → 0 < k),
          blocks_sum :=
            (_ :
              sum (ofFn fun j => List.length (d j).blocks) = List.length (List.join (ofFn fun j => (d j).blocks))) }))
⊢ ofFn (List.length ∘ fun j => (d j).blocks) = ofFn fun j => length (d j)
[PROOFSTEP]
rfl
[GOAL]
𝕜 : 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
r : FormalMultilinearSeries 𝕜 G H
q : FormalMultilinearSeries 𝕜 F G
p : FormalMultilinearSeries 𝕜 E F
⊢ FormalMultilinearSeries.comp (FormalMultilinearSeries.comp r q) p =
    FormalMultilinearSeries.comp r (FormalMultilinearSeries.comp q p)
[PROOFSTEP]
ext n v
[GOAL]
case h.H
𝕜 : 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
r : FormalMultilinearSeries 𝕜 G H
q : FormalMultilinearSeries 𝕜 F G
p : FormalMultilinearSeries 𝕜 E F
n : ℕ
v : Fin n → E
⊢ ↑(FormalMultilinearSeries.comp (FormalMultilinearSeries.comp r q) p n) v =
    ↑(FormalMultilinearSeries.comp r (FormalMultilinearSeries.comp q p) n) v
[PROOFSTEP]
let f : (Σ a : Composition n, Composition a.length) → H := fun c =>
  r c.2.length (applyComposition q c.2 (applyComposition p c.1 v))
[GOAL]
case h.H
𝕜 : 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
r : FormalMultilinearSeries 𝕜 G H
q : FormalMultilinearSeries 𝕜 F G
p : FormalMultilinearSeries 𝕜 E F
n : ℕ
v : Fin n → E
f : (a : Composition n) × Composition (Composition.length a) → H :=
  fun c => ↑(r (Composition.length c.snd)) (applyComposition q c.snd (applyComposition p c.fst v))
⊢ ↑(FormalMultilinearSeries.comp (FormalMultilinearSeries.comp r q) p n) v =
    ↑(FormalMultilinearSeries.comp r (FormalMultilinearSeries.comp q p) n) v
[PROOFSTEP]
let g : (Σ c : Composition n, ∀ i : Fin c.length, Composition (c.blocksFun i)) → H := fun c =>
  r c.1.length fun i : Fin c.1.length => q (c.2 i).length (applyComposition p (c.2 i) (v ∘ c.1.embedding i))
[GOAL]
case h.H
𝕜 : 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
r : FormalMultilinearSeries 𝕜 G H
q : FormalMultilinearSeries 𝕜 F G
p : FormalMultilinearSeries 𝕜 E F
n : ℕ
v : Fin n → E
f : (a : Composition n) × Composition (Composition.length a) → H :=
  fun c => ↑(r (Composition.length c.snd)) (applyComposition q c.snd (applyComposition p c.fst v))
g : (c : Composition n) × ((i : Fin (Composition.length c)) → Composition (blocksFun c i)) → H :=
  fun c =>
    ↑(r (Composition.length c.fst)) fun i =>
      ↑(q (Composition.length (Sigma.snd c i))) (applyComposition p (Sigma.snd c i) (v ∘ ↑(embedding c.fst i)))
⊢ ↑(FormalMultilinearSeries.comp (FormalMultilinearSeries.comp r q) p n) v =
    ↑(FormalMultilinearSeries.comp r (FormalMultilinearSeries.comp q p) n) v
[PROOFSTEP]
suffices ∑ c, f c = ∑ c, g c by
  simpa only [FormalMultilinearSeries.comp, ContinuousMultilinearMap.sum_apply, compAlongComposition_apply,
    Finset.sum_sigma', applyComposition, ContinuousMultilinearMap.map_sum]
    /- Now, we use `composition.sigma_equiv_sigma_pi n` to change
        variables in the second sum, and check that we get exactly the same sums. -/
[GOAL]
𝕜 : 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
r : FormalMultilinearSeries 𝕜 G H
q : FormalMultilinearSeries 𝕜 F G
p : FormalMultilinearSeries 𝕜 E F
n : ℕ
v : Fin n → E
f : (a : Composition n) × Composition (Composition.length a) → H :=
  fun c => ↑(r (Composition.length c.snd)) (applyComposition q c.snd (applyComposition p c.fst v))
g : (c : Composition n) × ((i : Fin (Composition.length c)) → Composition (blocksFun c i)) → H :=
  fun c =>
    ↑(r (Composition.length c.fst)) fun i =>
      ↑(q (Composition.length (Sigma.snd c i))) (applyComposition p (Sigma.snd c i) (v ∘ ↑(embedding c.fst i)))
this :
  ∑ c : (a : Composition n) × Composition (Composition.length a), f c =
    ∑ c : (c : Composition n) × ((i : Fin (Composition.length c)) → Composition (blocksFun c i)), g c
⊢ ↑(FormalMultilinearSeries.comp (FormalMultilinearSeries.comp r q) p n) v =
    ↑(FormalMultilinearSeries.comp r (FormalMultilinearSeries.comp q p) n) v
[PROOFSTEP]
simpa only [FormalMultilinearSeries.comp, ContinuousMultilinearMap.sum_apply, compAlongComposition_apply,
  Finset.sum_sigma', applyComposition, ContinuousMultilinearMap.map_sum]
  /- Now, we use `composition.sigma_equiv_sigma_pi n` to change
      variables in the second sum, and check that we get exactly the same sums. -/
[GOAL]
case h.H
𝕜 : 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
r : FormalMultilinearSeries 𝕜 G H
q : FormalMultilinearSeries 𝕜 F G
p : FormalMultilinearSeries 𝕜 E F
n : ℕ
v : Fin n → E
f : (a : Composition n) × Composition (Composition.length a) → H :=
  fun c => ↑(r (Composition.length c.snd)) (applyComposition q c.snd (applyComposition p c.fst v))
g : (c : Composition n) × ((i : Fin (Composition.length c)) → Composition (blocksFun c i)) → H :=
  fun c =>
    ↑(r (Composition.length c.fst)) fun i =>
      ↑(q (Composition.length (Sigma.snd c i))) (applyComposition p (Sigma.snd c i) (v ∘ ↑(embedding c.fst i)))
⊢ ∑ c : (a : Composition n) × Composition (Composition.length a), f c =
    ∑ c : (c : Composition n) × ((i : Fin (Composition.length c)) → Composition (blocksFun c i)), g c
[PROOFSTEP]
rw [← (sigmaEquivSigmaPi n).sum_comp]
  /- To check that we have the same terms, we should check that we apply the same component of
      `r`, and the same component of `q`, and the same component of `p`, to the same coordinate of
      `v`. This is true by definition, but at each step one needs to convince Lean that the types
      one considers are the same, using a suitable congruence lemma to avoid dependent type issues.
      This dance has to be done three times, one for `r`, one for `q` and one for `p`.-/
[GOAL]
case h.H
𝕜 : 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
r : FormalMultilinearSeries 𝕜 G H
q : FormalMultilinearSeries 𝕜 F G
p : FormalMultilinearSeries 𝕜 E F
n : ℕ
v : Fin n → E
f : (a : Composition n) × Composition (Composition.length a) → H :=
  fun c => ↑(r (Composition.length c.snd)) (applyComposition q c.snd (applyComposition p c.fst v))
g : (c : Composition n) × ((i : Fin (Composition.length c)) → Composition (blocksFun c i)) → H :=
  fun c =>
    ↑(r (Composition.length c.fst)) fun i =>
      ↑(q (Composition.length (Sigma.snd c i))) (applyComposition p (Sigma.snd c i) (v ∘ ↑(embedding c.fst i)))
⊢ ∑ c : (a : Composition n) × Composition (Composition.length a), f c =
    ∑ i : (a : Composition n) × Composition (Composition.length a), g (↑(sigmaEquivSigmaPi n) i)
[PROOFSTEP]
apply Finset.sum_congr rfl
[GOAL]
case h.H
𝕜 : 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
r : FormalMultilinearSeries 𝕜 G H
q : FormalMultilinearSeries 𝕜 F G
p : FormalMultilinearSeries 𝕜 E F
n : ℕ
v : Fin n → E
f : (a : Composition n) × Composition (Composition.length a) → H :=
  fun c => ↑(r (Composition.length c.snd)) (applyComposition q c.snd (applyComposition p c.fst v))
g : (c : Composition n) × ((i : Fin (Composition.length c)) → Composition (blocksFun c i)) → H :=
  fun c =>
    ↑(r (Composition.length c.fst)) fun i =>
      ↑(q (Composition.length (Sigma.snd c i))) (applyComposition p (Sigma.snd c i) (v ∘ ↑(embedding c.fst i)))
⊢ ∀ (x : (a : Composition n) × Composition (Composition.length a)), x ∈ Finset.univ → f x = g (↑(sigmaEquivSigmaPi n) x)
[PROOFSTEP]
rintro ⟨a, b⟩ _
[GOAL]
case h.H.mk
𝕜 : 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
r : FormalMultilinearSeries 𝕜 G H
q : FormalMultilinearSeries 𝕜 F G
p : FormalMultilinearSeries 𝕜 E F
n : ℕ
v : Fin n → E
f : (a : Composition n) × Composition (Composition.length a) → H :=
  fun c => ↑(r (Composition.length c.snd)) (applyComposition q c.snd (applyComposition p c.fst v))
g : (c : Composition n) × ((i : Fin (Composition.length c)) → Composition (blocksFun c i)) → H :=
  fun c =>
    ↑(r (Composition.length c.fst)) fun i =>
      ↑(q (Composition.length (Sigma.snd c i))) (applyComposition p (Sigma.snd c i) (v ∘ ↑(embedding c.fst i)))
a : Composition n
b : Composition (Composition.length a)
a✝ : { fst := a, snd := b } ∈ Finset.univ
⊢ f { fst := a, snd := b } = g (↑(sigmaEquivSigmaPi n) { fst := a, snd := b })
[PROOFSTEP]
dsimp [sigmaEquivSigmaPi]
  -- check that the `r` components are the same. Based on `composition.length_gather`
[GOAL]
case h.H.mk
𝕜 : 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
r : FormalMultilinearSeries 𝕜 G H
q : FormalMultilinearSeries 𝕜 F G
p : FormalMultilinearSeries 𝕜 E F
n : ℕ
v : Fin n → E
f : (a : Composition n) × Composition (Composition.length a) → H :=
  fun c => ↑(r (Composition.length c.snd)) (applyComposition q c.snd (applyComposition p c.fst v))
g : (c : Composition n) × ((i : Fin (Composition.length c)) → Composition (blocksFun c i)) → H :=
  fun c =>
    ↑(r (Composition.length c.fst)) fun i =>
      ↑(q (Composition.length (Sigma.snd c i))) (applyComposition p (Sigma.snd c i) (v ∘ ↑(embedding c.fst i)))
a : Composition n
b : Composition (Composition.length a)
a✝ : { fst := a, snd := b } ∈ Finset.univ
⊢ ↑(r (Composition.length b)) (applyComposition q b (applyComposition p a v)) =
    ↑(r (Composition.length (gather a b))) fun i =>
      ↑(q (Composition.length (sigmaCompositionAux a b i)))
        (applyComposition p (sigmaCompositionAux a b i) (v ∘ ↑(embedding (gather a b) i)))
[PROOFSTEP]
apply r.congr (Composition.length_gather a b).symm
[GOAL]
case h.H.mk
𝕜 : 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
r : FormalMultilinearSeries 𝕜 G H
q : FormalMultilinearSeries 𝕜 F G
p : FormalMultilinearSeries 𝕜 E F
n : ℕ
v : Fin n → E
f : (a : Composition n) × Composition (Composition.length a) → H :=
  fun c => ↑(r (Composition.length c.snd)) (applyComposition q c.snd (applyComposition p c.fst v))
g : (c : Composition n) × ((i : Fin (Composition.length c)) → Composition (blocksFun c i)) → H :=
  fun c =>
    ↑(r (Composition.length c.fst)) fun i =>
      ↑(q (Composition.length (Sigma.snd c i))) (applyComposition p (Sigma.snd c i) (v ∘ ↑(embedding c.fst i)))
a : Composition n
b : Composition (Composition.length a)
a✝ : { fst := a, snd := b } ∈ Finset.univ
⊢ ∀ (i : ℕ) (him : i < Composition.length b) (hin : i < Composition.length (gather a b)),
    applyComposition q b (applyComposition p a v) { val := i, isLt := him } =
      ↑(q (Composition.length (sigmaCompositionAux a b { val := i, isLt := hin })))
        (applyComposition p (sigmaCompositionAux a b { val := i, isLt := hin })
          (v ∘ ↑(embedding (gather a b) { val := i, isLt := hin })))
[PROOFSTEP]
intro i hi1 hi2
[GOAL]
case h.H.mk
𝕜 : 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
r : FormalMultilinearSeries 𝕜 G H
q : FormalMultilinearSeries 𝕜 F G
p : FormalMultilinearSeries 𝕜 E F
n : ℕ
v : Fin n → E
f : (a : Composition n) × Composition (Composition.length a) → H :=
  fun c => ↑(r (Composition.length c.snd)) (applyComposition q c.snd (applyComposition p c.fst v))
g : (c : Composition n) × ((i : Fin (Composition.length c)) → Composition (blocksFun c i)) → H :=
  fun c =>
    ↑(r (Composition.length c.fst)) fun i =>
      ↑(q (Composition.length (Sigma.snd c i))) (applyComposition p (Sigma.snd c i) (v ∘ ↑(embedding c.fst i)))
a : Composition n
b : Composition (Composition.length a)
a✝ : { fst := a, snd := b } ∈ Finset.univ
i : ℕ
hi1 : i < Composition.length b
hi2 : i < Composition.length (gather a b)
⊢ applyComposition q b (applyComposition p a v) { val := i, isLt := hi1 } =
    ↑(q (Composition.length (sigmaCompositionAux a b { val := i, isLt := hi2 })))
      (applyComposition p (sigmaCompositionAux a b { val := i, isLt := hi2 })
        (v ∘ ↑(embedding (gather a b) { val := i, isLt := hi2 })))
[PROOFSTEP]
apply q.congr (length_sigmaCompositionAux a b _).symm
[GOAL]
case h.H.mk
𝕜 : 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
r : FormalMultilinearSeries 𝕜 G H
q : FormalMultilinearSeries 𝕜 F G
p : FormalMultilinearSeries 𝕜 E F
n : ℕ
v : Fin n → E
f : (a : Composition n) × Composition (Composition.length a) → H :=
  fun c => ↑(r (Composition.length c.snd)) (applyComposition q c.snd (applyComposition p c.fst v))
g : (c : Composition n) × ((i : Fin (Composition.length c)) → Composition (blocksFun c i)) → H :=
  fun c =>
    ↑(r (Composition.length c.fst)) fun i =>
      ↑(q (Composition.length (Sigma.snd c i))) (applyComposition p (Sigma.snd c i) (v ∘ ↑(embedding c.fst i)))
a : Composition n
b : Composition (Composition.length a)
a✝ : { fst := a, snd := b } ∈ Finset.univ
i : ℕ
hi1 : i < Composition.length b
hi2 : i < Composition.length (gather a b)
⊢ ∀ (i_1 : ℕ) (him : i_1 < blocksFun b { val := i, isLt := hi1 })
    (hin :
      i_1 <
        Composition.length
          (sigmaCompositionAux a b
            { val := ↑{ val := i, isLt := hi1 },
              isLt := (_ : ↑{ val := i, isLt := hi1 } < Composition.length (gather a b)) })),
    (applyComposition p a v ∘ ↑(embedding b { val := i, isLt := hi1 })) { val := i_1, isLt := him } =
      applyComposition p (sigmaCompositionAux a b { val := i, isLt := hi2 })
        (v ∘ ↑(embedding (gather a b) { val := i, isLt := hi2 })) { val := i_1, isLt := hin }
[PROOFSTEP]
intro j hj1 hj2
[GOAL]
case h.H.mk
𝕜 : 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
r : FormalMultilinearSeries 𝕜 G H
q : FormalMultilinearSeries 𝕜 F G
p : FormalMultilinearSeries 𝕜 E F
n : ℕ
v : Fin n → E
f : (a : Composition n) × Composition (Composition.length a) → H :=
  fun c => ↑(r (Composition.length c.snd)) (applyComposition q c.snd (applyComposition p c.fst v))
g : (c : Composition n) × ((i : Fin (Composition.length c)) → Composition (blocksFun c i)) → H :=
  fun c =>
    ↑(r (Composition.length c.fst)) fun i =>
      ↑(q (Composition.length (Sigma.snd c i))) (applyComposition p (Sigma.snd c i) (v ∘ ↑(embedding c.fst i)))
a : Composition n
b : Composition (Composition.length a)
a✝ : { fst := a, snd := b } ∈ Finset.univ
i : ℕ
hi1 : i < Composition.length b
hi2 : i < Composition.length (gather a b)
j : ℕ
hj1 : j < blocksFun b { val := i, isLt := hi1 }
hj2 :
  j <
    Composition.length
      (sigmaCompositionAux a b
        { val := ↑{ val := i, isLt := hi1 },
          isLt := (_ : ↑{ val := i, isLt := hi1 } < Composition.length (gather a b)) })
⊢ (applyComposition p a v ∘ ↑(embedding b { val := i, isLt := hi1 })) { val := j, isLt := hj1 } =
    applyComposition p (sigmaCompositionAux a b { val := i, isLt := hi2 })
      (v ∘ ↑(embedding (gather a b) { val := i, isLt := hi2 })) { val := j, isLt := hj2 }
[PROOFSTEP]
apply p.congr (blocksFun_sigmaCompositionAux a b _ _).symm
[GOAL]
case h.H.mk
𝕜 : 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
r : FormalMultilinearSeries 𝕜 G H
q : FormalMultilinearSeries 𝕜 F G
p : FormalMultilinearSeries 𝕜 E F
n : ℕ
v : Fin n → E
f : (a : Composition n) × Composition (Composition.length a) → H :=
  fun c => ↑(r (Composition.length c.snd)) (applyComposition q c.snd (applyComposition p c.fst v))
g : (c : Composition n) × ((i : Fin (Composition.length c)) → Composition (blocksFun c i)) → H :=
  fun c =>
    ↑(r (Composition.length c.fst)) fun i =>
      ↑(q (Composition.length (Sigma.snd c i))) (applyComposition p (Sigma.snd c i) (v ∘ ↑(embedding c.fst i)))
a : Composition n
b : Composition (Composition.length a)
a✝ : { fst := a, snd := b } ∈ Finset.univ
i : ℕ
hi1 : i < Composition.length b
hi2 : i < Composition.length (gather a b)
j : ℕ
hj1 : j < blocksFun b { val := i, isLt := hi1 }
hj2 :
  j <
    Composition.length
      (sigmaCompositionAux a b
        { val := ↑{ val := i, isLt := hi1 },
          isLt := (_ : ↑{ val := i, isLt := hi1 } < Composition.length (gather a b)) })
⊢ ∀ (i_1 : ℕ) (him : i_1 < blocksFun a (↑(embedding b { val := i, isLt := hi1 }) { val := j, isLt := hj1 }))
    (hin :
      i_1 <
        blocksFun
          (sigmaCompositionAux a b
            { val := ↑{ val := i, isLt := hi1 },
              isLt := (_ : ↑{ val := i, isLt := hi1 } < Composition.length (gather a b)) })
          { val := ↑{ val := j, isLt := hj1 },
            isLt :=
              (_ :
                ↑{ val := j, isLt := hj1 } <
                  Composition.length
                    (sigmaCompositionAux a b
                      { val := ↑{ val := i, isLt := hi1 },
                        isLt := (_ : ↑{ val := i, isLt := hi1 } < Composition.length (gather a b)) })) }),
    (v ∘ ↑(embedding a (↑(embedding b { val := i, isLt := hi1 }) { val := j, isLt := hj1 })))
        { val := i_1, isLt := him } =
      ((v ∘ ↑(embedding (gather a b) { val := i, isLt := hi2 })) ∘
          ↑(embedding (sigmaCompositionAux a b { val := i, isLt := hi2 }) { val := j, isLt := hj2 }))
        { val := i_1, isLt := hin }
[PROOFSTEP]
intro k hk1 hk2
[GOAL]
case h.H.mk
𝕜 : 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
r : FormalMultilinearSeries 𝕜 G H
q : FormalMultilinearSeries 𝕜 F G
p : FormalMultilinearSeries 𝕜 E F
n : ℕ
v : Fin n → E
f : (a : Composition n) × Composition (Composition.length a) → H :=
  fun c => ↑(r (Composition.length c.snd)) (applyComposition q c.snd (applyComposition p c.fst v))
g : (c : Composition n) × ((i : Fin (Composition.length c)) → Composition (blocksFun c i)) → H :=
  fun c =>
    ↑(r (Composition.length c.fst)) fun i =>
      ↑(q (Composition.length (Sigma.snd c i))) (applyComposition p (Sigma.snd c i) (v ∘ ↑(embedding c.fst i)))
a : Composition n
b : Composition (Composition.length a)
a✝ : { fst := a, snd := b } ∈ Finset.univ
i : ℕ
hi1 : i < Composition.length b
hi2 : i < Composition.length (gather a b)
j : ℕ
hj1 : j < blocksFun b { val := i, isLt := hi1 }
hj2 :
  j <
    Composition.length
      (sigmaCompositionAux a b
        { val := ↑{ val := i, isLt := hi1 },
          isLt := (_ : ↑{ val := i, isLt := hi1 } < Composition.length (gather a b)) })
k : ℕ
hk1 : k < blocksFun a (↑(embedding b { val := i, isLt := hi1 }) { val := j, isLt := hj1 })
hk2 :
  k <
    blocksFun
      (sigmaCompositionAux a b
        { val := ↑{ val := i, isLt := hi1 },
          isLt := (_ : ↑{ val := i, isLt := hi1 } < Composition.length (gather a b)) })
      { val := ↑{ val := j, isLt := hj1 },
        isLt :=
          (_ :
            ↑{ val := j, isLt := hj1 } <
              Composition.length
                (sigmaCompositionAux a b
                  { val := ↑{ val := i, isLt := hi1 },
                    isLt := (_ : ↑{ val := i, isLt := hi1 } < Composition.length (gather a b)) })) }
⊢ (v ∘ ↑(embedding a (↑(embedding b { val := i, isLt := hi1 }) { val := j, isLt := hj1 }))) { val := k, isLt := hk1 } =
    ((v ∘ ↑(embedding (gather a b) { val := i, isLt := hi2 })) ∘
        ↑(embedding (sigmaCompositionAux a b { val := i, isLt := hi2 }) { val := j, isLt := hj2 }))
      { val := k, isLt := hk2 }
[PROOFSTEP]
refine' congr_arg v (Fin.eq_of_veq _)
[GOAL]
case h.H.mk
𝕜 : 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
r : FormalMultilinearSeries 𝕜 G H
q : FormalMultilinearSeries 𝕜 F G
p : FormalMultilinearSeries 𝕜 E F
n : ℕ
v : Fin n → E
f : (a : Composition n) × Composition (Composition.length a) → H :=
  fun c => ↑(r (Composition.length c.snd)) (applyComposition q c.snd (applyComposition p c.fst v))
g : (c : Composition n) × ((i : Fin (Composition.length c)) → Composition (blocksFun c i)) → H :=
  fun c =>
    ↑(r (Composition.length c.fst)) fun i =>
      ↑(q (Composition.length (Sigma.snd c i))) (applyComposition p (Sigma.snd c i) (v ∘ ↑(embedding c.fst i)))
a : Composition n
b : Composition (Composition.length a)
a✝ : { fst := a, snd := b } ∈ Finset.univ
i : ℕ
hi1 : i < Composition.length b
hi2 : i < Composition.length (gather a b)
j : ℕ
hj1 : j < blocksFun b { val := i, isLt := hi1 }
hj2 :
  j <
    Composition.length
      (sigmaCompositionAux a b
        { val := ↑{ val := i, isLt := hi1 },
          isLt := (_ : ↑{ val := i, isLt := hi1 } < Composition.length (gather a b)) })
k : ℕ
hk1 : k < blocksFun a (↑(embedding b { val := i, isLt := hi1 }) { val := j, isLt := hj1 })
hk2 :
  k <
    blocksFun
      (sigmaCompositionAux a b
        { val := ↑{ val := i, isLt := hi1 },
          isLt := (_ : ↑{ val := i, isLt := hi1 } < Composition.length (gather a b)) })
      { val := ↑{ val := j, isLt := hj1 },
        isLt :=
          (_ :
            ↑{ val := j, isLt := hj1 } <
              Composition.length
                (sigmaCompositionAux a b
                  { val := ↑{ val := i, isLt := hi1 },
                    isLt := (_ : ↑{ val := i, isLt := hi1 } < Composition.length (gather a b)) })) }
⊢ ↑(↑(embedding a (↑(embedding b { val := i, isLt := hi1 }) { val := j, isLt := hj1 })) { val := k, isLt := hk1 }) =
    ↑(↑(embedding (gather a b) { val := i, isLt := hi2 })
        (↑(embedding (sigmaCompositionAux a b { val := i, isLt := hi2 }) { val := j, isLt := hj2 })
          { val := k, isLt := hk2 }))
[PROOFSTEP]
dsimp [Composition.embedding]
[GOAL]
case h.H.mk
𝕜 : 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
r : FormalMultilinearSeries 𝕜 G H
q : FormalMultilinearSeries 𝕜 F G
p : FormalMultilinearSeries 𝕜 E F
n : ℕ
v : Fin n → E
f : (a : Composition n) × Composition (Composition.length a) → H :=
  fun c => ↑(r (Composition.length c.snd)) (applyComposition q c.snd (applyComposition p c.fst v))
g : (c : Composition n) × ((i : Fin (Composition.length c)) → Composition (blocksFun c i)) → H :=
  fun c =>
    ↑(r (Composition.length c.fst)) fun i =>
      ↑(q (Composition.length (Sigma.snd c i))) (applyComposition p (Sigma.snd c i) (v ∘ ↑(embedding c.fst i)))
a : Composition n
b : Composition (Composition.length a)
a✝ : { fst := a, snd := b } ∈ Finset.univ
i : ℕ
hi1 : i < Composition.length b
hi2 : i < Composition.length (gather a b)
j : ℕ
hj1 : j < blocksFun b { val := i, isLt := hi1 }
hj2 :
  j <
    Composition.length
      (sigmaCompositionAux a b
        { val := ↑{ val := i, isLt := hi1 },
          isLt := (_ : ↑{ val := i, isLt := hi1 } < Composition.length (gather a b)) })
k : ℕ
hk1 : k < blocksFun a (↑(embedding b { val := i, isLt := hi1 }) { val := j, isLt := hj1 })
hk2 :
  k <
    blocksFun
      (sigmaCompositionAux a b
        { val := ↑{ val := i, isLt := hi1 },
          isLt := (_ : ↑{ val := i, isLt := hi1 } < Composition.length (gather a b)) })
      { val := ↑{ val := j, isLt := hj1 },
        isLt :=
          (_ :
            ↑{ val := j, isLt := hj1 } <
              Composition.length
                (sigmaCompositionAux a b
                  { val := ↑{ val := i, isLt := hi1 },
                    isLt := (_ : ↑{ val := i, isLt := hi1 } < Composition.length (gather a b)) })) }
⊢ sizeUpTo a (sizeUpTo b i + j) + k =
    sizeUpTo (gather a b) i + (sizeUpTo (sigmaCompositionAux a b { val := i, isLt := hi2 }) j + k)
[PROOFSTEP]
rw [sizeUpTo_sizeUpTo_add _ _ hi1 hj1, add_assoc]
