Theorem: PiTensorProduct.liftEquiv_symm_apply
File: Mathlib/Analysis/NormedSpace/PiTensorProduct/InjectiveSeminorm.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
f g : ContinuousMultilinearMap 𝕜 E F
⊢ (fun f => (lift f.toMultilinearMap).mkContinuous ‖f‖ ⋯) (f + g) =
    (fun f => (lift f.toMultilinearMap).mkContinuous ‖f‖ ⋯) f +
      (fun f => (lift f.toMultilinearMap).mkContinuous ‖f‖ ⋯) g
state_after: case h
ι : 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 g : ContinuousMultilinearMap 𝕜 E F
x✝ : ⨂[𝕜] (i : ι), E i
⊢ ((fun f => (lift f.toMultilinearMap).mkContinuous ‖f‖ ⋯) (f + g)) x✝ =
    ((fun f => (lift f.toMultilinearMap).mkContinuous ‖f‖ ⋯) f +
        (fun f => (lift f.toMultilinearMap).mkContinuous ‖f‖ ⋯) g)
      x✝
tactic: ext _
state_before: case h
ι : 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 g : ContinuousMultilinearMap 𝕜 E F
x✝ : ⨂[𝕜] (i : ι), E i
⊢ ((fun f => (lift f.toMultilinearMap).mkContinuous ‖f‖ ⋯) (f + g)) x✝ =
    ((fun f => (lift f.toMultilinearMap).mkContinuous ‖f‖ ⋯) f +
        (fun f => (lift f.toMultilinearMap).mkContinuous ‖f‖ ⋯) g)
      x✝
