Documentation

Mathlib.LinearAlgebra.Multilinear.TensorProduct

Constructions relating multilinear maps and tensor products. #

def MultilinearMap.domCoprodDep {R : Type u_1} {ι₁ : Type u_2} {ι₂ : Type u_3} [CommSemiring R] {N₁ : Type u_6} [AddCommMonoid N₁] [Module R N₁] {Nā‚‚ : Type u_7} [AddCommMonoid Nā‚‚] [Module R Nā‚‚] {N : ι₁ āŠ• ι₂ → Type u_8} [(i : ι₁ āŠ• ι₂) → AddCommMonoid (N i)] [(i : ι₁ āŠ• ι₂) → Module R (N i)] (a : MultilinearMap R (fun (i₁ : ι₁) => N (Sum.inl i₁)) N₁) (b : MultilinearMap R (fun (iā‚‚ : ι₂) => N (Sum.inr iā‚‚)) Nā‚‚) :
MultilinearMap R N (TensorProduct R N₁ Nā‚‚)

Given a family of modules N indexed by a type ι₁ āŠ• ι₂, a multilinear map from the modules N (.inl i₁) to N₁ and a multilinear map from the modules N (.inr i₁) to Nā‚‚, this is the induced multilinear map from all the modules N i to N₁ āŠ— Nā‚‚.

