Documentation

Mathlib.LinearAlgebra.DirectSum.TensorProduct

Tensor products of direct sums #

This file shows that taking TensorProducts commutes with taking DirectSums in both arguments.

Main results #

noncomputable def TensorProduct.directSum (R : Type u) [CommSemiring R] {ι₁ : Type v₁} {ι₂ : Type v₂} [DecidableEq ι₁] [DecidableEq ι₂] (M₁ : ι₁Type w₁) (M₂ : ι₂Type w₂) [(i₁ : ι₁) → AddCommMonoid (M₁ i₁)] [(i₂ : ι₂) → AddCommMonoid (M₂ i₂)] [(i₁ : ι₁) → Module R (M₁ i₁)] [(i₂ : ι₂) → Module R (M₂ i₂)] :
TensorProduct R (DirectSum ι₁ fun (i₁ : ι₁) => M₁ i₁) (DirectSum ι₂ fun (i₂ : ι₂) => M₂ i₂) ≃ₗ[R] DirectSum (ι₁ × ι₂) fun (i : ι₁ × ι₂) => TensorProduct R (M₁ i.1) (M₂ i.2)

The linear equivalence (⨁ i₁, M₁ i₁) ⊗ (⨁ i₂, M₂ i₂) ≃ (⨁ i₁, ⨁ i₂, M₁ i₁ ⊗ M₂ i₂), i.e. "tensor product distributes over direct sum".

Equations
  • One or more equations did not get rendered due to their size.
