/-- The space of continuous multilinear maps on `Π(i : Fin (n+1)), E i` is canonically isomorphic to
the space of continuous linear maps from `E 0` to the space of continuous multilinear maps on
`Π(i : Fin n), E i.succ`, by separating the first variable. We register this isomorphism in
`continuousMultilinearCurryLeftEquiv 𝕜 E E₂`. The algebraic version (without topology) is given
in `multilinearCurryLeftEquiv 𝕜 E E₂`.

The direct and inverse maps are given by `f.uncurryLeft` and `f.curryLeft`. Use these
unless you need the full framework of linear isometric equivs. -/
def continuousMultilinearCurryLeftEquiv :
    (Ei 0 →L[𝕜] ContinuousMultilinearMap 𝕜 (fun i : Fin n => Ei i.succ) G) ≃ₗᵢ[𝕜]
      ContinuousMultilinearMap 𝕜 Ei G :=
  LinearIsometryEquiv.ofBounds
    { toFun := ContinuousLinearMap.uncurryLeft
      map_add' := fun f₁ f₂ => by
        ext m
        rfl
      map_smul' := fun c f => by
        ext m
        rfl
      invFun := ContinuousMultilinearMap.curryLeft
      left_inv := ContinuousLinearMap.curry_uncurryLeft
      right_inv := ContinuousMultilinearMap.uncurry_curryLeft }
    (fun f => by
      simp only [LinearEquiv.coe_mk]
      exact MultilinearMap.mkContinuous_norm_le _ (norm_nonneg f) _)
    (fun f => by
      

Proof state:
𝕜 : Type u
ι : Type v
ι' : Type v'
n : ℕ
E : ι → Type wE
E₁ : ι → Type wE₁
E' : ι' → Type wE'
Ei : Fin (Nat.succ n) → Type wEi
G : Type wG
G' : Type wG'
inst✝¹⁴ : Fintype ι
inst✝¹³ : Fintype ι'
inst✝¹² : NontriviallyNormedField 𝕜
inst✝¹¹ : (i : ι) → NormedAddCommGroup (E i)
inst✝¹⁰ : (i : ι) → NormedSpace 𝕜 (E i)
inst✝⁹ : (i : ι) → NormedAddCommGroup (E₁ i)
inst✝⁸ : (i : ι) → NormedSpace 𝕜 (E₁ i)
inst✝⁷ : (i : ι') → NormedAddCommGroup (E' i)
inst✝⁶ : (i : ι') → NormedSpace 𝕜 (E' i)
inst✝⁵ : (i : Fin (Nat.succ n)) → NormedAddCommGroup (Ei i)
inst✝⁴ : (i : Fin (Nat.succ n)) → NormedSpace 𝕜 (Ei i)
inst✝³ : NormedAddCommGroup G
inst✝² : NormedSpace 𝕜 G
inst✝¹ : NormedAddCommGroup G'
inst✝ : NormedSpace 𝕜 G'
f : ContinuousMultilinearMap 𝕜 Ei G
⊢ ‖(LinearEquiv.symm
          {
            toLinearMap :=
              {
                toAddHom :=
                  { toFun := ContinuousLinearMap.uncurryLeft,
                    map_add' :=
                      (_ :
                        ∀ (f₁ f₂ : Ei 0 →L[𝕜] ContinuousMultilinearMap 𝕜 (fun i => Ei (succ i)) G),
                          ContinuousLinearMap.uncurryLeft (f₁ + f₂) =
                            ContinuousLinearMap.uncurryLeft f₁ + ContinuousLinearMap.uncurryLeft f₂) },
                map_smul' :=
                  (_ :
                    ∀ (c : 𝕜) (f : Ei 0 →L[𝕜] ContinuousMultilinearMap 𝕜 (fun i => Ei (succ i)) G),
                      AddHom.toFun
                          { toFun := ContinuousLinearMap.uncurryLeft,
                            map_add' :=
                              (_ :
                                ∀ (f₁ f₂ : Ei 0 →L[𝕜] ContinuousMultilinearMap 𝕜 (fun i => Ei (succ i)) G),
                                  ContinuousLinearMap.uncurryLeft (f₁ + f₂) =
                                    ContinuousLinearMap.uncurryLeft f₁ + ContinuousLinearMap.uncurryLeft f₂) }
                          (c • f) =
                        (RingHom.id 𝕜) c •
                          AddHom.toFun
                            { toFun := ContinuousLinearMap.uncurryLeft,
                              map_add' :=
                                (_ :
                                  ∀ (f₁ f₂ : Ei 0 →L[𝕜] ContinuousMultilinearMap 𝕜 (fun i => Ei (succ i)) G),
                                    ContinuousLinearMap.uncurryLeft (f₁ + f₂) =
                                      ContinuousLinearMap.uncurryLeft f₁ + ContinuousLinearMap.uncurryLeft f₂) }
                            f) },
            invFun := curryLeft,
            left_inv :=
              (_ :
                ∀ (f : Ei 0 →L[𝕜] ContinuousMultilinearMap 𝕜 (fun i => Ei (succ i)) G),
                  curryLeft (ContinuousLinearMap.uncurryLeft f) = f),
            right_inv :=
              (_ : ∀ (f : ContinuousMultilinearMap 𝕜 Ei G), ContinuousLinearMap.uncurryLeft (curryLeft f) = f) })
        f‖ ≤
    ‖f‖

Next tactic:
simp only [LinearEquiv.coe_symm_mk]