Theorem: PiTensorProduct.norm_eval_le_projectiveSeminorm
File: Mathlib/Analysis/NormedSpace/PiTensorProduct/ProjectiveSeminorm.lean

Proof steps:
state_before: ι : Type uι
inst✝⁷ : Fintype ι
𝕜 : Type u𝕜
inst✝⁶ : NontriviallyNormedField 𝕜
E : ι → Type uE
inst✝⁵ : (i : ι) → SeminormedAddCommGroup (E i)
inst✝⁴ : (i : ι) → NormedSpace 𝕜 (E i)
F : Type uF
inst✝³ : SeminormedAddCommGroup F
inst✝² : NormedSpace 𝕜 F
x : ⨂[𝕜] (i : ι), E i
G : Type u_1
inst✝¹ : SeminormedAddCommGroup G
inst✝ : NormedSpace 𝕜 G
f : ContinuousMultilinearMap 𝕜 E G
⊢ ‖(lift f.toMultilinearMap) x‖ ≤ projectiveSeminorm x * ‖f‖
state_after: ι : Type uι
inst✝⁷ : Fintype ι
𝕜 : Type u𝕜
inst✝⁶ : NontriviallyNormedField 𝕜
E : ι → Type uE
inst✝⁵ : (i : ι) → SeminormedAddCommGroup (E i)
inst✝⁴ : (i : ι) → NormedSpace 𝕜 (E i)
F : Type uF
inst✝³ : SeminormedAddCommGroup F
inst✝² : NormedSpace 𝕜 F
x : ⨂[𝕜] (i : ι), E i
G : Type u_1
inst✝¹ : SeminormedAddCommGroup G
inst✝ : NormedSpace 𝕜 G
f : ContinuousMultilinearMap 𝕜 E G
this : Nonempty { a // a ∈ x.lifts } := nonempty_subtype.mpr (nonempty_lifts x)
⊢ ‖(lift f.toMultilinearMap) x‖ ≤ projectiveSeminorm x * ‖f‖
tactic: letI := nonempty_subtype.mpr (nonempty_lifts x)
state_before: ι : Type uι
inst✝⁷ : Fintype ι
𝕜 : Type u𝕜
inst✝⁶ : NontriviallyNormedField 𝕜
E : ι → Type uE
inst✝⁵ : (i : ι) → SeminormedAddCommGroup (E i)
inst✝⁴ : (i : ι) → NormedSpace 𝕜 (E i)
F : Type uF
inst✝³ : SeminormedAddCommGroup F
inst✝² : NormedSpace 𝕜 F
x : ⨂[𝕜] (i : ι), E i
G : Type u_1
inst✝¹ : SeminormedAddCommGroup G
inst✝ : NormedSpace 𝕜 G
f : ContinuousMultilinearMap 𝕜 E G
this : Nonempty { a // a ∈ x.lifts } := nonempty_subtype.mpr (nonempty_lifts x)
⊢ ‖(lift f.toMultilinearMap) x‖ ≤ projectiveSeminorm x * ‖f‖
state_after: ι : Type uι
inst✝⁷ : Fintype ι
𝕜 : Type u𝕜
inst✝⁶ : NontriviallyNormedField 𝕜
E : ι → Type uE
inst✝⁵ : (i : ι) → SeminormedAddCommGroup (E i)
inst✝⁴ : (i : ι) → NormedSpace 𝕜 (E i)
F : Type uF
inst✝³ : SeminormedAddCommGroup F
inst✝² : NormedSpace 𝕜 F
x : ⨂[𝕜] (i : ι), E i
G : Type u_1
inst✝¹ : SeminormedAddCommGroup G
inst✝ : NormedSpace 𝕜 G
f : ContinuousMultilinearMap 𝕜 E G
this : Nonempty { a // a ∈ x.lifts } := nonempty_subtype.mpr (nonempty_lifts x)
⊢ ‖(lift f.toMultilinearMap) x‖ ≤ ⨅ i, (List.sum ∘ List.map fun p => ‖p.1‖ * ∏ i : ι, ‖p.2 i‖) ↑i * ‖f‖
tactic: rw [projectiveSeminorm_apply, Real.iInf_mul_of_nonneg (norm_nonneg _), projectiveSeminormAux]
state_before: ι : Type uι
inst✝⁷ : Fintype ι
𝕜 : Type u𝕜
inst✝⁶ : NontriviallyNormedField 𝕜
E : ι → Type uE
inst✝⁵ : (i : ι) → SeminormedAddCommGroup (E i)
inst✝⁴ : (i : ι) → NormedSpace 𝕜 (E i)
F : Type uF
inst✝³ : SeminormedAddCommGroup F
inst✝² : NormedSpace 𝕜 F
x : ⨂[𝕜] (i : ι), E i
G : Type u_1
inst✝¹ : SeminormedAddCommGroup G
inst✝ : NormedSpace 𝕜 G
f : ContinuousMultilinearMap 𝕜 E G
this : Nonempty { a // a ∈ x.lifts } := nonempty_subtype.mpr (nonempty_lifts x)
⊢ ‖(lift f.toMultilinearMap) x‖ ≤ ⨅ i, (List.sum ∘ List.map fun p => ‖p.1‖ * ∏ i : ι, ‖p.2 i‖) ↑i * ‖f‖
state_after: ι : Type uι
inst✝⁷ : Fintype ι
𝕜 : Type u𝕜
inst✝⁶ : NontriviallyNormedField 𝕜
E : ι → Type uE
inst✝⁵ : (i : ι) → SeminormedAddCommGroup (E i)
inst✝⁴ : (i : ι) → NormedSpace 𝕜 (E i)
F : Type uF
inst✝³ : SeminormedAddCommGroup F
inst✝² : NormedSpace 𝕜 F
x : ⨂[𝕜] (i : ι), E i
G : Type u_1
inst✝¹ : SeminormedAddCommGroup G
inst✝ : NormedSpace 𝕜 G
f : ContinuousMultilinearMap 𝕜 E G
this : Nonempty { a // a ∈ x.lifts } := nonempty_subtype.mpr (nonempty_lifts x)
⊢ ∀ (x_1 : ↑x.lifts), ‖(lift f.toMultilinearMap) x‖ ≤ (List.sum ∘ List.map fun p => ‖p.1‖ * ∏ i : ι, ‖p.2 i‖) ↑x_1 * ‖f‖
tactic: refine le_ciInf ?_
state_before: ι : Type uι
inst✝⁷ : Fintype ι
𝕜 : Type u𝕜
inst✝⁶ : NontriviallyNormedField 𝕜
E : ι → Type uE
inst✝⁵ : (i : ι) → SeminormedAddCommGroup (E i)
inst✝⁴ : (i : ι) → NormedSpace 𝕜 (E i)
F : Type uF
inst✝³ : SeminormedAddCommGroup F
inst✝² : NormedSpace 𝕜 F
x : ⨂[𝕜] (i : ι), E i
G : Type u_1
inst✝¹ : SeminormedAddCommGroup G
inst✝ : NormedSpace 𝕜 G
f : ContinuousMultilinearMap 𝕜 E G
this : Nonempty { a // a ∈ x.lifts } := nonempty_subtype.mpr (nonempty_lifts x)
⊢ ∀ (x_1 : ↑x.lifts), ‖(lift f.toMultilinearMap) x‖ ≤ (List.sum ∘ List.map fun p => ‖p.1‖ * ∏ i : ι, ‖p.2 i‖) ↑x_1 * ‖f‖
state_after: ι : Type uι
inst✝⁷ : Fintype ι
𝕜 : Type u𝕜
inst✝⁶ : NontriviallyNormedField 𝕜
E : ι → Type uE
inst✝⁵ : (i : ι) → SeminormedAddCommGroup (E i)
inst✝⁴ : (i : ι) → NormedSpace 𝕜 (E i)
F : Type uF
inst✝³ : SeminormedAddCommGroup F
inst✝² : NormedSpace 𝕜 F
x : ⨂[𝕜] (i : ι), E i
G : Type u_1
inst✝¹ : SeminormedAddCommGroup G
inst✝ : NormedSpace 𝕜 G
f : ContinuousMultilinearMap 𝕜 E G
this : Nonempty { a // a ∈ x.lifts } := nonempty_subtype.mpr (nonempty_lifts x)
p : FreeAddMonoid (𝕜 × ((i : ι) → E i))
hp : p ∈ x.lifts
⊢ ‖(lift f.toMultilinearMap) x‖ ≤ (List.sum ∘ List.map fun p => ‖p.1‖ * ∏ i : ι, ‖p.2 i‖) ↑⟨p, hp⟩ * ‖f‖
tactic: intro ⟨p, hp⟩
state_before: ι : Type uι
inst✝⁷ : Fintype ι
𝕜 : Type u𝕜
inst✝⁶ : NontriviallyNormedField 𝕜
E : ι → Type uE
inst✝⁵ : (i : ι) → SeminormedAddCommGroup (E i)
inst✝⁴ : (i : ι) → NormedSpace 𝕜 (E i)
F : Type uF
inst✝³ : SeminormedAddCommGroup F
inst✝² : NormedSpace 𝕜 F
x : ⨂[𝕜] (i : ι), E i
G : Type u_1
inst✝¹ : SeminormedAddCommGroup G
inst✝ : NormedSpace 𝕜 G
f : ContinuousMultilinearMap 𝕜 E G
this : Nonempty { a // a ∈ x.lifts } := nonempty_subtype.mpr (nonempty_lifts x)
p : FreeAddMonoid (𝕜 × ((i : ι) → E i))
hp : p ∈ x.lifts
⊢ ‖(lift f.toMultilinearMap) x‖ ≤ (List.sum ∘ List.map fun p => ‖p.1‖ * ∏ i : ι, ‖p.2 i‖) ↑⟨p, hp⟩ * ‖f‖
state_after: ι : Type uι
inst✝⁷ : Fintype ι
𝕜 : Type u𝕜
inst✝⁶ : NontriviallyNormedField 𝕜
E : ι → Type uE
inst✝⁵ : (i : ι) → SeminormedAddCommGroup (E i)
inst✝⁴ : (i : ι) → NormedSpace 𝕜 (E i)
F : Type uF
inst✝³ : SeminormedAddCommGroup F
inst✝² : NormedSpace 𝕜 F
x : ⨂[𝕜] (i : ι), E i
G : Type u_1
inst✝¹ : SeminormedAddCommGroup G
inst✝ : NormedSpace 𝕜 G
f : ContinuousMultilinearMap 𝕜 E G
this : Nonempty { a // a ∈ x.lifts } := nonempty_subtype.mpr (nonempty_lifts x)
p : FreeAddMonoid (𝕜 × ((i : ι) → E i))
hp✝ : p ∈ x.lifts
hp : (List.map (fun x => x.1 • ⨂ₜ[𝕜] (i : ι), x.2 i) p).sum = x
⊢ ‖(lift f.toMultilinearMap) x‖ ≤ (List.sum ∘ List.map fun p => ‖p.1‖ * ∏ i : ι, ‖p.2 i‖) ↑⟨p, hp✝⟩ * ‖f‖
tactic: rw [mem_lifts_iff] at hp
state_before: ι : Type uι
inst✝⁷ : Fintype ι
𝕜 : Type u𝕜
inst✝⁶ : NontriviallyNormedField 𝕜
E : ι → Type uE
inst✝⁵ : (i : ι) → SeminormedAddCommGroup (E i)
inst✝⁴ : (i : ι) → NormedSpace 𝕜 (E i)
F : Type uF
inst✝³ : SeminormedAddCommGroup F
inst✝² : NormedSpace 𝕜 F
x : ⨂[𝕜] (i : ι), E i
G : Type u_1
inst✝¹ : SeminormedAddCommGroup G
inst✝ : NormedSpace 𝕜 G
f : ContinuousMultilinearMap 𝕜 E G
this : Nonempty { a // a ∈ x.lifts } := nonempty_subtype.mpr (nonempty_lifts x)
p : FreeAddMonoid (𝕜 × ((i : ι) → E i))
hp✝ : p ∈ x.lifts
hp : (List.map (fun x => x.1 • ⨂ₜ[𝕜] (i : ι), x.2 i) p).sum = x
⊢ ‖(lift f.toMultilinearMap) x‖ ≤ (List.sum ∘ List.map fun p => ‖p.1‖ * ∏ i : ι, ‖p.2 i‖) ↑⟨p, hp✝⟩ * ‖f‖
state_after: ι : Type uι
inst✝⁷ : Fintype ι
𝕜 : Type u𝕜
inst✝⁶ : NontriviallyNormedField 𝕜
E : ι → Type uE
inst✝⁵ : (i : ι) → SeminormedAddCommGroup (E i)
inst✝⁴ : (i : ι) → NormedSpace 𝕜 (E i)
F : Type uF
inst✝³ : SeminormedAddCommGroup F
inst✝² : NormedSpace 𝕜 F
x : ⨂[𝕜] (i : ι), E i
G : Type u_1
inst✝¹ : SeminormedAddCommGroup G
inst✝ : NormedSpace 𝕜 G
f : ContinuousMultilinearMap 𝕜 E G
this : Nonempty { a // a ∈ x.lifts } := nonempty_subtype.mpr (nonempty_lifts x)
p : FreeAddMonoid (𝕜 × ((i : ι) → E i))
hp✝ : p ∈ x.lifts
hp : (List.map (fun x => x.1 • ⨂ₜ[𝕜] (i : ι), x.2 i) p).sum = x
⊢ ‖(↑(List.map (⇑(lift f.toMultilinearMap) ∘ fun x => x.1 • ⨂ₜ[𝕜] (i : ι), x.2 i) p)).sum‖ ≤
    (List.sum ∘ List.map fun p => ‖p.1‖ * ∏ i : ι, ‖p.2 i‖) ↑⟨p, hp✝⟩ * ‖f‖
tactic: conv_lhs => rw [← hp, ← List.sum_map_hom, ← Multiset.sum_coe]
state_before: ι : Type uι
inst✝⁷ : Fintype ι
𝕜 : Type u𝕜
inst✝⁶ : NontriviallyNormedField 𝕜
E : ι → Type uE
inst✝⁵ : (i : ι) → SeminormedAddCommGroup (E i)
inst✝⁴ : (i : ι) → NormedSpace 𝕜 (E i)
F : Type uF
inst✝³ : SeminormedAddCommGroup F
inst✝² : NormedSpace 𝕜 F
x : ⨂[𝕜] (i : ι), E i
G : Type u_1
inst✝¹ : SeminormedAddCommGroup G
inst✝ : NormedSpace 𝕜 G
f : ContinuousMultilinearMap 𝕜 E G
this : Nonempty { a // a ∈ x.lifts } := nonempty_subtype.mpr (nonempty_lifts x)
p : FreeAddMonoid (𝕜 × ((i : ι) → E i))
hp✝ : p ∈ x.lifts
hp : (List.map (fun x => x.1 • ⨂ₜ[𝕜] (i : ι), x.2 i) p).sum = x
⊢ ‖(↑(List.map (⇑(lift f.toMultilinearMap) ∘ fun x => x.1 • ⨂ₜ[𝕜] (i : ι), x.2 i) p)).sum‖ ≤
    (List.sum ∘ List.map fun p => ‖p.1‖ * ∏ i : ι, ‖p.2 i‖) ↑⟨p, hp✝⟩ * ‖f‖
state_after: ι : Type uι
inst✝⁷ : Fintype ι
𝕜 : Type u𝕜
inst✝⁶ : NontriviallyNormedField 𝕜
E : ι → Type uE
inst✝⁵ : (i : ι) → SeminormedAddCommGroup (E i)
inst✝⁴ : (i : ι) → NormedSpace 𝕜 (E i)
F : Type uF
inst✝³ : SeminormedAddCommGroup F
inst✝² : NormedSpace 𝕜 F
x : ⨂[𝕜] (i : ι), E i
G : Type u_1
inst✝¹ : SeminormedAddCommGroup G
inst✝ : NormedSpace 𝕜 G
f : ContinuousMultilinearMap 𝕜 E G
this : Nonempty { a // a ∈ x.lifts } := nonempty_subtype.mpr (nonempty_lifts x)
p : FreeAddMonoid (𝕜 × ((i : ι) → E i))
hp✝ : p ∈ x.lifts
hp : (List.map (fun x => x.1 • ⨂ₜ[𝕜] (i : ι), x.2 i) p).sum = x
⊢ (Multiset.map (fun x => ‖x‖) ↑(List.map (⇑(lift f.toMultilinearMap) ∘ fun x => x.1 • ⨂ₜ[𝕜] (i : ι), x.2 i) p)).sum ≤
    (List.sum ∘ List.map fun p => ‖p.1‖ * ∏ i : ι, ‖p.2 i‖) ↑⟨p, hp✝⟩ * ‖f‖
tactic: refine le_trans (norm_multiset_sum_le _) ?_
state_before: ι : Type uι
inst✝⁷ : Fintype ι
𝕜 : Type u𝕜
inst✝⁶ : NontriviallyNormedField 𝕜
E : ι → Type uE
inst✝⁵ : (i : ι) → SeminormedAddCommGroup (E i)
inst✝⁴ : (i : ι) → NormedSpace 𝕜 (E i)
F : Type uF
inst✝³ : SeminormedAddCommGroup F
inst✝² : NormedSpace 𝕜 F
x : ⨂[𝕜] (i : ι), E i
G : Type u_1
inst✝¹ : SeminormedAddCommGroup G
inst✝ : NormedSpace 𝕜 G
f : ContinuousMultilinearMap 𝕜 E G
this : Nonempty { a // a ∈ x.lifts } := nonempty_subtype.mpr (nonempty_lifts x)
p : FreeAddMonoid (𝕜 × ((i : ι) → E i))
hp✝ : p ∈ x.lifts
hp : (List.map (fun x => x.1 • ⨂ₜ[𝕜] (i : ι), x.2 i) p).sum = x
⊢ (Multiset.map (fun x => ‖x‖) ↑(List.map (⇑(lift f.toMultilinearMap) ∘ fun x => x.1 • ⨂ₜ[𝕜] (i : ι), x.2 i) p)).sum ≤
    (List.sum ∘ List.map fun p => ‖p.1‖ * ∏ i : ι, ‖p.2 i‖) ↑⟨p, hp✝⟩ * ‖f‖
state_after: ι : Type uι
inst✝⁷ : Fintype ι
𝕜 : Type u𝕜
inst✝⁶ : NontriviallyNormedField 𝕜
E : ι → Type uE
inst✝⁵ : (i : ι) → SeminormedAddCommGroup (E i)
inst✝⁴ : (i : ι) → NormedSpace 𝕜 (E i)
F : Type uF
inst✝³ : SeminormedAddCommGroup F
inst✝² : NormedSpace 𝕜 F
x : ⨂[𝕜] (i : ι), E i
G : Type u_1
inst✝¹ : SeminormedAddCommGroup G
inst✝ : NormedSpace 𝕜 G
f : ContinuousMultilinearMap 𝕜 E G
this : Nonempty { a // a ∈ x.lifts } := nonempty_subtype.mpr (nonempty_lifts x)
p : FreeAddMonoid (𝕜 × ((i : ι) → E i))
hp✝ : p ∈ x.lifts
hp : (List.map (fun x => x.1 • ⨂ₜ[𝕜] (i : ι), x.2 i) p).sum = x
⊢ (List.map ((fun x => ‖x‖) ∘ ⇑(lift f.toMultilinearMap) ∘ fun x => x.1 • ⨂ₜ[𝕜] (i : ι), x.2 i) p).sum ≤
    (List.map (fun p => ‖p.1‖ * ∏ i : ι, ‖p.2 i‖) p).sum * ‖f‖
tactic: simp only [tprodCoeff_eq_smul_tprod, Multiset.map_coe, List.map_map, Multiset.sum_coe,
    Function.comp_apply]
state_before: ι : Type uι
inst✝⁷ : Fintype ι
𝕜 : Type u𝕜
inst✝⁶ : NontriviallyNormedField 𝕜
E : ι → Type uE
inst✝⁵ : (i : ι) → SeminormedAddCommGroup (E i)
inst✝⁴ : (i : ι) → NormedSpace 𝕜 (E i)
F : Type uF
inst✝³ : SeminormedAddCommGroup F
inst✝² : NormedSpace 𝕜 F
x : ⨂[𝕜] (i : ι), E i
G : Type u_1
inst✝¹ : SeminormedAddCommGroup G
inst✝ : NormedSpace 𝕜 G
f : ContinuousMultilinearMap 𝕜 E G
this : Nonempty { a // a ∈ x.lifts } := nonempty_subtype.mpr (nonempty_lifts x)
p : FreeAddMonoid (𝕜 × ((i : ι) → E i))
hp✝ : p ∈ x.lifts
hp : (List.map (fun x => x.1 • ⨂ₜ[𝕜] (i : ι), x.2 i) p).sum = x
⊢ (List.map ((fun x => ‖x‖) ∘ ⇑(lift f.toMultilinearMap) ∘ fun x => x.1 • ⨂ₜ[𝕜] (i : ι), x.2 i) p).sum ≤
    (List.map (fun p => ‖p.1‖ * ∏ i : ι, ‖p.2 i‖) p).sum * ‖f‖
state_after: ι : Type uι
inst✝⁷ : Fintype ι
𝕜 : Type u𝕜
inst✝⁶ : NontriviallyNormedField 𝕜
E : ι → Type uE
inst✝⁵ : (i : ι) → SeminormedAddCommGroup (E i)
inst✝⁴ : (i : ι) → NormedSpace 𝕜 (E i)
F : Type uF
inst✝³ : SeminormedAddCommGroup F
inst✝² : NormedSpace 𝕜 F
x : ⨂[𝕜] (i : ι), E i
G : Type u_1
inst✝¹ : SeminormedAddCommGroup G
inst✝ : NormedSpace 𝕜 G
f : ContinuousMultilinearMap 𝕜 E G
this : Nonempty { a // a ∈ x.lifts } := nonempty_subtype.mpr (nonempty_lifts x)
p : FreeAddMonoid (𝕜 × ((i : ι) → E i))
hp✝ : p ∈ x.lifts
hp : (List.map (fun x => x.1 • ⨂ₜ[𝕜] (i : ι), x.2 i) p).sum = x
⊢ (List.map ((fun x => ‖x‖) ∘ ⇑(lift f.toMultilinearMap) ∘ fun x => x.1 • ⨂ₜ[𝕜] (i : ι), x.2 i) p).sum ≤
    (List.map (fun x => ‖f‖ • x) (List.map (fun p => ‖p.1‖ * ∏ i : ι, ‖p.2 i‖) p)).sum
tactic: rw [mul_comm, ← smul_eq_mul, List.smul_sum]
state_before: ι : Type uι
inst✝⁷ : Fintype ι
𝕜 : Type u𝕜
inst✝⁶ : NontriviallyNormedField 𝕜
E : ι → Type uE
inst✝⁵ : (i : ι) → SeminormedAddCommGroup (E i)
inst✝⁴ : (i : ι) → NormedSpace 𝕜 (E i)
F : Type uF
inst✝³ : SeminormedAddCommGroup F
inst✝² : NormedSpace 𝕜 F
x : ⨂[𝕜] (i : ι), E i
G : Type u_1
inst✝¹ : SeminormedAddCommGroup G
inst✝ : NormedSpace 𝕜 G
f : ContinuousMultilinearMap 𝕜 E G
this : Nonempty { a // a ∈ x.lifts } := nonempty_subtype.mpr (nonempty_lifts x)
p : FreeAddMonoid (𝕜 × ((i : ι) → E i))
hp✝ : p ∈ x.lifts
hp : (List.map (fun x => x.1 • ⨂ₜ[𝕜] (i : ι), x.2 i) p).sum = x
⊢ (List.map ((fun x => ‖x‖) ∘ ⇑(lift f.toMultilinearMap) ∘ fun x => x.1 • ⨂ₜ[𝕜] (i : ι), x.2 i) p).sum ≤
    (List.map (fun x => ‖f‖ • x) (List.map (fun p => ‖p.1‖ * ∏ i : ι, ‖p.2 i‖) p)).sum
state_after: ι : Type uι
inst✝⁷ : Fintype ι
𝕜 : Type u𝕜
inst✝⁶ : NontriviallyNormedField 𝕜
E : ι → Type uE
inst✝⁵ : (i : ι) → SeminormedAddCommGroup (E i)
inst✝⁴ : (i : ι) → NormedSpace 𝕜 (E i)
F : Type uF
inst✝³ : SeminormedAddCommGroup F
inst✝² : NormedSpace 𝕜 F
x : ⨂[𝕜] (i : ι), E i
G : Type u_1
inst✝¹ : SeminormedAddCommGroup G
inst✝ : NormedSpace 𝕜 G
f : ContinuousMultilinearMap 𝕜 E G
this : Nonempty { a // a ∈ x.lifts } := nonempty_subtype.mpr (nonempty_lifts x)
p : FreeAddMonoid (𝕜 × ((i : ι) → E i))
hp✝ : p ∈ x.lifts
hp : (List.map (fun x => x.1 • ⨂ₜ[𝕜] (i : ι), x.2 i) p).sum = x
⊢ List.Forall₂ (fun x x_1 => x ≤ x_1)
    (List.map ((fun x => ‖x‖) ∘ ⇑(lift f.toMultilinearMap) ∘ fun x => x.1 • ⨂ₜ[𝕜] (i : ι), x.2 i) p)
    (List.map (fun x => ‖f‖ • x) (List.map (fun p => ‖p.1‖ * ∏ i : ι, ‖p.2 i‖) p))
tactic: refine List.Forall₂.sum_le_sum ?_
state_before: ι : Type uι
inst✝⁷ : Fintype ι
𝕜 : Type u𝕜
inst✝⁶ : NontriviallyNormedField 𝕜
E : ι → Type uE
inst✝⁵ : (i : ι) → SeminormedAddCommGroup (E i)
inst✝⁴ : (i : ι) → NormedSpace 𝕜 (E i)
F : Type uF
inst✝³ : SeminormedAddCommGroup F
inst✝² : NormedSpace 𝕜 F
x : ⨂[𝕜] (i : ι), E i
G : Type u_1
inst✝¹ : SeminormedAddCommGroup G
inst✝ : NormedSpace 𝕜 G
f : ContinuousMultilinearMap 𝕜 E G
this : Nonempty { a // a ∈ x.lifts } := nonempty_subtype.mpr (nonempty_lifts x)
p : FreeAddMonoid (𝕜 × ((i : ι) → E i))
hp✝ : p ∈ x.lifts
hp : (List.map (fun x => x.1 • ⨂ₜ[𝕜] (i : ι), x.2 i) p).sum = x
⊢ List.Forall₂ (fun x x_1 => x ≤ x_1)
    (List.map ((fun x => ‖x‖) ∘ ⇑(lift f.toMultilinearMap) ∘ fun x => x.1 • ⨂ₜ[𝕜] (i : ι), x.2 i) p)
    (List.map (fun x => ‖f‖ • x) (List.map (fun p => ‖p.1‖ * ∏ i : ι, ‖p.2 i‖) p))
state_after: ι : Type uι
inst✝⁷ : Fintype ι
𝕜 : Type u𝕜
inst✝⁶ : NontriviallyNormedField 𝕜
E : ι → Type uE
inst✝⁵ : (i : ι) → SeminormedAddCommGroup (E i)
inst✝⁴ : (i : ι) → NormedSpace 𝕜 (E i)
F : Type uF
inst✝³ : SeminormedAddCommGroup F
inst✝² : NormedSpace 𝕜 F
x : ⨂[𝕜] (i : ι), E i
G : Type u_1
inst✝¹ : SeminormedAddCommGroup G
inst✝ : NormedSpace 𝕜 G
f : ContinuousMultilinearMap 𝕜 E G
this : Nonempty { a // a ∈ x.lifts } := nonempty_subtype.mpr (nonempty_lifts x)
p : FreeAddMonoid (𝕜 × ((i : ι) → E i))
hp✝ : p ∈ x.lifts
hp : (List.map (fun x => x.1 • ⨂ₜ[𝕜] (i : ι), x.2 i) p).sum = x
⊢ ∀ (a : 𝕜) (b : (i : ι) → E i), (a, b) ∈ p → ‖a • f fun i => b i‖ ≤ ‖f‖ * (‖a‖ * ∏ x : ι, ‖b x‖)
tactic: simp only [smul_eq_mul, List.map_map, List.forall₂_map_right_iff, Function.comp_apply,
    List.forall₂_map_left_iff, map_smul, lift.tprod, ContinuousMultilinearMap.coe_coe,
    List.forall₂_same, Prod.forall]
state_before: ι : Type uι
inst✝⁷ : Fintype ι
𝕜 : Type u𝕜
inst✝⁶ : NontriviallyNormedField 𝕜
E : ι → Type uE
inst✝⁵ : (i : ι) → SeminormedAddCommGroup (E i)
inst✝⁴ : (i : ι) → NormedSpace 𝕜 (E i)
F : Type uF
inst✝³ : SeminormedAddCommGroup F
inst✝² : NormedSpace 𝕜 F
x : ⨂[𝕜] (i : ι), E i
G : Type u_1
inst✝¹ : SeminormedAddCommGroup G
inst✝ : NormedSpace 𝕜 G
f : ContinuousMultilinearMap 𝕜 E G
this : Nonempty { a // a ∈ x.lifts } := nonempty_subtype.mpr (nonempty_lifts x)
p : FreeAddMonoid (𝕜 × ((i : ι) → E i))
hp✝ : p ∈ x.lifts
hp : (List.map (fun x => x.1 • ⨂ₜ[𝕜] (i : ι), x.2 i) p).sum = x
⊢ ∀ (a : 𝕜) (b : (i : ι) → E i), (a, b) ∈ p → ‖a • f fun i => b i‖ ≤ ‖f‖ * (‖a‖ * ∏ x : ι, ‖b x‖)
state_after: ι : Type uι
inst✝⁷ : Fintype ι
𝕜 : Type u𝕜
inst✝⁶ : NontriviallyNormedField 𝕜
E : ι → Type uE
inst✝⁵ : (i : ι) → SeminormedAddCommGroup (E i)
inst✝⁴ : (i : ι) → NormedSpace 𝕜 (E i)
F : Type uF
inst✝³ : SeminormedAddCommGroup F
inst✝² : NormedSpace 𝕜 F
x : ⨂[𝕜] (i : ι), E i
G : Type u_1
inst✝¹ : SeminormedAddCommGroup G
inst✝ : NormedSpace 𝕜 G
f : ContinuousMultilinearMap 𝕜 E G
this : Nonempty { a // a ∈ x.lifts } := nonempty_subtype.mpr (nonempty_lifts x)
p : FreeAddMonoid (𝕜 × ((i : ι) → E i))
hp✝ : p ∈ x.lifts
hp : (List.map (fun x => x.1 • ⨂ₜ[𝕜] (i : ι), x.2 i) p).sum = x
a : 𝕜
m : (i : ι) → E i
a✝ : (a, m) ∈ p
⊢ ‖a • f fun i => m i‖ ≤ ‖f‖ * (‖a‖ * ∏ x : ι, ‖m x‖)
tactic: intro a m _
state_before: ι : Type uι
inst✝⁷ : Fintype ι
𝕜 : Type u𝕜
inst✝⁶ : NontriviallyNormedField 𝕜
E : ι → Type uE
inst✝⁵ : (i : ι) → SeminormedAddCommGroup (E i)
inst✝⁴ : (i : ι) → NormedSpace 𝕜 (E i)
F : Type uF
inst✝³ : SeminormedAddCommGroup F
inst✝² : NormedSpace 𝕜 F
x : ⨂[𝕜] (i : ι), E i
G : Type u_1
inst✝¹ : SeminormedAddCommGroup G
inst✝ : NormedSpace 𝕜 G
f : ContinuousMultilinearMap 𝕜 E G
this : Nonempty { a // a ∈ x.lifts } := nonempty_subtype.mpr (nonempty_lifts x)
p : FreeAddMonoid (𝕜 × ((i : ι) → E i))
hp✝ : p ∈ x.lifts
hp : (List.map (fun x => x.1 • ⨂ₜ[𝕜] (i : ι), x.2 i) p).sum = x
a : 𝕜
m : (i : ι) → E i
a✝ : (a, m) ∈ p
⊢ ‖a • f fun i => m i‖ ≤ ‖f‖ * (‖a‖ * ∏ x : ι, ‖m x‖)
state_after: ι : Type uι
inst✝⁷ : Fintype ι
𝕜 : Type u𝕜
inst✝⁶ : NontriviallyNormedField 𝕜
E : ι → Type uE
inst✝⁵ : (i : ι) → SeminormedAddCommGroup (E i)
inst✝⁴ : (i : ι) → NormedSpace 𝕜 (E i)
F : Type uF
inst✝³ : SeminormedAddCommGroup F
inst✝² : NormedSpace 𝕜 F
x : ⨂[𝕜] (i : ι), E i
G : Type u_1
inst✝¹ : SeminormedAddCommGroup G
inst✝ : NormedSpace 𝕜 G
f : ContinuousMultilinearMap 𝕜 E G
this : Nonempty { a // a ∈ x.lifts } := nonempty_subtype.mpr (nonempty_lifts x)
p : FreeAddMonoid (𝕜 × ((i : ι) → E i))
hp✝ : p ∈ x.lifts
hp : (List.map (fun x => x.1 • ⨂ₜ[𝕜] (i : ι), x.2 i) p).sum = x
a : 𝕜
m : (i : ι) → E i
a✝ : (a, m) ∈ p
⊢ ‖a‖ * ‖f fun i => m i‖ ≤ ‖a‖ * (‖f‖ * ∏ x : ι, ‖m x‖)
tactic: rw [norm_smul, ← mul_assoc, mul_comm ‖f‖ _, mul_assoc]
state_before: ι : Type uι
inst✝⁷ : Fintype ι
𝕜 : Type u𝕜
inst✝⁶ : NontriviallyNormedField 𝕜
E : ι → Type uE
inst✝⁵ : (i : ι) → SeminormedAddCommGroup (E i)
inst✝⁴ : (i : ι) → NormedSpace 𝕜 (E i)
F : Type uF
inst✝³ : SeminormedAddCommGroup F
inst✝² : NormedSpace 𝕜 F
x : ⨂[𝕜] (i : ι), E i
G : Type u_1
inst✝¹ : SeminormedAddCommGroup G
inst✝ : NormedSpace 𝕜 G
f : ContinuousMultilinearMap 𝕜 E G
this : Nonempty { a // a ∈ x.lifts } := nonempty_subtype.mpr (nonempty_lifts x)
p : FreeAddMonoid (𝕜 × ((i : ι) → E i))
hp✝ : p ∈ x.lifts
hp : (List.map (fun x => x.1 • ⨂ₜ[𝕜] (i : ι), x.2 i) p).sum = x
a : 𝕜
m : (i : ι) → E i
a✝ : (a, m) ∈ p
⊢ ‖a‖ * ‖f fun i => m i‖ ≤ ‖a‖ * (‖f‖ * ∏ x : ι, ‖m x‖)
state_after: no goals
tactic: exact mul_le_mul_of_nonneg_left (f.le_opNorm _) (norm_nonneg _)