Module docstring
{"# Finsupps and sum/product types
This file contains results about modules involving Finsupp and sum/product/sigma types.
Tags
function with finite support, module, linear algebra "}
{"# Finsupps and sum/product types
This file contains results about modules involving Finsupp and sum/product/sigma types.
function with finite support, module, linear algebra "}
Finsupp.sumFinsuppLEquivProdFinsupp
      definition
     {α β : Type*} : (α ⊕ β →₀ M) ≃ₗ[R] (α →₀ M) × (β →₀ M)
        /-- The linear equivalence between `(α ⊕ β) →₀ M` and `(α →₀ M) × (β →₀ M)`.
This is the `LinearEquiv` version of `Finsupp.sumFinsuppEquivProdFinsupp`. -/
@[simps apply symm_apply]
def sumFinsuppLEquivProdFinsupp {α β : Type*} : (α ⊕ β →₀ M) ≃ₗ[R] (α →₀ M) × (β →₀ M) :=
  { sumFinsuppAddEquivProdFinsupp with
    map_smul' := by
      intros
      ext <;>
        simp only [AddEquiv.toFun_eq_coe, Prod.smul_fst, Prod.smul_snd, smul_apply,
          snd_sumFinsuppAddEquivProdFinsupp, fst_sumFinsuppAddEquivProdFinsupp,
          RingHom.id_apply] }
        Finsupp.fst_sumFinsuppLEquivProdFinsupp
      theorem
     {α β : Type*} (f : α ⊕ β →₀ M) (x : α) : (sumFinsuppLEquivProdFinsupp R f).1 x = f (Sum.inl x)
        theorem fst_sumFinsuppLEquivProdFinsupp {α β : Type*} (f : α ⊕ βα ⊕ β →₀ M) (x : α) :
    (sumFinsuppLEquivProdFinsupp R f).1 x = f (Sum.inl x) :=
  rfl
        Finsupp.snd_sumFinsuppLEquivProdFinsupp
      theorem
     {α β : Type*} (f : α ⊕ β →₀ M) (y : β) : (sumFinsuppLEquivProdFinsupp R f).2 y = f (Sum.inr y)
        theorem snd_sumFinsuppLEquivProdFinsupp {α β : Type*} (f : α ⊕ βα ⊕ β →₀ M) (y : β) :
    (sumFinsuppLEquivProdFinsupp R f).2 y = f (Sum.inr y) :=
  rfl
        Finsupp.sumFinsuppLEquivProdFinsupp_symm_inl
      theorem
     {α β : Type*} (fg : (α →₀ M) × (β →₀ M)) (x : α) : ((sumFinsuppLEquivProdFinsupp R).symm fg) (Sum.inl x) = fg.1 x
        theorem sumFinsuppLEquivProdFinsupp_symm_inl {α β : Type*} (fg : (α →₀ M) × (β →₀ M)) (x : α) :
    ((sumFinsuppLEquivProdFinsupp R).symm fg) (Sum.inl x) = fg.1 x :=
  rfl
        Finsupp.sumFinsuppLEquivProdFinsupp_symm_inr
      theorem
     {α β : Type*} (fg : (α →₀ M) × (β →₀ M)) (y : β) : ((sumFinsuppLEquivProdFinsupp R).symm fg) (Sum.inr y) = fg.2 y
        theorem sumFinsuppLEquivProdFinsupp_symm_inr {α β : Type*} (fg : (α →₀ M) × (β →₀ M)) (y : β) :
    ((sumFinsuppLEquivProdFinsupp R).symm fg) (Sum.inr y) = fg.2 y :=
  rfl
        Finsupp.sigmaFinsuppLEquivPiFinsupp
      definition
     {M : Type*} {ιs : η → Type*} [AddCommMonoid M] [Module R M] : ((Σ j, ιs j) →₀ M) ≃ₗ[R] (j : _) → (ιs j →₀ M)
        /-- On a `Fintype η`, `Finsupp.split` is a linear equivalence between
`(Σ (j : η), ιs j) →₀ M` and `(j : η) → (ιs j →₀ M)`.
This is the `LinearEquiv` version of `Finsupp.sigmaFinsuppAddEquivPiFinsupp`. -/
noncomputable def sigmaFinsuppLEquivPiFinsupp {M : Type*} {ιs : η → Type*} [AddCommMonoid M]
    [Module R M] : ((Σ j, ιs j) →₀ M) ≃ₗ[R] (j : _) → (ιs j →₀ M) :=
  { sigmaFinsuppAddEquivPiFinsupp with
    map_smul' := fun c f => by
      ext
      simp }
        Finsupp.sigmaFinsuppLEquivPiFinsupp_apply
      theorem
     {M : Type*} {ιs : η → Type*} [AddCommMonoid M] [Module R M] (f : (Σ j, ιs j) →₀ M) (j i) :
  sigmaFinsuppLEquivPiFinsupp R f j i = f ⟨j, i⟩
        @[simp]
theorem sigmaFinsuppLEquivPiFinsupp_apply {M : Type*} {ιs : η → Type*} [AddCommMonoid M]
    [Module R M] (f : (Σ j, ιs j) →₀ M) (j i) : sigmaFinsuppLEquivPiFinsupp R f j i = f ⟨j, i⟩ :=
  rfl
        Finsupp.sigmaFinsuppLEquivPiFinsupp_symm_apply
      theorem
     {M : Type*} {ιs : η → Type*} [AddCommMonoid M] [Module R M] (f : (j : _) → (ιs j →₀ M)) (ji) :
  (Finsupp.sigmaFinsuppLEquivPiFinsupp R).symm f ji = f ji.1 ji.2
        @[simp]
theorem sigmaFinsuppLEquivPiFinsupp_symm_apply {M : Type*} {ιs : η → Type*} [AddCommMonoid M]
    [Module R M] (f : (j : _) → (ιs j →₀ M)) (ji) :
    (Finsupp.sigmaFinsuppLEquivPiFinsupp R).symm f ji = f ji.1 ji.2 :=
  rfl