Documentation

Mathlib.LinearAlgebra.Multilinear.Basic

Multilinear maps #

We define multilinear maps as maps from Π (i : ι), M i to N which are σ-semilinear in each coordinate. Here, M i and N are modules over rings R and S, respectively, σ is a ring homomorphism R →+* S and ι is an arbitrary type (although some statements will require it to be a fintype). This space, denoted by (Π i, M i) →ₘₛₗ[σ] N, inherits a module structure by pointwise addition and multiplication.

Main definitions #

See Mathlib/LinearAlgebra/Multilinear/Curry.lean for the currying of multilinear maps.

Implementation notes #

Expressing that a map is linear along the i-th coordinate when all other coordinates are fixed can be done in two (equivalent) different ways:

The second way is more artificial as the value of m at i is not relevant, but it has the advantage of avoiding subtype inclusion issues. This is the definition we use, based on Function.update that allows to change the value of m at i.

Note that the use of Function.update requires a DecidableEq ι term to appear somewhere in the statement of MultilinearMap.map_update_add' and MultilinearMap.map_update_smul'. Three possible choices are:

  1. Requiring DecidableEq ι as an argument to MultilinearMap (as we did originally).
  2. Using Classical.decEq ι in the statement of map_add' and map_smul'.
  3. Quantifying over all possible DecidableEq ι instances in the statement of map_add' and map_smul'.

Option 1 works fine, but puts unnecessary constraints on the user (the zero map certainly does not need decidability). Option 2 looks great at first, but in the common case when ι = Fin n it introduces non-defeq decidability instance diamonds within the context of proving map_update_add' and map_update_smul', of the form Fin.decidableEq n = Classical.decEq (Fin n). Option 3 of course does something similar, but of the form Fin.decidableEq n = _inst, which is much easier to clean up since _inst is a free variable and so the equality can just be substituted.

structure MultilinearMap {R : Type uR} {S : Type uS} [Semiring R] [Semiring S] (σ : R →+* S) {ι : Type uι} (M : ι → Type u) (N : Type v) [(i : ι) → AddCommMonoid (M i)] [AddCommMonoid N] [(i : ι) → Module R (M i)] [Module S N] :
Type (max (max u uι) v)

Multilinear maps from the R-module Π i, M i to the S-module N over a ring homomorphism σ : R →+* S.

