Properties of the module α →₀ M #
Given an R-module M, the R-module structure on α →₀ M is defined in
Data.Finsupp.Basic.
In this file we define Finsupp.supported s to be the set {f : α →₀ M | f.support ⊆ s}
interpreted as a submodule of α →₀ M. We also define LinearMap versions of various maps:
Finsupp.lsingle a : M →ₗ[R] ι →₀ M:Finsupp.single aas a linear map;Finsupp.lapply a : (ι →₀ M) →ₗ[R] M: the mapfun f ↦ f aas a linear map;Finsupp.lsubtypeDomain (s : Set α) : (α →₀ M) →ₗ[R] (s →₀ M): restriction to a subtype as a linear map;Finsupp.restrictDom:Finsupp.filteras a linear map toFinsupp.supported s;Finsupp.lsum:Finsupp.sumorFinsupp.liftAddHomas aLinearMap;Finsupp.total α M R (v : ι → M): sendsl : ι → Rto the linear combination ofv iwith coefficientsl i;Finsupp.totalOn: a restricted version ofFinsupp.totalwith domainFinsupp.supported R R sand codomainSubmodule.span R (v '' s);Finsupp.supportedEquivFinsupp: a linear equivalence between the functionsα →₀ Msupported onsand the functionss →₀ M;Finsupp.lmapDomain: a linear map version ofFinsupp.mapDomain;Finsupp.domLCongr: aLinearEquivversion ofFinsupp.domCongr;Finsupp.congr: if the setssandtare equivalent, thensupported M R sis equivalent tosupported M R t;Finsupp.lcongr: aLinearEquivalence betweenα →₀ Mandβ →₀ Nconstructed usinge : α ≃ βande' : M ≃ₗ[R] N.
Tags #
function with finite support, module, linear algebra
Given Finite α, linearEquivFunOnFinite R is the natural R-linear equivalence between
α →₀ β and α → β.
Equations
- Finsupp.linearEquivFunOnFinite R M α = let __src := Finsupp.equivFunOnFinite; { toFun := DFunLike.coe, map_add' := ⋯, map_smul' := ⋯, invFun := __src.invFun, left_inv := ⋯, right_inv := ⋯ }
Instances For
If α has a unique term, then the type of finitely supported functions α →₀ M is
R-linearly equivalent to M.
Equations
- One or more equations did not get rendered due to their size.
Instances For
Interpret Finsupp.single a as a linear map.
Equations
- Finsupp.lsingle a = let __src := Finsupp.singleAddHom a; { toFun := (↑__src).toFun, map_add' := ⋯, map_smul' := ⋯ }
Instances For
Two R-linear maps from Finsupp X M which agree on each single x y agree everywhere.
Two R-linear maps from Finsupp X M which agree on each single x y agree everywhere.
We formulate this fact using equality of linear maps φ.comp (lsingle a) and ψ.comp (lsingle a)
so that the ext tactic can apply a type-specific extensionality lemma to prove equality of these
maps. E.g., if M = R, then it suffices to verify φ (single a 1) = ψ (single a 1).
Interpret fun f : α →₀ M ↦ f a as a linear map.
Equations
- Finsupp.lapply a = let __src := Finsupp.applyAddHom a; { toFun := (↑__src).toFun, map_add' := ⋯, map_smul' := ⋯ }
Instances For
Equations
- ⋯ = ⋯
Equations
- ⋯ = ⋯
Forget that a function is finitely supported.
This is the linear version of Finsupp.toFun.
Equations
- Finsupp.lcoeFun = { toFun := DFunLike.coe, map_add' := ⋯, map_smul' := ⋯ }
Instances For
Interpret Finsupp.subtypeDomain s as a linear map.
Equations
- Finsupp.lsubtypeDomain s = { toFun := Finsupp.subtypeDomain fun (x : α) => x ∈ s, map_add' := ⋯, map_smul' := ⋯ }
Instances For
Finsupp.supported M R s is the R-submodule of all p : α →₀ M such that p.support ⊆ s.
Equations
- Finsupp.supported M R s = { carrier := {p : α →₀ M | ↑p.support ⊆ s}, add_mem' := ⋯, zero_mem' := ⋯, smul_mem' := ⋯ }
Instances For
Interpret Finsupp.filter s as a linear map from α →₀ M to supported M R s.
Equations
- Finsupp.restrictDom M R s = LinearMap.codRestrict (Finsupp.supported M R s) { toFun := Finsupp.filter fun (x : α) => x ∈ s, map_add' := ⋯, map_smul' := ⋯ } ⋯
Instances For
Interpret Finsupp.restrictSupportEquiv as a linear equivalence between
supported M R s and s →₀ M.
Equations
- Finsupp.supportedEquivFinsupp s = let F := Finsupp.restrictSupportEquiv s M; F.toLinearEquiv ⋯
Instances For
Lift a family of linear maps M →ₗ[R] N indexed by x : α to a linear map from α →₀ M to
N using Finsupp.sum. This is an upgraded version of Finsupp.liftAddHom.
See note [bundled maps over different rings] for why separate R and S semirings are used.
Equations
- One or more equations did not get rendered due to their size.
Instances For
A slight rearrangement from lsum gives us
the bijection underlying the free-forgetful adjunction for R-modules.
Equations
- Finsupp.lift M R X = (AddEquiv.arrowCongr (Equiv.refl X) (LinearMap.ringLmapEquivSelf R ℕ M).toAddEquiv.symm).trans (Finsupp.lsum ℕ).toAddEquiv
Instances For
Given compatible S and R-module structures on M and a type X, the set of functions
X → M is S-linearly equivalent to the R-linear maps from the free R-module
on X to M.
Equations
- Finsupp.llift M R S X = let __src := Finsupp.lift M R X; { toFun := __src.toFun, map_add' := ⋯, map_smul' := ⋯, invFun := __src.invFun, left_inv := ⋯, right_inv := ⋯ }
Instances For
Interpret Finsupp.mapDomain as a linear map.
Equations
- Finsupp.lmapDomain M R f = { toFun := Finsupp.mapDomain f, map_add' := ⋯, map_smul' := ⋯ }
Instances For
Given f : α → β and a proof hf that f is injective, lcomapDomain f hf is the linear map
sending l : β →₀ M to the finitely supported function from α to M given by composing
l with f.
This is the linear version of Finsupp.comapDomain.
Equations
- Finsupp.lcomapDomain f hf = { toFun := fun (l : β →₀ M) => Finsupp.comapDomain f l ⋯, map_add' := ⋯, map_smul' := ⋯ }
Instances For
Interprets (l : α →₀ R) as linear combination of the elements in the family (v : α → M) and evaluates this linear combination.
Equations
- Finsupp.total α M R v = (Finsupp.lsum ℕ) fun (i : α) => LinearMap.id.smulRight (v i)
Instances For
Any module is a quotient of a free module. This is stated as surjectivity of
Finsupp.total M M R id : (M →₀ R) →ₗ[R] M.
A version of Finsupp.range_total which is useful for going in the other direction
Finsupp.totalOn M v s interprets p : α →₀ R as a linear combination of a
subset of the vectors in v, mapping it to the span of those vectors.
The subset is indicated by a set s : Set α of indices.
Equations
- Finsupp.totalOn α M R v s = LinearMap.codRestrict (Submodule.span R (v '' s)) (Finsupp.total α M R v ∘ₗ (Finsupp.supported R R s).subtype) ⋯
Instances For
An equivalence of domains induces a linear equivalence of finitely supported functions.
This is Finsupp.domCongr as a LinearEquiv.
See also LinearMap.funCongrLeft for the case of arbitrary functions.
Equations
- Finsupp.domLCongr e = (Finsupp.domCongr e).toLinearEquiv ⋯
Instances For
An equivalence of sets induces a linear equivalence of Finsupps supported on those sets.
Equations
- Finsupp.congr s t e = Finsupp.supportedEquivFinsupp s ≪≫ₗ (Finsupp.domLCongr e ≪≫ₗ (Finsupp.supportedEquivFinsupp t).symm)
Instances For
Finsupp.mapRange as a LinearMap.
Equations
- Finsupp.mapRange.linearMap f = let __src := Finsupp.mapRange.addMonoidHom f.toAddMonoidHom; { toFun := Finsupp.mapRange ⇑f ⋯, map_add' := ⋯, map_smul' := ⋯ }
Instances For
Finsupp.mapRange as a LinearEquiv.
Equations
- One or more equations did not get rendered due to their size.
Instances For
An equivalence of domain and a linear equivalence of codomain induce a linear equivalence of the corresponding finitely supported functions.
Equations
- Finsupp.lcongr e₁ e₂ = Finsupp.domLCongr e₁ ≪≫ₗ Finsupp.mapRange.linearEquiv e₂
Instances For
The linear equivalence between (α ⊕ β) →₀ M and (α →₀ M) × (β →₀ M).
This is the LinearEquiv version of Finsupp.sumFinsuppEquivProdFinsupp.
Equations
- One or more equations did not get rendered due to their size.
Instances For
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.
Equations
- One or more equations did not get rendered due to their size.
Instances For
The linear equivalence between α × β →₀ M and α →₀ β →₀ M.
This is the LinearEquiv version of Finsupp.finsuppProdEquiv.
Equations
- Finsupp.finsuppProdLEquiv R = let __src := Finsupp.finsuppProdEquiv; { toFun := __src.toFun, map_add' := ⋯, map_smul' := ⋯, invFun := __src.invFun, left_inv := ⋯, right_inv := ⋯ }
Instances For
If R is countable, then any R-submodule spanned by a countable family of vectors is
countable.
Equations
- ⋯ = ⋯
Fintype.total R S v f is the linear combination of vectors in v with weights in f.
This variant of Finsupp.total is defined on fintype indexed vectors.
This map is linear in v if R is commutative, and always linear in f.
See note [bundled maps over different rings] for why separate R and S semirings are used.
Equations
- Fintype.total R S = { toFun := fun (v : α → M) => { toFun := fun (f : α → R) => ∑ i : α, f i • v i, map_add' := ⋯, map_smul' := ⋯ }, map_add' := ⋯, map_smul' := ⋯ }
Instances For
An element x lies in the span of v iff it can be written as sum ∑ cᵢ • vᵢ = x.
A family v : α → V is generating V iff every element (x : V)
can be written as sum ∑ cᵢ • vᵢ = x.
Submodule.exists_finset_of_mem_iSup as an iff
An element m ∈ M is contained in the R-submodule spanned by a set s ⊆ M, if and only if
m can be written as a finite R-linear combination of elements of s.
The implementation uses Finsupp.sum.
An element m ∈ M is contained in the R-submodule spanned by a set s ⊆ M, if and only if
m can be written as a finite R-linear combination of elements of s.
The implementation uses a sum indexed by Fin n for some n.
The span of a subset s is the union over all n of the set of linear combinations of at most
n terms belonging to s.
If Subsingleton R, then M ≃ₗ[R] ι →₀ R for any type ι.
Equations
- Module.subsingletonEquiv R M ι = { toFun := fun (x : M) => 0, map_add' := ⋯, map_smul' := ⋯, invFun := fun (x : ι →₀ R) => 0, left_inv := ⋯, right_inv := ⋯ }
Instances For
A surjective linear map to finitely supported functions has a splitting.
Equations
- f.splittingOfFinsuppSurjective s = (Finsupp.lift M R α) fun (x : α) => ⋯.choose
Instances For
A surjective linear map to functions on a finite type has a splitting.
Equations
- f.splittingOfFunOnFintypeSurjective s = ((Finsupp.lift M R α) fun (x : α) => ⋯.choose) ∘ₗ ↑(Finsupp.linearEquivFunOnFinite R R α).symm
Instances For
If M and N are submodules of an R-algebra S, m : ι → M is a family of elements, then
there is an R-linear map from ι →₀ N to S which maps { n_i } to the sum of m_i * n_i.
This is used in the definition of linearly disjointness.
Equations
- Submodule.mulLeftMap N m = (Finsupp.lsum R) fun (i : ι) => ↑(m i) • N.subtype
Instances For
If M and N are submodules of an R-algebra S, n : ι → N is a family of elements, then
there is an R-linear map from ι →₀ M to S which maps { m_i } to the sum of m_i * n_i.
This is used in the definition of linearly disjointness.
Equations
- M.mulRightMap n = (Finsupp.lsum R) fun (i : ι) => MulOpposite.op ↑(n i) • M.subtype