state_after: no goals
tactic: simp only [ContinuousMultilinearMap.toMultilinearMap_add, map_add,
    LinearMap.mkContinuous_apply, LinearMap.add_apply, ContinuousLinearMap.add_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
a : 𝕜
f : ContinuousMultilinearMap 𝕜 E F
⊢ { toFun := fun f => (lift f.toMultilinearMap).mkContinuous ‖f‖ ⋯, map_add' := ⋯ }.toFun (a • f) =
    (RingHom.id 𝕜) a • { toFun := fun f => (lift f.toMultilinearMap).mkContinuous ‖f‖ ⋯, map_add' := ⋯ }.toFun f
state_after: case h
ι : 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
a : 𝕜
f : ContinuousMultilinearMap 𝕜 E F
x✝ : ⨂[𝕜] (i : ι), E i
⊢ ({ toFun := fun f => (lift f.toMultilinearMap).mkContinuous ‖f‖ ⋯, map_add' := ⋯ }.toFun (a • f)) x✝ =
    ((RingHom.id 𝕜) a • { toFun := fun f => (lift f.toMultilinearMap).mkContinuous ‖f‖ ⋯, map_add' := ⋯ }.toFun f) x✝
tactic: ext _
state_before: case h
ι : 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
a : 𝕜
f : ContinuousMultilinearMap 𝕜 E F
x✝ : ⨂[𝕜] (i : ι), E i
⊢ ({ toFun := fun f => (lift f.toMultilinearMap).mkContinuous ‖f‖ ⋯, map_add' := ⋯ }.toFun (a • f)) x✝ =
    ((RingHom.id 𝕜) a • { toFun := fun f => (lift f.toMultilinearMap).mkContinuous ‖f‖ ⋯, map_add' := ⋯ }.toFun f) x✝
state_after: no goals
tactic: simp only [ContinuousMultilinearMap.toMultilinearMap_smul, map_smul,
    LinearMap.mkContinuous_apply, LinearMap.smul_apply, RingHom.id_apply,
    ContinuousLinearMap.coe_smul', Pi.smul_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
l : (⨂[𝕜] (i : ι), E i) →L[𝕜] F
x : (i : ι) → E i
⊢ ‖(lift.symm ↑l) x‖ ≤ ‖l‖ * ∏ i : ι, ‖x i‖
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
l : (⨂[𝕜] (i : ι), E i) →L[𝕜] F
x : (i : ι) → E i
⊢ ‖l ((tprod 𝕜) x)‖ ≤ ‖l‖ * ∏ i : ι, ‖x i‖
tactic: simp only [lift_symm, LinearMap.compMultilinearMap_apply, ContinuousLinearMap.coe_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
l : (⨂[𝕜] (i : ι), E i) →L[𝕜] F
x : (i : ι) → E i
⊢ ‖l ((tprod 𝕜) x)‖ ≤ ‖l‖ * ∏ i : ι, ‖x i‖
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
l : (⨂[𝕜] (i : ι), E i) →L[𝕜] F
x : (i : ι) → E i
⊢ ‖(tprod 𝕜) x‖ ≤ ∏ i : ι, ‖x i‖
tactic: refine le_trans (ContinuousLinearMap.le_opNorm _ _) (mul_le_mul_of_nonneg_left ?_
      (norm_nonneg l))
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
l : (⨂[𝕜] (i : ι), E i) →L[𝕜] F
x : (i : ι) → E i
⊢ ‖(tprod 𝕜) x‖ ≤ ∏ i : ι, ‖x i‖
state_after: no goals
tactic: exact injectiveSeminorm_tprod_le 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
f : ContinuousMultilinearMap 𝕜 E F
⊢ (fun l => (lift.symm ↑l).mkContinuous ‖l‖ ⋯)
      ({ toFun := fun f => (lift f.toMultilinearMap).mkContinuous ‖f‖ ⋯, map_add' := ⋯, map_smul' := ⋯ }.toFun f) =
    f
state_after: case H
ι : 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
⊢ ((fun l => (lift.symm ↑l).mkContinuous ‖l‖ ⋯)
        ({ toFun := fun f => (lift f.toMultilinearMap).mkContinuous ‖f‖ ⋯, map_add' := ⋯, map_smul' := ⋯ }.toFun f))
      x =
    f x
tactic: ext x
state_before: case H
ι : 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
⊢ ((fun l => (lift.symm ↑l).mkContinuous ‖l‖ ⋯)
        ({ toFun := fun f => (lift f.toMultilinearMap).mkContinuous ‖f‖ ⋯, map_add' := ⋯, map_smul' := ⋯ }.toFun f))
      x =
    f x
state_after: no goals
tactic: simp only [LinearMap.mkContinuous_coe, LinearEquiv.symm_apply_apply,
      MultilinearMap.coe_mkContinuous, ContinuousMultilinearMap.coe_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
l : (⨂[𝕜] (i : ι), E i) →L[𝕜] F
⊢ { toFun := fun f => (lift f.toMultilinearMap).mkContinuous ‖f‖ ⋯, map_add' := ⋯, map_smul' := ⋯ }.toFun
      ((fun l => (lift.symm ↑l).mkContinuous ‖l‖ ⋯) l) =
    l
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
l : (⨂[𝕜] (i : ι), E i) →L[𝕜] F
⊢ ↑({ toFun := fun f => (lift f.toMultilinearMap).mkContinuous ‖f‖ ⋯, map_add' := ⋯, map_smul' := ⋯ }.toFun
        ((fun l => (lift.symm ↑l).mkContinuous ‖l‖ ⋯) l)) =
    ↑l
tactic: rw [← ContinuousLinearMap.coe_inj]
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
l : (⨂[𝕜] (i : ι), E i) →L[𝕜] F
⊢ ↑({ toFun := fun f => (lift f.toMultilinearMap).mkContinuous ‖f‖ ⋯, map_add' := ⋯, map_smul' := ⋯ }.toFun
        ((fun l => (lift.symm ↑l).mkContinuous ‖l‖ ⋯) l)) =
    ↑l
state_after: case H
ι : 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
l : (⨂[𝕜] (i : ι), E i) →L[𝕜] F
⊢ (↑({ toFun := fun f => (lift f.toMultilinearMap).mkContinuous ‖f‖ ⋯, map_add' := ⋯, map_smul' := ⋯ }.toFun
            ((fun l => (lift.symm ↑l).mkContinuous ‖l‖ ⋯) l))).compMultilinearMap
      (tprod 𝕜) =
    (↑l).compMultilinearMap (tprod 𝕜)
tactic: apply PiTensorProduct.ext
state_before: case H
ι : 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
l : (⨂[𝕜] (i : ι), E i) →L[𝕜] F
⊢ (↑({ toFun := fun f => (lift f.toMultilinearMap).mkContinuous ‖f‖ ⋯, map_add' := ⋯, map_smul' := ⋯ }.toFun
            ((fun l => (lift.symm ↑l).mkContinuous ‖l‖ ⋯) l))).compMultilinearMap
      (tprod 𝕜) =
    (↑l).compMultilinearMap (tprod 𝕜)
state_after: case H.H
ι : 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
l : (⨂[𝕜] (i : ι), E i) →L[𝕜] F
m : (i : ι) → E i
⊢ ((↑({ toFun := fun f => (lift f.toMultilinearMap).mkContinuous ‖f‖ ⋯, map_add' := ⋯, map_smul' := ⋯ }.toFun
              ((fun l => (lift.symm ↑l).mkContinuous ‖l‖ ⋯) l))).compMultilinearMap
        (tprod 𝕜))
      m =
    ((↑l).compMultilinearMap (tprod 𝕜)) m
tactic: ext m
state_before: case H.H
ι : 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
l : (⨂[𝕜] (i : ι), E i) →L[𝕜] F
m : (i : ι) → E i
⊢ ((↑({ toFun := fun f => (lift f.toMultilinearMap).mkContinuous ‖f‖ ⋯, map_add' := ⋯, map_smul' := ⋯ }.toFun
              ((fun l => (lift.symm ↑l).mkContinuous ‖l‖ ⋯) l))).compMultilinearMap
        (tprod 𝕜))
      m =
    ((↑l).compMultilinearMap (tprod 𝕜)) m
state_after: no goals
tactic: simp only [lift_symm, LinearMap.mkContinuous_coe, LinearMap.compMultilinearMap_apply,
      lift.tprod, ContinuousMultilinearMap.coe_coe, MultilinearMap.coe_mkContinuous,
      ContinuousLinearMap.coe_coe]