/-- The dependent version of `MultilinearMap.domDomCongrLinearEquiv`. -/
@[simps apply symm_apply]
def domDomCongrLinearEquiv' {ι' : Type*} (σ : ι ≃ ι') :
    MultilinearMap R M₁ M₂ ≃ₗ[S] MultilinearMap R (fun i => M₁ (σ.symm i)) M₂ where
  toFun f :=
    { toFun := f ∘ (σ.piCongrLeft' M₁).symm
      map_add' := fun m i => by
        letI := σ.decidableEq
        rw [← σ.apply_symm_apply i]
        intro x y
        simp only [comp_apply, piCongrLeft'_symm_update, f.map_add]
      map_smul' := fun m i c => by
        letI := σ.decidableEq
        rw [← σ.apply_symm_apply i]
        intro x
        simp only [Function.comp, piCongrLeft'_symm_update, f.map_smul] }
  invFun f :=
    { toFun := f ∘ σ.piCongrLeft' M₁
      map_add' := fun m i => by
        letI := σ.symm.decidableEq
        rw [← σ.symm_apply_apply i]
        intro x y
        simp only [comp_apply, piCongrLeft'_update, f.map_add]
      map_smul' := fun m i c => by
        letI := σ.symm.decidableEq
        rw [← σ.symm_apply_apply i]
        intro x
        simp only [Function.comp, piCongrLeft'_update, f.map_smul] }
  map_add' f₁ f₂ := by
    ext
    simp only [Function.comp, coe_mk, add_apply]
  map_smul' c f := by
    ext
    simp only [Function.comp, coe_mk, smul_apply, RingHom.id_apply]
  left_inv f := by
    ext
    

Proof state:
case H
R : Type uR
S : Type uS
ι : Type uι
n : ℕ
M : Fin (Nat.succ n) → Type v
M₁ : ι → Type v₁
M₂ : Type v₂
M₃ : Type v₃
M' : Type v'
inst✝⁸ : Semiring R
inst✝⁷ : (i : ι) → AddCommMonoid (M₁ i)
inst✝⁶ : (i : ι) → Module R (M₁ i)
inst✝⁵ : AddCommMonoid M₂
inst✝⁴ : Module R M₂
inst✝³ : Semiring S
inst✝² : Module S M₂
inst✝¹ : Module R M₂
inst✝ : SMulCommClass R S M₂
ι' : Type u_1
σ : ι ≃ ι'
f : MultilinearMap R M₁ M₂
x✝ : (i : ι) → M₁ i
⊢ ((fun f =>
          { toFun := ⇑f ∘ ⇑(Equiv.piCongrLeft' M₁ σ),
            map_add' :=
              (_ :
                ∀ [inst : DecidableEq ι] (m : (i : ι) → M₁ i) (i : ι) (x y : M₁ i),
                  (⇑f ∘ ⇑(Equiv.piCongrLeft' M₁ σ)) (update m i (x + y)) =
                    (⇑f ∘ ⇑(Equiv.piCongrLeft' M₁ σ)) (update m i x) +
                      (⇑f ∘ ⇑(Equiv.piCongrLeft' M₁ σ)) (update m i y)),
            map_smul' :=
              (_ :
                ∀ [inst : DecidableEq ι] (m : (i : ι) → M₁ i) (i : ι) (c : R) (x : M₁ i),
                  (⇑f ∘ ⇑(Equiv.piCongrLeft' M₁ σ)) (update m i (c • x)) =
                    c • (⇑f ∘ ⇑(Equiv.piCongrLeft' M₁ σ)) (update m i x)) })
        (AddHom.toFun
          {
              toAddHom :=
                {
                  toFun := fun f =>
                    { toFun := ⇑f ∘ ⇑(Equiv.piCongrLeft' M₁ σ).symm,
                      map_add' :=
                        (_ :
                          ∀ [inst : DecidableEq ι'] (m : (i : ι') → M₁ (σ.symm i)) (i : ι') (x y : M₁ (σ.symm i)),
                            (⇑f ∘ ⇑(Equiv.piCongrLeft' M₁ σ).symm) (update m i (x + y)) =
                              (⇑f ∘ ⇑(Equiv.piCongrLeft' M₁ σ).symm) (update m i x) +
                                (⇑f ∘ ⇑(Equiv.piCongrLeft' M₁ σ).symm) (update m i y)),
                      map_smul' :=
                        (_ :
                          ∀ [inst : DecidableEq ι'] (m : (i : ι') → M₁ (σ.symm i)) (i : ι') (c : R) (x : M₁ (σ.symm i)),
                            (⇑f ∘ ⇑(Equiv.piCongrLeft' M₁ σ).symm) (update m i (c • x)) =
                              c • (⇑f ∘ ⇑(Equiv.piCongrLeft' M₁ σ).symm) (update m i x)) },
                  map_add' :=
                    (_ :
                      ∀ (f₁ f₂ : MultilinearMap R M₁ M₂),
                        (fun f =>
                              { toFun := ⇑f ∘ ⇑(Equiv.piCongrLeft' M₁ σ).symm,
                                map_add' :=
                                  (_ :
                                    ∀ [inst : DecidableEq ι'] (m : (i : ι') → M₁ (σ.symm i)) (i : ι')
                                      (x y : M₁ (σ.symm i)),
                                      (⇑f ∘ ⇑(Equiv.piCongrLeft' M₁ σ).symm) (update m i (x + y)) =
                                        (⇑f ∘ ⇑(Equiv.piCongrLeft' M₁ σ).symm) (update m i x) +
                                          (⇑f ∘ ⇑(Equiv.piCongrLeft' M₁ σ).symm) (update m i y)),
                                map_smul' :=
                                  (_ :
                                    ∀ [inst : DecidableEq ι'] (m : (i : ι') → M₁ (σ.symm i)) (i : ι') (c : R)
                                      (x : M₁ (σ.symm i)),
                                      (⇑f ∘ ⇑(Equiv.piCongrLeft' M₁ σ).symm) (update m i (c • x)) =
                                        c • (⇑f ∘ ⇑(Equiv.piCongrLeft' M₁ σ).symm) (update m i x)) })
                            (f₁ + f₂) =
                          (fun f =>
                                { toFun := ⇑f ∘ ⇑(Equiv.piCongrLeft' M₁ σ).symm,
                                  map_add' :=
                                    (_ :
                                      ∀ [inst : DecidableEq ι'] (m : (i : ι') → M₁ (σ.symm i)) (i : ι')
                                        (x y : M₁ (σ.symm i)),
                                        (⇑f ∘ ⇑(Equiv.piCongrLeft' M₁ σ).symm) (update m i (x + y)) =
                                          (⇑f ∘ ⇑(Equiv.piCongrLeft' M₁ σ).symm) (update m i x) +
                                            (⇑f ∘ ⇑(Equiv.piCongrLeft' M₁ σ).symm) (update m i y)),
                                  map_smul' :=
                                    (_ :
                                      ∀ [inst : DecidableEq ι'] (m : (i : ι') → M₁ (σ.symm i)) (i : ι') (c : R)
                                        (x : M₁ (σ.symm i)),
                                        (⇑f ∘ ⇑(Equiv.piCongrLeft' M₁ σ).symm) (update m i (c • x)) =
                                          c • (⇑f ∘ ⇑(Equiv.piCongrLeft' M₁ σ).symm) (update m i x)) })
                              f₁ +
                            (fun f =>
                                { toFun := ⇑f ∘ ⇑(Equiv.piCongrLeft' M₁ σ).symm,
                                  map_add' :=
                                    (_ :
                                      ∀ [inst : DecidableEq ι'] (m : (i : ι') → M₁ (σ.symm i)) (i : ι')
                                        (x y : M₁ (σ.symm i)),
                                        (⇑f ∘ ⇑(Equiv.piCongrLeft' M₁ σ).symm) (update m i (x + y)) =
                                          (⇑f ∘ ⇑(Equiv.piCongrLeft' M₁ σ).symm) (update m i x) +
                                            (⇑f ∘ ⇑(Equiv.piCongrLeft' M₁ σ).symm) (update m i y)),
                                  map_smul' :=
                                    (_ :
                                      ∀ [inst : DecidableEq ι'] (m : (i : ι') → M₁ (σ.symm i)) (i : ι') (c : R)
                                        (x : M₁ (σ.symm i)),
                                        (⇑f ∘ ⇑(Equiv.piCongrLeft' M₁ σ).symm) (update m i (c • x)) =
                                          c • (⇑f ∘ ⇑(Equiv.piCongrLeft' M₁ σ).symm) (update m i x)) })
                              f₂) },
              map_smul' :=
                (_ :
                  ∀ (c : S) (f : MultilinearMap R M₁ M₂),
                    AddHom.toFun
                        {
                          toFun := fun f =>
                            { toFun := ⇑f ∘ ⇑(Equiv.piCongrLeft' M₁ σ).symm,
                              map_add' :=
                                (_ :
                                  ∀ [inst : DecidableEq ι'] (m : (i : ι') → M₁ (σ.symm i)) (i : ι')
                                    (x y : M₁ (σ.symm i)),
                                    (⇑f ∘ ⇑(Equiv.piCongrLeft' M₁ σ).symm) (update m i (x + y)) =
                                      (⇑f ∘ ⇑(Equiv.piCongrLeft' M₁ σ).symm) (update m i x) +
                                        (⇑f ∘ ⇑(Equiv.piCongrLeft' M₁ σ).symm) (update m i y)),
                              map_smul' :=
                                (_ :
                                  ∀ [inst : DecidableEq ι'] (m : (i : ι') → M₁ (σ.symm i)) (i : ι') (c : R)
                                    (x : M₁ (σ.symm i)),
                                    (⇑f ∘ ⇑(Equiv.piCongrLeft' M₁ σ).symm) (update m i (c • x)) =
                                      c • (⇑f ∘ ⇑(Equiv.piCongrLeft' M₁ σ).symm) (update m i x)) },
                          map_add' :=
                            (_ :
                              ∀ (f₁ f₂ : MultilinearMap R M₁ M₂),
                                (fun f =>
                                      { toFun := ⇑f ∘ ⇑(Equiv.piCongrLeft' M₁ σ).symm,
                                        map_add' :=
                                          (_ :
                                            ∀ [inst : DecidableEq ι'] (m : (i : ι') → M₁ (σ.symm i)) (i : ι')
                                              (x y : M₁ (σ.symm i)),
                                              (⇑f ∘ ⇑(Equiv.piCongrLeft' M₁ σ).symm) (update m i (x + y)) =
                                                (⇑f ∘ ⇑(Equiv.piCongrLeft' M₁ σ).symm) (update m i x) +
                                                  (⇑f ∘ ⇑(Equiv.piCongrLeft' M₁ σ).symm) (update m i y)),
                                        map_smul' :=
                                          (_ :
                                            ∀ [inst : DecidableEq ι'] (m : (i : ι') → M₁ (σ.symm i)) (i : ι') (c : R)
                                              (x : M₁ (σ.symm i)),
                                              (⇑f ∘ ⇑(Equiv.piCongrLeft' M₁ σ).symm) (update m i (c • x)) =
                                                c • (⇑f ∘ ⇑(Equiv.piCongrLeft' M₁ σ).symm) (update m i x)) })
                                    (f₁ + f₂) =
                                  (fun f =>
                                        { toFun := ⇑f ∘ ⇑(Equiv.piCongrLeft' M₁ σ).symm,
                                          map_add' :=
                                            (_ :
                                              ∀ [inst : DecidableEq ι'] (m : (i : ι') → M₁ (σ.symm i)) (i : ι')
                                                (x y : M₁ (σ.symm i)),
                                                (⇑f ∘ ⇑(Equiv.piCongrLeft' M₁ σ).symm) (update m i (x + y)) =
                                                  (⇑f ∘ ⇑(Equiv.piCongrLeft' M₁ σ).symm) (update m i x) +
                                                    (⇑f ∘ ⇑(Equiv.piCongrLeft' M₁ σ).symm) (update m i y)),
                                          map_smul' :=
                                            (_ :
                                              ∀ [inst : DecidableEq ι'] (m : (i : ι') → M₁ (σ.symm i)) (i : ι') (c : R)
                                                (x : M₁ (σ.symm i)),
                                                (⇑f ∘ ⇑(Equiv.piCongrLeft' M₁ σ).symm) (update m i (c • x)) =
                                                  c • (⇑f ∘ ⇑(Equiv.piCongrLeft' M₁ σ).symm) (update m i x)) })
                                      f₁ +
                                    (fun f =>
                                        { toFun := ⇑f ∘ ⇑(Equiv.piCongrLeft' M₁ σ).symm,
                                          map_add' :=
                                            (_ :
                                              ∀ [inst : DecidableEq ι'] (m : (i : ι') → M₁ (σ.symm i)) (i : ι')
                                                (x y : M₁ (σ.symm i)),
                                                (⇑f ∘ ⇑(Equiv.piCongrLeft' M₁ σ).symm) (update m i (x + y)) =
                                                  (⇑f ∘ ⇑(Equiv.piCongrLeft' M₁ σ).symm) (update m i x) +
                                                    (⇑f ∘ ⇑(Equiv.piCongrLeft' M₁ σ).symm) (update m i y)),
                                          map_smul' :=
                                            (_ :
                                              ∀ [inst : DecidableEq ι'] (m : (i : ι') → M₁ (σ.symm i)) (i : ι') (c : R)
                                                (x : M₁ (σ.symm i)),
                                                (⇑f ∘ ⇑(Equiv.piCongrLeft' M₁ σ).symm) (update m i (c • x)) =
                                                  c • (⇑f ∘ ⇑(Equiv.piCongrLeft' M₁ σ).symm) (update m i x)) })
                                      f₂) }
                        (c • f) =
                      (RingHom.id S) c •
                        AddHom.toFun
                          {
                            toFun := fun f =>
                              { toFun := ⇑f ∘ ⇑(Equiv.piCongrLeft' M₁ σ).symm,
                                map_add' :=
                                  (_ :
                                    ∀ [inst : DecidableEq ι'] (m : (i : ι') → M₁ (σ.symm i)) (i : ι')
                                      (x y : M₁ (σ.symm i)),
                                      (⇑f ∘ ⇑(Equiv.piCongrLeft' M₁ σ).symm) (update m i (x + y)) =
                                        (⇑f ∘ ⇑(Equiv.piCongrLeft' M₁ σ).symm) (update m i x) +
                                          (⇑f ∘ ⇑(Equiv.piCongrLeft' M₁ σ).symm) (update m i y)),
                                map_smul' :=
                                  (_ :
                                    ∀ [inst : DecidableEq ι'] (m : (i : ι') → M₁ (σ.symm i)) (i : ι') (c : R)
                                      (x : M₁ (σ.symm i)),
                                      (⇑f ∘ ⇑(Equiv.piCongrLeft' M₁ σ).symm) (update m i (c • x)) =
                                        c • (⇑f ∘ ⇑(Equiv.piCongrLeft' M₁ σ).symm) (update m i x)) },
                            map_add' :=
                              (_ :
                                ∀ (f₁ f₂ : MultilinearMap R M₁ M₂),
                                  (fun f =>
                                        { toFun := ⇑f ∘ ⇑(Equiv.piCongrLeft' M₁ σ).symm,
                                          map_add' :=
                                            (_ :
                                              ∀ [inst : DecidableEq ι'] (m : (i : ι') → M₁ (σ.symm i)) (i : ι')
                                                (x y : M₁ (σ.symm i)),
                                                (⇑f ∘ ⇑(Equiv.piCongrLeft' M₁ σ).symm) (update m i (x + y)) =
                                                  (⇑f ∘ ⇑(Equiv.piCongrLeft' M₁ σ).symm) (update m i x) +
                                                    (⇑f ∘ ⇑(Equiv.piCongrLeft' M₁ σ).symm) (update m i y)),
                                          map_smul' :=
                                            (_ :
                                              ∀ [inst : DecidableEq ι'] (m : (i : ι') → M₁ (σ.symm i)) (i : ι') (c : R)
                                                (x : M₁ (σ.symm i)),
                                                (⇑f ∘ ⇑(Equiv.piCongrLeft' M₁ σ).symm) (update m i (c • x)) =
                                                  c • (⇑f ∘ ⇑(Equiv.piCongrLeft' M₁ σ).symm) (update m i x)) })
                                      (f₁ + f₂) =
                                    (fun f =>
                                          { toFun := ⇑f ∘ ⇑(Equiv.piCongrLeft' M₁ σ).symm,
                                            map_add' :=
                                              (_ :
                                                ∀ [inst : DecidableEq ι'] (m : (i : ι') → M₁ (σ.symm i)) (i : ι')
                                                  (x y : M₁ (σ.symm i)),
                                                  (⇑f ∘ ⇑(Equiv.piCongrLeft' M₁ σ).symm) (update m i (x + y)) =
                                                    (⇑f ∘ ⇑(Equiv.piCongrLeft' M₁ σ).symm) (update m i x) +
                                                      (⇑f ∘ ⇑(Equiv.piCongrLeft' M₁ σ).symm) (update m i y)),
                                            map_smul' :=
                                              (_ :
                                                ∀ [inst : DecidableEq ι'] (m : (i : ι') → M₁ (σ.symm i)) (i : ι')
                                                  (c : R) (x : M₁ (σ.symm i)),
                                                  (⇑f ∘ ⇑(Equiv.piCongrLeft' M₁ σ).symm) (update m i (c • x)) =
                                                    c • (⇑f ∘ ⇑(Equiv.piCongrLeft' M₁ σ).symm) (update m i x)) })
                                        f₁ +
                                      (fun f =>
                                          { toFun := ⇑f ∘ ⇑(Equiv.piCongrLeft' M₁ σ).symm,
                                            map_add' :=
                                              (_ :
                                                ∀ [inst : DecidableEq ι'] (m : (i : ι') → M₁ (σ.symm i)) (i : ι')
                                                  (x y : M₁ (σ.symm i)),
                                                  (⇑f ∘ ⇑(Equiv.piCongrLeft' M₁ σ).symm) (update m i (x + y)) =
                                                    (⇑f ∘ ⇑(Equiv.piCongrLeft' M₁ σ).symm) (update m i x) +
                                                      (⇑f ∘ ⇑(Equiv.piCongrLeft' M₁ σ).symm) (update m i y)),
                                            map_smul' :=
                                              (_ :
                                                ∀ [inst : DecidableEq ι'] (m : (i : ι') → M₁ (σ.symm i)) (i : ι')
                                                  (c : R) (x : M₁ (σ.symm i)),
                                                  (⇑f ∘ ⇑(Equiv.piCongrLeft' M₁ σ).symm) (update m i (c • x)) =
                                                    c • (⇑f ∘ ⇑(Equiv.piCongrLeft' M₁ σ).symm) (update m i x)) })
                                        f₂) }
                          f) }.toAddHom
          f))
      x✝ =
    f x✝

Next tactic:
simp only [coe_mk, comp_apply, Equiv.symm_apply_apply]