/--
The space of continuous multilinear maps on `Π(i : Fin (n+1)), Ei i` is canonically isomorphic to
the space of continuous multilinear maps on `Π(i : Fin n), Ei <| castSucc i` with values in the
space of continuous linear maps on `Ei (last n)`, by separating the last variable. We register this
isomorphism as a continuous linear equiv in `continuousMultilinearCurryRightEquiv 𝕜 Ei G`.
The algebraic version (without topology) is given in `multilinearCurryRightEquiv 𝕜 Ei G`.

The direct and inverse maps are given by `f.uncurryRight` and `f.curryRight`. Use these
unless you need the full framework of linear isometric equivs.
-/
def continuousMultilinearCurryRightEquiv :
    ContinuousMultilinearMap 𝕜 (fun i : Fin n => Ei <| castSucc i) (Ei (last n) →L[𝕜] G) ≃ₗᵢ[𝕜]
      ContinuousMultilinearMap 𝕜 Ei G :=
  LinearIsometryEquiv.ofBounds
    { toFun := ContinuousMultilinearMap.uncurryRight
      map_add' := fun f₁ f₂ => by
        ext m
        rfl
      map_smul' := fun c f => by
        ext m
        rfl
      invFun := ContinuousMultilinearMap.curryRight
      left_inv := ContinuousMultilinearMap.curry_uncurryRight
      right_inv := ContinuousMultilinearMap.uncurry_curryRight } (fun f => by
        simp only [uncurryRight, LinearEquiv.coe_mk]
        exact MultilinearMap.mkContinuous_norm_le _ (norm_nonneg f) _) fun f => by
          simp only [curryRight, LinearEquiv.coe_symm_mk]
          

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
⊢ ‖MultilinearMap.mkContinuous
        {
          toFun := fun m =>
            LinearMap.mkContinuous ((MultilinearMap.curryRight f.toMultilinearMap) m) (‖f‖ * ∏ x : Fin n, ‖m x‖)
              (_ :
                ∀ (x : Ei (last n)),
                  ‖((MultilinearMap.curryRight f.toMultilinearMap) m) x‖ ≤ (‖f‖ * ∏ x : Fin n, ‖m x‖) * ‖x‖),
          map_add' :=
            (_ :
              ∀ [inst : DecidableEq (Fin n)] (m : (i : Fin n) → (fun i => Ei (castSucc i)) i) (i : Fin n)
                (x y : (fun i => Ei (castSucc i)) i),
                (fun m =>
                      LinearMap.mkContinuous ((MultilinearMap.curryRight f.toMultilinearMap) m)
                        (‖f‖ * ∏ x : Fin n, ‖m x‖)
                        (_ :
                          ∀ (x : Ei (last n)),
                            ‖((MultilinearMap.curryRight f.toMultilinearMap) m) x‖ ≤ (‖f‖ * ∏ x : Fin n, ‖m x‖) * ‖x‖))
                    (update m i (x + y)) =
                  (fun m =>
                        LinearMap.mkContinuous ((MultilinearMap.curryRight f.toMultilinearMap) m)
                          (‖f‖ * ∏ x : Fin n, ‖m x‖)
                          (_ :
                            ∀ (x : Ei (last n)),
                              ‖((MultilinearMap.curryRight f.toMultilinearMap) m) x‖ ≤
                                (‖f‖ * ∏ x : Fin n, ‖m x‖) * ‖x‖))
                      (update m i x) +
                    (fun m =>
                        LinearMap.mkContinuous ((MultilinearMap.curryRight f.toMultilinearMap) m)
                          (‖f‖ * ∏ x : Fin n, ‖m x‖)
                          (_ :
                            ∀ (x : Ei (last n)),
                              ‖((MultilinearMap.curryRight f.toMultilinearMap) m) x‖ ≤
                                (‖f‖ * ∏ x : Fin n, ‖m x‖) * ‖x‖))
                      (update m i y)),
          map_smul' :=
            (_ :
              ∀ [inst : DecidableEq (Fin n)] (m : (i : Fin n) → (fun i => Ei (castSucc i)) i) (i : Fin n) (c : 𝕜)
                (x : (fun i => Ei (castSucc i)) i),
                (fun m =>
                      LinearMap.mkContinuous ((MultilinearMap.curryRight f.toMultilinearMap) m)
                        (‖f‖ * ∏ x : Fin n, ‖m x‖)
                        (_ :
                          ∀ (x : Ei (last n)),
                            ‖((MultilinearMap.curryRight f.toMultilinearMap) m) x‖ ≤ (‖f‖ * ∏ x : Fin n, ‖m x‖) * ‖x‖))
                    (update m i (c • x)) =
                  c •
                    (fun m =>
                        LinearMap.mkContinuous ((MultilinearMap.curryRight f.toMultilinearMap) m)
                          (‖f‖ * ∏ x : Fin n, ‖m x‖)
                          (_ :
                            ∀ (x : Ei (last n)),
                              ‖((MultilinearMap.curryRight f.toMultilinearMap) m) x‖ ≤
                                (‖f‖ * ∏ x : Fin n, ‖m x‖) * ‖x‖))
                      (update m i x)) }
        ‖f‖
        (_ :
          ∀ (m : (i : Fin n) → (fun i => Ei (castSucc i)) i),
            ‖{
                    toFun := fun m =>
                      LinearMap.mkContinuous ((MultilinearMap.curryRight f.toMultilinearMap) m)
                        (‖f‖ * ∏ x : Fin n, ‖m x‖)
                        (_ :
                          ∀ (x : Ei (last n)),
                            ‖((MultilinearMap.curryRight f.toMultilinearMap) m) x‖ ≤ (‖f‖ * ∏ x : Fin n, ‖m x‖) * ‖x‖),
                    map_add' :=
                      (_ :
                        ∀ [inst : DecidableEq (Fin n)] (m : (i : Fin n) → (fun i => Ei (castSucc i)) i) (i : Fin n)
                          (x y : (fun i => Ei (castSucc i)) i),
                          (fun m =>
                                LinearMap.mkContinuous ((MultilinearMap.curryRight f.toMultilinearMap) m)
                                  (‖f‖ * ∏ x : Fin n, ‖m x‖)
                                  (_ :
                                    ∀ (x : Ei (last n)),
                                      ‖((MultilinearMap.curryRight f.toMultilinearMap) m) x‖ ≤
                                        (‖f‖ * ∏ x : Fin n, ‖m x‖) * ‖x‖))
                              (update m i (x + y)) =
                            (fun m =>
                                  LinearMap.mkContinuous ((MultilinearMap.curryRight f.toMultilinearMap) m)
                                    (‖f‖ * ∏ x : Fin n, ‖m x‖)
                                    (_ :
                                      ∀ (x : Ei (last n)),
                                        ‖((MultilinearMap.curryRight f.toMultilinearMap) m) x‖ ≤
                                          (‖f‖ * ∏ x : Fin n, ‖m x‖) * ‖x‖))
                                (update m i x) +
                              (fun m =>
                                  LinearMap.mkContinuous ((MultilinearMap.curryRight f.toMultilinearMap) m)
                                    (‖f‖ * ∏ x : Fin n, ‖m x‖)
                                    (_ :
                                      ∀ (x : Ei (last n)),
                                        ‖((MultilinearMap.curryRight f.toMultilinearMap) m) x‖ ≤
                                          (‖f‖ * ∏ x : Fin n, ‖m x‖) * ‖x‖))
                                (update m i y)),
                    map_smul' :=
                      (_ :
                        ∀ [inst : DecidableEq (Fin n)] (m : (i : Fin n) → (fun i => Ei (castSucc i)) i) (i : Fin n)
                          (c : 𝕜) (x : (fun i => Ei (castSucc i)) i),
                          (fun m =>
                                LinearMap.mkContinuous ((MultilinearMap.curryRight f.toMultilinearMap) m)
                                  (‖f‖ * ∏ x : Fin n, ‖m x‖)
                                  (_ :
                                    ∀ (x : Ei (last n)),
                                      ‖((MultilinearMap.curryRight f.toMultilinearMap) m) x‖ ≤
                                        (‖f‖ * ∏ x : Fin n, ‖m x‖) * ‖x‖))
                              (update m i (c • x)) =
                            c •
                              (fun m =>
                                  LinearMap.mkContinuous ((MultilinearMap.curryRight f.toMultilinearMap) m)
                                    (‖f‖ * ∏ x : Fin n, ‖m x‖)
                                    (_ :
                                      ∀ (x : Ei (last n)),
                                        ‖((MultilinearMap.curryRight f.toMultilinearMap) m) x‖ ≤
                                          (‖f‖ * ∏ x : Fin n, ‖m x‖) * ‖x‖))
                                (update m i x)) }
                  m‖ ≤
              ‖f‖ * ∏ i : Fin n, ‖m i‖)‖ ≤
    ‖f‖

Next tactic:
exact MultilinearMap.mkContinuous_norm_le _ (norm_nonneg f) _