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 a
as a linear map;Finsupp.lapply a : (ι →₀ M) →ₗ[R] M
: the mapfun f ↦ f a
as a linear map;Finsupp.lsubtypeDomain (s : Set α) : (α →₀ M) →ₗ[R] (s →₀ M)
: restriction to a subtype as a linear map;Finsupp.restrictDom
:Finsupp.filter
as a linear map toFinsupp.supported s
;Finsupp.lsum
:Finsupp.sum
orFinsupp.liftAddHom
as aLinearMap
;Finsupp.total α M R (v : ι → M)
: sendsl : ι → R
to the linear combination ofv i
with coefficientsl i
;Finsupp.totalOn
: a restricted version ofFinsupp.total
with domainFinsupp.supported R R s
and codomainSubmodule.span R (v '' s)
;Finsupp.supportedEquivFinsupp
: a linear equivalence between the functionsα →₀ M
supported ons
and the functionss →₀ M
;Finsupp.lmapDomain
: a linear map version ofFinsupp.mapDomain
;Finsupp.domLCongr
: aLinearEquiv
version ofFinsupp.domCongr
;Finsupp.congr
: if the setss
andt
are equivalent, thensupported M R s
is equivalent tosupported M R t
;Finsupp.lcongr
: aLinearEquiv
alence betweenα →₀ M
andβ →₀ N
constructed 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 Finsupp
s 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