Instances For

    (Π i, M i) →ₘₛₗ[σ] N is the type of σ-multisemilinear maps from Π i, M i to N.

    Equations
    • One or more equations did not get rendered due to their size.
    Instances For

      (Π i, M i) →ₘₗ[R] N is the type of R-multilinear maps from Π i, M i to N.

      Equations
      • One or more equations did not get rendered due to their size.
      Instances For

        Delaborator for MultilinearMap.

        Equations
        • One or more equations did not get rendered due to their size.
        Instances For
          @[instance_reducible, macro_inline]
          instance MultilinearMap.instFunLikeForall {R : Type u_1} {S : Type u_2} [Semiring R] [Semiring S] {σ : R →+* S} {ι : Type u_4} {M : ι → Type u_5} {N : Type u_6} [(i : ι) → AddCommMonoid (M i)] [(i : ι) → Module R (M i)] [AddCommMonoid N] [Module S N] :
          FunLike ((Π (i : ι), M i) →ₘₛₗ[σ] N) ((i : ι) → M i) N
          Equations
          def MultilinearMap.mk' {R : Type u_1} {S : Type u_2} [Semiring R] [Semiring S] {σ : R →+* S} {ι : Type u_4} {M : ι → Type u_5} {N : Type u_6} [(i : ι) → AddCommMonoid (M i)] [(i : ι) → Module R (M i)] [AddCommMonoid N] [Module S N] [DecidableEq ι] (f : ((i : ι) → M i) → N) (h₁ : ∀ (m : (i : ι) → M i) (i : ι) (x y : M i), f (Function.update m i (x + y)) = f (Function.update m i x) + f (Function.update m i y) := by aesop) (h₂ : ∀ (m : (i : ι) → M i) (i : ι) (c : R) (x : M i), f (Function.update m i (c • x)) = σ c • f (Function.update m i x) := by aesop) :
          (Π (i : ι), M i) →ₘₛₗ[σ] N

          Constructor for (Π i, M i) →ₘₛₗ[σ] N when the index type ι is already endowed with a DecidableEq instance.

          Equations
          Instances For
            @[simp]
            theorem MultilinearMap.mk'_apply {R : Type u_1} {S : Type u_2} [Semiring R] [Semiring S] {σ : R →+* S} {ι : Type u_4} {M : ι → Type u_5} {N : Type u_6} [(i : ι) → AddCommMonoid (M i)] [(i : ι) → Module R (M i)] [AddCommMonoid N] [Module S N] [DecidableEq ι] (f : ((i : ι) → M i) → N) (h₁ : ∀ (m : (i : ι) → M i) (i : ι) (x y : M i), f (Function.update m i (x + y)) = f (Function.update m i x) + f (Function.update m i y) := by aesop) (h₂ : ∀ (m : (i : ι) → M i) (i : ι) (c : R) (x : M i), f (Function.update m i (c • x)) = σ c • f (Function.update m i x) := by aesop) (a✝ : (i : ι) → M i) :
            (mk' f h₁ h₂) a✝ = f a✝
            @[simp]
            theorem MultilinearMap.toFun_eq_coe {R : Type u_1} {S : Type u_2} [Semiring R] [Semiring S] {σ : R →+* S} {ι : Type u_4} {M : ι → Type u_5} {N : Type u_6} [(i : ι) → AddCommMonoid (M i)] [(i : ι) → Module R (M i)] [AddCommMonoid N] [Module S N] (f : (Π (i : ι), M i) →ₘₛₗ[σ] N) :
            f.toFun = ⇑f
            @[simp]
            theorem MultilinearMap.coe_mk {R : Type u_1} {S : Type u_2} [Semiring R] [Semiring S] {σ : R →+* S} {ι : Type u_4} {M : ι → Type u_5} {N : Type u_6} [(i : ι) → AddCommMonoid (M i)] [(i : ι) → Module R (M i)] [AddCommMonoid N] [Module S N] (f : ((i : ι) → M i) → N) (h₁ : ∀ [inst : DecidableEq ι] (m : (i : ι) → M i) (i : ι) (x y : M i), f (Function.update m i (x + y)) = f (Function.update m i x) + f (Function.update m i y)) (h₂ : ∀ [inst : DecidableEq ι] (m : (i : ι) → M i) (i : ι) (c : R) (x : M i), f (Function.update m i (c • x)) = σ c • f (Function.update m i x)) :
            ⇑{ toFun := f, map_update_add' := h₁, map_update_smul' := h₂ } = f
            theorem MultilinearMap.congr_fun {R : Type u_1} {S : Type u_2} [Semiring R] [Semiring S] {σ : R →+* S} {ι : Type u_4} {M : ι → Type u_5} {N : Type u_6} [(i : ι) → AddCommMonoid (M i)] [(i : ι) → Module R (M i)] [AddCommMonoid N] [Module S N] {f g : (Π (i : ι), M i) →ₘₛₗ[σ] N} (h : f = g) (x : (i : ι) → M i) :
            f x = g x
            theorem MultilinearMap.congr_arg {R : Type u_1} {S : Type u_2} [Semiring R] [Semiring S] {σ : R →+* S} {ι : Type u_4} {M : ι → Type u_5} {N : Type u_6} [(i : ι) → AddCommMonoid (M i)] [(i : ι) → Module R (M i)] [AddCommMonoid N] [Module S N] (f : (Π (i : ι), M i) →ₘₛₗ[σ] N) {x y : (i : ι) → M i} (h : x = y) :
            f x = f y
            theorem MultilinearMap.coe_injective {R : Type u_1} {S : Type u_2} [Semiring R] [Semiring S] {σ : R →+* S} {ι : Type u_4} {M : ι → Type u_5} {N : Type u_6} [(i : ι) → AddCommMonoid (M i)] [(i : ι) → Module R (M i)] [AddCommMonoid N] [Module S N] :
            theorem MultilinearMap.coe_inj {R : Type u_1} {S : Type u_2} [Semiring R] [Semiring S] {σ : R →+* S} {ι : Type u_4} {M : ι → Type u_5} {N : Type u_6} [(i : ι) → AddCommMonoid (M i)] [(i : ι) → Module R (M i)] [AddCommMonoid N] [Module S N] {f g : (Π (i : ι), M i) →ₘₛₗ[σ] N} :
            ⇑f = ⇑g ↔ f = g
            theorem MultilinearMap.ext {R : Type u_1} {S : Type u_2} [Semiring R] [Semiring S] {σ : R →+* S} {ι : Type u_4} {M : ι → Type u_5} {N : Type u_6} [(i : ι) → AddCommMonoid (M i)] [(i : ι) → Module R (M i)] [AddCommMonoid N] [Module S N] {f f' : (Π (i : ι), M i) →ₘₛₗ[σ] N} (H : ∀ (x : (i : ι) → M i), f x = f' x) :
            f = f'
            theorem MultilinearMap.ext_iff {R : Type u_1} {S : Type u_2} [Semiring R] [Semiring S] {σ : R →+* S} {ι : Type u_4} {M : ι → Type u_5} {N : Type u_6} [(i : ι) → AddCommMonoid (M i)] [(i : ι) → Module R (M i)] [AddCommMonoid N] [Module S N] {f f' : (Π (i : ι), M i) →ₘₛₗ[σ] N} :
            f = f' ↔ ∀ (x : (i : ι) → M i), f x = f' x
            @[simp]
            theorem MultilinearMap.mk_coe {R : Type u_1} {S : Type u_2} [Semiring R] [Semiring S] {σ : R →+* S} {ι : Type u_4} {M : ι → Type u_5} {N : Type u_6} [(i : ι) → AddCommMonoid (M i)] [(i : ι) → Module R (M i)] [AddCommMonoid N] [Module S N] (f : (Π (i : ι), M i) →ₘₛₗ[σ] N) (h₁ : ∀ [inst : DecidableEq ι] (m : (i : ι) → M i) (i : ι) (x y : M i), f (Function.update m i (x + y)) = f (Function.update m i x) + f (Function.update m i y)) (h₂ : ∀ [inst : DecidableEq ι] (m : (i : ι) → M i) (i : ι) (c : R) (x : M i), f (Function.update m i (c • x)) = σ c • f (Function.update m i x)) :
            { toFun := ⇑f, map_update_add' := h₁, map_update_smul' := h₂ } = f
            @[simp]
            theorem MultilinearMap.map_update_add {R : Type u_1} {S : Type u_2} [Semiring R] [Semiring S] {σ : R →+* S} {ι : Type u_4} {M : ι → Type u_5} {N : Type u_6} [(i : ι) → AddCommMonoid (M i)] [(i : ι) → Module R (M i)] [AddCommMonoid N] [Module S N] (f : (Π (i : ι), M i) →ₘₛₗ[σ] N) [DecidableEq ι] (m : (i : ι) → M i) (i : ι) (x y : M i) :
            f (Function.update m i (x + y)) = f (Function.update m i x) + f (Function.update m i y)
            @[simp]
            theorem MultilinearMap.map_update_smul {R : Type u_1} {S : Type u_2} [Semiring R] [Semiring S] {σ : R →+* S} {ι : Type u_4} {M : ι → Type u_5} {N : Type u_6} [(i : ι) → AddCommMonoid (M i)] [(i : ι) → Module R (M i)] [AddCommMonoid N] [Module S N] (f : (Π (i : ι), M i) →ₘₛₗ[σ] N) [DecidableEq ι] (m : (i : ι) → M i) (i : ι) (c : R) (x : M i) :
            f (Function.update m i (c • x)) = σ c • f (Function.update m i x)

            Earlier, this name was used by what is now called MultilinearMap.map_update_smul_left.

            theorem MultilinearMap.map_coord_zero {R : Type u_1} {S : Type u_2} [Semiring R] [Semiring S] {σ : R →+* S} {ι : Type u_4} {M : ι → Type u_5} {N : Type u_6} [(i : ι) → AddCommMonoid (M i)] [(i : ι) → Module R (M i)] [AddCommMonoid N] [Module S N] (f : (Π (i : ι), M i) →ₘₛₗ[σ] N) {m : (i : ι) → M i} (i : ι) (h : m i = 0) :
            f m = 0
            @[simp]
            theorem MultilinearMap.map_update_zero {R : Type u_1} {S : Type u_2} [Semiring R] [Semiring S] {σ : R →+* S} {ι : Type u_4} {M : ι → Type u_5} {N : Type u_6} [(i : ι) → AddCommMonoid (M i)] [(i : ι) → Module R (M i)] [AddCommMonoid N] [Module S N] (f : (Π (i : ι), M i) →ₘₛₗ[σ] N) [DecidableEq ι] (m : (i : ι) → M i) (i : ι) :
            f (Function.update m i 0) = 0
            @[simp]
            theorem MultilinearMap.map_zero {R : Type u_1} {S : Type u_2} [Semiring R] [Semiring S] {σ : R →+* S} {ι : Type u_4} {M : ι → Type u_5} {N : Type u_6} [(i : ι) → AddCommMonoid (M i)] [(i : ι) → Module R (M i)] [AddCommMonoid N] [Module S N] (f : (Π (i : ι), M i) →ₘₛₗ[σ] N) [Nonempty ι] :
            f 0 = 0
            @[instance_reducible]
            instance MultilinearMap.instAdd {R : Type u_1} {S : Type u_2} [Semiring R] [Semiring S] {σ : R →+* S} {ι : Type u_4} {M : ι → Type u_5} {N : Type u_6} [(i : ι) → AddCommMonoid (M i)] [(i : ι) → Module R (M i)] [AddCommMonoid N] [Module S N] :
            Add ((Π (i : ι), M i) →ₘₛₗ[σ] N)
            Equations
            • MultilinearMap.instAdd = { add := fun (f f' : (Π (i : ι), M i) →ₘₛₗ[σ] N) => { toFun := fun (x : (i : ι) → M i) => f x + f' x, map_update_add' := ⋯, map_update_smul' := ⋯ } }
            instance MultilinearMap.instIsAddApplyForall {R : Type u_1} {S : Type u_2} [Semiring R] [Semiring S] {σ : R →+* S} {ι : Type u_4} {M : ι → Type u_5} {N : Type u_6} [(i : ι) → AddCommMonoid (M i)] [(i : ι) → Module R (M i)] [AddCommMonoid N] [Module S N] :
            IsAddApply ((Π (i : ι), M i) →ₘₛₗ[σ] N)
            @[deprecated add_apply (since := "2026-06-10")]
            theorem MultilinearMap.add_apply {F : Type u_1} {α : outParam (Type u_2)} {β : outParam (Type u_3)} {inst✝ : FunLike F α β} {inst✝¹ : Add β} {inst✝² : Add F} [self : IsAddApply F] (f g : F) (x : α) :
            (f + g) x = f x + g x

            Alias of add_apply.

            @[instance_reducible]
            instance MultilinearMap.instZero {R : Type u_1} {S : Type u_2} [Semiring R] [Semiring S] {σ : R →+* S} {ι : Type u_4} {M : ι → Type u_5} {N : Type u_6} [(i : ι) → AddCommMonoid (M i)] [(i : ι) → Module R (M i)] [AddCommMonoid N] [Module S N] :
            Zero ((Π (i : ι), M i) →ₘₛₗ[σ] N)
            Equations
            instance MultilinearMap.instIsZeroApplyForall {R : Type u_1} {S : Type u_2} [Semiring R] [Semiring S] {σ : R →+* S} {ι : Type u_4} {M : ι → Type u_5} {N : Type u_6} [(i : ι) → AddCommMonoid (M i)] [(i : ι) → Module R (M i)] [AddCommMonoid N] [Module S N] :
            IsZeroApply ((Π (i : ι), M i) →ₘₛₗ[σ] N)
            @[instance_reducible]
            instance MultilinearMap.instInhabited {R : Type u_1} {S : Type u_2} [Semiring R] [Semiring S] {σ : R →+* S} {ι : Type u_4} {M : ι → Type u_5} {N : Type u_6} [(i : ι) → AddCommMonoid (M i)] [(i : ι) → Module R (M i)] [AddCommMonoid N] [Module S N] :
            Inhabited ((Π (i : ι), M i) →ₘₛₗ[σ] N)
            Equations
            @[deprecated zero_apply (since := "2026-06-10")]
            theorem MultilinearMap.zero_apply {F : Type u_1} {α : outParam (Type u_2)} {β : outParam (Type u_3)} {inst✝ : FunLike F α β} {inst✝¹ : Zero β} {inst✝² : Zero F} [self : IsZeroApply F] (x : α) :
            0 x = 0

            Alias of zero_apply.

            @[instance_reducible]
            instance MultilinearMap.instSMul {R : Type u_1} {S : Type u_2} {S' : Type u_3} [Semiring R] [Semiring S] {σ : R →+* S} {ι : Type u_4} {M : ι → Type u_5} {N : Type u_6} [(i : ι) → AddCommMonoid (M i)] [(i : ι) → Module R (M i)] [AddCommMonoid N] [Module S N] [DistribSMul S' N] [SMulCommClass S S' N] :
            SMul S' ((Π (i : ι), M i) →ₘₛₗ[σ] N)
            Equations
            • MultilinearMap.instSMul = { smul := fun (c : S') (f : (Π (i : ι), M i) →ₘₛₗ[σ] N) => { toFun := fun (m : (i : ι) → M i) => c • f m, map_update_add' := ⋯, map_update_smul' := ⋯ } }
            instance MultilinearMap.instIsSMulApplyForall {R : Type u_1} {S : Type u_2} {S' : Type u_3} [Semiring R] [Semiring S] {σ : R →+* S} {ι : Type u_4} {M : ι → Type u_5} {N : Type u_6} [(i : ι) → AddCommMonoid (M i)] [(i : ι) → Module R (M i)] [AddCommMonoid N] [Module S N] [DistribSMul S' N] [SMulCommClass S S' N] :
            IsSMulApply S' ((Π (i : ι), M i) →ₘₛₗ[σ] N)
            @[deprecated smul_apply (since := "2026-06-10")]
            theorem MultilinearMap.smul_apply {M : Type u_1} {F : Type u_2} {α : outParam (Type u_3)} {β : outParam (Type u_4)} {inst✝ : FunLike F α β} {inst✝¹ : SMul M β} {inst✝² : SMul M F} [self : IsSMulApply M F] (f : F) (n : M) (x : α) :
            (n • f) x = n • f x

            Alias of smul_apply.

            @[deprecated FunLike.coe_smul (since := "2026-06-10")]
            theorem MultilinearMap.coe_smul {M : Type u_1} {F : Type u_2} {α : Type u_4} {β : Type u_5} [FunLike F α β] [SMul M F] [SMul M β] [IsSMulApply M F] (n : M) (f : F) :
            ⇑(n • f) = n • ⇑f

            Alias of FunLike.coe_smul.

            @[instance_reducible]
            instance MultilinearMap.instAddMonoid {R : Type u_1} {S : Type u_2} [Semiring R] [Semiring S] {σ : R →+* S} {ι : Type u_4} {M : ι → Type u_5} {N : Type u_6} [(i : ι) → AddCommMonoid (M i)] [(i : ι) → Module R (M i)] [AddCommMonoid N] [Module S N] :
            AddMonoid ((Π (i : ι), M i) →ₘₛₗ[σ] N)
            Equations
            • One or more equations did not get rendered due to their size.
            @[instance_reducible]
            instance MultilinearMap.addCommMonoid {R : Type u_1} {S : Type u_2} [Semiring R] [Semiring S] {σ : R →+* S} {ι : Type u_4} {M : ι → Type u_5} {N : Type u_6} [(i : ι) → AddCommMonoid (M i)] [(i : ι) → Module R (M i)] [AddCommMonoid N] [Module S N] :
            AddCommMonoid ((Π (i : ι), M i) →ₘₛₗ[σ] N)
            Equations
            @[deprecated FunLike.coeAddMonoidHom (since := "2026-06-10")]
            def MultilinearMap.coeAddMonoidHom (F : Type u_1) (α : Type u_2) (β : Type u_3) [FunLike F α β] [AddZero F] [AddZeroClass β] [IsZeroApply F] [IsAddApply F] :
            F →+ α → β

            Alias of FunLike.coeAddMonoidHom.

            Equations
            Instances For
              @[deprecated FunLike.coeAddMonoidHom_apply (since := "2026-06-10")]
              theorem MultilinearMap.coeAddMonoidHom_apply {F : Type u_1} {α : Type u_2} {β : Type u_3} [FunLike F α β] [AddZero F] [AddZeroClass β] [IsZeroApply F] [IsAddApply F] (f : F) :
              (FunLike.coeAddMonoidHom F α β) f = ⇑f

              Alias of FunLike.coeAddMonoidHom_apply.

              @[deprecated FunLike.coe_sum (since := "2026-06-10")]
              theorem MultilinearMap.coe_sum {F : Type u_8} {α : Type u_9} {β : Type u_10} {ι : Type u_11} [FunLike F α β] [AddCommMonoid β] [AddCommMonoid F] [IsZeroApply F] [IsAddApply F] (s : Finset ι) (f : ι → F) :
              ⇑(∑ i ∈ s, f i) = ∑ i ∈ s, ⇑(f i)

              Alias of FunLike.coe_sum.

              @[deprecated sum_apply (since := "2026-06-10")]
              theorem MultilinearMap.sum_apply {F : Type u_8} {α : Type u_9} {β : Type u_10} {ι : Type u_11} [FunLike F α β] [AddCommMonoid β] [AddCommMonoid F] [IsZeroApply F] [IsAddApply F] (s : Finset ι) (f : ι → F) (x : α) :
              (∑ i ∈ s, f i) x = ∑ i ∈ s, (f i) x

              Alias of sum_apply.

              def MultilinearMap.toLinearMap {R : Type u_1} {S : Type u_2} [Semiring R] [Semiring S] {σ : R →+* S} {ι : Type u_4} {M : ι → Type u_5} {N : Type u_6} [(i : ι) → AddCommMonoid (M i)] [(i : ι) → Module R (M i)] [AddCommMonoid N] [Module S N] (f : (Π (i : ι), M i) →ₘₛₗ[σ] N) [DecidableEq ι] (m : (i : ι) → M i) (i : ι) :
              M i →ₛₗ[σ] N

              If f is a multilinear map, then f.toLinearMap m i is the linear map obtained by fixing all coordinates but i equal to those of m, and varying the i-th coordinate.

              Equations
              Instances For
                @[simp]
                theorem MultilinearMap.toLinearMap_apply {R : Type u_1} {S : Type u_2} [Semiring R] [Semiring S] {σ : R →+* S} {ι : Type u_4} {M : ι → Type u_5} {N : Type u_6} [(i : ι) → AddCommMonoid (M i)] [(i : ι) → Module R (M i)] [AddCommMonoid N] [Module S N] (f : (Π (i : ι), M i) →ₘₛₗ[σ] N) [DecidableEq ι] (m : (i : ι) → M i) (i : ι) (x : M i) :
                (f.toLinearMap m i) x = f (Function.update m i x)
                def MultilinearMap.prod {R : Type u_1} {S : Type u_2} [Semiring R] [Semiring S] {σ : R →+* S} {ι : Type u_4} {M : ι → Type u_5} {N : Type u_6} {N' : Type u_7} [(i : ι) → AddCommMonoid (M i)] [(i : ι) → Module R (M i)] [AddCommMonoid N] [AddCommMonoid N'] [Module S N] [Module S N'] (f : (Π (i : ι), M i) →ₘₛₗ[σ] N) (g : (Π (i : ι), M i) →ₘₛₗ[σ] N') :
                (Π (i : ι), M i) →ₘₛₗ[σ] N × N'

                The Cartesian product of two multilinear maps, as a multilinear map.

                Equations
                • f.prod g = { toFun := fun (m : (i : ι) → M i) => (f m, g m), map_update_add' := ⋯, map_update_smul' := ⋯ }
                Instances For
                  @[simp]
                  theorem MultilinearMap.prod_apply {R : Type u_1} {S : Type u_2} [Semiring R] [Semiring S] {σ : R →+* S} {ι : Type u_4} {M : ι → Type u_5} {N : Type u_6} {N' : Type u_7} [(i : ι) → AddCommMonoid (M i)] [(i : ι) → Module R (M i)] [AddCommMonoid N] [AddCommMonoid N'] [Module S N] [Module S N'] (f : (Π (i : ι), M i) →ₘₛₗ[σ] N) (g : (Π (i : ι), M i) →ₘₛₗ[σ] N') (m : (i : ι) → M i) :
                  (f.prod g) m = (f m, g m)
                  def MultilinearMap.pi {R : Type u_1} {S : Type u_2} [Semiring R] [Semiring S] {σ : R →+* S} {ι : Type u_4} {M : ι → Type u_5} [(i : ι) → AddCommMonoid (M i)] [(i : ι) → Module R (M i)] {ι' : Type u_8} {M' : ι' → Type u_9} [(i : ι') → AddCommMonoid (M' i)] [(i : ι') → Module S (M' i)] (f : (i : ι') → (Π (i : ι), M i) →ₘₛₗ[σ] M' i) :
                  (Π (i : ι), M i) →ₘₛₗ[σ] (i : ι') → M' i

                  Combine a family of multilinear maps with the same domain and codomains M' i into a multilinear map taking values in the space of functions ∀ i, M' i.

                  Equations
                  • MultilinearMap.pi f = { toFun := fun (m : (i : ι) → M i) (i : ι') => (f i) m, map_update_add' := ⋯, map_update_smul' := ⋯ }
                  Instances For
                    @[simp]
                    theorem MultilinearMap.pi_apply {R : Type u_1} {S : Type u_2} [Semiring R] [Semiring S] {σ : R →+* S} {ι : Type u_4} {M : ι → Type u_5} [(i : ι) → AddCommMonoid (M i)] [(i : ι) → Module R (M i)] {ι' : Type u_8} {M' : ι' → Type u_9} [(i : ι') → AddCommMonoid (M' i)] [(i : ι') → Module S (M' i)] (f : (i : ι') → (Π (i : ι), M i) →ₘₛₗ[σ] M' i) (m : (i : ι) → M i) (i : ι') :
                    (pi f) m i = (f i) m
                    def MultilinearMap.ofSubsingleton {R : Type u_1} {S : Type u_2} [Semiring R] [Semiring S] (σ : R →+* S) {ι : Type u_4} (N : Type u_6) (N' : Type u_7) [AddCommMonoid N] [AddCommMonoid N'] [Module S N'] [Module R N] [Subsingleton ι] (i : ι) :
                    (N →ₛₗ[σ] N') ≃ ((ι → N) →ₘₛₗ[σ] N')

                    Equivalence between linear maps N₁ →ₛₗ[σ] N₂ and one-multilinear maps.

                    Equations
                    • One or more equations did not get rendered due to their size.
                    Instances For
                      @[simp]
                      theorem MultilinearMap.ofSubsingleton_apply_apply {R : Type u_1} {S : Type u_2} [Semiring R] [Semiring S] (σ : R →+* S) {ι : Type u_4} (N : Type u_6) (N' : Type u_7) [AddCommMonoid N] [AddCommMonoid N'] [Module S N'] [Module R N] [Subsingleton ι] (i : ι) (f : N →ₛₗ[σ] N') (x : ι → N) :
                      ((ofSubsingleton σ N N' i) f) x = f (x i)
                      @[simp]
                      theorem MultilinearMap.ofSubsingleton_symm_apply_apply {R : Type u_1} {S : Type u_2} [Semiring R] [Semiring S] (σ : R →+* S) {ι : Type u_4} (N : Type u_6) (N' : Type u_7) [AddCommMonoid N] [AddCommMonoid N'] [Module S N'] [Module R N] [Subsingleton ι] (i : ι) (f : (ι → N) →ₘₛₗ[σ] N') (x : N) :
                      ((ofSubsingleton σ N N' i).symm f) x = f fun (x_1 : ι) => x
                      def MultilinearMap.constOfIsEmpty {R : Type u_1} {S : Type u_2} [Semiring R] [Semiring S] (σ : R →+* S) {ι : Type u_4} (M : ι → Type u_5) {N : Type u_6} [(i : ι) → AddCommMonoid (M i)] [(i : ι) → Module R (M i)] [AddCommMonoid N] [Module S N] [IsEmpty ι] (m : N) :
                      (Π (i : ι), M i) →ₘₛₗ[σ] N

                      The constant map is multilinear when ι is empty.

                      Equations
                      Instances For
                        @[simp]
                        theorem MultilinearMap.constOfIsEmpty_apply {R : Type u_1} {S : Type u_2} [Semiring R] [Semiring S] (σ : R →+* S) {ι : Type u_4} (M : ι → Type u_5) {N : Type u_6} [(i : ι) → AddCommMonoid (M i)] [(i : ι) → Module R (M i)] [AddCommMonoid N] [Module S N] [IsEmpty ι] (m : N) :
                        ⇑(constOfIsEmpty σ M m) = Function.const ((i : ι) → M i) m
                        def MultilinearMap.restr {R : Type u_1} {S : Type u_2} [Semiring R] [Semiring S] {σ : R →+* S} {N : Type u_6} {N' : Type u_7} [AddCommMonoid N] [AddCommMonoid N'] [Module S N'] [Module R N] {n k : ℕ} (f : (Fin n → N) →ₘₛₗ[σ] N') (s : Finset (Fin n)) (hk : s.card = k) (z : N) :
                        (Fin k → N) →ₘₛₗ[σ] N'

                        Given a multilinear map f on n variables (parameterized by Fin n) and a subset s of k of these variables, one gets a new multilinear map on Fin k by varying these variables, and fixing the other ones equal to a given value z. It is denoted by f.restr s hk z, where hk is a proof that the cardinality of s is k. The implicit identification between Fin k and s that we use is the canonical (increasing) bijection.

                        Equations
                        Instances For
                          theorem MultilinearMap.cons_add {R : Type u_1} {S : Type u_2} [Semiring R] [Semiring S] {σ : R →+* S} {N : Type u_6} [AddCommMonoid N] [Module S N] {n : ℕ} {M' : Fin n.succ → Type u_8} [(i : Fin n.succ) → AddCommMonoid (M' i)] [(i : Fin n.succ) → Module R (M' i)] (f : (Π (i : Fin n.succ), M' i) →ₘₛₗ[σ] N) (m : (i : Fin n) → M' i.succ) (x y : M' 0) :
                          f (Fin.cons (x + y) m) = f (Fin.cons x m) + f (Fin.cons y m)

                          In the specific case of multilinear maps on spaces indexed by Fin (n+1), where one can build an element of ∀ (i : Fin (n+1)), M i using cons, one can express directly the additivity of a multilinear map along the first variable.

                          theorem MultilinearMap.cons_smul {R : Type u_1} {S : Type u_2} [Semiring R] [Semiring S] {σ : R →+* S} {N : Type u_6} [AddCommMonoid N] [Module S N] {n : ℕ} {M' : Fin n.succ → Type u_8} [(i : Fin n.succ) → AddCommMonoid (M' i)] [(i : Fin n.succ) → Module R (M' i)] (f : (Π (i : Fin n.succ), M' i) →ₘₛₗ[σ] N) (m : (i : Fin n) → M' i.succ) (c : R) (x : M' 0) :
                          f (Fin.cons (c • x) m) = σ c • f (Fin.cons x m)

                          In the specific case of multilinear maps on spaces indexed by Fin (n+1), where one can build an element of ∀ (i : Fin (n+1)), M i using cons, one can express directly the multiplicativity of a multilinear map along the first variable.

                          theorem MultilinearMap.snoc_add {R : Type u_1} {S : Type u_2} [Semiring R] [Semiring S] {σ : R →+* S} {N : Type u_6} [AddCommMonoid N] [Module S N] {n : ℕ} {M' : Fin n.succ → Type u_8} [(i : Fin n.succ) → AddCommMonoid (M' i)] [(i : Fin n.succ) → Module R (M' i)] (f : (Π (i : Fin n.succ), M' i) →ₘₛₗ[σ] N) (m : (i : Fin n) → M' i.castSucc) (x y : M' (Fin.last n)) :
                          f (Fin.snoc m (x + y)) = f (Fin.snoc m x) + f (Fin.snoc m y)

                          In the specific case of multilinear maps on spaces indexed by Fin (n+1), where one can build an element of ∀ (i : Fin (n+1)), M i using snoc, one can express directly the additivity of a multilinear map along the first variable.

                          theorem MultilinearMap.snoc_smul {R : Type u_1} {S : Type u_2} [Semiring R] [Semiring S] {σ : R →+* S} {N : Type u_6} [AddCommMonoid N] [Module S N] {n : ℕ} {M' : Fin n.succ → Type u_8} [(i : Fin n.succ) → AddCommMonoid (M' i)] [(i : Fin n.succ) → Module R (M' i)] (f : (Π (i : Fin n.succ), M' i) →ₘₛₗ[σ] N) (m : (i : Fin n) → M' i.castSucc) (c : R) (x : M' (Fin.last n)) :
                          f (Fin.snoc m (c • x)) = σ c • f (Fin.snoc m x)

                          In the specific case of multilinear maps on spaces indexed by Fin (n+1), where one can build an element of ∀ (i : Fin (n+1)), M i using cons, one can express directly the multiplicativity of a multilinear map along the first variable.

                          theorem MultilinearMap.map_insertNth_add {R : Type u_1} {S : Type u_2} [Semiring R] [Semiring S] {σ : R →+* S} {N : Type u_6} [AddCommMonoid N] [Module S N] {n : ℕ} {M' : Fin n.succ → Type u_8} [(i : Fin n.succ) → AddCommMonoid (M' i)] [(i : Fin n.succ) → Module R (M' i)] (f : (Π (i : Fin n.succ), M' i) →ₘₛₗ[σ] N) (p : Fin (n + 1)) (m : (i : Fin n) → M' (p.succAbove i)) (x y : M' p) :
                          f (p.insertNth (x + y) m) = f (p.insertNth x m) + f (p.insertNth y m)
                          theorem MultilinearMap.map_insertNth_smul {R : Type u_1} {S : Type u_2} [Semiring R] [Semiring S] {σ : R →+* S} {N : Type u_6} [AddCommMonoid N] [Module S N] {n : ℕ} {M' : Fin n.succ → Type u_8} [(i : Fin n.succ) → AddCommMonoid (M' i)] [(i : Fin n.succ) → Module R (M' i)] (f : (Π (i : Fin n.succ), M' i) →ₘₛₗ[σ] N) (p : Fin (n + 1)) (m : (i : Fin n) → M' (p.succAbove i)) (c : R) (x : M' p) :
                          f (p.insertNth (c • x) m) = σ c • f (p.insertNth x m)
                          def MultilinearMap.compLinearMap {R₁ : Type u_8} {R₂ : Type u_9} {R₃ : Type u_10} [Semiring R₁] [Semiring R₂] [Semiring R₃] {σ₁₂ : R₁ →+* R₂} {σ₂₃ : R₂ →+* R₃} {σ₁₃ : R₁ →+* R₃} [RingHomCompTriple σ₁₂ σ₂₃ σ₁₃] {ι : Type u_12} {M₁ : ι → Type u_13} {M₂ : ι → Type u_14} {N₃ : Type u_17} [(i : ι) → AddCommMonoid (M₁ i)] [(i : ι) → AddCommMonoid (M₂ i)] [(i : ι) → Module R₁ (M₁ i)] [(i : ι) → Module R₂ (M₂ i)] [AddCommMonoid N₃] [Module R₃ N₃] (g : (Π (i : ι), M₂ i) →ₘₛₗ[σ₂₃] N₃) (f : (i : ι) → M₁ i →ₛₗ[σ₁₂] M₂ i) :
                          (Π (i : ι), M₁ i) →ₘₛₗ[σ₁₃] N₃

                          If g is a multilinear map and f is a collection of linear maps, then g (f₁ m₁, ..., fₙ mₙ) is again a multilinear map, that we call g.compLinearMap f.

                          Equations
                          • g.compLinearMap f = { toFun := fun (m : (i : ι) → M₁ i) => g fun (i : ι) => (f i) (m i), map_update_add' := ⋯, map_update_smul' := ⋯ }
                          Instances For
                            @[simp]
                            theorem MultilinearMap.compLinearMap_apply {R₁ : Type u_8} {R₂ : Type u_9} {R₃ : Type u_10} [Semiring R₁] [Semiring R₂] [Semiring R₃] {σ₁₂ : R₁ →+* R₂} {σ₂₃ : R₂ →+* R₃} {σ₁₃ : R₁ →+* R₃} [RingHomCompTriple σ₁₂ σ₂₃ σ₁₃] {ι : Type u_12} {M₁ : ι → Type u_13} {M₂ : ι → Type u_14} {N₃ : Type u_17} [(i : ι) → AddCommMonoid (M₁ i)] [(i : ι) → AddCommMonoid (M₂ i)] [(i : ι) → Module R₁ (M₁ i)] [(i : ι) → Module R₂ (M₂ i)] [AddCommMonoid N₃] [Module R₃ N₃] (g : (Π (i : ι), M₂ i) →ₘₛₗ[σ₂₃] N₃) (f : (i : ι) → M₁ i →ₛₗ[σ₁₂] M₂ i) (m : (i : ι) → M₁ i) :
                            (g.compLinearMap f) m = g fun (i : ι) => (f i) (m i)
                            theorem MultilinearMap.compLinearMap_assoc {R₁ : Type u_8} {R₂ : Type u_9} {R₃ : Type u_10} {R₄ : Type u_11} [Semiring R₁] [Semiring R₂] [Semiring R₃] [Semiring R₄] {σ₁₂ : R₁ →+* R₂} {σ₂₃ : R₂ →+* R₃} {σ₁₃ : R₁ →+* R₃} [RingHomCompTriple σ₁₂ σ₂₃ σ₁₃] {σ₃₄ : R₃ →+* R₄} {σ₂₄ : R₂ →+* R₄} {σ₁₄ : R₁ →+* R₄} [RingHomCompTriple σ₁₃ σ₃₄ σ₁₄] [RingHomCompTriple σ₂₃ σ₃₄ σ₂₄] [RingHomCompTriple σ₁₂ σ₂₄ σ₁₄] {ι : Type u_12} {M₁ : ι → Type u_13} {M₂ : ι → Type u_14} {M₃ : ι → Type u_15} {N₄ : Type u_18} [(i : ι) → AddCommMonoid (M₁ i)] [(i : ι) → AddCommMonoid (M₂ i)] [(i : ι) → AddCommMonoid (M₃ i)] [(i : ι) → Module R₁ (M₁ i)] [(i : ι) → Module R₂ (M₂ i)] [(i : ι) → Module R₃ (M₃ i)] [AddCommMonoid N₄] [Module R₄ N₄] (g : (Π (i : ι), M₃ i) →ₘₛₗ[σ₃₄] N₄) (f₁ : (i : ι) → M₂ i →ₛₗ[σ₂₃] M₃ i) (f₂ : (i : ι) → M₁ i →ₛₗ[σ₁₂] M₂ i) :
                            (g.compLinearMap f₁).compLinearMap f₂ = g.compLinearMap fun (i : ι) => f₁ i ∘ₛₗ f₂ i

                            Composing a multilinear map twice with a linear map in each argument is the same as composing with their composition.

                            @[simp]
                            theorem MultilinearMap.zero_compLinearMap {R₁ : Type u_8} {R₂ : Type u_9} {R₃ : Type u_10} [Semiring R₁] [Semiring R₂] [Semiring R₃] {σ₁₂ : R₁ →+* R₂} {σ₂₃ : R₂ →+* R₃} {σ₁₃ : R₁ →+* R₃} [RingHomCompTriple σ₁₂ σ₂₃ σ₁₃] {ι : Type u_12} {M₁ : ι → Type u_13} {M₂ : ι → Type u_14} {N₃ : Type u_17} [(i : ι) → AddCommMonoid (M₁ i)] [(i : ι) → AddCommMonoid (M₂ i)] [(i : ι) → Module R₁ (M₁ i)] [(i : ι) → Module R₂ (M₂ i)] [AddCommMonoid N₃] [Module R₃ N₃] (f : (i : ι) → M₁ i →ₛₗ[σ₁₂] M₂ i) :

                            Composing the zero multilinear map with a linear map in each argument.

                            @[simp]
                            theorem MultilinearMap.compLinearMap_id {R : Type u_1} {S : Type u_2} [Semiring R] [Semiring S] {σ : R →+* S} {ι : Type u_4} {M : ι → Type u_5} {N : Type u_6} [(i : ι) → AddCommMonoid (M i)] [(i : ι) → Module R (M i)] [AddCommMonoid N] [Module S N] (g : (Π (i : ι), M i) →ₘₛₗ[σ] N) :
                            (g.compLinearMap fun (x : ι) => LinearMap.id) = g

                            Composing a multilinear map with the identity linear map in each argument.

                            theorem MultilinearMap.compLinearMap_injective {R₁ : Type u_8} {R₂ : Type u_9} {R₃ : Type u_10} [Semiring R₁] [Semiring R₂] [Semiring R₃] {σ₁₂ : R₁ →+* R₂} {σ₂₃ : R₂ →+* R₃} {σ₁₃ : R₁ →+* R₃} [RingHomCompTriple σ₁₂ σ₂₃ σ₁₃] {ι : Type u_12} {M₁ : ι → Type u_13} {M₂ : ι → Type u_14} {N₃ : Type u_17} [(i : ι) → AddCommMonoid (M₁ i)] [(i : ι) → AddCommMonoid (M₂ i)] [(i : ι) → Module R₁ (M₁ i)] [(i : ι) → Module R₂ (M₂ i)] [AddCommMonoid N₃] [Module R₃ N₃] (f : (i : ι) → M₁ i →ₛₗ[σ₁₂] M₂ i) (hf : ∀ (i : ι), Function.Surjective ⇑(f i)) :
                            Function.Injective fun (g : (Π (i : ι), M₂ i) →ₘₛₗ[σ₂₃] N₃) => g.compLinearMap f

                            Composing with a family of surjective linear maps is injective.

                            theorem MultilinearMap.compLinearMap_inj {R₁ : Type u_8} {R₂ : Type u_9} {R₃ : Type u_10} [Semiring R₁] [Semiring R₂] [Semiring R₃] {σ₁₂ : R₁ →+* R₂} {σ₂₃ : R₂ →+* R₃} {σ₁₃ : R₁ →+* R₃} [RingHomCompTriple σ₁₂ σ₂₃ σ₁₃] {ι : Type u_12} {M₁ : ι → Type u_13} {M₂ : ι → Type u_14} {N₃ : Type u_17} [(i : ι) → AddCommMonoid (M₁ i)] [(i : ι) → AddCommMonoid (M₂ i)] [(i : ι) → Module R₁ (M₁ i)] [(i : ι) → Module R₂ (M₂ i)] [AddCommMonoid N₃] [Module R₃ N₃] (f : (i : ι) → M₁ i →ₛₗ[σ₁₂] M₂ i) (hf : ∀ (i : ι), Function.Surjective ⇑(f i)) (g₁ g₂ : (Π (i : ι), M₂ i) →ₘₛₗ[σ₂₃] N₃) :
                            g₁.compLinearMap f = g₂.compLinearMap f ↔ g₁ = g₂
                            @[simp]
                            theorem MultilinearMap.comp_linearEquiv_eq_zero_iff {R₁ : Type u_8} {R₂ : Type u_9} {R₃ : Type u_10} [Semiring R₁] [Semiring R₂] [Semiring R₃] {σ₁₂ : R₁ →+* R₂} {σ₂₃ : R₂ →+* R₃} {σ₁₃ : R₁ →+* R₃} [RingHomCompTriple σ₁₂ σ₂₃ σ₁₃] {ι : Type u_12} {M₁ : ι → Type u_13} {M₂ : ι → Type u_14} {N₃ : Type u_17} [(i : ι) → AddCommMonoid (M₁ i)] [(i : ι) → AddCommMonoid (M₂ i)] [(i : ι) → Module R₁ (M₁ i)] [(i : ι) → Module R₂ (M₂ i)] [AddCommMonoid N₃] [Module R₃ N₃] {σ₂₁ : R₂ →+* R₁} [RingHomInvPair σ₁₂ σ₂₁] [RingHomInvPair σ₂₁ σ₁₂] (g : (Π (i : ι), M₂ i) →ₘₛₗ[σ₂₃] N₃) (f : (i : ι) → M₁ i ≃ₛₗ[σ₁₂] M₂ i) :
                            (g.compLinearMap fun (i : ι) => ↑(f i)) = 0 ↔ g = 0

                            Composing a multilinear map with a linear equiv on each argument gives the zero map if and only if the multilinear map is the zero map.

                            def MultilinearMap.compMultilinearMap {R₁ : Type u_8} {R₂ : Type u_9} {R₃ : Type u_10} [Semiring R₁] [Semiring R₂] [Semiring R₃] {σ₁₂ : R₁ →+* R₂} {σ₂₃ : R₂ →+* R₃} {σ₁₃ : R₁ →+* R₃} [RingHomCompTriple σ₁₂ σ₂₃ σ₁₃] {ι : Type u_12} {M₂ : ι → Type u_14} {N₃ : Type u_17} [(i : ι) → AddCommMonoid (M₂ i)] [(i : ι) → Module R₂ (M₂ i)] [AddCommMonoid N₃] [Module R₃ N₃] {β : ι → Type u_19} {M₁' : (i : ι) → β i → Type u_20} [(i : ι) → (b : β i) → AddCommMonoid (M₁' i b)] [(i : ι) → (b : β i) → Module R₁ (M₁' i b)] (g : (Π (i : ι), M₂ i) →ₘₛₗ[σ₂₃] N₃) (f : (i : ι) → (Π (j : β i), M₁' i j) →ₘₛₗ[σ₁₂] M₂ i) :
                            (Π (j : (i : ι) × β i), M₁' j.fst j.snd) →ₘₛₗ[σ₁₃] N₃

                            Composition of multilinear maps. If g is multilinear, and if for every i : ι, we have a multilinear map f i with index type β i, then m ↦ g (f₁ m_11 m_12 ...) (f₂ m_21 m_22 ...) ... is multilinear with index type (Σ i, β i).

                            Equations
                            Instances For
                              @[simp]
                              theorem MultilinearMap.compMultilinearMap_apply {R₁ : Type u_8} {R₂ : Type u_9} {R₃ : Type u_10} [Semiring R₁] [Semiring R₂] [Semiring R₃] {σ₁₂ : R₁ →+* R₂} {σ₂₃ : R₂ →+* R₃} {σ₁₃ : R₁ →+* R₃} [RingHomCompTriple σ₁₂ σ₂₃ σ₁₃] {ι : Type u_12} {M₂ : ι → Type u_14} {N₃ : Type u_17} [(i : ι) → AddCommMonoid (M₂ i)] [(i : ι) → Module R₂ (M₂ i)] [AddCommMonoid N₃] [Module R₃ N₃] {β : ι → Type u_19} {M₁' : (i : ι) → β i → Type u_20} [(i : ι) → (b : β i) → AddCommMonoid (M₁' i b)] [(i : ι) → (b : β i) → Module R₁ (M₁' i b)] (g : (Π (i : ι), M₂ i) →ₘₛₗ[σ₂₃] N₃) (f : (i : ι) → (Π (j : β i), M₁' i j) →ₘₛₗ[σ₁₂] M₂ i) (m : (i : (i : ι) × β i) → M₁' i.fst i.snd) :
                              (g.compMultilinearMap f) m = g fun (i : ι) => (f i) (Sigma.curry m i)
                              theorem MultilinearMap.map_piecewise_add {R : Type u_1} {S : Type u_2} [Semiring R] [Semiring S] {σ : R →+* S} {ι : Type u_4} {M : ι → Type u_5} {N : Type u_6} [(i : ι) → AddCommMonoid (M i)] [(i : ι) → Module R (M i)] [AddCommMonoid N] [Module S N] (f : (Π (i : ι), M i) →ₘₛₗ[σ] N) [DecidableEq ι] (m m' : (i : ι) → M i) (t : Finset ι) :
                              f (t.piecewise (m + m') m') = ∑ s ∈ t.powerset, f (s.piecewise m m')

                              If one adds to a vector m' another vector m, but only for coordinates in a finset t, then the image under a multilinear map f is the sum of f (s.piecewise m m') along all subsets s of t. This is mainly an auxiliary statement to prove the result when t = univ, given in map_add_univ, although it can be useful in its own right as it does not require the index set ι to be finite.

                              theorem MultilinearMap.map_add_univ {R : Type u_1} {S : Type u_2} [Semiring R] [Semiring S] {σ : R →+* S} {ι : Type u_4} {M : ι → Type u_5} {N : Type u_6} [(i : ι) → AddCommMonoid (M i)] [(i : ι) → Module R (M i)] [AddCommMonoid N] [Module S N] (f : (Π (i : ι), M i) →ₘₛₗ[σ] N) [DecidableEq ι] [Fintype ι] (m m' : (i : ι) → M i) :
                              f (m + m') = ∑ s : Finset ι, f (s.piecewise m m')

                              Additivity of a multilinear map along all coordinates at the same time, writing f (m + m') as the sum of f (s.piecewise m m') over all sets s.

                              theorem MultilinearMap.map_sum_finset_aux {R : Type u_1} {S : Type u_2} [Semiring R] [Semiring S] {σ : R →+* S} {ι : Type u_4} {M : ι → Type u_5} {N : Type u_6} [(i : ι) → AddCommMonoid (M i)] [(i : ι) → Module R (M i)] [AddCommMonoid N] [Module S N] (f : (Π (i : ι), M i) →ₘₛₗ[σ] N) {α : ι → Type u_8} (g : (i : ι) → α i → M i) (A : (i : ι) → Finset (α i)) [DecidableEq ι] [Fintype ι] {n : ℕ} (h : ∑ i : ι, (A i).card = n) :
                              (f fun (i : ι) => ∑ j ∈ A i, g i j) = ∑ r ∈ Fintype.piFinset A, f fun (i : ι) => g i (r i)

                              If f is multilinear, then f (Σ_{j₁ ∈ A₁} g₁ j₁, ..., Σ_{jₙ ∈ Aₙ} gₙ jₙ) is the sum of f (g₁ (r 1), ..., gₙ (r n)) where r ranges over all functions with r 1 ∈ A₁, ..., r n ∈ Aₙ. This follows from multilinearity by expanding successively with respect to each coordinate. Here, we give an auxiliary statement tailored for an inductive proof. Use instead map_sum_finset.

                              theorem MultilinearMap.map_sum_finset {R : Type u_1} {S : Type u_2} [Semiring R] [Semiring S] {σ : R →+* S} {ι : Type u_4} {M : ι → Type u_5} {N : Type u_6} [(i : ι) → AddCommMonoid (M i)] [(i : ι) → Module R (M i)] [AddCommMonoid N] [Module S N] (f : (Π (i : ι), M i) →ₘₛₗ[σ] N) {α : ι → Type u_8} (g : (i : ι) → α i → M i) (A : (i : ι) → Finset (α i)) [DecidableEq ι] [Fintype ι] :
                              (f fun (i : ι) => ∑ j ∈ A i, g i j) = ∑ r ∈ Fintype.piFinset A, f fun (i : ι) => g i (r i)

                              If f is multilinear, then f (Σ_{j₁ ∈ A₁} g₁ j₁, ..., Σ_{jₙ ∈ Aₙ} gₙ jₙ) is the sum of f (g₁ (r 1), ..., gₙ (r n)) where r ranges over all functions with r 1 ∈ A₁, ..., r n ∈ Aₙ. This follows from multilinearity by expanding successively with respect to each coordinate.

                              theorem MultilinearMap.map_sum {R : Type u_1} {S : Type u_2} [Semiring R] [Semiring S] {σ : R →+* S} {ι : Type u_4} {M : ι → Type u_5} {N : Type u_6} [(i : ι) → AddCommMonoid (M i)] [(i : ι) → Module R (M i)] [AddCommMonoid N] [Module S N] (f : (Π (i : ι), M i) →ₘₛₗ[σ] N) {α : ι → Type u_8} (g : (i : ι) → α i → M i) [DecidableEq ι] [Fintype ι] [(i : ι) → Fintype (α i)] :
                              (f fun (i : ι) => ∑ j : α i, g i j) = ∑ r : (i : ι) → α i, f fun (i : ι) => g i (r i)

                              If f is multilinear, then f (Σ_{j₁} g₁ j₁, ..., Σ_{jₙ} gₙ jₙ) is the sum of f (g₁ (r 1), ..., gₙ (r n)) where r ranges over all functions r. This follows from multilinearity by expanding successively with respect to each coordinate.

                              theorem MultilinearMap.map_update_sum {R : Type u_1} {S : Type u_2} [Semiring R] [Semiring S] {σ : R →+* S} {ι : Type u_4} {M : ι → Type u_5} {N : Type u_6} [(i : ι) → AddCommMonoid (M i)] [(i : ι) → Module R (M i)] [AddCommMonoid N] [Module S N] (f : (Π (i : ι), M i) →ₘₛₗ[σ] N) {α : Type u_9} [DecidableEq ι] (t : Finset α) (i : ι) (g : α → M i) (m : (i : ι) → M i) :
                              f (Function.update m i (∑ a ∈ t, g a)) = ∑ a ∈ t, f (Function.update m i (g a))
                              def MultilinearMap.codRestrict {R : Type u_1} {S : Type u_2} [Semiring R] [Semiring S] {σ : R →+* S} {ι : Type u_4} {M : ι → Type u_5} {N : Type u_6} [(i : ι) → AddCommMonoid (M i)] [(i : ι) → Module R (M i)] [AddCommMonoid N] [Module S N] (f : (Π (i : ι), M i) →ₘₛₗ[σ] N) (p : Submodule S N) (h : ∀ (v : (i : ι) → M i), f v ∈ p) :
                              (Π (i : ι), M i) →ₘₛₗ[σ] ↥p

                              Restrict the codomain of a multilinear map to a submodule.

                              This is the multilinear version of LinearMap.codRestrict.

                              Equations
                              • f.codRestrict p h = { toFun := fun (v : (i : ι) → M i) => ⟨f v, ⋯⟩, map_update_add' := ⋯, map_update_smul' := ⋯ }
                              Instances For
                                @[simp]
                                theorem MultilinearMap.codRestrict_apply_coe {R : Type u_1} {S : Type u_2} [Semiring R] [Semiring S] {σ : R →+* S} {ι : Type u_4} {M : ι → Type u_5} {N : Type u_6} [(i : ι) → AddCommMonoid (M i)] [(i : ι) → Module R (M i)] [AddCommMonoid N] [Module S N] (f : (Π (i : ι), M i) →ₘₛₗ[σ] N) (p : Submodule S N) (h : ∀ (v : (i : ι) → M i), f v ∈ p) (v : (i : ι) → M i) :
                                ↑((f.codRestrict p h) v) = f v
                                def MultilinearMap.restrictScalars (R : Type u_1) [Semiring R] {ι : Type u_4} {M : ι → Type u_5} {N : Type u_6} [(i : ι) → AddCommMonoid (M i)] [(i : ι) → Module R (M i)] [AddCommMonoid N] {A : Type u_8} [Semiring A] [SMul R A] [(i : ι) → Module A (M i)] [Module A N] [Module R N] [∀ (i : ι), IsScalarTower R A (M i)] [IsScalarTower R A N] (f : (Π (i : ι), M i) →ₘₗ[A] N) :
                                (Π (i : ι), M i) →ₘₗ[R] N

                                Reinterpret an A-multilinear map as an R-multilinear map, if A is an algebra over R and their actions on all involved modules agree with the action of R on A.

                                Equations
                                Instances For
                                  @[simp]
                                  theorem MultilinearMap.coe_restrictScalars (R : Type u_1) [Semiring R] {ι : Type u_4} {M : ι → Type u_5} {N : Type u_6} [(i : ι) → AddCommMonoid (M i)] [(i : ι) → Module R (M i)] [AddCommMonoid N] {A : Type u_8} [Semiring A] [SMul R A] [(i : ι) → Module A (M i)] [Module A N] [Module R N] [∀ (i : ι), IsScalarTower R A (M i)] [IsScalarTower R A N] (f : (Π (i : ι), M i) →ₘₗ[A] N) :
                                  ⇑(restrictScalars R f) = ⇑f
                                  def MultilinearMap.domDomCongr {R : Type u_1} {S : Type u_2} [Semiring R] [Semiring S] {σ : R →+* S} {ι₁ : Type u_8} {ι₂ : Type u_9} {N₁ : Type u_11} {N₂ : Type u_12} [AddCommMonoid N₁] [AddCommMonoid N₂] [Module R N₁] [Module S N₂] (e : ι₁ ≃ ι₂) (m : (ι₁ → N₁) →ₘₛₗ[σ] N₂) :
                                  (ι₂ → N₁) →ₘₛₗ[σ] N₂

                                  Transfer the arguments to a map along an equivalence between argument indices.

                                  The naming is derived from Finsupp.domCongr, noting that here the permutation applies to the domain of the domain.

                                  Equations
                                  • MultilinearMap.domDomCongr e m = { toFun := fun (v : ι₂ → N₁) => m fun (i : ι₁) => v (e i), map_update_add' := ⋯, map_update_smul' := ⋯ }
                                  Instances For
                                    @[simp]
                                    theorem MultilinearMap.domDomCongr_apply {R : Type u_1} {S : Type u_2} [Semiring R] [Semiring S] {σ : R →+* S} {ι₁ : Type u_8} {ι₂ : Type u_9} {N₁ : Type u_11} {N₂ : Type u_12} [AddCommMonoid N₁] [AddCommMonoid N₂] [Module R N₁] [Module S N₂] (e : ι₁ ≃ ι₂) (m : (ι₁ → N₁) →ₘₛₗ[σ] N₂) (v : ι₂ → N₁) :
                                    (domDomCongr e m) v = m fun (i : ι₁) => v (e i)
                                    theorem MultilinearMap.domDomCongr_trans {R : Type u_1} {S : Type u_2} [Semiring R] [Semiring S] {σ : R →+* S} {ι₁ : Type u_8} {ι₂ : Type u_9} {ι₃ : Type u_10} {N₁ : Type u_11} {N₂ : Type u_12} [AddCommMonoid N₁] [AddCommMonoid N₂] [Module R N₁] [Module S N₂] (e : ι₁ ≃ ι₂) (e' : ι₂ ≃ ι₃) (m : (ι₁ → N₁) →ₘₛₗ[σ] N₂) :
                                    theorem MultilinearMap.domDomCongr_mul {R : Type u_1} {S : Type u_2} [Semiring R] [Semiring S] {σ : R →+* S} {ι₁ : Type u_8} {N₁ : Type u_11} {N₂ : Type u_12} [AddCommMonoid N₁] [AddCommMonoid N₂] [Module R N₁] [Module S N₂] (e e' : Equiv.Perm ι₁) (m : (ι₁ → N₁) →ₘₛₗ[σ] N₂) :
                                    def MultilinearMap.domDomCongrEquiv {R : Type u_1} {S : Type u_2} [Semiring R] [Semiring S] {σ : R →+* S} {ι₁ : Type u_8} {ι₂ : Type u_9} {N₁ : Type u_11} {N₂ : Type u_12} [AddCommMonoid N₁] [AddCommMonoid N₂] [Module R N₁] [Module S N₂] (e : ι₁ ≃ ι₂) :
                                    ((ι₁ → N₁) →ₘₛₗ[σ] N₂) ≃+ ((ι₂ → N₁) →ₘₛₗ[σ] N₂)

                                    MultilinearMap.domDomCongr as an equivalence.

                                    This is declared separately because it does not work with dot notation.

                                    Equations
                                    Instances For
                                      @[simp]
                                      theorem MultilinearMap.domDomCongrEquiv_symm_apply {R : Type u_1} {S : Type u_2} [Semiring R] [Semiring S] {σ : R →+* S} {ι₁ : Type u_8} {ι₂ : Type u_9} {N₁ : Type u_11} {N₂ : Type u_12} [AddCommMonoid N₁] [AddCommMonoid N₂] [Module R N₁] [Module S N₂] (e : ι₁ ≃ ι₂) (m : (ι₂ → N₁) →ₘₛₗ[σ] N₂) :
                                      @[simp]
                                      theorem MultilinearMap.domDomCongrEquiv_apply {R : Type u_1} {S : Type u_2} [Semiring R] [Semiring S] {σ : R →+* S} {ι₁ : Type u_8} {ι₂ : Type u_9} {N₁ : Type u_11} {N₂ : Type u_12} [AddCommMonoid N₁] [AddCommMonoid N₂] [Module R N₁] [Module S N₂] (e : ι₁ ≃ ι₂) (m : (ι₁ → N₁) →ₘₛₗ[σ] N₂) :
                                      @[simp]
                                      theorem MultilinearMap.domDomCongr_eq_iff {R : Type u_1} {S : Type u_2} [Semiring R] [Semiring S] {σ : R →+* S} {ι₁ : Type u_8} {ι₂ : Type u_9} {N₁ : Type u_11} {N₂ : Type u_12} [AddCommMonoid N₁] [AddCommMonoid N₂] [Module R N₁] [Module S N₂] (e : ι₁ ≃ ι₂) (f g : (ι₁ → N₁) →ₘₛₗ[σ] N₂) :

                                      The results of applying domDomCongr to two maps are equal if and only if those maps are.

                                      If {a // P a} is a subtype of ι and if we fix an element z of (i : {a // ¬ P a}) → M₁ i, then a multilinear map on M₁ defines a multilinear map on the restriction of M₁ to {a // P a}, by fixing the arguments out of {a // P a} equal to the values of z.

                                      theorem MultilinearMap.domDomRestrict_aux {ι : Sort u_9} [DecidableEq ι] (P : ι → Prop) [DecidablePred P] {M₁ : ι → Type u_8} [DecidableEq { a : ι // P a }] (x : (i : { a : ι // P a }) → M₁ ↑i) (z : (i : { a : ι // ¬P a }) → M₁ ↑i) (i : { a : ι // P a }) (c : M₁ ↑i) :
                                      (fun (j : ι) => if h : P j then Function.update x i c ⟨j, h⟩ else z ⟨j, h⟩) = Function.update (fun (j : ι) => if h : P j then x ⟨j, h⟩ else z ⟨j, h⟩) (↑i) c
                                      theorem MultilinearMap.domDomRestrict_aux_right {ι : Sort u_9} [DecidableEq ι] (P : ι → Prop) [DecidablePred P] {M₁ : ι → Type u_8} [DecidableEq { a : ι // ¬P a }] (x : (i : { a : ι // P a }) → M₁ ↑i) (z : (i : { a : ι // ¬P a }) → M₁ ↑i) (i : { a : ι // ¬P a }) (c : M₁ ↑i) :
                                      (fun (j : ι) => if h : P j then x ⟨j, h⟩ else Function.update z i c ⟨j, h⟩) = Function.update (fun (j : ι) => if h : P j then x ⟨j, h⟩ else z ⟨j, h⟩) (↑i) c
                                      def MultilinearMap.domDomRestrict {R : Type u_1} {S : Type u_2} [Semiring R] [Semiring S] {σ : R →+* S} {ι : Type u_4} {M : ι → Type u_5} {N : Type u_6} [(i : ι) → AddCommMonoid (M i)] [(i : ι) → Module R (M i)] [AddCommMonoid N] [Module S N] (f : (Π (i : ι), M i) →ₘₛₗ[σ] N) (P : ι → Prop) [DecidablePred P] (z : (i : { a : ι // ¬P a }) → M ↑i) :
                                      (Π (i : { a : ι // P a }), M ↑i) →ₘₛₗ[σ] N

                                      Given a multilinear map f on (i : ι) → M i, a (decidable) predicate P on ι and an element z of (i : {a // ¬ P a}) → M i, construct a multilinear map on (i : {a // P a}) → M i whose value at x is f evaluated at the vector with ith coordinate x i if P i and z i otherwise.

                                      The naming is similar to MultilinearMap.domDomCongr: here we are applying the restriction to the domain of the domain.

                                      For a linear map version, see MultilinearMap.domDomRestrictₗ.

                                      Equations
                                      • f.domDomRestrict P z = { toFun := fun (x : (i : { a : ι // P a }) → M ↑i) => f fun (j : ι) => if h : P j then x ⟨j, h⟩ else z ⟨j, h⟩, map_update_add' := ⋯, map_update_smul' := ⋯ }
                                      Instances For
                                        @[simp]
                                        theorem MultilinearMap.domDomRestrict_apply {R : Type u_1} {S : Type u_2} [Semiring R] [Semiring S] {σ : R →+* S} {ι : Type u_4} {M : ι → Type u_5} {N : Type u_6} [(i : ι) → AddCommMonoid (M i)] [(i : ι) → Module R (M i)] [AddCommMonoid N] [Module S N] (f : (Π (i : ι), M i) →ₘₛₗ[σ] N) (P : ι → Prop) [DecidablePred P] (x : (i : { a : ι // P a }) → M ↑i) (z : (i : { a : ι // ¬P a }) → M ↑i) :
                                        (f.domDomRestrict P z) x = f fun (j : ι) => if h : P j then x ⟨j, h⟩ else z ⟨j, h⟩
                                        def MultilinearMap.linearDeriv {R : Type u_1} {S : Type u_2} [Semiring R] [Semiring S] {σ : R →+* S} {ι : Type u_4} {M : ι → Type u_5} {N : Type u_6} [(i : ι) → AddCommMonoid (M i)] [(i : ι) → Module R (M i)] [AddCommMonoid N] [Module S N] [DecidableEq ι] [Fintype ι] (f : (Π (i : ι), M i) →ₘₛₗ[σ] N) (x : (i : ι) → M i) :
                                        ((i : ι) → M i) →ₛₗ[σ] N

                                        The "derivative" of a multilinear map, as a linear map from (i : ι) → M i to N. For continuous multilinear maps, this will indeed be the derivative.

                                        Equations
                                        Instances For
                                          @[simp]
                                          theorem MultilinearMap.linearDeriv_apply {R : Type u_1} {S : Type u_2} [Semiring R] [Semiring S] {σ : R →+* S} {ι : Type u_4} {M : ι → Type u_5} {N : Type u_6} [(i : ι) → AddCommMonoid (M i)] [(i : ι) → Module R (M i)] [AddCommMonoid N] [Module S N] [DecidableEq ι] [Fintype ι] (f : (Π (i : ι), M i) →ₘₛₗ[σ] N) (x y : (i : ι) → M i) :
                                          (f.linearDeriv x) y = ∑ i : ι, f (Function.update x i (y i))
                                          def LinearMap.compMultilinearMap {R₁ : Type u_1} {R₂ : Type u_2} {R₃ : Type u_3} [Semiring R₁] [Semiring R₂] [Semiring R₃] {σ₁₂ : R₁ →+* R₂} {σ₂₃ : R₂ →+* R₃} {σ₁₃ : R₁ →+* R₃} [RingHomCompTriple σ₁₂ σ₂₃ σ₁₃] {ι : Type u_6} {M₁ : ι → Type u_7} {N₂ : Type u_9} {N₃ : Type u_11} [(i : ι) → AddCommMonoid (M₁ i)] [AddCommMonoid N₂] [AddCommMonoid N₃] [(i : ι) → Module R₁ (M₁ i)] [Module R₂ N₂] [Module R₃ N₃] (g : N₂ →ₛₗ[σ₂₃] N₃) (f : (Π (i : ι), M₁ i) →ₘₛₗ[σ₁₂] N₂) :
                                          (Π (i : ι), M₁ i) →ₘₛₗ[σ₁₃] N₃

                                          Composing a multilinear map with a linear map gives again a multilinear map.

                                          Equations
                                          Instances For
                                            @[simp]
                                            theorem LinearMap.coe_compMultilinearMap {R₁ : Type u_1} {R₂ : Type u_2} {R₃ : Type u_3} [Semiring R₁] [Semiring R₂] [Semiring R₃] {σ₁₂ : R₁ →+* R₂} {σ₂₃ : R₂ →+* R₃} {σ₁₃ : R₁ →+* R₃} [RingHomCompTriple σ₁₂ σ₂₃ σ₁₃] {ι : Type u_6} {M₁ : ι → Type u_7} {N₂ : Type u_9} {N₃ : Type u_11} [(i : ι) → AddCommMonoid (M₁ i)] [AddCommMonoid N₂] [AddCommMonoid N₃] [(i : ι) → Module R₁ (M₁ i)] [Module R₂ N₂] [Module R₃ N₃] (g : N₂ →ₛₗ[σ₂₃] N₃) (f : (Π (i : ι), M₁ i) →ₘₛₗ[σ₁₂] N₂) :
                                            ⇑(g.compMultilinearMap f) = ⇑g ∘ ⇑f
                                            @[simp]
                                            theorem LinearMap.compMultilinearMap_apply {R₁ : Type u_1} {R₂ : Type u_2} {R₃ : Type u_3} [Semiring R₁] [Semiring R₂] [Semiring R₃] {σ₁₂ : R₁ →+* R₂} {σ₂₃ : R₂ →+* R₃} {σ₁₃ : R₁ →+* R₃} [RingHomCompTriple σ₁₂ σ₂₃ σ₁₃] {ι : Type u_6} {M₁ : ι → Type u_7} {N₂ : Type u_9} {N₃ : Type u_11} [(i : ι) → AddCommMonoid (M₁ i)] [AddCommMonoid N₂] [AddCommMonoid N₃] [(i : ι) → Module R₁ (M₁ i)] [Module R₂ N₂] [Module R₃ N₃] (g : N₂ →ₛₗ[σ₂₃] N₃) (f : (Π (i : ι), M₁ i) →ₘₛₗ[σ₁₂] N₂) (m : (i : ι) → M₁ i) :
                                            (g.compMultilinearMap f) m = g (f m)
                                            @[simp]
                                            theorem LinearMap.id_compMultilinearMap {R₁ : Type u_1} {R₂ : Type u_2} [Semiring R₁] [Semiring R₂] {σ₁₂ : R₁ →+* R₂} {ι : Type u_6} {M₁ : ι → Type u_7} {N₂ : Type u_9} [(i : ι) → AddCommMonoid (M₁ i)] [AddCommMonoid N₂] [(i : ι) → Module R₁ (M₁ i)] [Module R₂ N₂] (f : (Π (i : ι), M₁ i) →ₘₛₗ[σ₁₂] N₂) :
                                            theorem LinearMap.comp_compMultilinearMap {R₁ : Type u_1} {R₂ : Type u_2} {R₃ : Type u_3} {R₄ : Type u_4} [Semiring R₁] [Semiring R₂] [Semiring R₃] [Semiring R₄] {σ₁₂ : R₁ →+* R₂} {σ₂₃ : R₂ →+* R₃} {σ₁₃ : R₁ →+* R₃} {σ₃₄ : R₃ →+* R₄} {σ₂₄ : R₂ →+* R₄} {σ₁₄ : R₁ →+* R₄} [RingHomCompTriple σ₁₂ σ₂₃ σ₁₃] [RingHomCompTriple σ₁₃ σ₃₄ σ₁₄] [RingHomCompTriple σ₂₃ σ₃₄ σ₂₄] [RingHomCompTriple σ₁₂ σ₂₄ σ₁₄] {ι : Type u_6} {M₁ : ι → Type u_7} {N₂ : Type u_9} {N₃ : Type u_11} {N₄ : Type u_12} [(i : ι) → AddCommMonoid (M₁ i)] [AddCommMonoid N₂] [AddCommMonoid N₃] [AddCommMonoid N₄] [(i : ι) → Module R₁ (M₁ i)] [Module R₂ N₂] [Module R₃ N₃] [Module R₄ N₄] (g : N₃ →ₛₗ[σ₃₄] N₄) (g' : N₂ →ₛₗ[σ₂₃] N₃) (f : (Π (i : ι), M₁ i) →ₘₛₗ[σ₁₂] N₂) :
                                            theorem LinearMap.compMultilinearMap_compLinearMap {R₁ : Type u_1} {R₂ : Type u_2} {R₃ : Type u_3} {R₄ : Type u_4} [Semiring R₁] [Semiring R₂] [Semiring R₃] [Semiring R₄] {σ₁₂ : R₁ →+* R₂} {σ₂₃ : R₂ →+* R₃} {σ₁₃ : R₁ →+* R₃} {σ₃₄ : R₃ →+* R₄} {σ₂₄ : R₂ →+* R₄} {σ₁₄ : R₁ →+* R₄} [RingHomCompTriple σ₁₂ σ₂₃ σ₁₃] [RingHomCompTriple σ₁₃ σ₃₄ σ₁₄] [RingHomCompTriple σ₂₃ σ₃₄ σ₂₄] [RingHomCompTriple σ₁₂ σ₂₄ σ₁₄] {ι : Type u_6} {M₁ : ι → Type u_7} {M₂ : ι → Type u_8} {N₃ : Type u_11} {N₄ : Type u_12} [(i : ι) → AddCommMonoid (M₁ i)] [(i : ι) → AddCommMonoid (M₂ i)] [AddCommMonoid N₃] [AddCommMonoid N₄] [(i : ι) → Module R₁ (M₁ i)] [(i : ι) → Module R₂ (M₂ i)] [Module R₃ N₃] [Module R₄ N₄] (g : N₃ →ₛₗ[σ₃₄] N₄) (f : (Π (i : ι), M₂ i) →ₘₛₗ[σ₂₃] N₃) (f' : (i : ι) → M₁ i →ₛₗ[σ₁₂] M₂ i) :

                                            The two types of composition are associative.

                                            @[simp]
                                            theorem LinearMap.compMultilinearMap_zero {R₁ : Type u_1} {R₂ : Type u_2} {R₃ : Type u_3} [Semiring R₁] [Semiring R₂] [Semiring R₃] {σ₁₂ : R₁ →+* R₂} {σ₂₃ : R₂ →+* R₃} {σ₁₃ : R₁ →+* R₃} [RingHomCompTriple σ₁₂ σ₂₃ σ₁₃] {ι : Type u_6} {M₁ : ι → Type u_7} {N₂ : Type u_9} {N₃ : Type u_11} [(i : ι) → AddCommMonoid (M₁ i)] [AddCommMonoid N₂] [AddCommMonoid N₃] [(i : ι) → Module R₁ (M₁ i)] [Module R₂ N₂] [Module R₃ N₃] (g : N₂ →ₛₗ[σ₂₃] N₃) :
                                            @[simp]
                                            theorem LinearMap.zero_compMultilinearMap {R₁ : Type u_1} {R₂ : Type u_2} {R₃ : Type u_3} [Semiring R₁] [Semiring R₂] [Semiring R₃] {σ₁₂ : R₁ →+* R₂} {σ₂₃ : R₂ →+* R₃} {σ₁₃ : R₁ →+* R₃} [RingHomCompTriple σ₁₂ σ₂₃ σ₁₃] {ι : Type u_6} {M₁ : ι → Type u_7} {N₂ : Type u_9} {N₃ : Type u_11} [(i : ι) → AddCommMonoid (M₁ i)] [AddCommMonoid N₂] [AddCommMonoid N₃] [(i : ι) → Module R₁ (M₁ i)] [Module R₂ N₂] [Module R₃ N₃] (f : (Π (i : ι), M₁ i) →ₘₛₗ[σ₁₂] N₂) :
                                            @[simp]
                                            theorem LinearMap.compMultilinearMap_add {R₁ : Type u_1} {R₂ : Type u_2} {R₃ : Type u_3} [Semiring R₁] [Semiring R₂] [Semiring R₃] {σ₁₂ : R₁ →+* R₂} {σ₂₃ : R₂ →+* R₃} {σ₁₃ : R₁ →+* R₃} [RingHomCompTriple σ₁₂ σ₂₃ σ₁₃] {ι : Type u_6} {M₁ : ι → Type u_7} {N₂ : Type u_9} {N₃ : Type u_11} [(i : ι) → AddCommMonoid (M₁ i)] [AddCommMonoid N₂] [AddCommMonoid N₃] [(i : ι) → Module R₁ (M₁ i)] [Module R₂ N₂] [Module R₃ N₃] (g : N₂ →ₛₗ[σ₂₃] N₃) (f₁ f₂ : (Π (i : ι), M₁ i) →ₘₛₗ[σ₁₂] N₂) :
                                            @[simp]
                                            theorem LinearMap.add_compMultilinearMap {R₁ : Type u_1} {R₂ : Type u_2} {R₃ : Type u_3} [Semiring R₁] [Semiring R₂] [Semiring R₃] {σ₁₂ : R₁ →+* R₂} {σ₂₃ : R₂ →+* R₃} {σ₁₃ : R₁ →+* R₃} [RingHomCompTriple σ₁₂ σ₂₃ σ₁₃] {ι : Type u_6} {M₁ : ι → Type u_7} {N₂ : Type u_9} {N₃ : Type u_11} [(i : ι) → AddCommMonoid (M₁ i)] [AddCommMonoid N₂] [AddCommMonoid N₃] [(i : ι) → Module R₁ (M₁ i)] [Module R₂ N₂] [Module R₃ N₃] (g₁ g₂ : N₂ →ₛₗ[σ₂₃] N₃) (f : (Π (i : ι), M₁ i) →ₘₛₗ[σ₁₂] N₂) :
                                            @[simp]
                                            theorem LinearMap.compMultilinearMap_smul {R₁ : Type u_1} {R₂ : Type u_2} {S : Type u_5} [Semiring R₁] [Semiring R₂] {σ₁₂ : R₁ →+* R₂} {ι : Type u_6} {M₁ : ι → Type u_7} {N₂ : Type u_9} {N₂' : Type u_10} [(i : ι) → AddCommMonoid (M₁ i)] [AddCommMonoid N₂] [AddCommMonoid N₂'] [(i : ι) → Module R₁ (M₁ i)] [Module R₂ N₂] [Module R₂ N₂'] [DistribSMul S N₂] [DistribSMul S N₂'] [SMulCommClass R₂ S N₂] [SMulCommClass R₂ S N₂'] [CompatibleSMul N₂ N₂' S R₂] (g : N₂ →ₗ[R₂] N₂') (s : S) (f : (Π (i : ι), M₁ i) →ₘₛₗ[σ₁₂] N₂) :
                                            @[simp]
                                            theorem LinearMap.compMultilinearMap_smulₛₗ {R₁ : Type u_1} {R₂ : Type u_2} {R₃ : Type u_3} [Semiring R₁] [Semiring R₂] [Semiring R₃] {σ₁₂ : R₁ →+* R₂} {σ₂₃ : R₂ →+* R₃} {σ₁₃ : R₁ →+* R₃} [RingHomCompTriple σ₁₂ σ₂₃ σ₁₃] {ι : Type u_6} {M₁ : ι → Type u_7} {N₂ : Type u_9} {N₃ : Type u_11} [(i : ι) → AddCommMonoid (M₁ i)] [AddCommMonoid N₂] [AddCommMonoid N₃] [(i : ι) → Module R₁ (M₁ i)] [Module R₂ N₂] [Module R₃ N₃] [SMulCommClass R₂ R₂ N₂] [SMulCommClass R₃ R₃ N₃] (g : N₂ →ₛₗ[σ₂₃] N₃) (r : R₂) (f : (Π (i : ι), M₁ i) →ₘₛₗ[σ₁₂] N₂) :
                                            @[simp]
                                            theorem LinearMap.smul_compMultilinearMap {R₁ : Type u_1} {R₂ : Type u_2} {R₃ : Type u_3} {S : Type u_5} [Semiring R₁] [Semiring R₂] [Semiring R₃] {σ₁₂ : R₁ →+* R₂} {σ₂₃ : R₂ →+* R₃} {σ₁₃ : R₁ →+* R₃} [RingHomCompTriple σ₁₂ σ₂₃ σ₁₃] {ι : Type u_6} {M₁ : ι → Type u_7} {N₂ : Type u_9} {N₃ : Type u_11} [(i : ι) → AddCommMonoid (M₁ i)] [AddCommMonoid N₂] [AddCommMonoid N₃] [(i : ι) → Module R₁ (M₁ i)] [Module R₂ N₂] [Module R₃ N₃] [Monoid S] [DistribMulAction S N₃] [SMulCommClass R₃ S N₃] (g : N₂ →ₛₗ[σ₂₃] N₃) (s : S) (f : (Π (i : ι), M₁ i) →ₘₛₗ[σ₁₂] N₂) :
                                            @[simp]
                                            theorem LinearMap.subtype_compMultilinearMap_codRestrict {R₁ : Type u_1} {R₂ : Type u_2} [Semiring R₁] [Semiring R₂] {σ₁₂ : R₁ →+* R₂} {ι : Type u_6} {M₁ : ι → Type u_7} {N₂ : Type u_9} [(i : ι) → AddCommMonoid (M₁ i)] [AddCommMonoid N₂] [(i : ι) → Module R₁ (M₁ i)] [Module R₂ N₂] (f : (Π (i : ι), M₁ i) →ₘₛₗ[σ₁₂] N₂) (p : Submodule R₂ N₂) (h : ∀ (v : (i : ι) → M₁ i), f v ∈ p) :

                                            The multilinear version of LinearMap.subtype_comp_codRestrict

                                            @[simp]
                                            theorem LinearMap.compMultilinearMap_codRestrict {R₁ : Type u_1} {R₂ : Type u_2} {R₃ : Type u_3} [Semiring R₁] [Semiring R₂] [Semiring R₃] {σ₁₂ : R₁ →+* R₂} {σ₂₃ : R₂ →+* R₃} {σ₁₃ : R₁ →+* R₃} [RingHomCompTriple σ₁₂ σ₂₃ σ₁₃] {ι : Type u_6} {M₁ : ι → Type u_7} {N₂ : Type u_9} {N₃ : Type u_11} [(i : ι) → AddCommMonoid (M₁ i)] [AddCommMonoid N₂] [AddCommMonoid N₃] [(i : ι) → Module R₁ (M₁ i)] [Module R₂ N₂] [Module R₃ N₃] (g : N₂ →ₛₗ[σ₂₃] N₃) (f : (Π (i : ι), M₁ i) →ₘₛₗ[σ₁₂] N₂) (p : Submodule R₃ N₃) (h : ∀ (c : N₂), g c ∈ p) :

                                            The multilinear version of LinearMap.comp_codRestrict

                                            @[simp]
                                            theorem LinearMap.compMultilinearMap_domDomCongr {R₂ : Type u_2} {R₃ : Type u_3} {R₄ : Type u_4} [Semiring R₂] [Semiring R₃] [Semiring R₄] {σ₂₃ : R₂ →+* R₃} {σ₃₄ : R₃ →+* R₄} {σ₂₄ : R₂ →+* R₄} [RingHomCompTriple σ₂₃ σ₃₄ σ₂₄] {N₂ : Type u_9} {N₃ : Type u_11} {N₄ : Type u_12} [AddCommMonoid N₂] [AddCommMonoid N₃] [AddCommMonoid N₄] [Module R₂ N₂] [Module R₃ N₃] [Module R₄ N₄] {ι₁ : Type u_13} {ι₂ : Type u_14} (e : ι₁ ≃ ι₂) (g : N₃ →ₛₗ[σ₃₄] N₄) (f : (ι₁ → N₂) →ₘₛₗ[σ₂₃] N₃) :
                                            @[instance_reducible]
                                            instance MultilinearMap.instDistribMulActionOfSMulCommClass {R₁ : Type u_1} {R₂ : Type u_2} {S : Type u_5} [Semiring R₁] [Semiring R₂] {σ₁₂ : R₁ →+* R₂} {ι : Type u_6} {M₁ : ι → Type u_7} {N₂ : Type u_9} [(i : ι) → AddCommMonoid (M₁ i)] [AddCommMonoid N₂] [(i : ι) → Module R₁ (M₁ i)] [Module R₂ N₂] [Monoid S] [DistribMulAction S N₂] [SMulCommClass R₂ S N₂] :
                                            DistribMulAction S ((Π (i : ι), M₁ i) →ₘₛₗ[σ₁₂] N₂)
                                            Equations
                                            @[instance_reducible]
                                            instance MultilinearMap.instModule {R₁ : Type u_1} {R₂ : Type u_2} {S : Type u_5} [Semiring R₁] [Semiring R₂] {σ₁₂ : R₁ →+* R₂} {ι : Type u_6} {M₁ : ι → Type u_7} {N₂ : Type u_9} [(i : ι) → AddCommMonoid (M₁ i)] [AddCommMonoid N₂] [(i : ι) → Module R₁ (M₁ i)] [Module R₂ N₂] [Semiring S] [Module S N₂] [SMulCommClass R₂ S N₂] :
                                            Module S ((Π (i : ι), M₁ i) →ₘₛₗ[σ₁₂] N₂)

                                            The space of multilinear maps over an algebra over R₂ is a module over S, for the pointwise addition and scalar multiplication.

                                            Equations
                                            instance MultilinearMap.instIsTorsionFree {R₁ : Type u_1} {R₂ : Type u_2} {S : Type u_5} [Semiring R₁] [Semiring R₂] {σ₁₂ : R₁ →+* R₂} {ι : Type u_6} {M₁ : ι → Type u_7} {N₂ : Type u_9} [(i : ι) → AddCommMonoid (M₁ i)] [AddCommMonoid N₂] [(i : ι) → Module R₁ (M₁ i)] [Module R₂ N₂] [Semiring S] [Module S N₂] [SMulCommClass R₂ S N₂] [Module.IsTorsionFree S N₂] :
                                            Module.IsTorsionFree S ((Π (i : ι), M₁ i) →ₘₛₗ[σ₁₂] N₂)
                                            def LinearMap.compMultilinearMapₗ {R₁ : Type u_1} {R₂ : Type u_2} (S : Type u_5) [Semiring R₁] [Semiring R₂] {σ₁₂ : R₁ →+* R₂} {ι : Type u_6} {M₁ : ι → Type u_7} {N₂ : Type u_9} {N₂' : Type u_10} [(i : ι) → AddCommMonoid (M₁ i)] [AddCommMonoid N₂] [AddCommMonoid N₂'] [(i : ι) → Module R₁ (M₁ i)] [Module R₂ N₂] [Module R₂ N₂'] [Semiring S] [Module S N₂] [SMulCommClass R₂ S N₂] [Module S N₂'] [SMulCommClass R₂ S N₂'] [CompatibleSMul N₂ N₂' S R₂] (g : N₂ →ₗ[R₂] N₂') :
                                            ((Π (i : ι), M₁ i) →ₘₛₗ[σ₁₂] N₂) →ₗ[S] (Π (i : ι), M₁ i) →ₘₛₗ[σ₁₂] N₂'

                                            LinearMap.compMultilinearMap as an S-linear map.

                                            Equations
                                            Instances For
                                              @[simp]
                                              theorem LinearMap.compMultilinearMapₗ_apply {R₁ : Type u_1} {R₂ : Type u_2} (S : Type u_5) [Semiring R₁] [Semiring R₂] {σ₁₂ : R₁ →+* R₂} {ι : Type u_6} {M₁ : ι → Type u_7} {N₂ : Type u_9} {N₂' : Type u_10} [(i : ι) → AddCommMonoid (M₁ i)] [AddCommMonoid N₂] [AddCommMonoid N₂'] [(i : ι) → Module R₁ (M₁ i)] [Module R₂ N₂] [Module R₂ N₂'] [Semiring S] [Module S N₂] [SMulCommClass R₂ S N₂] [Module S N₂'] [SMulCommClass R₂ S N₂'] [CompatibleSMul N₂ N₂' S R₂] (g : N₂ →ₗ[R₂] N₂') (f : (Π (i : ι), M₁ i) →ₘₛₗ[σ₁₂] N₂) :
                                              def LinearEquiv.multilinearMapCongrRight {R₁ : Type u_1} {R₂ : Type u_2} (S : Type u_5) [Semiring R₁] [Semiring R₂] {σ₁₂ : R₁ →+* R₂} {ι : Type u_6} {M₁ : ι → Type u_7} {N₂ : Type u_9} {N₂' : Type u_10} [(i : ι) → AddCommMonoid (M₁ i)] [AddCommMonoid N₂] [AddCommMonoid N₂'] [(i : ι) → Module R₁ (M₁ i)] [Module R₂ N₂] [Module R₂ N₂'] [Semiring S] [Module S N₂] [SMulCommClass R₂ S N₂] [Module S N₂'] [SMulCommClass R₂ S N₂'] [LinearMap.CompatibleSMul N₂ N₂' S R₂] [LinearMap.CompatibleSMul N₂' N₂ S R₂] (g : N₂ ≃ₗ[R₂] N₂') :
                                              ((Π (i : ι), M₁ i) →ₘₛₗ[σ₁₂] N₂) ≃ₗ[S] (Π (i : ι), M₁ i) →ₘₛₗ[σ₁₂] N₂'

                                              An isomorphism of multilinear maps given an isomorphism between their codomains.

                                              This is LinearMap.compMultilinearMap as an S-linear equivalence, and a multilinear version of LinearEquiv.congrRight.

                                              Equations
                                              Instances For
                                                @[simp]
                                                theorem LinearEquiv.multilinearMapCongrRight_symm_apply {R₁ : Type u_1} {R₂ : Type u_2} (S : Type u_5) [Semiring R₁] [Semiring R₂] {σ₁₂ : R₁ →+* R₂} {ι : Type u_6} {M₁ : ι → Type u_7} {N₂ : Type u_9} {N₂' : Type u_10} [(i : ι) → AddCommMonoid (M₁ i)] [AddCommMonoid N₂] [AddCommMonoid N₂'] [(i : ι) → Module R₁ (M₁ i)] [Module R₂ N₂] [Module R₂ N₂'] [Semiring S] [Module S N₂] [SMulCommClass R₂ S N₂] [Module S N₂'] [SMulCommClass R₂ S N₂'] [LinearMap.CompatibleSMul N₂ N₂' S R₂] [LinearMap.CompatibleSMul N₂' N₂ S R₂] (g : N₂ ≃ₗ[R₂] N₂') (a : (Π (i : ι), M₁ i) →ₘₛₗ[σ₁₂] N₂') :
                                                @[simp]
                                                theorem LinearEquiv.multilinearMapCongrRight_apply {R₁ : Type u_1} {R₂ : Type u_2} (S : Type u_5) [Semiring R₁] [Semiring R₂] {σ₁₂ : R₁ →+* R₂} {ι : Type u_6} {M₁ : ι → Type u_7} {N₂ : Type u_9} {N₂' : Type u_10} [(i : ι) → AddCommMonoid (M₁ i)] [AddCommMonoid N₂] [AddCommMonoid N₂'] [(i : ι) → Module R₁ (M₁ i)] [Module R₂ N₂] [Module R₂ N₂'] [Semiring S] [Module S N₂] [SMulCommClass R₂ S N₂] [Module S N₂'] [SMulCommClass R₂ S N₂'] [LinearMap.CompatibleSMul N₂ N₂' S R₂] [LinearMap.CompatibleSMul N₂' N₂ S R₂] (g : N₂ ≃ₗ[R₂] N₂') (f : (Π (i : ι), M₁ i) →ₘₛₗ[σ₁₂] N₂) :
                                                def MultilinearMap.ofSubsingletonₗ {R₁ : Type u_1} {R₂ : Type u_2} (S : Type u_5) [Semiring R₁] [Semiring R₂] (σ₁₂ : R₁ →+* R₂) {ι : Type u_6} (N₁ : Type u_8) (N₂ : Type u_9) [AddCommMonoid N₁] [AddCommMonoid N₂] [Module R₁ N₁] [Module R₂ N₂] [Semiring S] [Module S N₂] [SMulCommClass R₂ S N₂] [Subsingleton ι] (i : ι) :
                                                (N₁ →ₛₗ[σ₁₂] N₂) ≃ₗ[S] (ι → N₁) →ₘₛₗ[σ₁₂] N₂

                                                Linear equivalence between linear maps N₁ →ₛₗ[σ₁₂] N₂ and one-multilinear maps (ι → N₁) →ₘₛₗ[σ₁₂] N₂.

                                                Equations
                                                • One or more equations did not get rendered due to their size.
                                                Instances For
                                                  @[simp]
                                                  theorem MultilinearMap.ofSubsingletonₗ_apply {R₁ : Type u_1} {R₂ : Type u_2} (S : Type u_5) [Semiring R₁] [Semiring R₂] (σ₁₂ : R₁ →+* R₂) {ι : Type u_6} (N₁ : Type u_8) (N₂ : Type u_9) [AddCommMonoid N₁] [AddCommMonoid N₂] [Module R₁ N₁] [Module R₂ N₂] [Semiring S] [Module S N₂] [SMulCommClass R₂ S N₂] [Subsingleton ι] (i : ι) (a✝ : N₁ →ₛₗ[σ₁₂] N₂) :
                                                  (ofSubsingletonₗ S σ₁₂ N₁ N₂ i) a✝ = (ofSubsingleton σ₁₂ N₁ N₂ i) a✝
                                                  @[simp]
                                                  theorem MultilinearMap.ofSubsingletonₗ_symm_apply {R₁ : Type u_1} {R₂ : Type u_2} (S : Type u_5) [Semiring R₁] [Semiring R₂] (σ₁₂ : R₁ →+* R₂) {ι : Type u_6} (N₁ : Type u_8) (N₂ : Type u_9) [AddCommMonoid N₁] [AddCommMonoid N₂] [Module R₁ N₁] [Module R₂ N₂] [Semiring S] [Module S N₂] [SMulCommClass R₂ S N₂] [Subsingleton ι] (i : ι) (a✝ : (ι → N₁) →ₘₛₗ[σ₁₂] N₂) :
                                                  (ofSubsingletonₗ S σ₁₂ N₁ N₂ i).symm a✝ = (ofSubsingleton σ₁₂ N₁ N₂ i).symm a✝
                                                  def MultilinearMap.domDomCongrLinearEquiv' {R₁ : Type u_1} {R₂ : Type u_2} (S : Type u_5) [Semiring R₁] [Semiring R₂] (σ₁₂ : R₁ →+* R₂) {ι : Type u_6} (M₁ : ι → Type u_7) (N₂ : Type u_9) [(i : ι) → AddCommMonoid (M₁ i)] [AddCommMonoid N₂] [(i : ι) → Module R₁ (M₁ i)] [Module R₂ N₂] [Semiring S] [Module S N₂] [SMulCommClass R₂ S N₂] {ι' : Type u_11} (e : ι ≃ ι') :
                                                  ((Π (i : ι), M₁ i) →ₘₛₗ[σ₁₂] N₂) ≃ₗ[S] (Π (i : ι'), M₁ (e.symm i)) →ₘₛₗ[σ₁₂] N₂

                                                  The dependent version of MultilinearMap.domDomCongrLinearEquiv.

                                                  Equations
                                                  • One or more equations did not get rendered due to their size.
                                                  Instances For
                                                    @[simp]
                                                    theorem MultilinearMap.domDomCongrLinearEquiv'_symm_apply {R₁ : Type u_1} {R₂ : Type u_2} (S : Type u_5) [Semiring R₁] [Semiring R₂] (σ₁₂ : R₁ →+* R₂) {ι : Type u_6} (M₁ : ι → Type u_7) (N₂ : Type u_9) [(i : ι) → AddCommMonoid (M₁ i)] [AddCommMonoid N₂] [(i : ι) → Module R₁ (M₁ i)] [Module R₂ N₂] [Semiring S] [Module S N₂] [SMulCommClass R₂ S N₂] {ι' : Type u_11} (e : ι ≃ ι') (f : (Π (i : ι'), M₁ (e.symm i)) →ₘₛₗ[σ₁₂] N₂) :
                                                    (domDomCongrLinearEquiv' S σ₁₂ M₁ N₂ e).symm f = { toFun := ⇑f ∘ ⇑(Equiv.piCongrLeft' M₁ e), map_update_add' := ⋯, map_update_smul' := ⋯ }
                                                    @[simp]
                                                    theorem MultilinearMap.domDomCongrLinearEquiv'_apply {R₁ : Type u_1} {R₂ : Type u_2} (S : Type u_5) [Semiring R₁] [Semiring R₂] (σ₁₂ : R₁ →+* R₂) {ι : Type u_6} (M₁ : ι → Type u_7) (N₂ : Type u_9) [(i : ι) → AddCommMonoid (M₁ i)] [AddCommMonoid N₂] [(i : ι) → Module R₁ (M₁ i)] [Module R₂ N₂] [Semiring S] [Module S N₂] [SMulCommClass R₂ S N₂] {ι' : Type u_11} (e : ι ≃ ι') (f : (Π (i : ι), M₁ i) →ₘₛₗ[σ₁₂] N₂) :
                                                    (domDomCongrLinearEquiv' S σ₁₂ M₁ N₂ e) f = { toFun := ⇑f ∘ ⇑(Equiv.piCongrLeft' M₁ e).symm, map_update_add' := ⋯, map_update_smul' := ⋯ }
                                                    def MultilinearMap.constLinearEquivOfIsEmpty {R₁ : Type u_1} {R₂ : Type u_2} (S : Type u_5) [Semiring R₁] [Semiring R₂] (σ₁₂ : R₁ →+* R₂) {ι : Type u_6} (M₁ : ι → Type u_7) (N₂ : Type u_9) [(i : ι) → AddCommMonoid (M₁ i)] [AddCommMonoid N₂] [(i : ι) → Module R₁ (M₁ i)] [Module R₂ N₂] [Semiring S] [Module S N₂] [SMulCommClass R₂ S N₂] [IsEmpty ι] :
                                                    N₂ ≃ₗ[S] (Π (i : ι), M₁ i) →ₘₛₗ[σ₁₂] N₂

                                                    The space of constant maps is equivalent to the space of maps that are multilinear with respect to an empty family.

                                                    Equations
                                                    • One or more equations did not get rendered due to their size.
                                                    Instances For
                                                      @[simp]
                                                      theorem MultilinearMap.constLinearEquivOfIsEmpty_symm_apply {R₁ : Type u_1} {R₂ : Type u_2} (S : Type u_5) [Semiring R₁] [Semiring R₂] (σ₁₂ : R₁ →+* R₂) {ι : Type u_6} (M₁ : ι → Type u_7) (N₂ : Type u_9) [(i : ι) → AddCommMonoid (M₁ i)] [AddCommMonoid N₂] [(i : ι) → Module R₁ (M₁ i)] [Module R₂ N₂] [Semiring S] [Module S N₂] [SMulCommClass R₂ S N₂] [IsEmpty ι] (f : (Π (i : ι), M₁ i) →ₘₛₗ[σ₁₂] N₂) :
                                                      (constLinearEquivOfIsEmpty S σ₁₂ M₁ N₂).symm f = f 0
                                                      @[simp]
                                                      theorem MultilinearMap.constLinearEquivOfIsEmpty_apply {R₁ : Type u_1} {R₂ : Type u_2} (S : Type u_5) [Semiring R₁] [Semiring R₂] (σ₁₂ : R₁ →+* R₂) {ι : Type u_6} (M₁ : ι → Type u_7) (N₂ : Type u_9) [(i : ι) → AddCommMonoid (M₁ i)] [AddCommMonoid N₂] [(i : ι) → Module R₁ (M₁ i)] [Module R₂ N₂] [Semiring S] [Module S N₂] [SMulCommClass R₂ S N₂] [IsEmpty ι] (m : N₂) :
                                                      (constLinearEquivOfIsEmpty S σ₁₂ M₁ N₂) m = constOfIsEmpty σ₁₂ M₁ m
                                                      def MultilinearMap.domDomCongrLinearEquiv {R₁ : Type u_1} {R₂ : Type u_2} (S : Type u_5) [Semiring R₁] [Semiring R₂] (σ₁₂ : R₁ →+* R₂) (N₁ : Type u_8) (N₂ : Type u_9) [AddCommMonoid N₁] [AddCommMonoid N₂] [Module R₁ N₁] [Module R₂ N₂] [Semiring S] [Module S N₂] [SMulCommClass R₂ S N₂] {ι₁ : Type u_11} {ι₂ : Type u_12} (e : ι₁ ≃ ι₂) :
                                                      ((ι₁ → N₁) →ₘₛₗ[σ₁₂] N₂) ≃ₗ[S] (ι₂ → N₁) →ₘₛₗ[σ₁₂] N₂

                                                      MultilinearMap.domDomCongr as a LinearEquiv.

                                                      Equations
                                                      • One or more equations did not get rendered due to their size.
                                                      Instances For
                                                        @[simp]
                                                        theorem MultilinearMap.domDomCongrLinearEquiv_apply {R₁ : Type u_1} {R₂ : Type u_2} (S : Type u_5) [Semiring R₁] [Semiring R₂] (σ₁₂ : R₁ →+* R₂) (N₁ : Type u_8) (N₂ : Type u_9) [AddCommMonoid N₁] [AddCommMonoid N₂] [Module R₁ N₁] [Module R₂ N₂] [Semiring S] [Module S N₂] [SMulCommClass R₂ S N₂] {ι₁ : Type u_11} {ι₂ : Type u_12} (e : ι₁ ≃ ι₂) (a✝ : (ι₁ → N₁) →ₘₛₗ[σ₁₂] N₂) :
                                                        (domDomCongrLinearEquiv S σ₁₂ N₁ N₂ e) a✝ = (domDomCongrEquiv e).toFun a✝
                                                        @[simp]
                                                        theorem MultilinearMap.domDomCongrLinearEquiv_symm_apply {R₁ : Type u_1} {R₂ : Type u_2} (S : Type u_5) [Semiring R₁] [Semiring R₂] (σ₁₂ : R₁ →+* R₂) (N₁ : Type u_8) (N₂ : Type u_9) [AddCommMonoid N₁] [AddCommMonoid N₂] [Module R₁ N₁] [Module R₂ N₂] [Semiring S] [Module S N₂] [SMulCommClass R₂ S N₂] {ι₁ : Type u_11} {ι₂ : Type u_12} (e : ι₁ ≃ ι₂) (a✝ : (ι₂ → N₁) →ₘₛₗ[σ₁₂] N₂) :
                                                        (domDomCongrLinearEquiv S σ₁₂ N₁ N₂ e).symm a✝ = (domDomCongrEquiv e).invFun a✝
                                                        def MultilinearMap.domDomRestrictₗ {R₂ : Type u_2} {R₃ : Type u_3} [Semiring R₂] [CommSemiring R₃] {σ₂₃ : R₂ →+* R₃} {ι : Type u_4} {M₂ : ι → Type u_6} {N₃ : Type u_7} [(i : ι) → AddCommMonoid (M₂ i)] [AddCommMonoid N₃] [(i : ι) → Module R₂ (M₂ i)] [Module R₃ N₃] (f : (Π (i : ι), M₂ i) →ₘₛₗ[σ₂₃] N₃) (P : ι → Prop) [DecidablePred P] :
                                                        (Π (i : { a : ι // ¬P a }), M₂ ↑i) →ₘₛₗ[σ₂₃] (Π (i : { a : ι // P a }), M₂ ↑i) →ₘₛₗ[σ₂₃] N₃

                                                        Given a predicate P, one may associate to a multilinear map f a multilinear map from the elements satisfying P to the multilinear maps on elements not satisfying P. In other words, splitting the variables into two subsets one gets a multilinear map into multilinear maps. This is a linear map version of the function MultilinearMap.domDomRestrict.

                                                        Equations
                                                        Instances For
                                                          theorem MultilinearMap.iteratedFDeriv_aux {ι : Type u_10} {M₁ : ι → Type u_8} {α : Type u_9} [DecidableEq α] (s : Set ι) [DecidableEq { x : ι // x ∈ s }] (e : α ≃ ↑s) (m : α → (i : ι) → M₁ i) (a : α) (z : (i : ι) → M₁ i) :
                                                          (fun (i : ↑s) => Function.update m a z (e.symm i) ↑i) = fun (i : ↑s) => Function.update (fun (j : ↑s) => m (e.symm j) ↑j) (e a) (z ↑(e a)) i
                                                          noncomputable def MultilinearMap.iteratedFDerivComponent {R₂ : Type u_2} {R₃ : Type u_3} [Semiring R₂] [CommSemiring R₃] {σ₂₃ : R₂ →+* R₃} {ι : Type u_4} {M₂ : ι → Type u_6} {N₃ : Type u_7} [(i : ι) → AddCommMonoid (M₂ i)] [AddCommMonoid N₃] [(i : ι) → Module R₂ (M₂ i)] [Module R₃ N₃] {α : Type u_8} (f : (Π (i : ι), M₂ i) →ₘₛₗ[σ₂₃] N₃) {s : Set ι} (e : α ≃ ↑s) [DecidablePred fun (x : ι) => x ∈ s] :
                                                          (Π (i : { a : ι // a ∉ s }), M₂ ↑i) →ₘₛₗ[σ₂₃] (α → (i : ι) → M₂ i) →ₘₛₗ[σ₂₃] N₃

                                                          One of the components of the iterated derivative of a multilinear map. Given a bijection e between a type α (typically Fin k) and a subset s of ι, this component is a multilinear map of k vectors v₁, ..., vₖ, mapping them to f (x₁, (v_{e.symm 2})₂, x₃, ...), where at indices i in s one uses the i-th coordinate of the vector v_{e.symm i} and otherwise one uses the i-th coordinate of a reference vector x. This is multilinear in the components of x outside of s, and in the v_j.

                                                          Equations
                                                          • One or more equations did not get rendered due to their size.
                                                          Instances For
                                                            noncomputable def MultilinearMap.iteratedFDeriv {R₂ : Type u_2} {R₃ : Type u_3} [Semiring R₂] [CommSemiring R₃] {σ₂₃ : R₂ →+* R₃} {ι : Type u_4} {M₂ : ι → Type u_6} {N₃ : Type u_7} [(i : ι) → AddCommMonoid (M₂ i)] [AddCommMonoid N₃] [(i : ι) → Module R₂ (M₂ i)] [Module R₃ N₃] [Fintype ι] (f : (Π (i : ι), M₂ i) →ₘₛₗ[σ₂₃] N₃) (k : ℕ) (x : (i : ι) → M₂ i) :
                                                            (Fin k → (i : ι) → M₂ i) →ₘₛₗ[σ₂₃] N₃

                                                            The k-th iterated derivative of a multilinear map f at the point x. It is a multilinear map of k vectors v₁, ..., vₖ (with the same type as x), mapping them to ∑ f (x₁, (v_{i₁})₂, x₃, ...), where at each index j one uses either xⱼ or one of the (vᵢ)ⱼ, and each vᵢ has to be used exactly once. The sum is parameterized by the embeddings of Fin k in the index type ι (or, equivalently, by the subsets s of ι of cardinality k and then the bijections between Fin k and s).

                                                            For the continuous version, see ContinuousMultilinearMap.iteratedFDeriv.

                                                            Equations
                                                            Instances For
                                                              def MultilinearMap.compLinearMapₗ {R₁ : Type u_1} {R₂ : Type u_2} {R₃ : Type u_3} [Semiring R₁] [Semiring R₂] [CommSemiring R₃] {σ₁₂ : R₁ →+* R₂} {σ₂₃ : R₂ →+* R₃} {σ₁₃ : R₁ →+* R₃} [RingHomCompTriple σ₁₂ σ₂₃ σ₁₃] {ι : Type u_4} {M₁ : ι → Type u_5} {M₂ : ι → Type u_6} {N₃ : Type u_7} [(i : ι) → AddCommMonoid (M₁ i)] [(i : ι) → AddCommMonoid (M₂ i)] [AddCommMonoid N₃] [(i : ι) → Module R₁ (M₁ i)] [(i : ι) → Module R₂ (M₂ i)] [Module R₃ N₃] (f : (i : ι) → M₁ i →ₛₗ[σ₁₂] M₂ i) :
                                                              ((Π (i : ι), M₂ i) →ₘₛₗ[σ₂₃] N₃) →ₗ[R₃] (Π (i : ι), M₁ i) →ₘₛₗ[σ₁₃] N₃

                                                              If f is a collection of linear maps, then the construction MultilinearMap.compLinearMap sending a multilinear map g to g (f₁ ⬝ , ..., fₙ ⬝ ) is linear in g.

                                                              Equations
                                                              Instances For
                                                                @[simp]
                                                                theorem MultilinearMap.compLinearMapₗ_apply {R₁ : Type u_1} {R₂ : Type u_2} {R₃ : Type u_3} [Semiring R₁] [Semiring R₂] [CommSemiring R₃] {σ₁₂ : R₁ →+* R₂} {σ₂₃ : R₂ →+* R₃} {σ₁₃ : R₁ →+* R₃} [RingHomCompTriple σ₁₂ σ₂₃ σ₁₃] {ι : Type u_4} {M₁ : ι → Type u_5} {M₂ : ι → Type u_6} {N₃ : Type u_7} [(i : ι) → AddCommMonoid (M₁ i)] [(i : ι) → AddCommMonoid (M₂ i)] [AddCommMonoid N₃] [(i : ι) → Module R₁ (M₁ i)] [(i : ι) → Module R₂ (M₂ i)] [Module R₃ N₃] (f : (i : ι) → M₁ i →ₛₗ[σ₁₂] M₂ i) (g : (Π (i : ι), M₂ i) →ₘₛₗ[σ₂₃] N₃) :
                                                                def LinearEquiv.multilinearMapCongrLeft {R₁ : Type u_1} {R₂ : Type u_2} {R₃ : Type u_3} [Semiring R₁] [Semiring R₂] [CommSemiring R₃] {σ₁₂ : R₁ →+* R₂} {σ₂₃ : R₂ →+* R₃} {σ₁₃ : R₁ →+* R₃} [RingHomCompTriple σ₁₂ σ₂₃ σ₁₃] {ι : Type u_4} {M₁ : ι → Type u_5} {M₂ : ι → Type u_6} {N₃ : Type u_7} [(i : ι) → AddCommMonoid (M₁ i)] [(i : ι) → AddCommMonoid (M₂ i)] [AddCommMonoid N₃] [(i : ι) → Module R₁ (M₁ i)] [(i : ι) → Module R₂ (M₂ i)] [Module R₃ N₃] {σ₂₁ : R₂ →+* R₁} [RingHomInvPair σ₁₂ σ₂₁] [RingHomInvPair σ₂₁ σ₁₂] [RingHomCompTriple σ₂₁ σ₁₃ σ₂₃] (e : (i : ι) → M₁ i ≃ₛₗ[σ₁₂] M₂ i) :
                                                                ((Π (i : ι), M₂ i) →ₘₛₗ[σ₂₃] N₃) ≃ₗ[R₃] (Π (i : ι), M₁ i) →ₘₛₗ[σ₁₃] N₃

                                                                An isomorphism of multilinear maps given an isomorphism between their domains.

                                                                This is MultilinearMap.compLinearMap as a linear equivalence, and the multilinear version of LinearEquiv.congrLeft.

                                                                Equations
                                                                • One or more equations did not get rendered due to their size.
                                                                Instances For
                                                                  @[simp]
                                                                  theorem LinearEquiv.multilinearMapCongrLeft_symm_apply {R₁ : Type u_1} {R₂ : Type u_2} {R₃ : Type u_3} [Semiring R₁] [Semiring R₂] [CommSemiring R₃] {σ₁₂ : R₁ →+* R₂} {σ₂₃ : R₂ →+* R₃} {σ₁₃ : R₁ →+* R₃} [RingHomCompTriple σ₁₂ σ₂₃ σ₁₃] {ι : Type u_4} {M₁ : ι → Type u_5} {M₂ : ι → Type u_6} {N₃ : Type u_7} [(i : ι) → AddCommMonoid (M₁ i)] [(i : ι) → AddCommMonoid (M₂ i)] [AddCommMonoid N₃] [(i : ι) → Module R₁ (M₁ i)] [(i : ι) → Module R₂ (M₂ i)] [Module R₃ N₃] {σ₂₁ : R₂ →+* R₁} [RingHomInvPair σ₁₂ σ₂₁] [RingHomInvPair σ₂₁ σ₁₂] [RingHomCompTriple σ₂₁ σ₁₃ σ₂₃] (e : (i : ι) → M₁ i ≃ₛₗ[σ₁₂] M₂ i) (a : (Π (i : ι), M₁ i) →ₘₛₗ[σ₁₃] N₃) :
                                                                  (multilinearMapCongrLeft e).symm a = a.compLinearMap fun (x : ι) => ↑(e x).symm
                                                                  @[simp]
                                                                  theorem LinearEquiv.multilinearMapCongrLeft_apply {R₁ : Type u_1} {R₂ : Type u_2} {R₃ : Type u_3} [Semiring R₁] [Semiring R₂] [CommSemiring R₃] {σ₁₂ : R₁ →+* R₂} {σ₂₃ : R₂ →+* R₃} {σ₁₃ : R₁ →+* R₃} [RingHomCompTriple σ₁₂ σ₂₃ σ₁₃] {ι : Type u_4} {M₁ : ι → Type u_5} {M₂ : ι → Type u_6} {N₃ : Type u_7} [(i : ι) → AddCommMonoid (M₁ i)] [(i : ι) → AddCommMonoid (M₂ i)] [AddCommMonoid N₃] [(i : ι) → Module R₁ (M₁ i)] [(i : ι) → Module R₂ (M₂ i)] [Module R₃ N₃] {σ₂₁ : R₂ →+* R₁} [RingHomInvPair σ₁₂ σ₂₁] [RingHomInvPair σ₂₁ σ₁₂] [RingHomCompTriple σ₂₁ σ₁₃ σ₂₃] (e : (i : ι) → M₁ i ≃ₛₗ[σ₁₂] M₂ i) (g : (Π (i : ι), M₂ i) →ₘₛₗ[σ₂₃] N₃) :
                                                                  (multilinearMapCongrLeft e) g = g.compLinearMap fun (x : ι) => ↑(e x)
                                                                  def MultilinearMap.compLinearMapMultilinear {R₁ : Type u_1} {R₂ : Type u_2} {R₃ : Type u_3} [Semiring R₁] [CommSemiring R₂] [CommSemiring R₃] {σ₁₂ : R₁ →+* R₂} {σ₂₃ : R₂ →+* R₃} {σ₁₃ : R₁ →+* R₃} [RingHomCompTriple σ₁₂ σ₂₃ σ₁₃] {ι : Type u_4} {M₁ : ι → Type u_5} {M₂ : ι → Type u_6} {N₃ : Type u_8} [(i : ι) → AddCommMonoid (M₁ i)] [(i : ι) → AddCommMonoid (M₂ i)] [AddCommMonoid N₃] [(i : ι) → Module R₁ (M₁ i)] [(i : ι) → Module R₂ (M₂ i)] [Module R₃ N₃] :
                                                                  (Π (i : ι), M₁ i →ₛₗ[σ₁₂] M₂ i) →ₘₛₗ[σ₂₃] ((Π (i : ι), M₂ i) →ₘₛₗ[σ₂₃] N₃) →ₗ[R₃] (Π (i : ι), M₁ i) →ₘₛₗ[σ₁₃] N₃

                                                                  If f is a collection of linear maps, then the construction MultilinearMap.compLinearMap sending a multilinear map g to g (f₁ ⬝ , ..., fₙ ⬝ ) is linear in g and multilinear in f₁, ..., fₙ.

                                                                  Equations
                                                                  Instances For
                                                                    @[simp]
                                                                    theorem MultilinearMap.compLinearMapMultilinear_apply {R₁ : Type u_1} {R₂ : Type u_2} {R₃ : Type u_3} [Semiring R₁] [CommSemiring R₂] [CommSemiring R₃] {σ₁₂ : R₁ →+* R₂} {σ₂₃ : R₂ →+* R₃} {σ₁₃ : R₁ →+* R₃} [RingHomCompTriple σ₁₂ σ₂₃ σ₁₃] {ι : Type u_4} {M₁ : ι → Type u_5} {M₂ : ι → Type u_6} {N₃ : Type u_8} [(i : ι) → AddCommMonoid (M₁ i)] [(i : ι) → AddCommMonoid (M₂ i)] [AddCommMonoid N₃] [(i : ι) → Module R₁ (M₁ i)] [(i : ι) → Module R₂ (M₂ i)] [Module R₃ N₃] (f : (i : ι) → M₁ i →ₛₗ[σ₁₂] M₂ i) :
                                                                    def MultilinearMap.piLinearMap {R₁ : Type u_1} {R₂ : Type u_2} {R₃ : Type u_3} [Semiring R₁] [CommSemiring R₂] [CommSemiring R₃] {σ₁₂ : R₁ →+* R₂} {σ₂₃ : R₂ →+* R₃} {σ₁₃ : R₁ →+* R₃} [RingHomCompTriple σ₁₂ σ₂₃ σ₁₃] {ι : Type u_4} {M₁ : ι → Type u_5} {M₂ : ι → Type u_6} {N₃ : Type u_8} [(i : ι) → AddCommMonoid (M₁ i)] [(i : ι) → AddCommMonoid (M₂ i)] [AddCommMonoid N₃] [(i : ι) → Module R₁ (M₁ i)] [(i : ι) → Module R₂ (M₂ i)] [Module R₃ N₃] :
                                                                    ((Π (i : ι), M₂ i) →ₘₛₗ[σ₂₃] N₃) →ₗ[R₃] (Π (i : ι), M₁ i →ₛₗ[σ₁₂] M₂ i) →ₘₛₗ[σ₂₃] (Π (i : ι), M₁ i) →ₘₛₗ[σ₁₃] N₃

                                                                    Let M₁ᵢ be a family of R₁-modules, M₂ᵢ a family of R₂-modules and N₃ an R₃-module. Let us denote Π i, M₁ᵢ and Π i, M₂ᵢ by M₁ and M₂ respectively. If g is a multilinear map M₂ → N₃, then g can be reinterpreted as a multilinear map from Π i, M₁ᵢ ⟶ M₂ᵢ to M₁ ⟶ N₃ via (fᵢ) ↦ v ↦ g(fᵢ vᵢ).

                                                                    Equations
                                                                    • One or more equations did not get rendered due to their size.
                                                                    Instances For
                                                                      @[simp]
                                                                      theorem MultilinearMap.piLinearMap_apply_apply_apply {R₁ : Type u_1} {R₂ : Type u_2} {R₃ : Type u_3} [Semiring R₁] [CommSemiring R₂] [CommSemiring R₃] {σ₁₂ : R₁ →+* R₂} {σ₂₃ : R₂ →+* R₃} {σ₁₃ : R₁ →+* R₃} [RingHomCompTriple σ₁₂ σ₂₃ σ₁₃] {ι : Type u_4} {M₁ : ι → Type u_5} {M₂ : ι → Type u_6} {N₃ : Type u_8} [(i : ι) → AddCommMonoid (M₁ i)] [(i : ι) → AddCommMonoid (M₂ i)] [AddCommMonoid N₃] [(i : ι) → Module R₁ (M₁ i)] [(i : ι) → Module R₂ (M₂ i)] [Module R₃ N₃] (g : (Π (i : ι), M₂ i) →ₘₛₗ[σ₂₃] N₃) (a✝ : (i : ι) → (fun (i : ι) => M₁ i →ₛₗ[σ₁₂] M₂ i) i) (m : (i : ι) → M₁ i) :
                                                                      ((piLinearMap g) a✝) m = g fun (i : ι) => (a✝ i) (m i)
                                                                      theorem MultilinearMap.map_piecewise_smul {R : Type u_1} {S : Type u_2} [Semiring R] [CommSemiring S] {σ : R →+* S} {ι : Type u_3} {M : ι → Type u_4} {N : Type u_5} [(i : ι) → AddCommMonoid (M i)] [AddCommMonoid N] [(i : ι) → Module R (M i)] [Module S N] (f : (Π (i : ι), M i) →ₘₛₗ[σ] N) [DecidableEq ι] (c : ι → R) (m : (i : ι) → M i) (s : Finset ι) :
                                                                      f (s.piecewise (fun (i : ι) => c i • m i) m) = (∏ i ∈ s, σ (c i)) • f m

                                                                      If one multiplies by c i the coordinates in a finset s, then the image under a multilinear map is multiplied by ∏ i ∈ s, σ (c i). This is mainly an auxiliary statement to prove the result when s = univ, given in map_smul_univ, although it can be useful in its own right as it does not require the index set ι to be finite.

                                                                      theorem MultilinearMap.map_smul_univ {R : Type u_1} {S : Type u_2} [Semiring R] [CommSemiring S] {σ : R →+* S} {ι : Type u_3} {M : ι → Type u_4} {N : Type u_5} [(i : ι) → AddCommMonoid (M i)] [AddCommMonoid N] [(i : ι) → Module R (M i)] [Module S N] (f : (Π (i : ι), M i) →ₘₛₗ[σ] N) [Fintype ι] (c : ι → R) (m : (i : ι) → M i) :
                                                                      (f fun (i : ι) => c i • m i) = (∏ i : ι, σ (c i)) • f m

                                                                      Multiplicativity of a multilinear map along all coordinates at the same time, writing f (fun i => c i • m i) as (∏ i, σ (c i)) • f m.

                                                                      @[simp]
                                                                      theorem MultilinearMap.map_update_smul_left {R : Type u_1} {S : Type u_2} [Semiring R] [CommSemiring S] {σ : R →+* S} {ι : Type u_3} {M : ι → Type u_4} {N : Type u_5} [(i : ι) → AddCommMonoid (M i)] [AddCommMonoid N] [(i : ι) → Module R (M i)] [Module S N] (f : (Π (i : ι), M i) →ₘₛₗ[σ] N) [DecidableEq ι] [Fintype ι] (m : (i : ι) → M i) (i : ι) (c : R) (x : M i) :
                                                                      f (Function.update (c • m) i x) = σ c ^ (Fintype.card ι - 1) • f (Function.update m i x)
                                                                      theorem MultilinearMap.ext_ring {R : Type u_1} {S : Type u_2} [Semiring R] [CommSemiring S] {σ : R →+* S} {ι : Type u_3} {N : Type u_5} [AddCommMonoid N] [Module S N] [Finite ι] ⦃f g : (ι → R) →ₘₛₗ[σ] N⦄ (h : (f fun (x : ι) => 1) = g fun (x : ι) => 1) :
                                                                      f = g

                                                                      If two σ-multilinear maps from R are equal on 1, then they are equal.

                                                                      This is the multilinear version of LinearMap.ext_ring.

                                                                      theorem MultilinearMap.ext_ring_iff {R : Type u_1} {S : Type u_2} [Semiring R] [CommSemiring S] {σ : R →+* S} {ι : Type u_3} {N : Type u_5} [AddCommMonoid N] [Module S N] [Finite ι] {f g : (ι → R) →ₘₛₗ[σ] N} :
                                                                      f = g ↔ (f fun (x : ι) => 1) = g fun (x : ι) => 1
                                                                      def MultilinearMap.mkPiAlgebra (R : Type u_1) (ι : Type u_2) (A : Type u_3) [CommSemiring R] [Fintype ι] [CommSemiring A] [Algebra R A] :
                                                                      (ι → A) →ₘₗ[R] A

                                                                      Given an R-algebra A, mkPiAlgebra is the multilinear map on A^ι associating to m the product of all the m i.

                                                                      See also MultilinearMap.mkPiAlgebraFin for a version that works with a non-commutative algebra A but requires ι = Fin n.

                                                                      Equations
                                                                      Instances For
                                                                        @[simp]
                                                                        theorem MultilinearMap.mkPiAlgebra_apply {R : Type u_1} {ι : Type u_2} {A : Type u_3} [CommSemiring R] [Fintype ι] [CommSemiring A] [Algebra R A] (m : ι → A) :
                                                                        (MultilinearMap.mkPiAlgebra R ι A) m = ∏ i : ι, m i
                                                                        def MultilinearMap.mkPiAlgebraFin (R : Type u_1) (n : ℕ) (A : Type u_2) [CommSemiring R] [Semiring A] [Algebra R A] :
                                                                        (Fin n → A) →ₘₗ[R] A

                                                                        Given an R-algebra A, mkPiAlgebraFin is the multilinear map on A^n associating to m the product of all the m i.

                                                                        See also MultilinearMap.mkPiAlgebra for a version that assumes [CommSemiring A] but works for A^ι with any finite type ι.

                                                                        Equations
                                                                        Instances For
                                                                          @[simp]
                                                                          theorem MultilinearMap.mkPiAlgebraFin_apply {R : Type u_1} {n : ℕ} {A : Type u_2} [CommSemiring R] [Semiring A] [Algebra R A] (m : Fin n → A) :
                                                                          theorem MultilinearMap.mkPiAlgebraFin_apply_const {R : Type u_1} {n : ℕ} {A : Type u_2} [CommSemiring R] [Semiring A] [Algebra R A] (a : A) :
                                                                          ((MultilinearMap.mkPiAlgebraFin R n A) fun (x : Fin n) => a) = a ^ n
                                                                          def MultilinearMap.smulRight {R : Type u_1} {S : Type u_2} [Semiring R] [Semiring S] {σ : R →+* S} {ι : Type u_3} {M : ι → Type u_4} {N : Type u_5} [(i : ι) → AddCommMonoid (M i)] [AddCommMonoid N] [(i : ι) → Module R (M i)] [Module S N] (f : (Π (i : ι), M i) →ₘₛₗ[σ] S) (z : N) :
                                                                          (Π (i : ι), M i) →ₘₛₗ[σ] N

                                                                          Given a σ-multilinear map f taking values in S, f.smulRight z is the map sending m to f m • z.

                                                                          Equations
                                                                          Instances For
                                                                            @[simp]
                                                                            theorem MultilinearMap.smulRight_apply {R : Type u_1} {S : Type u_2} [Semiring R] [Semiring S] {σ : R →+* S} {ι : Type u_3} {M : ι → Type u_4} {N : Type u_5} [(i : ι) → AddCommMonoid (M i)] [AddCommMonoid N] [(i : ι) → Module R (M i)] [Module S N] (f : (Π (i : ι), M i) →ₘₛₗ[σ] S) (z : N) (m : (i : ι) → M i) :
                                                                            (f.smulRight z) m = f m • z
                                                                            def MultilinearMap.mkPiRing (R : Type u_6) [CommSemiring R] (ι : Type u_7) {N : Type u_9} [AddCommMonoid N] [Module R N] [Fintype ι] (z : N) :
                                                                            (ι → R) →ₘₗ[R] N

                                                                            The canonical multilinear map on R^ι when ι is finite, associating to m the product of all the m i (multiplied by a fixed reference element z in the target module). See also mkPiAlgebra for a more general version.

                                                                            Equations
                                                                            Instances For
                                                                              @[simp]
                                                                              theorem MultilinearMap.mkPiRing_apply {R : Type u_6} [CommSemiring R] {ι : Type u_7} {N : Type u_9} [AddCommMonoid N] [Module R N] [Fintype ι] (z : N) (m : ι → R) :
                                                                              (MultilinearMap.mkPiRing R ι z) m = (∏ i : ι, m i) • z
                                                                              theorem MultilinearMap.mkPiRing_apply_one_eq_self {R : Type u_6} [CommSemiring R] {ι : Type u_7} {N : Type u_9} [AddCommMonoid N] [Module R N] [Fintype ι] (f : (ι → R) →ₘₗ[R] N) :
                                                                              MultilinearMap.mkPiRing R ι (f fun (x : ι) => 1) = f
                                                                              theorem MultilinearMap.mkPiRing_eq_iff {R : Type u_6} [CommSemiring R] {ι : Type u_7} {N : Type u_9} [AddCommMonoid N] [Module R N] [Fintype ι] {z₁ z₂ : N} :
                                                                              MultilinearMap.mkPiRing R ι z₁ = MultilinearMap.mkPiRing R ι z₂ ↔ z₁ = z₂
                                                                              theorem MultilinearMap.mkPiRing_zero {R : Type u_6} [CommSemiring R] {ι : Type u_7} {N : Type u_9} [AddCommMonoid N] [Module R N] [Fintype ι] :
                                                                              theorem MultilinearMap.mkPiRing_eq_zero_iff {R : Type u_6} [CommSemiring R] {ι : Type u_7} {N : Type u_9} [AddCommMonoid N] [Module R N] [Fintype ι] (z : N) :
                                                                              @[instance_reducible]
                                                                              instance MultilinearMap.instNeg {R : Type u_1} {S : Type u_2} [Semiring R] [Semiring S] {σ : R →+* S} {ι : Type u_3} {M : ι → Type u_4} {N : Type u_5} [(i : ι) → AddCommMonoid (M i)] [AddCommGroup N] [(i : ι) → Module R (M i)] [Module S N] :
                                                                              Neg ((Π (i : ι), M i) →ₘₛₗ[σ] N)
                                                                              Equations
                                                                              • MultilinearMap.instNeg = { neg := fun (f : (Π (i : ι), M i) →ₘₛₗ[σ] N) => { toFun := fun (m : (i : ι) → M i) => -f m, map_update_add' := ⋯, map_update_smul' := ⋯ } }
                                                                              instance MultilinearMap.instIsNegApplyForall {R : Type u_1} {S : Type u_2} [Semiring R] [Semiring S] {σ : R →+* S} {ι : Type u_3} {M : ι → Type u_4} {N : Type u_5} [(i : ι) → AddCommMonoid (M i)] [AddCommGroup N] [(i : ι) → Module R (M i)] [Module S N] :
                                                                              IsNegApply ((Π (i : ι), M i) →ₘₛₗ[σ] N)
                                                                              @[deprecated neg_apply (since := "2026-06-10")]
                                                                              theorem MultilinearMap.neg_apply {F : Type u_1} {α : outParam (Type u_2)} {β : outParam (Type u_3)} {inst✝ : FunLike F α β} {inst✝¹ : Neg β} {inst✝² : Neg F} [self : IsNegApply F] (f : F) (x : α) :
                                                                              (-f) x = -f x

                                                                              Alias of neg_apply.

                                                                              @[instance_reducible]
                                                                              instance MultilinearMap.instSub {R : Type u_1} {S : Type u_2} [Semiring R] [Semiring S] {σ : R →+* S} {ι : Type u_3} {M : ι → Type u_4} {N : Type u_5} [(i : ι) → AddCommMonoid (M i)] [AddCommGroup N] [(i : ι) → Module R (M i)] [Module S N] :
                                                                              Sub ((Π (i : ι), M i) →ₘₛₗ[σ] N)
                                                                              Equations
                                                                              • MultilinearMap.instSub = { sub := fun (f g : (Π (i : ι), M i) →ₘₛₗ[σ] N) => { toFun := fun (m : (i : ι) → M i) => f m - g m, map_update_add' := ⋯, map_update_smul' := ⋯ } }
                                                                              instance MultilinearMap.instIsSubApplyForall {R : Type u_1} {S : Type u_2} [Semiring R] [Semiring S] {σ : R →+* S} {ι : Type u_3} {M : ι → Type u_4} {N : Type u_5} [(i : ι) → AddCommMonoid (M i)] [AddCommGroup N] [(i : ι) → Module R (M i)] [Module S N] :
                                                                              IsSubApply ((Π (i : ι), M i) →ₘₛₗ[σ] N)
                                                                              @[deprecated sub_apply (since := "2026-06-10")]
                                                                              theorem MultilinearMap.sub_apply {F : Type u_1} {α : outParam (Type u_2)} {β : outParam (Type u_3)} {inst✝ : FunLike F α β} {inst✝¹ : Sub β} {inst✝² : Sub F} [self : IsSubApply F] (f g : F) (x : α) :
                                                                              (f - g) x = f x - g x

                                                                              Alias of sub_apply.

                                                                              @[instance_reducible]
                                                                              instance MultilinearMap.instAddCommGroup {R : Type u_1} {S : Type u_2} [Semiring R] [Semiring S] {σ : R →+* S} {ι : Type u_3} {M : ι → Type u_4} {N : Type u_5} [(i : ι) → AddCommMonoid (M i)] [AddCommGroup N] [(i : ι) → Module R (M i)] [Module S N] :
                                                                              AddCommGroup ((Π (i : ι), M i) →ₘₛₗ[σ] N)
                                                                              Equations
                                                                              • One or more equations did not get rendered due to their size.
                                                                              @[simp]
                                                                              theorem MultilinearMap.map_update_neg {R : Type u_1} {S : Type u_2} [Semiring R] [Semiring S] {σ : R →+* S} {ι : Type u_3} {M : ι → Type u_4} {N : Type u_5} [(i : ι) → AddCommGroup (M i)] [AddCommGroup N] [(i : ι) → Module R (M i)] [Module S N] (f : (Π (i : ι), M i) →ₘₛₗ[σ] N) [DecidableEq ι] (m : (i : ι) → M i) (i : ι) (x : M i) :
                                                                              f (Function.update m i (-x)) = -f (Function.update m i x)
                                                                              @[simp]
                                                                              theorem MultilinearMap.map_update_sub {R : Type u_1} {S : Type u_2} [Semiring R] [Semiring S] {σ : R →+* S} {ι : Type u_3} {M : ι → Type u_4} {N : Type u_5} [(i : ι) → AddCommGroup (M i)] [AddCommGroup N] [(i : ι) → Module R (M i)] [Module S N] (f : (Π (i : ι), M i) →ₘₛₗ[σ] N) [DecidableEq ι] (m : (i : ι) → M i) (i : ι) (x y : M i) :
                                                                              f (Function.update m i (x - y)) = f (Function.update m i x) - f (Function.update m i y)
                                                                              theorem MultilinearMap.map_update {R : Type u_1} {S : Type u_2} [Semiring R] [Semiring S] {σ : R →+* S} {ι : Type u_3} {M : ι → Type u_4} {N : Type u_5} [(i : ι) → AddCommGroup (M i)] [AddCommGroup N] [(i : ι) → Module R (M i)] [Module S N] (f : (Π (i : ι), M i) →ₘₛₗ[σ] N) [DecidableEq ι] (x : (i : ι) → M i) (i : ι) (v : M i) :
                                                                              f (Function.update x i v) = f x - f (Function.update x i (x i - v))
                                                                              theorem MultilinearMap.map_sub_map_piecewise {R : Type u_1} {S : Type u_2} [Semiring R] [Semiring S] {σ : R →+* S} {ι : Type u_3} {M : ι → Type u_4} {N : Type u_5} [(i : ι) → AddCommGroup (M i)] [AddCommGroup N] [(i : ι) → Module R (M i)] [Module S N] (f : (Π (i : ι), M i) →ₘₛₗ[σ] N) [LinearOrder ι] (a b : (i : ι) → M i) (s : Finset ι) :
                                                                              f a - f (s.piecewise b a) = ∑ i ∈ s, f fun (j : ι) => if j ∈ s → j < i then a j else if i = j then a j - b j else b j
                                                                              theorem MultilinearMap.map_piecewise_sub_map_piecewise {R : Type u_1} {S : Type u_2} [Semiring R] [Semiring S] {σ : R →+* S} {ι : Type u_3} {M : ι → Type u_4} {N : Type u_5} [(i : ι) → AddCommGroup (M i)] [AddCommGroup N] [(i : ι) → Module R (M i)] [Module S N] (f : (Π (i : ι), M i) →ₘₛₗ[σ] N) [LinearOrder ι] (a b v : (i : ι) → M i) (s : Finset ι) :
                                                                              f (s.piecewise a v) - f (s.piecewise b v) = ∑ i ∈ s, f fun (j : ι) => if j ∈ s then if j < i then a j else if j = i then a j - b j else b j else v j

                                                                              This calculates the differences between the values of a multilinear map at two arguments that differ on a finset s of ι. It requires a linear order on ι in order to express the result.

                                                                              theorem MultilinearMap.map_add_eq_map_add_linearDeriv_add {R : Type u_1} {S : Type u_2} [Semiring R] [Semiring S] {σ : R →+* S} {ι : Type u_3} {M : ι → Type u_4} {N : Type u_5} [(i : ι) → AddCommGroup (M i)] [AddCommGroup N] [(i : ι) → Module R (M i)] [Module S N] (f : (Π (i : ι), M i) →ₘₛₗ[σ] N) [DecidableEq ι] [Fintype ι] (x h : (i : ι) → M i) :
                                                                              f (x + h) = f x + (f.linearDeriv x) h + ∑ s : Finset ι with 2 ≤ s.card, f (s.piecewise h x)
                                                                              theorem MultilinearMap.map_add_sub_map_add_sub_linearDeriv {R : Type u_1} {S : Type u_2} [Semiring R] [Semiring S] {σ : R →+* S} {ι : Type u_3} {M : ι → Type u_4} {N : Type u_5} [(i : ι) → AddCommGroup (M i)] [AddCommGroup N] [(i : ι) → Module R (M i)] [Module S N] (f : (Π (i : ι), M i) →ₘₛₗ[σ] N) [DecidableEq ι] [Fintype ι] (x h h' : (i : ι) → M i) :
                                                                              f (x + h) - f (x + h') - (f.linearDeriv x) (h - h') = ∑ s : Finset ι with 2 ≤ s.card, (f (s.piecewise h x) - f (s.piecewise h' x))

                                                                              This expresses the difference between the values of a multilinear map at two points "close to x" in terms of the "derivative" of the multilinear map at x and of "second-order" terms.

                                                                              def MultilinearMap.piRingEquiv {R : Type u_1} [CommSemiring R] {ι : Type u_2} {N : Type u_4} [AddCommMonoid N] [Module R N] [Fintype ι] :
                                                                              N ≃ₗ[R] (ι → R) →ₘₗ[R] N

                                                                              When ι is finite, multilinear maps on R^ι with values in N are in bijection with N, as such a multilinear map is completely determined by its value on the constant vector made of ones. We register this bijection as a linear equivalence in MultilinearMap.piRingEquiv.

                                                                              Equations
                                                                              • One or more equations did not get rendered due to their size.
                                                                              Instances For
                                                                                def MultilinearMap.map {R : Type u_1} [Semiring R] {ι : Type u_2} [Nonempty ι] {M : ι → Type u_3} {N : Type u_4} [(i : ι) → AddCommMonoid (M i)] [AddCommMonoid N] [(i : ι) → Module R (M i)] [Module R N] (f : (Π (i : ι), M i) →ₘₗ[R] N) (p : (i : ι) → Submodule R (M i)) :

                                                                                The pushforward of an indexed collection of submodule p i ⊆ M i by f : M → N.

                                                                                Note that this is not a submodule - it is not closed under addition.

                                                                                Equations
                                                                                • f.map p = { carrier := ⇑f '' {v : (i : ι) → M i | ∀ (i : ι), v i ∈ p i}, smul_mem' := ⋯ }
                                                                                Instances For
                                                                                  theorem MultilinearMap.map_nonempty {R : Type u_1} [Semiring R] {ι : Type u_2} [Nonempty ι] {M : ι → Type u_3} {N : Type u_4} [(i : ι) → AddCommMonoid (M i)] [AddCommMonoid N] [(i : ι) → Module R (M i)] [Module R N] (f : (Π (i : ι), M i) →ₘₗ[R] N) (p : (i : ι) → Submodule R (M i)) :
                                                                                  (↑(f.map p)).Nonempty

                                                                                  The map is always nonempty. This lemma is needed to apply SubMulAction.zero_mem.

                                                                                  def MultilinearMap.range {R : Type u_1} [Semiring R] {ι : Type u_2} [Nonempty ι] {M : ι → Type u_3} {N : Type u_4} [(i : ι) → AddCommMonoid (M i)] [AddCommMonoid N] [(i : ι) → Module R (M i)] [Module R N] (f : (Π (i : ι), M i) →ₘₗ[R] N) :

                                                                                  The range of a multilinear map, closed under scalar multiplication.

                                                                                  Equations
                                                                                  Instances For