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 linear_map versions of various maps:
-
finsupp.lsingle a : M →ₗ[R] ι →₀ M:finsupp.single aas a linear map; -
finsupp.lapply a : (ι →₀ M) →ₗ[R] M: the mapλ f, f aas a linear map; -
finsupp.lsubtype_domain (s : set α) : (α →₀ M) →ₗ[R] (s →₀ M): restriction to a subtype as a linear map; -
finsupp.restrict_dom:finsupp.filteras a linear map tofinsupp.supported s; -
finsupp.lsum:finsupp.sumorfinsupp.lift_add_homas alinear_map; -
finsupp.total α M R (v : ι → M): sendsl : ι → Rto the linear combination ofv iwith coefficientsl i; -
finsupp.total_on: a restricted version offinsupp.totalwith domainfinsupp.supported R R sand codomainsubmodule.span R (v '' s); -
finsupp.supported_equiv_finsupp: a linear equivalence between the functionsα →₀ Msupported onsand the functionss →₀ M; -
finsupp.lmap_domain: a linear map version offinsupp.map_domain; -
finsupp.dom_lcongr: alinear_equivversion offinsupp.dom_congr; -
finsupp.congr: if the setssandtare equivalent, thensupported M R sis equivalent tosupported M R t; -
finsupp.lcongr: alinear_equivalence betweenα →₀ Mandβ →₀ Nconstructed usinge : α ≃ βande' : M ≃ₗ[R] N.
Tags #
function with finite support, module, linear algebra
Interpret finsupp.single a as a linear map.
Equations
- finsupp.lsingle a = {to_fun := (finsupp.single_add_hom a).to_fun, map_add' := _, map_smul' := _}
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 λ (f : α →₀ M), f a as a linear map.
Equations
- finsupp.lapply a = {to_fun := (finsupp.apply_add_hom a).to_fun, map_add' := _, map_smul' := _}
Interpret finsupp.subtype_domain s as a linear map.
Equations
- finsupp.lsubtype_domain s = {to_fun := finsupp.subtype_domain (λ (x : α), x ∈ s), map_add' := _, map_smul' := _}
finsupp.supported M R s is the R-submodule of all p : α →₀ M such that p.support ⊆ s.
Interpret finsupp.filter s as a linear map from α →₀ M to supported M R s.
Equations
- finsupp.restrict_dom M R s = linear_map.cod_restrict (finsupp.supported M R s) {to_fun := finsupp.filter (λ (_x : α), _x ∈ s), map_add' := _, map_smul' := _} _
Interpret finsupp.restrict_support_equiv as a linear equivalence between
supported M R s and s →₀ M.
Equations
- finsupp.supported_equiv_finsupp s = let F : ↥(finsupp.supported M R s) ≃ (↥s →₀ M) := finsupp.restrict_support_equiv s M in F.to_linear_equiv _
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.lift_add_hom.
See note [bundled maps over different rings] for why separate R and S semirings are used.
A slight rearrangement from lsum gives us
the bijection underlying the free-forgetful adjunction for R-modules.
Equations
- finsupp.lift M R X = (add_equiv.arrow_congr (equiv.refl X) (linear_map.ring_lmap_equiv_self R ℕ M).to_add_equiv.symm).trans (finsupp.lsum ℕ).to_add_equiv
Interpret finsupp.map_domain as a linear map.
Equations
- finsupp.lmap_domain M R f = {to_fun := finsupp.map_domain f, map_add' := _, map_smul' := _}
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 ℕ) (λ (i : α), linear_map.id.smul_right (v i))
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.total_on 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.total_on α M R v s = linear_map.cod_restrict (submodule.span R (v '' s)) ((finsupp.total α M R v).comp (finsupp.supported R R s).subtype) _
An equivalence of domains induces a linear equivalence of finitely supported functions.
This is finsupp.dom_congr as a linear_equiv.
See also linear_map.fun_congr_left for the case of arbitrary functions.
Equations
An equivalence of sets induces a linear equivalence of finsupps supported on those sets.
Equations
- finsupp.congr s t e = (finsupp.supported_equiv_finsupp s).trans ((finsupp.dom_lcongr e).trans (finsupp.supported_equiv_finsupp t).symm)
finsupp.map_range as a linear_map.
Equations
- finsupp.map_range.linear_map f = {to_fun := finsupp.map_range ⇑f _, map_add' := _, map_smul' := _}
finsupp.map_range as a linear_equiv.
Equations
- finsupp.map_range.linear_equiv e = {to_fun := finsupp.map_range ⇑e _, map_add' := _, map_smul' := _, inv_fun := finsupp.map_range ⇑(e.symm) _, left_inv := _, right_inv := _}
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.dom_lcongr e₁).trans (finsupp.map_range.linear_equiv e₂)
The linear equivalence between (α ⊕ β) →₀ M and (α →₀ M) × (β →₀ M).
This is the linear_equiv version of finsupp.sum_finsupp_equiv_prod_finsupp.
Equations
On a fintype η, finsupp.split is a linear equivalence between
(Σ (j : η), ιs j) →₀ M and Π j, (ιs j →₀ M).
This is the linear_equiv version of finsupp.sigma_finsupp_add_equiv_pi_finsupp.
Equations
The linear equivalence between α × β →₀ M and α →₀ β →₀ M.
This is the linear_equiv version of finsupp.finsupp_prod_equiv.
Equations
- finsupp.finsupp_prod_lequiv R = {to_fun := finsupp.finsupp_prod_equiv.to_fun, map_add' := _, map_smul' := _, inv_fun := finsupp.finsupp_prod_equiv.inv_fun, left_inv := _, right_inv := _}
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.
If subsingleton R, then M ≃ₗ[R] ι →₀ R for any type ι.
A surjective linear map to finitely supported functions has a splitting.
Equations
- f.splitting_of_finsupp_surjective s = ⇑(finsupp.lift M R α) (λ (x : α), _.some)
A surjective linear map to functions on a finite type has a splitting.
Equations
- f.splitting_of_fun_on_fintype_surjective s = (⇑(finsupp.lift M R α) (λ (x : α), _.some)).comp (finsupp.linear_equiv_fun_on_fintype R R α).symm.to_linear_map