Properties of the module α →₀ M
#
THIS FILE IS SYNCHRONIZED WITH MATHLIB4. Any changes to this file require a corresponding PR to mathlib4.
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 a
as a linear map; -
finsupp.lapply a : (ι →₀ M) →ₗ[R] M
: the mapλ f, f a
as a linear map; -
finsupp.lsubtype_domain (s : set α) : (α →₀ M) →ₗ[R] (s →₀ M)
: restriction to a subtype as a linear map; -
finsupp.restrict_dom
:finsupp.filter
as a linear map tofinsupp.supported s
; -
finsupp.lsum
:finsupp.sum
orfinsupp.lift_add_hom
as alinear_map
; -
finsupp.total α M R (v : ι → M)
: sendsl : ι → R
to the linear combination ofv i
with coefficientsl i
; -
finsupp.total_on
: a restricted version offinsupp.total
with domainfinsupp.supported R R s
and codomainsubmodule.span R (v '' s)
; -
finsupp.supported_equiv_finsupp
: a linear equivalence between the functionsα →₀ M
supported ons
and the functionss →₀ M
; -
finsupp.lmap_domain
: a linear map version offinsupp.map_domain
; -
finsupp.dom_lcongr
: alinear_equiv
version offinsupp.dom_congr
; -
finsupp.congr
: if the setss
andt
are equivalent, thensupported M R s
is equivalent tosupported M R t
; -
finsupp.lcongr
: alinear_equiv
alence betweenα →₀ M
andβ →₀ N
constructed 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' := _}
Forget that a function is finitely supported.
This is the linear version of finsupp.to_fun
.
Equations
- finsupp.lcoe_fun = {to_fun := coe_fn finsupp.has_coe_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
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 = {to_fun := (finsupp.lift M R X).to_fun, map_add' := _, map_smul' := _, inv_fun := (finsupp.lift M R X).inv_fun, left_inv := _, right_inv := _}
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' := _}
Given f : α → β
and a proof hf
that f
is injective, lcomap_domain 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.comap_domain
.
Equations
- finsupp.lcomap_domain f hf = {to_fun := λ (l : β →₀ M), finsupp.comap_domain f l _, 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 finsupp
s 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 := _}
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.
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
.
Pick some representation of x : span R w
as a linear combination in w
,
using the axiom of choice.
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_finite R R α).symm.to_linear_map