Conversion between Finsupp
and homogenous 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
Finsupp
andDFinsupp
: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_apply
finsupp_lequiv_dfinsupp_apply
finsupp_add_equiv_dfinsupp_symm_apply
finsupp_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 homogenous 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.
Equations
- f.toFinsupp = { support := f.support, toFun := ⇑f, mem_support_toFun := ⋯ }
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 = let __src := finsuppEquivDFinsupp; { 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 = let __src := finsuppEquivDFinsupp; { 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 equivalence between (Σ i, η i) →₀ N
and Π₀ i, (η i →₀ N)
.
Equations
- One or more equations did not get rendered due to their size.
Instances For
Finsupp.split
is an additive equivalence between (Σ i, η i) →₀ N
and Π₀ i, (η i →₀ N)
.
Equations
- One or more equations did not get rendered due to their size.
Instances For
Finsupp.split
is a linear equivalence between (Σ i, η i) →₀ N
and Π₀ i, (η i →₀ N)
.
Equations
- One or more equations did not get rendered due to their size.