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