Conversion between Finsupp and homogeneous DFinsupp #
This module provides conversions between Finsupp and DFinsupp.
It is in its own file since neither Finsupp or DFinsupp depend on each other.
Main definitions #
- "identity" maps between
FinsuppandDFinsupp:Finsupp.toDFinsupp : (ι →₀ M) → (Π₀ i : ι, M)DFinsupp.toFinsupp : (Π₀ i : ι, M) → (ι →₀ M)- Bundled equiv versions of the above:
finsuppEquivDFinsupp : (ι →₀ M) ≃ (Π₀ i : ι, M)finsuppAddEquivDFinsupp : (ι →₀ M) ≃+ (Π₀ i : ι, M)finsuppLequivDFinsupp R : (ι →₀ M) ≃ₗ[R] (Π₀ i : ι, M)
- stronger versions of
Finsupp.split:sigmaFinsuppEquivDFinsupp : ((Σ i, η i) →₀ N) ≃ (Π₀ i, (η i →₀ N))sigmaFinsuppAddEquivDFinsupp : ((Σ i, η i) →₀ N) ≃+ (Π₀ i, (η i →₀ N))sigmaFinsuppLequivDFinsupp : ((Σ i, η i) →₀ N) ≃ₗ[R] (Π₀ i, (η i →₀ N))
Theorems #
The defining features of these operations is that they preserve the function and support:
and therefore map Finsupp.single to DFinsupp.single and vice versa:
as well as preserving arithmetic operations.
For the bundled equivalences, we provide lemmas that they reduce to Finsupp.toDFinsupp:
finsupp_add_equiv_dfinsupp_applyfinsupp_lequiv_dfinsupp_applyfinsupp_add_equiv_dfinsupp_symm_applyfinsupp_lequiv_dfinsupp_symm_apply
Implementation notes #
We provide DFinsupp.toFinsupp and finsuppEquivDFinsupp computably by adding
[DecidableEq ι] and [Π m : M, Decidable (m ≠ 0)] arguments. To aid with definitional unfolding,
these arguments are also present on the noncomputable equivs.
Basic definitions and lemmas #
Interpret a homogeneous DFinsupp as a Finsupp.
Note that the elaborator has a lot of trouble with this definition - it is often necessary to
write (DFinsupp.toFinsupp f : ι →₀ M) instead of f.toFinsupp, as for some unknown reason
using dot notation or omitting the type ascription prevents the type being resolved correctly.
Instances For
Lemmas about arithmetic operations #
Finsupp.toDFinsupp and DFinsupp.toFinsupp together form an equiv.
Equations
- finsuppEquivDFinsupp = { toFun := Finsupp.toDFinsupp, invFun := DFinsupp.toFinsupp, left_inv := ⋯, right_inv := ⋯ }
Instances For
The additive version of finsupp.toFinsupp. Note that this is noncomputable because
Finsupp.add is noncomputable.
Equations
- finsuppAddEquivDFinsupp = { toFun := Finsupp.toDFinsupp, invFun := DFinsupp.toFinsupp, left_inv := ⋯, right_inv := ⋯, map_add' := ⋯ }
Instances For
The additive version of Finsupp.toFinsupp. Note that this is noncomputable because
Finsupp.add is noncomputable.
Equations
- finsuppLequivDFinsupp R = { toFun := Finsupp.toDFinsupp, map_add' := ⋯, map_smul' := ⋯, invFun := DFinsupp.toFinsupp, left_inv := ⋯, right_inv := ⋯ }
Instances For
Stronger versions of Finsupp.split #
Finsupp.split is an additive equivalence between (Σ i, η i) →₀ N and Π₀ i, (η i →₀ N).
Equations
- sigmaFinsuppAddEquivDFinsupp = { toFun := ⇑sigmaFinsuppEquivDFinsupp, invFun := ⇑sigmaFinsuppEquivDFinsupp.symm, left_inv := ⋯, right_inv := ⋯, map_add' := ⋯ }
Instances For
Finsupp.split is a linear equivalence between (Σ i, η i) →₀ N and Π₀ i, (η i →₀ N).
Equations
- sigmaFinsuppLequivDFinsupp R = { toFun := sigmaFinsuppAddEquivDFinsupp.toFun, map_add' := ⋯, map_smul' := ⋯, invFun := sigmaFinsuppAddEquivDFinsupp.invFun, left_inv := ⋯, right_inv := ⋯ }