Instances For
    noncomputable def TensorProduct.directSumLeft (R : Type u) [CommSemiring R] {ι₁ : Type v₁} [DecidableEq ι₁] (M₁ : ι₁Type w₁) (M₂' : Type w₂') [(i₁ : ι₁) → AddCommMonoid (M₁ i₁)] [AddCommMonoid M₂'] [(i₁ : ι₁) → Module R (M₁ i₁)] [Module R M₂'] :
    TensorProduct R (DirectSum ι₁ fun (i₁ : ι₁) => M₁ i₁) M₂' ≃ₗ[R] DirectSum ι₁ fun (i : ι₁) => TensorProduct R (M₁ i) M₂'

    Tensor products distribute over a direct sum on the left .

    Equations
    • One or more equations did not get rendered due to their size.
    Instances For
      noncomputable def TensorProduct.directSumRight (R : Type u) [CommSemiring R] {ι₂ : Type v₂} [DecidableEq ι₂] (M₁' : Type w₁') (M₂ : ι₂Type w₂) [AddCommMonoid M₁'] [(i₂ : ι₂) → AddCommMonoid (M₂ i₂)] [Module R M₁'] [(i₂ : ι₂) → Module R (M₂ i₂)] :
      TensorProduct R M₁' (DirectSum ι₂ fun (i : ι₂) => M₂ i) ≃ₗ[R] DirectSum ι₂ fun (i : ι₂) => TensorProduct R M₁' (M₂ i)

      Tensor products distribute over a direct sum on the right.

      Equations
      • One or more equations did not get rendered due to their size.
      Instances For
        @[simp]
        theorem TensorProduct.directSum_lof_tmul_lof (R : Type u) [CommSemiring R] {ι₁ : Type v₁} {ι₂ : Type v₂} [DecidableEq ι₁] [DecidableEq ι₂] {M₁ : ι₁Type w₁} {M₂ : ι₂Type w₂} [(i₁ : ι₁) → AddCommMonoid (M₁ i₁)] [(i₂ : ι₂) → AddCommMonoid (M₂ i₂)] [(i₁ : ι₁) → Module R (M₁ i₁)] [(i₂ : ι₂) → Module R (M₂ i₂)] (i₁ : ι₁) (m₁ : M₁ i₁) (i₂ : ι₂) (m₂ : M₂ i₂) :
        (TensorProduct.directSum R M₁ M₂) ((DirectSum.lof R ι₁ M₁ i₁) m₁ ⊗ₜ[R] (DirectSum.lof R ι₂ M₂ i₂) m₂) = (DirectSum.lof R (ι₁ × ι₂) (fun (i : ι₁ × ι₂) => TensorProduct R (M₁ i.1) (M₂ i.2)) (i₁, i₂)) (m₁ ⊗ₜ[R] m₂)
        @[simp]
        theorem TensorProduct.directSum_symm_lof_tmul (R : Type u) [CommSemiring R] {ι₁ : Type v₁} {ι₂ : Type v₂} [DecidableEq ι₁] [DecidableEq ι₂] {M₁ : ι₁Type w₁} {M₂ : ι₂Type w₂} [(i₁ : ι₁) → AddCommMonoid (M₁ i₁)] [(i₂ : ι₂) → AddCommMonoid (M₂ i₂)] [(i₁ : ι₁) → Module R (M₁ i₁)] [(i₂ : ι₂) → Module R (M₂ i₂)] (i₁ : ι₁) (m₁ : M₁ i₁) (i₂ : ι₂) (m₂ : M₂ i₂) :
        (LinearEquiv.symm (TensorProduct.directSum R M₁ M₂)) ((DirectSum.lof R (ι₁ × ι₂) (fun (i : ι₁ × ι₂) => TensorProduct R (M₁ i.1) (M₂ i.2)) (i₁, i₂)) (m₁ ⊗ₜ[R] m₂)) = (DirectSum.lof R ι₁ M₁ i₁) m₁ ⊗ₜ[R] (DirectSum.lof R ι₂ M₂ i₂) m₂
        @[simp]
        theorem TensorProduct.directSumLeft_tmul_lof (R : Type u) [CommSemiring R] {ι₁ : Type v₁} [DecidableEq ι₁] {M₁ : ι₁Type w₁} {M₂' : Type w₂'} [(i₁ : ι₁) → AddCommMonoid (M₁ i₁)] [AddCommMonoid M₂'] [(i₁ : ι₁) → Module R (M₁ i₁)] [Module R M₂'] (i : ι₁) (x : M₁ i) (y : M₂') :
        (TensorProduct.directSumLeft R M₁ M₂') ((DirectSum.lof R ι₁ (fun (i₁ : ι₁) => M₁ i₁) i) x ⊗ₜ[R] y) = (DirectSum.lof R ι₁ (fun (i : ι₁) => TensorProduct R (M₁ i) M₂') i) (x ⊗ₜ[R] y)
        @[simp]
        theorem TensorProduct.directSumLeft_symm_lof_tmul (R : Type u) [CommSemiring R] {ι₁ : Type v₁} [DecidableEq ι₁] {M₁ : ι₁Type w₁} {M₂' : Type w₂'} [(i₁ : ι₁) → AddCommMonoid (M₁ i₁)] [AddCommMonoid M₂'] [(i₁ : ι₁) → Module R (M₁ i₁)] [Module R M₂'] (i : ι₁) (x : M₁ i) (y : M₂') :
        (LinearEquiv.symm (TensorProduct.directSumLeft R M₁ M₂')) ((DirectSum.lof R ι₁ (fun (i : ι₁) => TensorProduct R (M₁ i) M₂') i) (x ⊗ₜ[R] y)) = (DirectSum.lof R ι₁ M₁ i) x ⊗ₜ[R] y
        @[simp]
        theorem TensorProduct.directSumRight_tmul_lof (R : Type u) [CommSemiring R] {ι₂ : Type v₂} [DecidableEq ι₂] {M₁' : Type w₁'} {M₂ : ι₂Type w₂} [AddCommMonoid M₁'] [(i₂ : ι₂) → AddCommMonoid (M₂ i₂)] [Module R M₁'] [(i₂ : ι₂) → Module R (M₂ i₂)] (x : M₁') (i : ι₂) (y : M₂ i) :
        (TensorProduct.directSumRight R M₁' M₂) (x ⊗ₜ[R] (DirectSum.lof R ι₂ (fun (i : ι₂) => M₂ i) i) y) = (DirectSum.lof R ι₂ (fun (i : ι₂) => TensorProduct R M₁' (M₂ i)) i) (x ⊗ₜ[R] y)
        @[simp]
        theorem TensorProduct.directSumRight_symm_lof_tmul (R : Type u) [CommSemiring R] {ι₂ : Type v₂} [DecidableEq ι₂] {M₁' : Type w₁'} {M₂ : ι₂Type w₂} [AddCommMonoid M₁'] [(i₂ : ι₂) → AddCommMonoid (M₂ i₂)] [Module R M₁'] [(i₂ : ι₂) → Module R (M₂ i₂)] (x : M₁') (i : ι₂) (y : M₂ i) :
        (LinearEquiv.symm (TensorProduct.directSumRight R M₁' M₂)) ((DirectSum.lof R ι₂ (fun (i : ι₂) => TensorProduct R M₁' (M₂ i)) i) (x ⊗ₜ[R] y)) = x ⊗ₜ[R] (DirectSum.lof R ι₂ M₂ i) y