-- Mathlib/Analysis/NormedSpace/PiTensorProduct/InjectiveSeminorm.lean
theorem norm_eval_le_injectiveSeminorm (f : ContinuousMultilinearMap 𝕜 E F) (x : ⨂[𝕜] i, E i) :
    ‖lift f.toMultilinearMap x‖ ≤ ‖f‖ * injectiveSeminorm x

Proof state:
ι : 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
f : ContinuousMultilinearMap 𝕜 E F
x : ⨂[𝕜] (i : ι), E i
G : Type (max (max (max uE u𝕜) uι) (max uE uι) u𝕜) := (⨂[𝕜] (i : ι), E i) ⧸ LinearMap.ker (lift f.toMultilinearMap)
G' : Submodule 𝕜 F := LinearMap.range (lift f.toMultilinearMap)
e : ((⨂[𝕜] (i : ι), E i) ⧸ LinearMap.ker (lift f.toMultilinearMap)) ≃ₗ[𝕜]
  ↥(LinearMap.range (lift f.toMultilinearMap)) :=
  (lift f.toMultilinearMap).quotKerEquivRange
this✝ : SeminormedAddCommGroup G := SeminormedAddCommGroup.induced G (↥G') e
this : NormedSpace 𝕜 G := NormedSpace.induced 𝕜 G (↥G') e
f'₀ : MultilinearMap 𝕜 E ((⨂[𝕜] (i : ι), E i) ⧸ LinearMap.ker (lift f.toMultilinearMap)) :=
  lift.symm (↑e.symm ∘ₗ (lift f.toMultilinearMap).rangeRestrict)
hf'₀ : ∀ (x : (i : ι) → E i), ‖f'₀ x‖ ≤ ‖f‖ * ∏ i : ι, ‖x i‖
f' : ContinuousMultilinearMap 𝕜 E ((⨂[𝕜] (i : ι), E i) ⧸ LinearMap.ker (lift f.toMultilinearMap)) :=
  f'₀.mkContinuous ‖f‖ hf'₀
hnorm : ‖f'‖ ≤ ‖f‖
heq : ↑(e ((lift f'.toMultilinearMap) x)) = (lift f.toMultilinearMap) x
⊢ ‖(lift f'.toMultilinearMap) x‖ ≤ ‖f'‖ * injectiveSeminorm x

Tactic:
have hle : Seminorm.comp (normSeminorm 𝕜 (ContinuousMultilinearMap 𝕜 E G →L[𝕜] G))
    (toDualContinuousMultilinearMap G (𝕜 := 𝕜) (E := E)) ≤ injectiveSeminorm := by
  simp only [injectiveSeminorm]
  refine le_csSup dualSeminorms_bounded ?_
  rw [Set.mem_setOf]
  existsi G, inferInstance, inferInstance
  rfl

Result:
ι : 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
f : ContinuousMultilinearMap 𝕜 E F
x : ⨂[𝕜] (i : ι), E i
G : Type (max (max (max uE u𝕜) uι) (max uE uι) u𝕜) := (⨂[𝕜] (i : ι), E i) ⧸ LinearMap.ker (lift f.toMultilinearMap)
G' : Submodule 𝕜 F := LinearMap.range (lift f.toMultilinearMap)
e : ((⨂[𝕜] (i : ι), E i) ⧸ LinearMap.ker (lift f.toMultilinearMap)) ≃ₗ[𝕜]
  ↥(LinearMap.range (lift f.toMultilinearMap)) :=
  (lift f.toMultilinearMap).quotKerEquivRange
this✝ : SeminormedAddCommGroup G := SeminormedAddCommGroup.induced G (↥G') e
this : NormedSpace 𝕜 G := NormedSpace.induced 𝕜 G (↥G') e
f'₀ : MultilinearMap 𝕜 E ((⨂[𝕜] (i : ι), E i) ⧸ LinearMap.ker (lift f.toMultilinearMap)) :=
  lift.symm (↑e.symm ∘ₗ (lift f.toMultilinearMap).rangeRestrict)
hf'₀ : ∀ (x : (i : ι) → E i), ‖f'₀ x‖ ≤ ‖f‖ * ∏ i : ι, ‖x i‖
f' : ContinuousMultilinearMap 𝕜 E ((⨂[𝕜] (i : ι), E i) ⧸ LinearMap.ker (lift f.toMultilinearMap)) :=
  f'₀.mkContinuous ‖f‖ hf'₀
hnorm : ‖f'‖ ≤ ‖f‖
heq : ↑(e ((lift f'.toMultilinearMap) x)) = (lift f.toMultilinearMap) x
hle :
  (normSeminorm 𝕜 (ContinuousMultilinearMap 𝕜 E G →L[𝕜] G)).comp (toDualContinuousMultilinearMap G) ≤ injectiveSeminorm
⊢ ‖(lift f'.toMultilinearMap) x‖ ≤ ‖f'‖ * injectiveSeminorm x

Proof state:
case smul_tprod
ι : 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
f : ContinuousMultilinearMap 𝕜 E F
G : Type (max (max (max uE u𝕜) uι) (max uE uι) u𝕜) := (⨂[𝕜] (i : ι), E i) ⧸ LinearMap.ker (lift f.toMultilinearMap)
G' : Submodule 𝕜 F := LinearMap.range (lift f.toMultilinearMap)
e : ((⨂[𝕜] (i : ι), E i) ⧸ LinearMap.ker (lift f.toMultilinearMap)) ≃ₗ[𝕜]
  ↥(LinearMap.range (lift f.toMultilinearMap)) :=
  (lift f.toMultilinearMap).quotKerEquivRange
this✝ : SeminormedAddCommGroup G := SeminormedAddCommGroup.induced G (↥G') e
this : NormedSpace 𝕜 G := NormedSpace.induced 𝕜 G (↥G') e
f'₀ : MultilinearMap 𝕜 E ((⨂[𝕜] (i : ι), E i) ⧸ LinearMap.ker (lift f.toMultilinearMap)) :=
  lift.symm (↑e.symm ∘ₗ (lift f.toMultilinearMap).rangeRestrict)
hf'₀ : ∀ (x : (i : ι) → E i), ‖f'₀ x‖ ≤ ‖f‖ * ∏ i : ι, ‖x i‖
f' : ContinuousMultilinearMap 𝕜 E ((⨂[𝕜] (i : ι), E i) ⧸ LinearMap.ker (lift f.toMultilinearMap)) :=
  f'₀.mkContinuous ‖f‖ hf'₀
hnorm : ‖f'‖ ≤ ‖f‖
r✝ : 𝕜
f✝ : (i : ι) → E i
⊢ ↑(e ((lift f'.toMultilinearMap) (r✝ • (tprod 𝕜) f✝))) = (lift f.toMultilinearMap) (r✝ • (tprod 𝕜) f✝)

Tactic:
simp only [lift_symm, map_smul, lift.tprod, ContinuousMultilinearMap.coe_coe,
MultilinearMap.coe_mkContinuous, LinearMap.compMultilinearMap_apply, LinearMap.coe_comp,
LinearEquiv.coe_coe, Function.comp_apply, LinearEquiv.apply_symm_apply, SetLike.val_smul,
LinearMap.codRestrict_apply, f', f'₀]

Result:
no goals

Proof state:
ι : 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
f : ContinuousMultilinearMap 𝕜 E F
x : ⨂[𝕜] (i : ι), E i
G : Type (max (max (max uE u𝕜) uι) (max uE uι) u𝕜) := (⨂[𝕜] (i : ι), E i) ⧸ LinearMap.ker (lift f.toMultilinearMap)
G' : Submodule 𝕜 F := LinearMap.range (lift f.toMultilinearMap)
e : ((⨂[𝕜] (i : ι), E i) ⧸ LinearMap.ker (lift f.toMultilinearMap)) ≃ₗ[𝕜]
  ↥(LinearMap.range (lift f.toMultilinearMap)) :=
  (lift f.toMultilinearMap).quotKerEquivRange
this✝ : SeminormedAddCommGroup G := SeminormedAddCommGroup.induced G (↥G') e
this : NormedSpace 𝕜 G := NormedSpace.induced 𝕜 G (↥G') e
f'₀ : MultilinearMap 𝕜 E ((⨂[𝕜] (i : ι), E i) ⧸ LinearMap.ker (lift f.toMultilinearMap)) :=
  lift.symm (↑e.symm ∘ₗ (lift f.toMultilinearMap).rangeRestrict)
hf'₀ : ∀ (x : (i : ι) → E i), ‖f'₀ x‖ ≤ ‖f‖ * ∏ i : ι, ‖x i‖
f' : ContinuousMultilinearMap 𝕜 E ((⨂[𝕜] (i : ι), E i) ⧸ LinearMap.ker (lift f.toMultilinearMap)) :=
  f'₀.mkContinuous ‖f‖ hf'₀
hnorm : ‖f'‖ ≤ ‖f‖
heq : ↑(e ((lift f'.toMultilinearMap) x)) = (lift f.toMultilinearMap) x
⊢ (normSeminorm 𝕜 (ContinuousMultilinearMap 𝕜 E G →L[𝕜] G)).comp (toDualContinuousMultilinearMap G) =
    (normSeminorm 𝕜 (ContinuousMultilinearMap 𝕜 E G →L[𝕜] G)).comp (toDualContinuousMultilinearMap G)

Tactic:
rfl

Result:
no goals

Proof state:
case add
ι : 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
f : ContinuousMultilinearMap 𝕜 E F
G : Type (max (max (max uE u𝕜) uι) (max uE uι) u𝕜) := (⨂[𝕜] (i : ι), E i) ⧸ LinearMap.ker (lift f.toMultilinearMap)
G' : Submodule 𝕜 F := LinearMap.range (lift f.toMultilinearMap)
e : ((⨂[𝕜] (i : ι), E i) ⧸ LinearMap.ker (lift f.toMultilinearMap)) ≃ₗ[𝕜]
  ↥(LinearMap.range (lift f.toMultilinearMap)) :=
  (lift f.toMultilinearMap).quotKerEquivRange
this✝ : SeminormedAddCommGroup G := SeminormedAddCommGroup.induced G (↥G') e
this : NormedSpace 𝕜 G := NormedSpace.induced 𝕜 G (↥G') e
f'₀ : MultilinearMap 𝕜 E ((⨂[𝕜] (i : ι), E i) ⧸ LinearMap.ker (lift f.toMultilinearMap)) :=
  lift.symm (↑e.symm ∘ₗ (lift f.toMultilinearMap).rangeRestrict)
hf'₀ : ∀ (x : (i : ι) → E i), ‖f'₀ x‖ ≤ ‖f‖ * ∏ i : ι, ‖x i‖
f' : ContinuousMultilinearMap 𝕜 E ((⨂[𝕜] (i : ι), E i) ⧸ LinearMap.ker (lift f.toMultilinearMap)) :=
  f'₀.mkContinuous ‖f‖ hf'₀
hnorm : ‖f'‖ ≤ ‖f‖
x✝ y✝ : ⨂[𝕜] (i : ι), E i
hx : ↑(e ((lift f'.toMultilinearMap) x✝)) = (lift f.toMultilinearMap) x✝
hy : ↑(e ((lift f'.toMultilinearMap) y✝)) = (lift f.toMultilinearMap) y✝
⊢ ↑(e ((lift f'.toMultilinearMap) (x✝ + y✝))) = (lift f.toMultilinearMap) (x✝ + y✝)

Tactic:
simp only [map_add, Submodule.coe_add, hx, hy]

Result:
no goals