Equations
    Instances For
      @[simp]
      theorem MultilinearMap.domCoprodDep_apply {R : Type u_1} {ι₁ : Type u_2} {ι₂ : Type u_3} [CommSemiring R] {N₁ : Type u_6} [AddCommMonoid N₁] [Module R N₁] {Nā‚‚ : Type u_7} [AddCommMonoid Nā‚‚] [Module R Nā‚‚] {N : ι₁ āŠ• ι₂ → Type u_8} [(i : ι₁ āŠ• ι₂) → AddCommMonoid (N i)] [(i : ι₁ āŠ• ι₂) → Module R (N i)] (a : MultilinearMap R (fun (i₁ : ι₁) => N (Sum.inl i₁)) N₁) (b : MultilinearMap R (fun (iā‚‚ : ι₂) => N (Sum.inr iā‚‚)) Nā‚‚) (v : (i : ι₁ āŠ• ι₂) → N i) :
      (a.domCoprodDep b) v = (a fun (i₁ : ι₁) => v (Sum.inl i₁)) āŠ—ā‚œ[R] b fun (iā‚‚ : ι₂) => v (Sum.inr iā‚‚)
      def MultilinearMap.domCoprodDep' {R : Type u_1} {ι₁ : Type u_2} {ι₂ : Type u_3} [CommSemiring R] {N₁ : Type u_6} [AddCommMonoid N₁] [Module R N₁] {Nā‚‚ : Type u_7} [AddCommMonoid Nā‚‚] [Module R Nā‚‚] {N : ι₁ āŠ• ι₂ → Type u_8} [(i : ι₁ āŠ• ι₂) → AddCommMonoid (N i)] [(i : ι₁ āŠ• ι₂) → Module R (N i)] :
      TensorProduct R (MultilinearMap R (fun (i₁ : ι₁) => N (Sum.inl i₁)) N₁) (MultilinearMap R (fun (iā‚‚ : ι₂) => N (Sum.inr iā‚‚)) Nā‚‚) →ₗ[R] MultilinearMap R N (TensorProduct R N₁ Nā‚‚)

      A more bundled version of MultilinearMap.domCoprodDep, as a linear map from the tensor product of spaces of multilinear maps.

      Equations
        Instances For
          @[simp]
          theorem MultilinearMap.domCoprodDep'_apply {R : Type u_1} {ι₁ : Type u_2} {ι₂ : Type u_3} [CommSemiring R] {N₁ : Type u_6} [AddCommMonoid N₁] [Module R N₁] {Nā‚‚ : Type u_7} [AddCommMonoid Nā‚‚] [Module R Nā‚‚] {N : ι₁ āŠ• ι₂ → Type u_8} [(i : ι₁ āŠ• ι₂) → AddCommMonoid (N i)] [(i : ι₁ āŠ• ι₂) → Module R (N i)] (a : MultilinearMap R (fun (i₁ : ι₁) => N (Sum.inl i₁)) N₁) (b : MultilinearMap R (fun (iā‚‚ : ι₂) => N (Sum.inr iā‚‚)) Nā‚‚) :
          def MultilinearMap.domCoprod {R : Type u_1} {ι₁ : Type u_2} {ι₂ : Type u_3} [CommSemiring R] {N₁ : Type u_6} [AddCommMonoid N₁] [Module R N₁] {Nā‚‚ : Type u_7} [AddCommMonoid Nā‚‚] [Module R Nā‚‚] {N : Type u_8} [AddCommMonoid N] [Module R N] (a : MultilinearMap R (fun (x : ι₁) => N) N₁) (b : MultilinearMap R (fun (x : ι₂) => N) Nā‚‚) :
          MultilinearMap R (fun (x : ι₁ āŠ• ι₂) => N) (TensorProduct R N₁ Nā‚‚)

          Given two multilinear maps (ι₁ → N) → N₁ and (ι₂ → N) → Nā‚‚, this produces the map (ι₁ āŠ• ι₂ → N) → N₁ āŠ— Nā‚‚ by taking the coproduct of the domain and the tensor product of the codomain.

          This can be thought of as combining Equiv.sumArrowEquivProdArrow.symm with TensorProduct.map, noting that the two operations can't be separated as the intermediate result is not a MultilinearMap.

          While this can be generalized to work for dependent Ī  i : ι₁, N'₁ i instead of ι₁ → N, doing so introduces Sum.elim N'₁ N'ā‚‚ types in the result which are difficult to work with and not defeq to the simple case defined here. See this zulip thread.

          Equations
            Instances For
              @[simp]
              theorem MultilinearMap.domCoprod_apply {R : Type u_1} {ι₁ : Type u_2} {ι₂ : Type u_3} [CommSemiring R] {N₁ : Type u_6} [AddCommMonoid N₁] [Module R N₁] {Nā‚‚ : Type u_7} [AddCommMonoid Nā‚‚] [Module R Nā‚‚] {N : Type u_8} [AddCommMonoid N] [Module R N] (a : MultilinearMap R (fun (x : ι₁) => N) N₁) (b : MultilinearMap R (fun (x : ι₂) => N) Nā‚‚) (v : (i : ι₁ āŠ• ι₂) → (fun (x : ι₁ āŠ• ι₂) => N) i) :
              (a.domCoprod b) v = (a fun (i₁ : ι₁) => v (Sum.inl i₁)) āŠ—ā‚œ[R] b fun (iā‚‚ : ι₂) => v (Sum.inr iā‚‚)
              def MultilinearMap.domCoprod' {R : Type u_1} {ι₁ : Type u_2} {ι₂ : Type u_3} [CommSemiring R] {N₁ : Type u_6} [AddCommMonoid N₁] [Module R N₁] {Nā‚‚ : Type u_7} [AddCommMonoid Nā‚‚] [Module R Nā‚‚] {N : Type u_8} [AddCommMonoid N] [Module R N] :
              TensorProduct R (MultilinearMap R (fun (x : ι₁) => N) N₁) (MultilinearMap R (fun (x : ι₂) => N) Nā‚‚) →ₗ[R] MultilinearMap R (fun (x : ι₁ āŠ• ι₂) => N) (TensorProduct R N₁ Nā‚‚)

              A more bundled version of MultilinearMap.domCoprod that maps ((ι₁ → N) → N₁) āŠ— ((ι₂ → N) → Nā‚‚) to (ι₁ āŠ• ι₂ → N) → N₁ āŠ— Nā‚‚.

              Equations
                Instances For
                  @[simp]
                  theorem MultilinearMap.domCoprod'_apply {R : Type u_1} {ι₁ : Type u_2} {ι₂ : Type u_3} [CommSemiring R] {N₁ : Type u_6} [AddCommMonoid N₁] [Module R N₁] {Nā‚‚ : Type u_7} [AddCommMonoid Nā‚‚] [Module R Nā‚‚] {N : Type u_8} [AddCommMonoid N] [Module R N] (a : MultilinearMap R (fun (x : ι₁) => N) N₁) (b : MultilinearMap R (fun (x : ι₂) => N) Nā‚‚) :
                  theorem MultilinearMap.domCoprod_domDomCongr_sumCongr {R : Type u_1} {ι₁ : Type u_2} {ι₂ : Type u_3} {Ī¹ā‚ƒ : Type u_4} {ι₄ : Type u_5} [CommSemiring R] {N₁ : Type u_6} [AddCommMonoid N₁] [Module R N₁] {Nā‚‚ : Type u_7} [AddCommMonoid Nā‚‚] [Module R Nā‚‚] {N : Type u_8} [AddCommMonoid N] [Module R N] (a : MultilinearMap R (fun (x : ι₁) => N) N₁) (b : MultilinearMap R (fun (x : ι₂) => N) Nā‚‚) (σa : ι₁ ā‰ƒ Ī¹ā‚ƒ) (σb : ι₂ ā‰ƒ ι₄) :
                  domDomCongr (σa.sumCongr σb) (a.domCoprod b) = (domDomCongr σa a).domCoprod (domDomCongr σb b)

                  When passed an Equiv.sumCongr, MultilinearMap.domDomCongr distributes over MultilinearMap.domCoprod.