Miscellaneous definitions, lemmas, and constructions using finsupp #
Main declarations #
Finsupp.graph: the finset of input and output pairs with non-zero outputs.Finsupp.mapRange.equiv:Finsupp.mapRangeas an equiv.Finsupp.mapDomain: maps the domain of aFinsuppby a function and by summing.Finsupp.comapDomain: postcomposition of aFinsuppwith a function injective on the preimage of its support.Finsupp.some: restrict a finitely supported function onOption αto a finitely supported function onα.Finsupp.filter:filter p fis the finitely supported function that isf aifp ais true and 0 otherwise.Finsupp.frange: the image of a finitely supported function on its support.Finsupp.subtype_domain: the restriction of a finitely supported functionfto a subtype.
Implementation notes #
This file is a noncomputable theory and uses classical logic throughout.
TODO #
This file is currently ~1600 lines long and is quite a miscellany of definitions and lemmas, so it should be divided into smaller pieces.
Expand the list of definitions and important lemmas to the module docstring.
The graph of a finitely supported function over its support, i.e. the finset of input and output pairs with non-zero outputs.
Equations
- f.graph = Finset.map { toFun := fun (a : α) => (a, f a), inj' := ⋯ } f.support
Instances For
Declarations about mapRange #
Finsupp.mapRange as an equiv.
Equations
- Finsupp.mapRange.equiv f hf hf' = { toFun := Finsupp.mapRange (⇑f) hf, invFun := Finsupp.mapRange (⇑f.symm) hf', left_inv := ⋯, right_inv := ⋯ }
Instances For
Composition with a fixed zero-preserving homomorphism is itself a zero-preserving homomorphism on functions.
Equations
- Finsupp.mapRange.zeroHom f = { toFun := Finsupp.mapRange ⇑f ⋯, map_zero' := ⋯ }
Instances For
Composition with a fixed additive homomorphism is itself an additive homomorphism on functions.
Equations
- Finsupp.mapRange.addMonoidHom f = { toFun := Finsupp.mapRange ⇑f ⋯, map_zero' := ⋯, map_add' := ⋯ }
Instances For
Finsupp.mapRange.AddMonoidHom as an equiv.
Equations
- One or more equations did not get rendered due to their size.
Instances For
Declarations about equivCongrLeft #
Given f : α ≃ β, we can map l : α →₀ M to equivMapDomain f l : β →₀ M (computably)
by mapping the support forwards and the function backwards.
Equations
- Finsupp.equivMapDomain f l = { support := Finset.map f.toEmbedding l.support, toFun := fun (a : β) => l (f.symm a), mem_support_toFun := ⋯ }
Instances For
Given f : α ≃ β, the finitely supported function spaces are also in bijection:
(α →₀ M) ≃ (β →₀ M).
This is the finitely-supported version of Equiv.piCongrLeft.
Equations
- Finsupp.equivCongrLeft f = { toFun := Finsupp.equivMapDomain f, invFun := Finsupp.equivMapDomain f.symm, left_inv := ⋯, right_inv := ⋯ }
Instances For
Given f : α → β and v : α →₀ M, mapDomain f v : β →₀ M
is the finitely supported function whose value at a : β is the sum
of v x over all x such that f x = a.
Equations
- Finsupp.mapDomain f v = v.sum fun (a : α) => Finsupp.single (f a)
Instances For
Finsupp.mapDomain is an AddMonoidHom.
Equations
- Finsupp.mapDomain.addMonoidHom f = { toFun := Finsupp.mapDomain f, map_zero' := ⋯, map_add' := ⋯ }
Instances For
A version of sum_mapDomain_index that takes a bundled AddMonoidHom,
rather than separate linearity hypotheses.
When f is an embedding we have an embedding (α →₀ ℕ) ↪ (β →₀ ℕ) given by mapDomain.
Equations
- Finsupp.mapDomainEmbedding f = { toFun := Finsupp.mapDomain ⇑f, inj' := ⋯ }
Instances For
When g preserves addition, mapRange and mapDomain commute.
Declarations about comapDomain #
Given f : α → β, l : β →₀ M and a proof hf that f is injective on
the preimage of l.support, comapDomain f l hf is the finitely supported function
from α to M given by composing l with f.
Equations
- Finsupp.comapDomain f l hf = { support := l.support.preimage f hf, toFun := fun (a : α) => l (f a), mem_support_toFun := ⋯ }
Instances For
Note the hif argument is needed for this to work in rw.
A version of Finsupp.comapDomain_add that's easier to use.
Finsupp.comapDomain is an AddMonoidHom.
Equations
- Finsupp.comapDomain.addMonoidHom hf = { toFun := fun (x : β →₀ M) => Finsupp.comapDomain f x ⋯, map_zero' := ⋯, map_add' := ⋯ }
Instances For
Declarations about Finsupp.filter #
Finsupp.filter p f is the finitely supported function that is f a if p a is true and 0
otherwise.
Equations
- Finsupp.filter p f = { support := Finset.filter p f.support, toFun := fun (a : α) => if p a then f a else 0, mem_support_toFun := ⋯ }
Instances For
frange f is the image of f on the support of f.
Equations
- f.frange = Finset.image (⇑f) f.support
Instances For
Declarations about Finsupp.subtypeDomain #
subtypeDomain p f is the restriction of the finitely supported function f to subtype p.
Equations
- Finsupp.subtypeDomain p f = { support := Finset.subtype p f.support, toFun := ⇑f ∘ Subtype.val, mem_support_toFun := ⋯ }
Instances For
subtypeDomain but as an AddMonoidHom.
Equations
- Finsupp.subtypeDomainAddMonoidHom = { toFun := Finsupp.subtypeDomain p, map_zero' := ⋯, map_add' := ⋯ }
Instances For
Finsupp.filter as an AddMonoidHom.
Equations
- Finsupp.filterAddHom p = { toFun := Finsupp.filter p, map_zero' := ⋯, map_add' := ⋯ }
Instances For
Given a finitely supported function f from a product type α × β to γ,
curry f is the "curried" finitely supported function from α to the type of
finitely supported functions from β to γ.
Equations
- f.curry = f.sum fun (p : α × β) (c : M) => Finsupp.single p.1 (Finsupp.single p.2 c)
Instances For
Given a finitely supported function f from α to the type of
finitely supported functions from β to M,
uncurry f is the "uncurried" finitely supported function from α × β to M.
Equations
- f.uncurry = f.sum fun (a : α) (g : β →₀ M) => g.sum fun (b : β) (c : M) => Finsupp.single (a, b) c
Instances For
finsuppProdEquiv defines the Equiv between ((α × β) →₀ M) and (α →₀ (β →₀ M)) given by
currying and uncurrying.
Equations
- Finsupp.finsuppProdEquiv = { toFun := Finsupp.curry, invFun := Finsupp.uncurry, left_inv := ⋯, right_inv := ⋯ }
Instances For
Finsupp.sumElim f g maps inl x to f x and inr y to g y.
Equations
- f.sumElim g = Finsupp.onFinset (Finset.map { toFun := Sum.inl, inj' := ⋯ } f.support ∪ Finset.map { toFun := Sum.inr, inj' := ⋯ } g.support) (Sum.elim ⇑f ⇑g) ⋯
Instances For
The equivalence between (α ⊕ β) →₀ γ and (α →₀ γ) × (β →₀ γ).
This is the Finsupp version of Equiv.sum_arrow_equiv_prod_arrow.
Equations
- One or more equations did not get rendered due to their size.
Instances For
The additive equivalence between (α ⊕ β) →₀ M and (α →₀ M) × (β →₀ M).
This is the Finsupp version of Equiv.sum_arrow_equiv_prod_arrow.
Equations
- Finsupp.sumFinsuppAddEquivProdFinsupp = let __src := Finsupp.sumFinsuppEquivProdFinsupp; { toEquiv := __src, map_add' := ⋯ }
Instances For
Declarations about scalar multiplication #
Scalar multiplication acting on the domain.
This is not an instance as it would conflict with the action on the range.
See the instance_diamonds test for examples of such conflicts.
Equations
- Finsupp.comapSMul = { smul := fun (g : G) => Finsupp.mapDomain fun (x : α) => g • x }
Instances For
Finsupp.comapSMul is multiplicative
Equations
- Finsupp.comapMulAction = MulAction.mk ⋯ ⋯
Instances For
Finsupp.comapSMul is distributive
Equations
- Finsupp.comapDistribMulAction = DistribMulAction.mk ⋯ ⋯
Instances For
When G is a group, Finsupp.comapSMul acts by precomposition with the action of g⁻¹.
Equations
- Finsupp.smulZeroClass = SMulZeroClass.mk ⋯
Throughout this section, some Monoid and Semiring arguments are specified with {} instead of
[]. See note [implicit instance arguments].
Equations
- ⋯ = ⋯
Equations
- Finsupp.instSMulWithZero = SMulWithZero.mk ⋯
Equations
Equations
- Finsupp.distribMulAction α M = let __src := Finsupp.distribSMul α M; DistribMulAction.mk ⋯ ⋯
Equations
- ⋯ = ⋯
Equations
- ⋯ = ⋯
Equations
- ⋯ = ⋯
Equations
- Finsupp.module α M = Module.mk ⋯ ⋯
A version of Finsupp.comapDomain_smul that's easier to use.
A version of Finsupp.sum_smul_index' for bundled additive maps.
Equations
- ⋯ = ⋯
Finsupp.single as a DistribMulActionSemiHom.
See also Finsupp.lsingle for the version as a linear map.
Equations
- Finsupp.DistribMulActionHom.single a = let __src := Finsupp.singleAddHom a; { toFun := (↑__src).toFun, map_smul' := ⋯, map_zero' := ⋯, map_add' := ⋯ }
Instances For
See note [partially-applied ext lemmas].
Combine finitely supported functions over {a // P a} and {a // ¬P a}, by case-splitting on
P a.
Equations
- One or more equations did not get rendered due to their size.
Instances For
Given an AddCommMonoid M and s : Set α, restrictSupportEquiv s M is the Equiv
between the subtype of finitely supported functions with support contained in s and
the type of finitely supported functions from s.
Equations
- One or more equations did not get rendered due to their size.
Instances For
Given AddCommMonoid M and e : α ≃ β, domCongr e is the corresponding Equiv between
α →₀ M and β →₀ M.
This is Finsupp.equivCongrLeft as an AddEquiv.
Equations
- Finsupp.domCongr e = { toFun := Finsupp.equivMapDomain e, invFun := Finsupp.equivMapDomain e.symm, left_inv := ⋯, right_inv := ⋯, map_add' := ⋯ }
Instances For
Declarations about sigma types #
Given l, a finitely supported function from the sigma type Σ (i : ι), αs i to M and
an index element i : ι, split l i is the ith component of l,
a finitely supported function from as i to M.
This is the Finsupp version of Sigma.curry.
Equations
- l.split i = Finsupp.comapDomain (Sigma.mk i) l ⋯
Instances For
Given l, a finitely supported function from the sigma type Σ (i : ι), αs i to β,
split_support l is the finset of indices in ι that appear in the support of l.
Equations
- l.splitSupport = Finset.image Sigma.fst l.support
Instances For
Given l, a finitely supported function from the sigma type Σ i, αs i to β and
an ι-indexed family g of functions from (αs i →₀ β) to γ, split_comp defines a
finitely supported function from the index type ι to γ given by composing g i with
split l i.
Equations
- l.splitComp g hg = { support := l.splitSupport, toFun := fun (i : ι) => g i (l.split i), mem_support_toFun := ⋯ }
Instances For
On a Fintype η, Finsupp.split is an equivalence between (Σ (j : η), ιs j) →₀ α
and Π j, (ιs j →₀ α).
This is the Finsupp version of Equiv.Pi_curry.
Equations
- One or more equations did not get rendered due to their size.
Instances For
On a Fintype η, Finsupp.split is an additive equivalence between
(Σ (j : η), ιs j) →₀ α and Π j, (ιs j →₀ α).
This is the AddEquiv version of Finsupp.sigmaFinsuppEquivPiFinsupp.
Equations
- Finsupp.sigmaFinsuppAddEquivPiFinsupp = let __src := Finsupp.sigmaFinsuppEquivPiFinsupp; { toEquiv := __src, map_add' := ⋯ }