mathlib documentation

data.dfinsupp

Dependent functions with finite support #

For a non-dependent version see data/finsupp.lean.

structure dfinsupp.pre (ι : Type u) (β : ι → Type v) [Π (i : ι), has_zero (β i)] :
Type (max u v)

An auxiliary structure used in the definition of of dfinsupp, the type used to make infinite direct sum of modules over a ring.

@[instance]
def dfinsupp.inhabited_pre (ι : Type u) (β : ι → Type v) [Π (i : ι), has_zero (β i)] :
Equations
@[instance]
def dfinsupp.pre.setoid (ι : Type u) (β : ι → Type v) [Π (i : ι), has_zero (β i)] :
Equations
def dfinsupp {ι : Type u} (β : ι → Type v) [Π (i : ι), has_zero (β i)] :
Type (max u v)

A dependent function Π i, β i with finite support.

Equations
@[instance]
def dfinsupp.has_coe_to_fun {ι : Type u} {β : ι → Type v} [Π (i : ι), has_zero (β i)] :
has_coe_to_fun (Π₀ (i : ι), β i)
Equations
@[instance]
def dfinsupp.has_zero {ι : Type u} {β : ι → Type v} [Π (i : ι), has_zero (β i)] :
has_zero (Π₀ (i : ι), β i)
Equations
@[instance]
def dfinsupp.inhabited {ι : Type u} {β : ι → Type v} [Π (i : ι), has_zero (β i)] :
inhabited (Π₀ (i : ι), β i)
Equations
@[simp]
theorem dfinsupp.coe_pre_mk {ι : Type u} {β : ι → Type v} [Π (i : ι), has_zero (β i)] (f : Π (i : ι), β i) (s : multiset ι) (hf : ∀ (i : ι), i s f i = 0) :
{to_fun := f, pre_support := s, zero := hf} = f
@[simp]
theorem dfinsupp.coe_zero {ι : Type u} {β : ι → Type v} [Π (i : ι), has_zero (β i)] :
0 = 0
theorem dfinsupp.zero_apply {ι : Type u} {β : ι → Type v} [Π (i : ι), has_zero (β i)] (i : ι) :
0 i = 0
theorem dfinsupp.coe_fn_injective {ι : Type u} {β : ι → Type v} [Π (i : ι), has_zero (β i)] :
@[ext]
theorem dfinsupp.ext {ι : Type u} {β : ι → Type v} [Π (i : ι), has_zero (β i)] {f g : Π₀ (i : ι), β i} (H : ∀ (i : ι), f i = g i) :
f = g
theorem dfinsupp.ext_iff {ι : Type u} {β : ι → Type v} [Π (i : ι), has_zero (β i)] {f g : Π₀ (i : ι), β i} :
f = g ∀ (i : ι), f i = g i
def dfinsupp.map_range {ι : Type u} {β₁ : ι → Type v₁} {β₂ : ι → Type v₂} [Π (i : ι), has_zero (β₁ i)] [Π (i : ι), has_zero (β₂ i)] (f : Π (i : ι), β₁ iβ₂ i) (hf : ∀ (i : ι), f i 0 = 0) :
(Π₀ (i : ι), β₁ i)(Π₀ (i : ι), β₂ i)

The composition of f : β₁ → β₂ and g : Π₀ i, β₁ i is map_range f hf g : Π₀ i, β₂ i, well defined when f 0 = 0.

This preserves the structure on f, and exists in various bundled forms for when f is itself bundled:

Equations
@[simp]
theorem dfinsupp.map_range_apply {ι : Type u} {β₁ : ι → Type v₁} {β₂ : ι → Type v₂} [Π (i : ι), has_zero (β₁ i)] [Π (i : ι), has_zero (β₂ i)] (f : Π (i : ι), β₁ iβ₂ i) (hf : ∀ (i : ι), f i 0 = 0) (g : Π₀ (i : ι), β₁ i) (i : ι) :
(dfinsupp.map_range f hf g) i = f i (g i)
@[simp]
theorem dfinsupp.map_range_id {ι : Type u} {β₁ : ι → Type v₁} [Π (i : ι), has_zero (β₁ i)] (h : (∀ (i : ι), id 0 = 0) := _) (g : Π₀ (i : ι), β₁ i) :
dfinsupp.map_range (λ (i : ι), id) h g = g
theorem dfinsupp.map_range_comp {ι : Type u} {β : ι → Type v} {β₁ : ι → Type v₁} {β₂ : ι → Type v₂} [Π (i : ι), has_zero (β i)] [Π (i : ι), has_zero (β₁ i)] [Π (i : ι), has_zero (β₂ i)] (f : Π (i : ι), β₁ iβ₂ i) (f₂ : Π (i : ι), β iβ₁ i) (hf : ∀ (i : ι), f i 0 = 0) (hf₂ : ∀ (i : ι), f₂ i 0 = 0) (h : ∀ (i : ι), (f i f₂ i) 0 = 0) (g : Π₀ (i : ι), β i) :
dfinsupp.map_range (λ (i : ι), f i f₂ i) h g = dfinsupp.map_range f hf (dfinsupp.map_range f₂ hf₂ g)
@[simp]
theorem dfinsupp.map_range_zero {ι : Type u} {β₁ : ι → Type v₁} {β₂ : ι → Type v₂} [Π (i : ι), has_zero (β₁ i)] [Π (i : ι), has_zero (β₂ i)] (f : Π (i : ι), β₁ iβ₂ i) (hf : ∀ (i : ι), f i 0 = 0) :
def dfinsupp.zip_with {ι : Type u} {β : ι → Type v} {β₁ : ι → Type v₁} {β₂ : ι → Type v₂} [Π (i : ι), has_zero (β i)] [Π (i : ι), has_zero (β₁ i)] [Π (i : ι), has_zero (β₂ i)] (f : Π (i : ι), β₁ iβ₂ iβ i) (hf : ∀ (i : ι), f i 0 0 = 0) :
(Π₀ (i : ι), β₁ i)(Π₀ (i : ι), β₂ i)(Π₀ (i : ι), β i)

Let f i be a binary operation β₁ i → β₂ i → β i such that f i 0 0 = 0. Then zip_with f hf is a binary operation Π₀ i, β₁ i → Π₀ i, β₂ i → Π₀ i, β i.

Equations
@[simp]
theorem dfinsupp.zip_with_apply {ι : Type u} {β : ι → Type v} {β₁ : ι → Type v₁} {β₂ : ι → Type v₂} [Π (i : ι), has_zero (β i)] [Π (i : ι), has_zero (β₁ i)] [Π (i : ι), has_zero (β₂ i)] (f : Π (i : ι), β₁ iβ₂ iβ i) (hf : ∀ (i : ι), f i 0 0 = 0) (g₁ : Π₀ (i : ι), β₁ i) (g₂ : Π₀ (i : ι), β₂ i) (i : ι) :
(dfinsupp.zip_with f hf g₁ g₂) i = f i (g₁ i) (g₂ i)
@[instance]
def dfinsupp.has_add {ι : Type u} {β : ι → Type v} [Π (i : ι), add_zero_class (β i)] :
has_add (Π₀ (i : ι), β i)
Equations
theorem dfinsupp.add_apply {ι : Type u} {β : ι → Type v} [Π (i : ι), add_zero_class (β i)] (g₁ g₂ : Π₀ (i : ι), β i) (i : ι) :
(g₁ + g₂) i = g₁ i + g₂ i
@[simp]
theorem dfinsupp.coe_add {ι : Type u} {β : ι → Type v} [Π (i : ι), add_zero_class (β i)] (g₁ g₂ : Π₀ (i : ι), β i) :
(g₁ + g₂) = g₁ + g₂
@[instance]
def dfinsupp.add_zero_class {ι : Type u} {β : ι → Type v} [Π (i : ι), add_zero_class (β i)] :
add_zero_class (Π₀ (i : ι), β i)
Equations
@[instance]
def dfinsupp.add_monoid {ι : Type u} {β : ι → Type v} [Π (i : ι), add_monoid (β i)] :
add_monoid (Π₀ (i : ι), β i)
Equations
def dfinsupp.coe_fn_add_monoid_hom {ι : Type u} {β : ι → Type v} [Π (i : ι), add_zero_class (β i)] :
(Π₀ (i : ι), β i) →+ Π (i : ι), β i

Coercion from a dfinsupp to a pi type is an add_monoid_hom.

Equations
def dfinsupp.eval_add_monoid_hom {ι : Type u} {β : ι → Type v} [Π (i : ι), add_zero_class (β i)] (i : ι) :
(Π₀ (i : ι), β i) →+ β i

Evaluation at a point is an add_monoid_hom. This is the finitely-supported version of pi.eval_add_monoid_hom.

Equations
@[instance]
def dfinsupp.add_comm_monoid {ι : Type u} {β : ι → Type v} [Π (i : ι), add_comm_monoid (β i)] :
add_comm_monoid (Π₀ (i : ι), β i)
Equations
@[simp]
theorem dfinsupp.coe_finset_sum {ι : Type u} {β : ι → Type v} {α : Type u_1} [Π (i : ι), add_comm_monoid (β i)] (s : finset α) (g : α → (Π₀ (i : ι), β i)) :
∑ (a : α) in s, g a = ∑ (a : α) in s, (g a)
@[simp]
theorem dfinsupp.finset_sum_apply {ι : Type u} {β : ι → Type v} {α : Type u_1} [Π (i : ι), add_comm_monoid (β i)] (s : finset α) (g : α → (Π₀ (i : ι), β i)) (i : ι) :
(∑ (a : α) in s, g a) i = ∑ (a : α) in s, (g a) i
@[instance]
def dfinsupp.has_neg {ι : Type u} {β : ι → Type v} [Π (i : ι), add_group (β i)] :
has_neg (Π₀ (i : ι), β i)
Equations
theorem dfinsupp.neg_apply {ι : Type u} {β : ι → Type v} [Π (i : ι), add_group (β i)] (g : Π₀ (i : ι), β i) (i : ι) :
(-g) i = -g i
@[simp]
theorem dfinsupp.coe_neg {ι : Type u} {β : ι → Type v} [Π (i : ι), add_group (β i)] (g : Π₀ (i : ι), β i) :
@[instance]
def dfinsupp.has_sub {ι : Type u} {β : ι → Type v} [Π (i : ι), add_group (β i)] :
has_sub (Π₀ (i : ι), β i)
Equations
theorem dfinsupp.sub_apply {ι : Type u} {β : ι → Type v} [Π (i : ι), add_group (β i)] (g₁ g₂ : Π₀ (i : ι), β i) (i : ι) :
(g₁ - g₂) i = g₁ i - g₂ i
@[simp]
theorem dfinsupp.coe_sub {ι : Type u} {β : ι → Type v} [Π (i : ι), add_group (β i)] (g₁ g₂ : Π₀ (i : ι), β i) :
(g₁ - g₂) = g₁ - g₂
@[instance]
def dfinsupp.add_group {ι : Type u} {β : ι → Type v} [Π (i : ι), add_group (β i)] :
add_group (Π₀ (i : ι), β i)
Equations
@[instance]
def dfinsupp.has_scalar {ι : Type u} {γ : Type w} {β : ι → Type v} [monoid γ] [Π (i : ι), add_monoid (β i)] [Π (i : ι), distrib_mul_action γ (β i)] :
has_scalar γ (Π₀ (i : ι), β i)

Dependent functions with finite support inherit a semiring action from an action on each coordinate.

Equations
theorem dfinsupp.smul_apply {ι : Type u} {γ : Type w} {β : ι → Type v} [monoid γ] [Π (i : ι), add_monoid (β i)] [Π (i : ι), distrib_mul_action γ (β i)] (b : γ) (v : Π₀ (i : ι), β i) (i : ι) :
(b v) i = b v i
@[simp]
theorem dfinsupp.coe_smul {ι : Type u} {γ : Type w} {β : ι → Type v} [monoid γ] [Π (i : ι), add_monoid (β i)] [Π (i : ι), distrib_mul_action γ (β i)] (b : γ) (v : Π₀ (i : ι), β i) :
(b v) = b v
@[instance]
def dfinsupp.smul_comm_class {ι : Type u} {γ : Type w} {β : ι → Type v} {δ : Type u_1} [monoid γ] [monoid δ] [Π (i : ι), add_monoid (β i)] [Π (i : ι), distrib_mul_action γ (β i)] [Π (i : ι), distrib_mul_action δ (β i)] [∀ (i : ι), smul_comm_class γ δ (β i)] :
smul_comm_class γ δ (Π₀ (i : ι), β i)
@[instance]
def dfinsupp.is_scalar_tower {ι : Type u} {γ : Type w} {β : ι → Type v} {δ : Type u_1} [monoid γ] [monoid δ] [Π (i : ι), add_monoid (β i)] [Π (i : ι), distrib_mul_action γ (β i)] [Π (i : ι), distrib_mul_action δ (β i)] [has_scalar γ δ] [∀ (i : ι), is_scalar_tower γ δ (β i)] :
is_scalar_tower γ δ (Π₀ (i : ι), β i)
@[instance]
def dfinsupp.distrib_mul_action {ι : Type u} {γ : Type w} {β : ι → Type v} [monoid γ] [Π (i : ι), add_monoid (β i)] [Π (i : ι), distrib_mul_action γ (β i)] :
distrib_mul_action γ (Π₀ (i : ι), β i)

Dependent functions with finite support inherit a distrib_mul_action structure from such a structure on each coordinate.

Equations
@[instance]
def dfinsupp.module {ι : Type u} {γ : Type w} {β : ι → Type v} [semiring γ] [Π (i : ι), add_comm_monoid (β i)] [Π (i : ι), module γ (β i)] :
module γ (Π₀ (i : ι), β i)

Dependent functions with finite support inherit a module structure from such a structure on each coordinate.

Equations
def dfinsupp.filter {ι : Type u} {β : ι → Type v} [Π (i : ι), has_zero (β i)] (p : ι → Prop) [decidable_pred p] :
(Π₀ (i : ι), β i)(Π₀ (i : ι), β i)

filter p f is the function which is f i if p i is true and 0 otherwise.

Equations
@[simp]
theorem dfinsupp.filter_apply {ι : Type u} {β : ι → Type v} [Π (i : ι), has_zero (β i)] (p : ι → Prop) [decidable_pred p] (i : ι) (f : Π₀ (i : ι), β i) :
(dfinsupp.filter p f) i = ite (p i) (f i) 0
theorem dfinsupp.filter_apply_pos {ι : Type u} {β : ι → Type v} [Π (i : ι), has_zero (β i)] {p : ι → Prop} [decidable_pred p] (f : Π₀ (i : ι), β i) {i : ι} (h : p i) :
theorem dfinsupp.filter_apply_neg {ι : Type u} {β : ι → Type v} [Π (i : ι), has_zero (β i)] {p : ι → Prop} [decidable_pred p] (f : Π₀ (i : ι), β i) {i : ι} (h : ¬p i) :
theorem dfinsupp.filter_pos_add_filter_neg {ι : Type u} {β : ι → Type v} [Π (i : ι), add_zero_class (β i)] (f : Π₀ (i : ι), β i) (p : ι → Prop) [decidable_pred p] :
dfinsupp.filter p f + dfinsupp.filter (λ (i : ι), ¬p i) f = f
@[simp]
theorem dfinsupp.filter_zero {ι : Type u} {β : ι → Type v} [Π (i : ι), has_zero (β i)] (p : ι → Prop) [decidable_pred p] :
@[simp]
theorem dfinsupp.filter_add {ι : Type u} {β : ι → Type v} [Π (i : ι), add_zero_class (β i)] (p : ι → Prop) [decidable_pred p] (f g : Π₀ (i : ι), β i) :
@[simp]
theorem dfinsupp.filter_smul {ι : Type u} {γ : Type w} {β : ι → Type v} [monoid γ] [Π (i : ι), add_monoid (β i)] [Π (i : ι), distrib_mul_action γ (β i)] (p : ι → Prop) [decidable_pred p] (r : γ) (f : Π₀ (i : ι), β i) :
def dfinsupp.filter_add_monoid_hom {ι : Type u} (β : ι → Type v) [Π (i : ι), add_zero_class (β i)] (p : ι → Prop) [decidable_pred p] :
(Π₀ (i : ι), β i) →+ Π₀ (i : ι), β i

dfinsupp.filter as an add_monoid_hom.

Equations
@[simp]
theorem dfinsupp.filter_add_monoid_hom_apply {ι : Type u} (β : ι → Type v) [Π (i : ι), add_zero_class (β i)] (p : ι → Prop) [decidable_pred p] (ᾰ : Π₀ (i : ι), (λ (i : ι), β i) i) :
@[simp]
theorem dfinsupp.filter_linear_map_apply {ι : Type u} (γ : Type w) (β : ι → Type v) [semiring γ] [Π (i : ι), add_comm_monoid (β i)] [Π (i : ι), module γ (β i)] (p : ι → Prop) [decidable_pred p] (ᾰ : Π₀ (i : ι), (λ (i : ι), β i) i) :
def dfinsupp.filter_linear_map {ι : Type u} (γ : Type w) (β : ι → Type v) [semiring γ] [Π (i : ι), add_comm_monoid (β i)] [Π (i : ι), module γ (β i)] (p : ι → Prop) [decidable_pred p] :
(Π₀ (i : ι), β i) →ₗ[γ] Π₀ (i : ι), β i

dfinsupp.filter as a linear_map.

Equations
@[simp]
theorem dfinsupp.filter_neg {ι : Type u} {β : ι → Type v} [Π (i : ι), add_group (β i)] (p : ι → Prop) [decidable_pred p] (f : Π₀ (i : ι), β i) :
@[simp]
theorem dfinsupp.filter_sub {ι : Type u} {β : ι → Type v} [Π (i : ι), add_group (β i)] (p : ι → Prop) [decidable_pred p] (f g : Π₀ (i : ι), β i) :
def dfinsupp.subtype_domain {ι : Type u} {β : ι → Type v} [Π (i : ι), has_zero (β i)] (p : ι → Prop) [decidable_pred p] :
(Π₀ (i : ι), β i)(Π₀ (i : subtype p), β i)

subtype_domain p f is the restriction of the finitely supported function f to the subtype p.

Equations
@[simp]
theorem dfinsupp.subtype_domain_zero {ι : Type u} {β : ι → Type v} [Π (i : ι), has_zero (β i)] {p : ι → Prop} [decidable_pred p] :
@[simp]
theorem dfinsupp.subtype_domain_apply {ι : Type u} {β : ι → Type v} [Π (i : ι), has_zero (β i)] {p : ι → Prop} [decidable_pred p] {i : subtype p} {v : Π₀ (i : ι), β i} :
@[simp]
theorem dfinsupp.subtype_domain_add {ι : Type u} {β : ι → Type v} [Π (i : ι), add_zero_class (β i)] {p : ι → Prop} [decidable_pred p] (v v' : Π₀ (i : ι), β i) :
@[simp]
theorem dfinsupp.subtype_domain_smul {ι : Type u} {γ : Type w} {β : ι → Type v} [monoid γ] [Π (i : ι), add_monoid (β i)] [Π (i : ι), distrib_mul_action γ (β i)] {p : ι → Prop} [decidable_pred p] (r : γ) (f : Π₀ (i : ι), β i) :
def dfinsupp.subtype_domain_add_monoid_hom {ι : Type u} (β : ι → Type v) [Π (i : ι), add_zero_class (β i)] (p : ι → Prop) [decidable_pred p] :
(Π₀ (i : ι), β i) →+ Π₀ (i : subtype p), β i

subtype_domain but as an add_monoid_hom.

Equations
@[simp]
theorem dfinsupp.subtype_domain_add_monoid_hom_apply {ι : Type u} (β : ι → Type v) [Π (i : ι), add_zero_class (β i)] (p : ι → Prop) [decidable_pred p] (ᾰ : Π₀ (i : ι), (λ (i : ι), β i) i) :
def dfinsupp.subtype_domain_linear_map {ι : Type u} (γ : Type w) (β : ι → Type v) [semiring γ] [Π (i : ι), add_comm_monoid (β i)] [Π (i : ι), module γ (β i)] (p : ι → Prop) [decidable_pred p] :
(Π₀ (i : ι), β i) →ₗ[γ] Π₀ (i : subtype p), β i

dfinsupp.subtype_domain as a linear_map.

Equations
@[simp]
theorem dfinsupp.subtype_domain_linear_map_apply {ι : Type u} (γ : Type w) (β : ι → Type v) [semiring γ] [Π (i : ι), add_comm_monoid (β i)] [Π (i : ι), module γ (β i)] (p : ι → Prop) [decidable_pred p] (ᾰ : Π₀ (i : ι), (λ (i : ι), β i) i) :
@[simp]
theorem dfinsupp.subtype_domain_neg {ι : Type u} {β : ι → Type v} [Π (i : ι), add_group (β i)] {p : ι → Prop} [decidable_pred p] {v : Π₀ (i : ι), β i} :
@[simp]
theorem dfinsupp.subtype_domain_sub {ι : Type u} {β : ι → Type v} [Π (i : ι), add_group (β i)] {p : ι → Prop} [decidable_pred p] {v v' : Π₀ (i : ι), β i} :
theorem dfinsupp.finite_support {ι : Type u} {β : ι → Type v} [Π (i : ι), has_zero (β i)] (f : Π₀ (i : ι), β i) :
{i : ι | f i 0}.finite
def dfinsupp.mk {ι : Type u} {β : ι → Type v} [dec : decidable_eq ι] [Π (i : ι), has_zero (β i)] (s : finset ι) (x : Π (i : s), β i) :
Π₀ (i : ι), β i

Create an element of Π₀ i, β i from a finset s and a function x defined on this finset.

Equations
@[simp]
theorem dfinsupp.mk_apply {ι : Type u} {β : ι → Type v} [dec : decidable_eq ι] [Π (i : ι), has_zero (β i)] {s : finset ι} {x : Π (i : s), β i} {i : ι} :
(dfinsupp.mk s x) i = dite (i s) (λ (H : i s), x i, H⟩) (λ (H : i s), 0)
theorem dfinsupp.mk_injective {ι : Type u} {β : ι → Type v} [dec : decidable_eq ι] [Π (i : ι), has_zero (β i)] (s : finset ι) :
def dfinsupp.single {ι : Type u} {β : ι → Type v} [dec : decidable_eq ι] [Π (i : ι), has_zero (β i)] (i : ι) (b : β i) :
Π₀ (i : ι), β i

The function single i b : Π₀ i, β i sends i to b and all other points to 0.

Equations
@[simp]
theorem dfinsupp.single_apply {ι : Type u} {β : ι → Type v} [dec : decidable_eq ι] [Π (i : ι), has_zero (β i)] {i i' : ι} {b : β i} :
(dfinsupp.single i b) i' = dite (i = i') (λ (h : i = i'), h.rec_on b) (λ (h : ¬i = i'), 0)
@[simp]
theorem dfinsupp.single_zero {ι : Type u} {β : ι → Type v} [dec : decidable_eq ι] [Π (i : ι), has_zero (β i)] (i : ι) :
@[simp]
theorem dfinsupp.single_eq_same {ι : Type u} {β : ι → Type v} [dec : decidable_eq ι] [Π (i : ι), has_zero (β i)] {i : ι} {b : β i} :
theorem dfinsupp.single_eq_of_ne {ι : Type u} {β : ι → Type v} [dec : decidable_eq ι] [Π (i : ι), has_zero (β i)] {i i' : ι} {b : β i} (h : i i') :
theorem dfinsupp.single_injective {ι : Type u} {β : ι → Type v} [dec : decidable_eq ι] [Π (i : ι), has_zero (β i)] {i : ι} :
theorem dfinsupp.single_eq_single_iff {ι : Type u} {β : ι → Type v} [dec : decidable_eq ι] [Π (i : ι), has_zero (β i)] (i j : ι) (xi : β i) (xj : β j) :
dfinsupp.single i xi = dfinsupp.single j xj i = j xi == xj xi = 0 xj = 0

Like finsupp.single_eq_single_iff, but with a heq due to dependent types

@[simp]
theorem dfinsupp.single_eq_zero {ι : Type u} {β : ι → Type v} [dec : decidable_eq ι] [Π (i : ι), has_zero (β i)] {i : ι} {xi : β i} :
dfinsupp.single i xi = 0 xi = 0
theorem dfinsupp.filter_single {ι : Type u} {β : ι → Type v} [dec : decidable_eq ι] [Π (i : ι), has_zero (β i)] (p : ι → Prop) [decidable_pred p] (i : ι) (x : β i) :
@[simp]
theorem dfinsupp.filter_single_pos {ι : Type u} {β : ι → Type v} [dec : decidable_eq ι] [Π (i : ι), has_zero (β i)] {p : ι → Prop} [decidable_pred p] (i : ι) (x : β i) (h : p i) :
@[simp]
theorem dfinsupp.filter_single_neg {ι : Type u} {β : ι → Type v} [dec : decidable_eq ι] [Π (i : ι), has_zero (β i)] {p : ι → Prop} [decidable_pred p] (i : ι) (x : β i) (h : ¬p i) :
theorem dfinsupp.single_eq_of_sigma_eq {ι : Type u} {β : ι → Type v} [dec : decidable_eq ι] [Π (i : ι), has_zero (β i)] {i j : ι} {xi : β i} {xj : β j} (h : i, xi⟩ = j, xj⟩) :

Equality of sigma types is sufficient (but not necessary) to show equality of dfinsupps.

def dfinsupp.erase {ι : Type u} {β : ι → Type v} [dec : decidable_eq ι] [Π (i : ι), has_zero (β i)] (i : ι) :
(Π₀ (i : ι), β i)(Π₀ (i : ι), β i)

Redefine f i to be 0.

Equations
@[simp]
theorem dfinsupp.erase_apply {ι : Type u} {β : ι → Type v} [dec : decidable_eq ι] [Π (i : ι), has_zero (β i)] {i j : ι} {f : Π₀ (i : ι), β i} :
(dfinsupp.erase i f) j = ite (j = i) 0 (f j)
@[simp]
theorem dfinsupp.erase_same {ι : Type u} {β : ι → Type v} [dec : decidable_eq ι] [Π (i : ι), has_zero (β i)] {i : ι} {f : Π₀ (i : ι), β i} :
theorem dfinsupp.erase_ne {ι : Type u} {β : ι → Type v} [dec : decidable_eq ι] [Π (i : ι), has_zero (β i)] {i i' : ι} {f : Π₀ (i : ι), β i} (h : i' i) :
(dfinsupp.erase i f) i' = f i'
@[simp]
theorem dfinsupp.erase_zero {ι : Type u} {β : ι → Type v} [dec : decidable_eq ι] [Π (i : ι), has_zero (β i)] (i : ι) :
@[simp]
theorem dfinsupp.filter_ne_eq_erase {ι : Type u} {β : ι → Type v} [dec : decidable_eq ι] [Π (i : ι), has_zero (β i)] (f : Π₀ (i : ι), β i) (i : ι) :
dfinsupp.filter (λ (_x : ι), _x i) f = dfinsupp.erase i f
@[simp]
theorem dfinsupp.filter_ne_eq_erase' {ι : Type u} {β : ι → Type v} [dec : decidable_eq ι] [Π (i : ι), has_zero (β i)] (f : Π₀ (i : ι), β i) (i : ι) :
theorem dfinsupp.erase_single {ι : Type u} {β : ι → Type v} [dec : decidable_eq ι] [Π (i : ι), has_zero (β i)] (j i : ι) (x : β i) :
@[simp]
theorem dfinsupp.erase_single_same {ι : Type u} {β : ι → Type v} [dec : decidable_eq ι] [Π (i : ι), has_zero (β i)] (i : ι) (x : β i) :
@[simp]
theorem dfinsupp.erase_single_ne {ι : Type u} {β : ι → Type v} [dec : decidable_eq ι] [Π (i : ι), has_zero (β i)] {i j : ι} (x : β i) (h : i j) :
def dfinsupp.update {ι : Type u} {β : ι → Type v} [dec : decidable_eq ι] [Π (i : ι), has_zero (β i)] (f : Π₀ (i : ι), β i) (i : ι) (b : β i) [decidable (b = 0)] :
Π₀ (i : ι), β i

Replace the value of a Π₀ i, β i at a given point i : ι by a given value b : β i. If b = 0, this amounts to removing i from the support. Otherwise, i is added to it.

This is the (dependent) finitely-supported version of function.update.

Equations
@[simp]
theorem dfinsupp.coe_update {ι : Type u} {β : ι → Type v} [dec : decidable_eq ι] [Π (i : ι), has_zero (β i)] (f : Π₀ (i : ι), β i) (i : ι) (b : β i) [decidable (b = 0)] :
@[simp]
theorem dfinsupp.update_self {ι : Type u} {β : ι → Type v} [dec : decidable_eq ι] [Π (i : ι), has_zero (β i)] (f : Π₀ (i : ι), β i) (i : ι) [decidable (f i = 0)] :
f.update i (f i) = f
@[simp]
theorem dfinsupp.update_eq_erase {ι : Type u} {β : ι → Type v} [dec : decidable_eq ι] [Π (i : ι), has_zero (β i)] (f : Π₀ (i : ι), β i) (i : ι) [decidable (0 = 0)] :
@[simp]
theorem dfinsupp.single_add {ι : Type u} {β : ι → Type v} [dec : decidable_eq ι] [Π (i : ι), add_zero_class (β i)] (i : ι) (b₁ b₂ : β i) :
dfinsupp.single i (b₁ + b₂) = dfinsupp.single i b₁ + dfinsupp.single i b₂
@[simp]
theorem dfinsupp.erase_add {ι : Type u} {β : ι → Type v} [dec : decidable_eq ι] [Π (i : ι), add_zero_class (β i)] (i : ι) (f₁ f₂ : Π₀ (i : ι), β i) :
dfinsupp.erase i (f₁ + f₂) = dfinsupp.erase i f₁ + dfinsupp.erase i f₂
@[simp]
theorem dfinsupp.single_add_hom_apply {ι : Type u} (β : ι → Type v) [dec : decidable_eq ι] [Π (i : ι), add_zero_class (β i)] (i : ι) (b : β i) :
def dfinsupp.single_add_hom {ι : Type u} (β : ι → Type v) [dec : decidable_eq ι] [Π (i : ι), add_zero_class (β i)] (i : ι) :
β i →+ Π₀ (i : ι), β i

dfinsupp.single as an add_monoid_hom.

Equations
def dfinsupp.erase_add_hom {ι : Type u} (β : ι → Type v) [dec : decidable_eq ι] [Π (i : ι), add_zero_class (β i)] (i : ι) :
(Π₀ (i : ι), β i) →+ Π₀ (i : ι), β i

dfinsupp.erase as an add_monoid_hom.

Equations
@[simp]
theorem dfinsupp.erase_add_hom_apply {ι : Type u} (β : ι → Type v) [dec : decidable_eq ι] [Π (i : ι), add_zero_class (β i)] (i : ι) (ᾰ : Π₀ (i : ι), (λ (i : ι), β i) i) :
@[simp]
theorem dfinsupp.single_neg {ι : Type u} [dec : decidable_eq ι] {β : ι → Type v} [Π (i : ι), add_group (β i)] (i : ι) (x : β i) :
@[simp]
theorem dfinsupp.single_sub {ι : Type u} [dec : decidable_eq ι] {β : ι → Type v} [Π (i : ι), add_group (β i)] (i : ι) (x y : β i) :
@[simp]
theorem dfinsupp.erase_neg {ι : Type u} [dec : decidable_eq ι] {β : ι → Type v} [Π (i : ι), add_group (β i)] (i : ι) (f : Π₀ (i : ι), β i) :
@[simp]
theorem dfinsupp.erase_sub {ι : Type u} [dec : decidable_eq ι] {β : ι → Type v} [Π (i : ι), add_group (β i)] (i : ι) (f g : Π₀ (i : ι), β i) :
theorem dfinsupp.single_add_erase {ι : Type u} {β : ι → Type v} [dec : decidable_eq ι] [Π (i : ι), add_zero_class (β i)] (i : ι) (f : Π₀ (i : ι), β i) :
theorem dfinsupp.erase_add_single {ι : Type u} {β : ι → Type v} [dec : decidable_eq ι] [Π (i : ι), add_zero_class (β i)] (i : ι) (f : Π₀ (i : ι), β i) :
theorem dfinsupp.induction {ι : Type u} {β : ι → Type v} [dec : decidable_eq ι] [Π (i : ι), add_zero_class (β i)] {p : (Π₀ (i : ι), β i) → Prop} (f : Π₀ (i : ι), β i) (h0 : p 0) (ha : ∀ (i : ι) (b : β i) (f : Π₀ (i : ι), β i), f i = 0b 0p fp (dfinsupp.single i b + f)) :
p f
theorem dfinsupp.induction₂ {ι : Type u} {β : ι → Type v} [dec : decidable_eq ι] [Π (i : ι), add_zero_class (β i)] {p : (Π₀ (i : ι), β i) → Prop} (f : Π₀ (i : ι), β i) (h0 : p 0) (ha : ∀ (i : ι) (b : β i) (f : Π₀ (i : ι), β i), f i = 0b 0p fp (f + dfinsupp.single i b)) :
p f
@[simp]
theorem dfinsupp.add_closure_Union_range_single {ι : Type u} {β : ι → Type v} [dec : decidable_eq ι] [Π (i : ι), add_zero_class (β i)] :
theorem dfinsupp.add_hom_ext {ι : Type u} {β : ι → Type v} [dec : decidable_eq ι] [Π (i : ι), add_zero_class (β i)] {γ : Type w} [add_zero_class γ] ⦃f g : (Π₀ (i : ι), β i) →+ γ⦄ (H : ∀ (i : ι) (y : β i), f (dfinsupp.single i y) = g (dfinsupp.single i y)) :
f = g

If two additive homomorphisms from Π₀ i, β i are equal on each single a b, then they are equal.

@[ext]
theorem dfinsupp.add_hom_ext' {ι : Type u} {β : ι → Type v} [dec : decidable_eq ι] [Π (i : ι), add_zero_class (β i)] {γ : Type w} [add_zero_class γ] ⦃f g : (Π₀ (i : ι), β i) →+ γ⦄ (H : ∀ (x : ι), f.comp (dfinsupp.single_add_hom β x) = g.comp (dfinsupp.single_add_hom β x)) :
f = g

If two additive homomorphisms from Π₀ i, β i are equal on each single a b, then they are equal.

See note [partially-applied ext lemmas].

@[simp]
theorem dfinsupp.mk_add {ι : Type u} {β : ι → Type v} [dec : decidable_eq ι] [Π (i : ι), add_zero_class (β i)] {s : finset ι} {x y : Π (i : s), β i} :
@[simp]
theorem dfinsupp.mk_zero {ι : Type u} {β : ι → Type v} [dec : decidable_eq ι] [Π (i : ι), has_zero (β i)] {s : finset ι} :
@[simp]
theorem dfinsupp.mk_neg {ι : Type u} {β : ι → Type v} [dec : decidable_eq ι] [Π (i : ι), add_group (β i)] {s : finset ι} {x : Π (i : s), β i.val} :
@[simp]
theorem dfinsupp.mk_sub {ι : Type u} {β : ι → Type v} [dec : decidable_eq ι] [Π (i : ι), add_group (β i)] {s : finset ι} {x y : Π (i : s), β i.val} :
def dfinsupp.mk_add_group_hom {ι : Type u} {β : ι → Type v} [dec : decidable_eq ι] [Π (i : ι), add_group (β i)] (s : finset ι) :
(Π (i : s), β i) →+ Π₀ (i : ι), β i

If s is a subset of ι then mk_add_group_hom s is the canonical additive group homomorphism from $\prod_{i\in s}\beta_i$ to $\prod_{\mathtt{i : \iota}}\beta_i.$

Equations
@[simp]
theorem dfinsupp.mk_smul {ι : Type u} {γ : Type w} {β : ι → Type v} [dec : decidable_eq ι] [monoid γ] [Π (i : ι), add_monoid (β i)] [Π (i : ι), distrib_mul_action γ (β i)] {s : finset ι} (c : γ) (x : Π (i : s), β i) :
@[simp]
theorem dfinsupp.single_smul {ι : Type u} {γ : Type w} {β : ι → Type v} [dec : decidable_eq ι] [monoid γ] [Π (i : ι), add_monoid (β i)] [Π (i : ι), distrib_mul_action γ (β i)] {i : ι} (c : γ) (x : β i) :
def dfinsupp.support {ι : Type u} {β : ι → Type v} [dec : decidable_eq ι] [Π (i : ι), has_zero (β i)] [Π (i : ι) (x : β i), decidable (x 0)] (f : Π₀ (i : ι), β i) :

Set {i | f x ≠ 0} as a finset.

Equations
@[simp]
theorem dfinsupp.support_mk_subset {ι : Type u} {β : ι → Type v} [dec : decidable_eq ι] [Π (i : ι), has_zero (β i)] [Π (i : ι) (x : β i), decidable (x 0)] {s : finset ι} {x : Π (i : s), β i.val} :
@[simp]
theorem dfinsupp.mem_support_to_fun {ι : Type u} {β : ι → Type v} [dec : decidable_eq ι] [Π (i : ι), has_zero (β i)] [Π (i : ι) (x : β i), decidable (x 0)] (f : Π₀ (i : ι), β i) (i : ι) :
i f.support f i 0
theorem dfinsupp.eq_mk_support {ι : Type u} {β : ι → Type v} [dec : decidable_eq ι] [Π (i : ι), has_zero (β i)] [Π (i : ι) (x : β i), decidable (x 0)] (f : Π₀ (i : ι), β i) :
f = dfinsupp.mk f.support (λ (i : (f.support)), f i)
@[simp]
theorem dfinsupp.support_zero {ι : Type u} {β : ι → Type v} [dec : decidable_eq ι] [Π (i : ι), has_zero (β i)] [Π (i : ι) (x : β i), decidable (x 0)] :
theorem dfinsupp.mem_support_iff {ι : Type u} {β : ι → Type v} [dec : decidable_eq ι] [Π (i : ι), has_zero (β i)] [Π (i : ι) (x : β i), decidable (x 0)] (f : Π₀ (i : ι), β i) (i : ι) :
i f.support f i 0
@[simp]
theorem dfinsupp.support_eq_empty {ι : Type u} {β : ι → Type v} [dec : decidable_eq ι] [Π (i : ι), has_zero (β i)] [Π (i : ι) (x : β i), decidable (x 0)] {f : Π₀ (i : ι), β i} :
f.support = f = 0
@[instance]
def dfinsupp.decidable_zero {ι : Type u} {β : ι → Type v} [dec : decidable_eq ι] [Π (i : ι), has_zero (β i)] [Π (i : ι) (x : β i), decidable (x 0)] :
Equations
theorem dfinsupp.support_subset_iff {ι : Type u} {β : ι → Type v} [dec : decidable_eq ι] [Π (i : ι), has_zero (β i)] [Π (i : ι) (x : β i), decidable (x 0)] {s : set ι} {f : Π₀ (i : ι), β i} :
(f.support) s ∀ (i : ι), i sf i = 0
theorem dfinsupp.support_single_ne_zero {ι : Type u} {β : ι → Type v} [dec : decidable_eq ι] [Π (i : ι), has_zero (β i)] [Π (i : ι) (x : β i), decidable (x 0)] {i : ι} {b : β i} (hb : b 0) :
theorem dfinsupp.support_single_subset {ι : Type u} {β : ι → Type v} [dec : decidable_eq ι] [Π (i : ι), has_zero (β i)] [Π (i : ι) (x : β i), decidable (x 0)] {i : ι} {b : β i} :
theorem dfinsupp.map_range_def {ι : Type u} {β₁ : ι → Type v₁} {β₂ : ι → Type v₂} [dec : decidable_eq ι] [Π (i : ι), has_zero (β₁ i)] [Π (i : ι), has_zero (β₂ i)] [Π (i : ι) (x : β₁ i), decidable (x 0)] {f : Π (i : ι), β₁ iβ₂ i} {hf : ∀ (i : ι), f i 0 = 0} {g : Π₀ (i : ι), β₁ i} :
dfinsupp.map_range f hf g = dfinsupp.mk g.support (λ (i : (g.support)), f i.val (g i.val))
@[simp]
theorem dfinsupp.map_range_single {ι : Type u} {β₁ : ι → Type v₁} {β₂ : ι → Type v₂} [dec : decidable_eq ι] [Π (i : ι), has_zero (β₁ i)] [Π (i : ι), has_zero (β₂ i)] {f : Π (i : ι), β₁ iβ₂ i} {hf : ∀ (i : ι), f i 0 = 0} {i : ι} {b : β₁ i} :
theorem dfinsupp.support_map_range {ι : Type u} {β₁ : ι → Type v₁} {β₂ : ι → Type v₂} [dec : decidable_eq ι] [Π (i : ι), has_zero (β₁ i)] [Π (i : ι), has_zero (β₂ i)] [Π (i : ι) (x : β₁ i), decidable (x 0)] [Π (i : ι) (x : β₂ i), decidable (x 0)] {f : Π (i : ι), β₁ iβ₂ i} {hf : ∀ (i : ι), f i 0 = 0} {g : Π₀ (i : ι), β₁ i} :
theorem dfinsupp.zip_with_def {ι : Type u} {β : ι → Type v} {β₁ : ι → Type v₁} {β₂ : ι → Type v₂} [dec : decidable_eq ι] [Π (i : ι), has_zero (β i)] [Π (i : ι), has_zero (β₁ i)] [Π (i : ι), has_zero (β₂ i)] [Π (i : ι) (x : β₁ i), decidable (x 0)] [Π (i : ι) (x : β₂ i), decidable (x 0)] {f : Π (i : ι), β₁ iβ₂ iβ i} {hf : ∀ (i : ι), f i 0 0 = 0} {g₁ : Π₀ (i : ι), β₁ i} {g₂ : Π₀ (i : ι), β₂ i} :
dfinsupp.zip_with f hf g₁ g₂ = dfinsupp.mk (g₁.support g₂.support) (λ (i : (g₁.support g₂.support)), f i.val (g₁ i.val) (g₂ i.val))
theorem dfinsupp.support_zip_with {ι : Type u} {β : ι → Type v} {β₁ : ι → Type v₁} {β₂ : ι → Type v₂} [dec : decidable_eq ι] [Π (i : ι), has_zero (β i)] [Π (i : ι) (x : β i), decidable (x 0)] [Π (i : ι), has_zero (β₁ i)] [Π (i : ι), has_zero (β₂ i)] [Π (i : ι) (x : β₁ i), decidable (x 0)] [Π (i : ι) (x : β₂ i), decidable (x 0)] {f : Π (i : ι), β₁ iβ₂ iβ i} {hf : ∀ (i : ι), f i 0 0 = 0} {g₁ : Π₀ (i : ι), β₁ i} {g₂ : Π₀ (i : ι), β₂ i} :
(dfinsupp.zip_with f hf g₁ g₂).support g₁.support g₂.support
theorem dfinsupp.erase_def {ι : Type u} {β : ι → Type v} [dec : decidable_eq ι] [Π (i : ι), has_zero (β i)] [Π (i : ι) (x : β i), decidable (x 0)] (i : ι) (f : Π₀ (i : ι), β i) :
@[simp]
theorem dfinsupp.support_erase {ι : Type u} {β : ι → Type v} [dec : decidable_eq ι] [Π (i : ι), has_zero (β i)] [Π (i : ι) (x : β i), decidable (x 0)] (i : ι) (f : Π₀ (i : ι), β i) :
theorem dfinsupp.support_update_ne_zero {ι : Type u} {β : ι → Type v} [dec : decidable_eq ι] [Π (i : ι), has_zero (β i)] [Π (i : ι) (x : β i), decidable (x 0)] (f : Π₀ (i : ι), β i) (i : ι) {b : β i} [decidable (b = 0)] (h : b 0) :
theorem dfinsupp.support_update {ι : Type u} {β : ι → Type v} [dec : decidable_eq ι] [Π (i : ι), has_zero (β i)] [Π (i : ι) (x : β i), decidable (x 0)] (f : Π₀ (i : ι), β i) (i : ι) (b : β i) [decidable (b = 0)] :
theorem dfinsupp.filter_def {ι : Type u} {β : ι → Type v} [dec : decidable_eq ι] [Π (i : ι), has_zero (β i)] [Π (i : ι) (x : β i), decidable (x 0)] {p : ι → Prop} [decidable_pred p] (f : Π₀ (i : ι), β i) :
@[simp]
theorem dfinsupp.support_filter {ι : Type u} {β : ι → Type v} [dec : decidable_eq ι] [Π (i : ι), has_zero (β i)] [Π (i : ι) (x : β i), decidable (x 0)] {p : ι → Prop} [decidable_pred p] (f : Π₀ (i : ι), β i) :
theorem dfinsupp.subtype_domain_def {ι : Type u} {β : ι → Type v} [dec : decidable_eq ι] [Π (i : ι), has_zero (β i)] [Π (i : ι) (x : β i), decidable (x 0)] {p : ι → Prop} [decidable_pred p] (f : Π₀ (i : ι), β i) :
@[simp]
theorem dfinsupp.support_subtype_domain {ι : Type u} {β : ι → Type v} [dec : decidable_eq ι] [Π (i : ι), has_zero (β i)] [Π (i : ι) (x : β i), decidable (x 0)] {p : ι → Prop} [decidable_pred p] {f : Π₀ (i : ι), β i} :
theorem dfinsupp.support_add {ι : Type u} {β : ι → Type v} [dec : decidable_eq ι] [Π (i : ι), add_zero_class (β i)] [Π (i : ι) (x : β i), decidable (x 0)] {g₁ g₂ : Π₀ (i : ι), β i} :
(g₁ + g₂).support g₁.support g₂.support
@[simp]
theorem dfinsupp.support_neg {ι : Type u} {β : ι → Type v} [dec : decidable_eq ι] [Π (i : ι), add_group (β i)] [Π (i : ι) (x : β i), decidable (x 0)] {f : Π₀ (i : ι), β i} :
theorem dfinsupp.support_smul {ι : Type u} {β : ι → Type v} [dec : decidable_eq ι] {γ : Type w} [semiring γ] [Π (i : ι), add_comm_monoid (β i)] [Π (i : ι), module γ (β i)] [Π (i : ι) (x : β i), decidable (x 0)] (b : γ) (v : Π₀ (i : ι), β i) :
@[instance]
def dfinsupp.decidable_eq {ι : Type u} {β : ι → Type v} [dec : decidable_eq ι] [Π (i : ι), has_zero (β i)] [Π (i : ι), decidable_eq (β i)] :
decidable_eq (Π₀ (i : ι), β i)
Equations
def dfinsupp.sum {ι : Type u} {γ : Type w} {β : ι → Type v} [dec : decidable_eq ι] [Π (i : ι), has_zero (β i)] [Π (i : ι) (x : β i), decidable (x 0)] [add_comm_monoid γ] (f : Π₀ (i : ι), β i) (g : Π (i : ι), β i → γ) :
γ

sum f g is the sum of g i (f i) over the support of f.

Equations
def dfinsupp.prod {ι : Type u} {γ : Type w} {β : ι → Type v} [dec : decidable_eq ι] [Π (i : ι), has_zero (β i)] [Π (i : ι) (x : β i), decidable (x 0)] [comm_monoid γ] (f : Π₀ (i : ι), β i) (g : Π (i : ι), β i → γ) :
γ

prod f g is the product of g i (f i) over the support of f.

Equations
theorem dfinsupp.sum_map_range_index {ι : Type u} {γ : Type w} [dec : decidable_eq ι] {β₁ : ι → Type v₁} {β₂ : ι → Type v₂} [Π (i : ι), has_zero (β₁ i)] [Π (i : ι), has_zero (β₂ i)] [Π (i : ι) (x : β₁ i), decidable (x 0)] [Π (i : ι) (x : β₂ i), decidable (x 0)] [add_comm_monoid γ] {f : Π (i : ι), β₁ iβ₂ i} {hf : ∀ (i : ι), f i 0 = 0} {g : Π₀ (i : ι), β₁ i} {h : Π (i : ι), β₂ i → γ} (h0 : ∀ (i : ι), h i 0 = 0) :
(dfinsupp.map_range f hf g).sum h = g.sum (λ (i : ι) (b : β₁ i), h i (f i b))
theorem dfinsupp.prod_map_range_index {ι : Type u} {γ : Type w} [dec : decidable_eq ι] {β₁ : ι → Type v₁} {β₂ : ι → Type v₂} [Π (i : ι), has_zero (β₁ i)] [Π (i : ι), has_zero (β₂ i)] [Π (i : ι) (x : β₁ i), decidable (x 0)] [Π (i : ι) (x : β₂ i), decidable (x 0)] [comm_monoid γ] {f : Π (i : ι), β₁ iβ₂ i} {hf : ∀ (i : ι), f i 0 = 0} {g : Π₀ (i : ι), β₁ i} {h : Π (i : ι), β₂ i → γ} (h0 : ∀ (i : ι), h i 0 = 1) :
(dfinsupp.map_range f hf g).prod h = g.prod (λ (i : ι) (b : β₁ i), h i (f i b))
theorem dfinsupp.prod_zero_index {ι : Type u} {γ : Type w} {β : ι → Type v} [dec : decidable_eq ι] [Π (i : ι), add_comm_monoid (β i)] [Π (i : ι) (x : β i), decidable (x 0)] [comm_monoid γ] {h : Π (i : ι), β i → γ} :
0.prod h = 1
theorem dfinsupp.sum_zero_index {ι : Type u} {γ : Type w} {β : ι → Type v} [dec : decidable_eq ι] [Π (i : ι), add_comm_monoid (β i)] [Π (i : ι) (x : β i), decidable (x 0)] [add_comm_monoid γ] {h : Π (i : ι), β i → γ} :
0.sum h = 0
theorem dfinsupp.prod_single_index {ι : Type u} {γ : Type w} {β : ι → Type v} [dec : decidable_eq ι] [Π (i : ι), has_zero (β i)] [Π (i : ι) (x : β i), decidable (x 0)] [comm_monoid γ] {i : ι} {b : β i} {h : Π (i : ι), β i → γ} (h_zero : h i 0 = 1) :
(dfinsupp.single i b).prod h = h i b
theorem dfinsupp.sum_single_index {ι : Type u} {γ : Type w} {β : ι → Type v} [dec : decidable_eq ι] [Π (i : ι), has_zero (β i)] [Π (i : ι) (x : β i), decidable (x 0)] [add_comm_monoid γ] {i : ι} {b : β i} {h : Π (i : ι), β i → γ} (h_zero : h i 0 = 0) :
(dfinsupp.single i b).sum h = h i b
theorem dfinsupp.prod_neg_index {ι : Type u} {γ : Type w} {β : ι → Type v} [dec : decidable_eq ι] [Π (i : ι), add_group (β i)] [Π (i : ι) (x : β i), decidable (x 0)] [comm_monoid γ] {g : Π₀ (i : ι), β i} {h : Π (i : ι), β i → γ} (h0 : ∀ (i : ι), h i 0 = 1) :
(-g).prod h = g.prod (λ (i : ι) (b : β i), h i (-b))
theorem dfinsupp.sum_neg_index {ι : Type u} {γ : Type w} {β : ι → Type v} [dec : decidable_eq ι] [Π (i : ι), add_group (β i)] [Π (i : ι) (x : β i), decidable (x 0)] [add_comm_monoid γ] {g : Π₀ (i : ι), β i} {h : Π (i : ι), β i → γ} (h0 : ∀ (i : ι), h i 0 = 0) :
(-g).sum h = g.sum (λ (i : ι) (b : β i), h i (-b))
theorem dfinsupp.sum_comm {γ : Type w} {ι₁ : Type u_1} {ι₂ : Type u_2} {β₁ : ι₁ → Type u_3} {β₂ : ι₂ → Type u_4} [decidable_eq ι₁] [decidable_eq ι₂] [Π (i : ι₁), has_zero (β₁ i)] [Π (i : ι₂), has_zero (β₂ i)] [Π (i : ι₁) (x : β₁ i), decidable (x 0)] [Π (i : ι₂) (x : β₂ i), decidable (x 0)] [add_comm_monoid γ] (f₁ : Π₀ (i : ι₁), β₁ i) (f₂ : Π₀ (i : ι₂), β₂ i) (h : Π (i : ι₁), β₁ iΠ (i : ι₂), β₂ i → γ) :
f₁.sum (λ (i₁ : ι₁) (x₁ : β₁ i₁), f₂.sum (λ (i₂ : ι₂) (x₂ : β₂ i₂), h i₁ x₁ i₂ x₂)) = f₂.sum (λ (i₂ : ι₂) (x₂ : β₂ i₂), f₁.sum (λ (i₁ : ι₁) (x₁ : β₁ i₁), h i₁ x₁ i₂ x₂))
theorem dfinsupp.prod_comm {γ : Type w} {ι₁ : Type u_1} {ι₂ : Type u_2} {β₁ : ι₁ → Type u_3} {β₂ : ι₂ → Type u_4} [decidable_eq ι₁] [decidable_eq ι₂] [Π (i : ι₁), has_zero (β₁ i)] [Π (i : ι₂), has_zero (β₂ i)] [Π (i : ι₁) (x : β₁ i), decidable (x 0)] [Π (i : ι₂) (x : β₂ i), decidable (x 0)] [comm_monoid γ] (f₁ : Π₀ (i : ι₁), β₁ i) (f₂ : Π₀ (i : ι₂), β₂ i) (h : Π (i : ι₁), β₁ iΠ (i : ι₂), β₂ i → γ) :
f₁.prod (λ (i₁ : ι₁) (x₁ : β₁ i₁), f₂.prod (λ (i₂ : ι₂) (x₂ : β₂ i₂), h i₁ x₁ i₂ x₂)) = f₂.prod (λ (i₂ : ι₂) (x₂ : β₂ i₂), f₁.prod (λ (i₁ : ι₁) (x₁ : β₁ i₁), h i₁ x₁ i₂ x₂))
@[simp]
theorem dfinsupp.sum_apply {ι : Type u} {β : ι → Type v} {ι₁ : Type u₁} [decidable_eq ι₁] {β₁ : ι₁ → Type v₁} [Π (i₁ : ι₁), has_zero (β₁ i₁)] [Π (i : ι₁) (x : β₁ i), decidable (x 0)] [Π (i : ι), add_comm_monoid (β i)] {f : Π₀ (i₁ : ι₁), β₁ i₁} {g : Π (i₁ : ι₁), β₁ i₁(Π₀ (i : ι), β i)} {i₂ : ι} :
(f.sum g) i₂ = f.sum (λ (i₁ : ι₁) (b : β₁ i₁), (g i₁ b) i₂)
theorem dfinsupp.support_sum {ι : Type u} {β : ι → Type v} [dec : decidable_eq ι] {ι₁ : Type u₁} [decidable_eq ι₁] {β₁ : ι₁ → Type v₁} [Π (i₁ : ι₁), has_zero (β₁ i₁)] [Π (i : ι₁) (x : β₁ i), decidable (x 0)] [Π (i : ι), add_comm_monoid (β i)] [Π (i : ι) (x : β i), decidable (x 0)] {f : Π₀ (i₁ : ι₁), β₁ i₁} {g : Π (i₁ : ι₁), β₁ i₁(Π₀ (i : ι), β i)} :
(f.sum g).support f.support.bUnion (λ (i : ι₁), (g i (f i)).support)
@[simp]
theorem dfinsupp.prod_one {ι : Type u} {γ : Type w} {β : ι → Type v} [dec : decidable_eq ι] [Π (i : ι), add_comm_monoid (β i)] [Π (i : ι) (x : β i), decidable (x 0)] [comm_monoid γ] {f : Π₀ (i : ι), β i} :
f.prod (λ (i : ι) (b : β i), 1) = 1
@[simp]
theorem dfinsupp.sum_zero {ι : Type u} {γ : Type w} {β : ι → Type v} [dec : decidable_eq ι] [Π (i : ι), add_comm_monoid (β i)] [Π (i : ι) (x : β i), decidable (x 0)] [add_comm_monoid γ] {f : Π₀ (i : ι), β i} :
f.sum (λ (i : ι) (b : β i), 0) = 0
@[simp]
theorem dfinsupp.sum_add {ι : Type u} {γ : Type w} {β : ι → Type v} [dec : decidable_eq ι] [Π (i : ι), add_comm_monoid (β i)] [Π (i : ι) (x : β i), decidable (x 0)] [add_comm_monoid γ] {f : Π₀ (i : ι), β i} {h₁ h₂ : Π (i : ι), β i → γ} :
f.sum (λ (i : ι) (b : β i), h₁ i b + h₂ i b) = f.sum h₁ + f.sum h₂
@[simp]
theorem dfinsupp.prod_mul {ι : Type u} {γ : Type w} {β : ι → Type v} [dec : decidable_eq ι] [Π (i : ι), add_comm_monoid (β i)] [Π (i : ι) (x : β i), decidable (x 0)] [comm_monoid γ] {f : Π₀ (i : ι), β i} {h₁ h₂ : Π (i : ι), β i → γ} :
f.prod (λ (i : ι) (b : β i), (h₁ i b) * h₂ i b) = (f.prod h₁) * f.prod h₂
@[simp]
theorem dfinsupp.sum_neg {ι : Type u} {γ : Type w} {β : ι → Type v} [dec : decidable_eq ι] [Π (i : ι), add_comm_monoid (β i)] [Π (i : ι) (x : β i), decidable (x 0)] [add_comm_group γ] {f : Π₀ (i : ι), β i} {h : Π (i : ι), β i → γ} :
f.sum (λ (i : ι) (b : β i), -h i b) = -f.sum h
@[simp]
theorem dfinsupp.prod_inv {ι : Type u} {γ : Type w} {β : ι → Type v} [dec : decidable_eq ι] [Π (i : ι), add_comm_monoid (β i)] [Π (i : ι) (x : β i), decidable (x 0)] [comm_group γ] {f : Π₀ (i : ι), β i} {h : Π (i : ι), β i → γ} :
f.prod (λ (i : ι) (b : β i), (h i b)⁻¹) = (f.prod h)⁻¹
theorem dfinsupp.sum_add_index {ι : Type u} {γ : Type w} {β : ι → Type v} [dec : decidable_eq ι] [Π (i : ι), add_comm_monoid (β i)] [Π (i : ι) (x : β i), decidable (x 0)] [add_comm_monoid γ] {f g : Π₀ (i : ι), β i} {h : Π (i : ι), β i → γ} (h_zero : ∀ (i : ι), h i 0 = 0) (h_add : ∀ (i : ι) (b₁ b₂ : β i), h i (b₁ + b₂) = h i b₁ + h i b₂) :
(f + g).sum h = f.sum h + g.sum h
theorem dfinsupp.prod_add_index {ι : Type u} {γ : Type w} {β : ι → Type v} [dec : decidable_eq ι] [Π (i : ι), add_comm_monoid (β i)] [Π (i : ι) (x : β i), decidable (x 0)] [comm_monoid γ] {f g : Π₀ (i : ι), β i} {h : Π (i : ι), β i → γ} (h_zero : ∀ (i : ι), h i 0 = 1) (h_add : ∀ (i : ι) (b₁ b₂ : β i), h i (b₁ + b₂) = (h i b₁) * h i b₂) :
(f + g).prod h = (f.prod h) * g.prod h
theorem add_submonoid.dfinsupp_sum_mem {ι : Type u} {γ : Type w} {β : ι → Type v} [dec : decidable_eq ι] [Π (i : ι), has_zero (β i)] [Π (i : ι) (x : β i), decidable (x 0)] [add_comm_monoid γ] (S : add_submonoid γ) (f : Π₀ (i : ι), β i) (g : Π (i : ι), β i → γ) (h : ∀ (c : ι), f c 0g c (f c) S) :
f.sum g S
theorem submonoid.dfinsupp_prod_mem {ι : Type u} {γ : Type w} {β : ι → Type v} [dec : decidable_eq ι] [Π (i : ι), has_zero (β i)] [Π (i : ι) (x : β i), decidable (x 0)] [comm_monoid γ] (S : submonoid γ) (f : Π₀ (i : ι), β i) (g : Π (i : ι), β i → γ) (h : ∀ (c : ι), f c 0g c (f c) S) :
f.prod g S
def dfinsupp.sum_add_hom {ι : Type u} {γ : Type w} {β : ι → Type v} [dec : decidable_eq ι] [Π (i : ι), add_zero_class (β i)] [add_comm_monoid γ] (φ : Π (i : ι), β i →+ γ) :
(Π₀ (i : ι), β i) →+ γ

When summing over an add_monoid_hom, the decidability assumption is not needed, and the result is also an add_monoid_hom.

Equations
@[simp]
theorem dfinsupp.sum_add_hom_single {ι : Type u} {γ : Type w} {β : ι → Type v} [dec : decidable_eq ι] [Π (i : ι), add_zero_class (β i)] [add_comm_monoid γ] (φ : Π (i : ι), β i →+ γ) (i : ι) (x : β i) :
@[simp]
theorem dfinsupp.sum_add_hom_comp_single {ι : Type u} {γ : Type w} {β : ι → Type v} [dec : decidable_eq ι] [Π (i : ι), add_zero_class (β i)] [add_comm_monoid γ] (f : Π (i : ι), β i →+ γ) (i : ι) :
theorem dfinsupp.sum_add_hom_apply {ι : Type u} {γ : Type w} {β : ι → Type v} [dec : decidable_eq ι] [Π (i : ι), add_zero_class (β i)] [Π (i : ι) (x : β i), decidable (x 0)] [add_comm_monoid γ] (φ : Π (i : ι), β i →+ γ) (f : Π₀ (i : ι), β i) :
(dfinsupp.sum_add_hom φ) f = f.sum (λ (x : ι), (φ x))

While we didn't need decidable instances to define it, we do to reduce it to a sum

theorem add_submonoid.dfinsupp_sum_add_hom_mem {ι : Type u} {γ : Type w} {β : ι → Type v} [dec : decidable_eq ι] [Π (i : ι), add_zero_class (β i)] [add_comm_monoid γ] (S : add_submonoid γ) (f : Π₀ (i : ι), β i) (g : Π (i : ι), β i →+ γ) (h : ∀ (c : ι), f c 0(g c) (f c) S) :
theorem add_submonoid.supr_eq_mrange_dfinsupp_sum_add_hom {ι : Type u} {γ : Type w} [dec : decidable_eq ι] [add_comm_monoid γ] (S : ι → add_submonoid γ) :
supr S = (dfinsupp.sum_add_hom (λ (i : ι), (S i).subtype)).mrange

The supremum of a family of commutative additive submonoids is equal to the range of dfinsupp.sum_add_hom; that is, every element in the supr can be produced from taking a finite number of non-zero elements of S i, coercing them to γ, and summing them.

theorem add_submonoid.bsupr_eq_mrange_dfinsupp_sum_add_hom {ι : Type u} {γ : Type w} [dec : decidable_eq ι] (p : ι → Prop) [decidable_pred p] [add_comm_monoid γ] (S : ι → add_submonoid γ) :
(⨆ (i : ι) (h : p i), S i) = ((dfinsupp.sum_add_hom (λ (i : ι), (S i).subtype)).comp (dfinsupp.filter_add_monoid_hom (λ (i : ι), (S i)) p)).mrange

The bounded supremum of a family of commutative additive submonoids is equal to the range of dfinsupp.sum_add_hom composed with dfinsupp.filter_add_monoid_hom; that is, every element in the bounded supr can be produced from taking a finite number of non-zero elements from the S i that satisfy p i, coercing them to γ, and summing them.

theorem add_submonoid.mem_supr_iff_exists_dfinsupp {ι : Type u} {γ : Type w} [dec : decidable_eq ι] [add_comm_monoid γ] (S : ι → add_submonoid γ) (x : γ) :
x supr S ∃ (f : Π₀ (i : ι), (S i)), (dfinsupp.sum_add_hom (λ (i : ι), (S i).subtype)) f = x
theorem add_submonoid.mem_supr_iff_exists_dfinsupp' {ι : Type u} {γ : Type w} [dec : decidable_eq ι] [add_comm_monoid γ] (S : ι → add_submonoid γ) [Π (i : ι) (x : (S i)), decidable (x 0)] (x : γ) :
x supr S ∃ (f : Π₀ (i : ι), (S i)), f.sum (λ (i : ι) (xi : (S i)), xi) = x

A variant of add_submonoid.mem_supr_iff_exists_dfinsupp with the RHS fully unfolded.

theorem add_submonoid.mem_bsupr_iff_exists_dfinsupp {ι : Type u} {γ : Type w} [dec : decidable_eq ι] (p : ι → Prop) [decidable_pred p] [add_comm_monoid γ] (S : ι → add_submonoid γ) (x : γ) :
(x ⨆ (i : ι) (h : p i), S i) ∃ (f : Π₀ (i : ι), (S i)), (dfinsupp.sum_add_hom (λ (i : ι), (S i).subtype)) (dfinsupp.filter p f) = x
theorem dfinsupp.sum_add_hom_comm {ι₁ : Type u_1} {ι₂ : Type u_2} {β₁ : ι₁ → Type u_3} {β₂ : ι₂ → Type u_4} {γ : Type u_5} [decidable_eq ι₁] [decidable_eq ι₂] [Π (i : ι₁), add_zero_class (β₁ i)] [Π (i : ι₂), add_zero_class (β₂ i)] [add_comm_monoid γ] (f₁ : Π₀ (i : ι₁), β₁ i) (f₂ : Π₀ (i : ι₂), β₂ i) (h : Π (i : ι₁) (j : ι₂), β₁ i →+ β₂ j →+ γ) :
(dfinsupp.sum_add_hom (λ (i₂ : ι₂), (dfinsupp.sum_add_hom (λ (i₁ : ι₁), h i₁ i₂)) f₁)) f₂ = (dfinsupp.sum_add_hom (λ (i₁ : ι₁), (dfinsupp.sum_add_hom (λ (i₂ : ι₂), (h i₁ i₂).flip)) f₂)) f₁
@[simp]
theorem dfinsupp.lift_add_hom_apply {ι : Type u} {γ : Type w} {β : ι → Type v} [dec : decidable_eq ι] [Π (i : ι), add_zero_class (β i)] [add_comm_monoid γ] (φ : Π (i : ι), (λ (i : ι), β i) i →+ γ) :
@[simp]
theorem dfinsupp.lift_add_hom_symm_apply {ι : Type u} {γ : Type w} {β : ι → Type v} [dec : decidable_eq ι] [Π (i : ι), add_zero_class (β i)] [add_comm_monoid γ] (F : (Π₀ (i : ι), β i) →+ γ) (i : ι) :
def dfinsupp.lift_add_hom {ι : Type u} {γ : Type w} {β : ι → Type v} [dec : decidable_eq ι] [Π (i : ι), add_zero_class (β i)] [add_comm_monoid γ] :
(Π (i : ι), β i →+ γ) ≃+ ((Π₀ (i : ι), β i) →+ γ)

The dfinsupp version of finsupp.lift_add_hom,

Equations
@[simp]
theorem dfinsupp.lift_add_hom_single_add_hom {ι : Type u} {β : ι → Type v} [dec : decidable_eq ι] [Π (i : ι), add_comm_monoid (β i)] :

The dfinsupp version of finsupp.lift_add_hom_single_add_hom,

theorem dfinsupp.lift_add_hom_apply_single {ι : Type u} {γ : Type w} {β : ι → Type v} [dec : decidable_eq ι] [Π (i : ι), add_zero_class (β i)] [add_comm_monoid γ] (f : Π (i : ι), β i →+ γ) (i : ι) (x : β i) :

The dfinsupp version of finsupp.lift_add_hom_apply_single,

theorem dfinsupp.lift_add_hom_comp_single {ι : Type u} {γ : Type w} {β : ι → Type v} [dec : decidable_eq ι] [Π (i : ι), add_zero_class (β i)] [add_comm_monoid γ] (f : Π (i : ι), β i →+ γ) (i : ι) :

The dfinsupp version of finsupp.lift_add_hom_comp_single,

theorem dfinsupp.comp_lift_add_hom {ι : Type u} {γ : Type w} {β : ι → Type v} [dec : decidable_eq ι] {δ : Type u_1} [Π (i : ι), add_zero_class (β i)] [add_comm_monoid γ] [add_comm_monoid δ] (g : γ →+ δ) (f : Π (i : ι), β i →+ γ) :

The dfinsupp version of finsupp.comp_lift_add_hom,

@[simp]
theorem dfinsupp.sum_add_hom_zero {ι : Type u} {γ : Type w} {β : ι → Type v} [dec : decidable_eq ι] [Π (i : ι), add_zero_class (β i)] [add_comm_monoid γ] :
dfinsupp.sum_add_hom (λ (i : ι), 0) = 0
@[simp]
theorem dfinsupp.sum_add_hom_add {ι : Type u} {γ : Type w} {β : ι → Type v} [dec : decidable_eq ι] [Π (i : ι), add_zero_class (β i)] [add_comm_monoid γ] (g h : Π (i : ι), β i →+ γ) :
@[simp]
theorem dfinsupp.sum_add_hom_single_add_hom {ι : Type u} {β : ι → Type v} [dec : decidable_eq ι] [Π (i : ι), add_comm_monoid (β i)] :
theorem dfinsupp.comp_sum_add_hom {ι : Type u} {γ : Type w} {β : ι → Type v} [dec : decidable_eq ι] {δ : Type u_1} [Π (i : ι), add_zero_class (β i)] [add_comm_monoid γ] [add_comm_monoid δ] (g : γ →+ δ) (f : Π (i : ι), β i →+ γ) :
g.comp (dfinsupp.sum_add_hom f) = dfinsupp.sum_add_hom (λ (a : ι), g.comp (f a))
theorem dfinsupp.sum_sub_index {ι : Type u} {γ : Type w} {β : ι → Type v} [dec : decidable_eq ι] [Π (i : ι), add_group (β i)] [Π (i : ι) (x : β i), decidable (x 0)] [add_comm_group γ] {f g : Π₀ (i : ι), β i} {h : Π (i : ι), β i → γ} (h_sub : ∀ (i : ι) (b₁ b₂ : β i), h i (b₁ - b₂) = h i b₁ - h i b₂) :
(f - g).sum h = f.sum h - g.sum h
theorem dfinsupp.prod_finset_sum_index {ι : Type u} {β : ι → Type v} [dec : decidable_eq ι] {γ : Type w} {α : Type x} [Π (i : ι), add_comm_monoid (β i)] [Π (i : ι) (x : β i), decidable (x 0)] [comm_monoid γ] {s : finset α} {g : α → (Π₀ (i : ι), β i)} {h : Π (i : ι), β i → γ} (h_zero : ∀ (i : ι), h i 0 = 1) (h_add : ∀ (i : ι) (b₁ b₂ : β i), h i (b₁ + b₂) = (h i b₁) * h i b₂) :
∏ (i : α) in s, (g i).prod h = (∑ (i : α) in s, g i).prod h
theorem dfinsupp.sum_finset_sum_index {ι : Type u} {β : ι → Type v} [dec : decidable_eq ι] {γ : Type w} {α : Type x} [Π (i : ι), add_comm_monoid (β i)] [Π (i : ι) (x : β i), decidable (x 0)] [add_comm_monoid γ] {s : finset α} {g : α → (Π₀ (i : ι), β i)} {h : Π (i : ι), β i → γ} (h_zero : ∀ (i : ι), h i 0 = 0) (h_add : ∀ (i : ι) (b₁ b₂ : β i), h i (b₁ + b₂) = h i b₁ + h i b₂) :
∑ (i : α) in s, (g i).sum h = (∑ (i : α) in s, g i).sum h
theorem dfinsupp.sum_sum_index {ι : Type u} {γ : Type w} {β : ι → Type v} [dec : decidable_eq ι] {ι₁ : Type u₁} [decidable_eq ι₁] {β₁ : ι₁ → Type v₁} [Π (i₁ : ι₁), has_zero (β₁ i₁)] [Π (i : ι₁) (x : β₁ i), decidable (x 0)] [Π (i : ι), add_comm_monoid (β i)] [Π (i : ι) (x : β i), decidable (x 0)] [add_comm_monoid γ] {f : Π₀ (i₁ : ι₁), β₁ i₁} {g : Π (i₁ : ι₁), β₁ i₁(Π₀ (i : ι), β i)} {h : Π (i : ι), β i → γ} (h_zero : ∀ (i : ι), h i 0 = 0) (h_add : ∀ (i : ι) (b₁ b₂ : β i), h i (b₁ + b₂) = h i b₁ + h i b₂) :
(f.sum g).sum h = f.sum (λ (i : ι₁) (b : β₁ i), (g i b).sum h)
theorem dfinsupp.prod_sum_index {ι : Type u} {γ : Type w} {β : ι → Type v} [dec : decidable_eq ι] {ι₁ : Type u₁} [decidable_eq ι₁] {β₁ : ι₁ → Type v₁} [Π (i₁ : ι₁), has_zero (β₁ i₁)] [Π (i : ι₁) (x : β₁ i), decidable (x 0)] [Π (i : ι), add_comm_monoid (β i)] [Π (i : ι) (x : β i), decidable (x 0)] [comm_monoid γ] {f : Π₀ (i₁ : ι₁), β₁ i₁} {g : Π (i₁ : ι₁), β₁ i₁(Π₀ (i : ι), β i)} {h : Π (i : ι), β i → γ} (h_zero : ∀ (i : ι), h i 0 = 1) (h_add : ∀ (i : ι) (b₁ b₂ : β i), h i (b₁ + b₂) = (h i b₁) * h i b₂) :
(f.sum g).prod h = f.prod (λ (i : ι₁) (b : β₁ i), (g i b).prod h)
@[simp]
theorem dfinsupp.sum_single {ι : Type u} {β : ι → Type v} [dec : decidable_eq ι] [Π (i : ι), add_comm_monoid (β i)] [Π (i : ι) (x : β i), decidable (x 0)] {f : Π₀ (i : ι), β i} :
theorem dfinsupp.sum_subtype_domain_index {ι : Type u} {γ : Type w} {β : ι → Type v} [dec : decidable_eq ι] [Π (i : ι), has_zero (β i)] [Π (i : ι) (x : β i), decidable (x 0)] [add_comm_monoid γ] {v : Π₀ (i : ι), β i} {p : ι → Prop} [decidable_pred p] {h : Π (i : ι), β i → γ} (hp : ∀ (x : ι), x v.supportp x) :
(dfinsupp.subtype_domain p v).sum (λ (i : subtype p) (b : β i), h i b) = v.sum h
theorem dfinsupp.prod_subtype_domain_index {ι : Type u} {γ : Type w} {β : ι → Type v} [dec : decidable_eq ι] [Π (i : ι), has_zero (β i)] [Π (i : ι) (x : β i), decidable (x 0)] [comm_monoid γ] {v : Π₀ (i : ι), β i} {p : ι → Prop} [decidable_pred p] {h : Π (i : ι), β i → γ} (hp : ∀ (x : ι), x v.supportp x) :
(dfinsupp.subtype_domain p v).prod (λ (i : subtype p) (b : β i), h i b) = v.prod h
theorem dfinsupp.subtype_domain_sum {ι : Type u} {γ : Type w} {β : ι → Type v} [Π (i : ι), add_comm_monoid (β i)] {s : finset γ} {h : γ → (Π₀ (i : ι), β i)} {p : ι → Prop} [decidable_pred p] :
dfinsupp.subtype_domain p (∑ (c : γ) in s, h c) = ∑ (c : γ) in s, dfinsupp.subtype_domain p (h c)
theorem dfinsupp.subtype_domain_finsupp_sum {ι : Type u} {γ : Type w} {β : ι → Type v} {δ : γ → Type x} [decidable_eq γ] [Π (c : γ), has_zero (δ c)] [Π (c : γ) (x : δ c), decidable (x 0)] [Π (i : ι), add_comm_monoid (β i)] {p : ι → Prop} [decidable_pred p] {s : Π₀ (c : γ), δ c} {h : Π (c : γ), δ c(Π₀ (i : ι), β i)} :
dfinsupp.subtype_domain p (s.sum h) = s.sum (λ (c : γ) (d : δ c), dfinsupp.subtype_domain p (h c d))

Bundled versions of dfinsupp.map_range #

The names should match the equivalent bundled finsupp.map_range definitions.

theorem dfinsupp.map_range_add {ι : Type u} {β₁ : ι → Type v₁} {β₂ : ι → Type v₂} [Π (i : ι), add_zero_class (β₁ i)] [Π (i : ι), add_zero_class (β₂ i)] (f : Π (i : ι), β₁ iβ₂ i) (hf : ∀ (i : ι), f i 0 = 0) (hf' : ∀ (i : ι) (x y : β₁ i), f i (x + y) = f i x + f i y) (g₁ g₂ : Π₀ (i : ι), β₁ i) :
dfinsupp.map_range f hf (g₁ + g₂) = dfinsupp.map_range f hf g₁ + dfinsupp.map_range f hf g₂
@[simp]
theorem dfinsupp.map_range.add_monoid_hom_apply {ι : Type u} {β₁ : ι → Type v₁} {β₂ : ι → Type v₂} [Π (i : ι), add_zero_class (β₁ i)] [Π (i : ι), add_zero_class (β₂ i)] (f : Π (i : ι), β₁ i →+ β₂ i) (ᾰ : Π₀ (i : ι), (λ (i : ι), β₁ i) i) :
(dfinsupp.map_range.add_monoid_hom f) = dfinsupp.map_range (λ (i : ι) (x : β₁ i), (f i) x) _
def dfinsupp.map_range.add_monoid_hom {ι : Type u} {β₁ : ι → Type v₁} {β₂ : ι → Type v₂} [Π (i : ι), add_zero_class (β₁ i)] [Π (i : ι), add_zero_class (β₂ i)] (f : Π (i : ι), β₁ i →+ β₂ i) :
(Π₀ (i : ι), β₁ i) →+ Π₀ (i : ι), β₂ i

dfinsupp.map_range as an add_monoid_hom.

Equations
@[simp]
theorem dfinsupp.map_range.add_monoid_hom_id {ι : Type u} {β₂ : ι → Type v₂} [Π (i : ι), add_zero_class (β₂ i)] :
dfinsupp.map_range.add_monoid_hom (λ (i : ι), add_monoid_hom.id (β₂ i)) = add_monoid_hom.id (Π₀ (i : ι), β₂ i)
theorem dfinsupp.map_range.add_monoid_hom_comp {ι : Type u} {β : ι → Type v} {β₁ : ι → Type v₁} {β₂ : ι → Type v₂} [Π (i : ι), add_zero_class (β i)] [Π (i : ι), add_zero_class (β₁ i)] [Π (i : ι), add_zero_class (β₂ i)] (f : Π (i : ι), β₁ i →+ β₂ i) (f₂ : Π (i : ι), β i →+ β₁ i) :
def dfinsupp.map_range.add_equiv {ι : Type u} {β₁ : ι → Type v₁} {β₂ : ι → Type v₂} [Π (i : ι), add_zero_class (β₁ i)] [Π (i : ι), add_zero_class (β₂ i)] (e : Π (i : ι), β₁ i ≃+ β₂ i) :
(Π₀ (i : ι), β₁ i) ≃+ Π₀ (i : ι), β₂ i

dfinsupp.map_range.add_monoid_hom as an add_equiv.

Equations
@[simp]
theorem dfinsupp.map_range.add_equiv_apply {ι : Type u} {β₁ : ι → Type v₁} {β₂ : ι → Type v₂} [Π (i : ι), add_zero_class (β₁ i)] [Π (i : ι), add_zero_class (β₂ i)] (e : Π (i : ι), β₁ i ≃+ β₂ i) (ᾰ : Π₀ (i : ι), (λ (i : ι), β₁ i) i) :
(dfinsupp.map_range.add_equiv e) = dfinsupp.map_range (λ (i : ι) (x : β₁ i), (e i) x) _
@[simp]
theorem dfinsupp.map_range.add_equiv_refl {ι : Type u} {β₁ : ι → Type v₁} [Π (i : ι), add_zero_class (β₁ i)] :
dfinsupp.map_range.add_equiv (λ (i : ι), add_equiv.refl (β₁ i)) = add_equiv.refl (Π₀ (i : ι), β₁ i)
theorem dfinsupp.map_range.add_equiv_trans {ι : Type u} {β : ι → Type v} {β₁ : ι → Type v₁} {β₂ : ι → Type v₂} [Π (i : ι), add_zero_class (β i)] [Π (i : ι), add_zero_class (β₁ i)] [Π (i : ι), add_zero_class (β₂ i)] (f : Π (i : ι), β i ≃+ β₁ i) (f₂ : Π (i : ι), β₁ i ≃+ β₂ i) :
@[simp]
theorem dfinsupp.map_range.add_equiv_symm {ι : Type u} {β₁ : ι → Type v₁} {β₂ : ι → Type v₂} [Π (i : ι), add_zero_class (β₁ i)] [Π (i : ι), add_zero_class (β₂ i)] (e : Π (i : ι), β₁ i ≃+ β₂ i) :

Product and sum lemmas for bundled morphisms. #

In this section, we provide analogues of add_monoid_hom.map_sum, add_monoid_hom.coe_sum, and add_monoid_hom.sum_apply for dfinsupp.sum and dfinsupp.sum_add_hom instead of finset.sum.

We provide these for add_monoid_hom, monoid_hom, ring_hom, add_equiv, and mul_equiv.

Lemmas for linear_map and linear_equiv are in another file.

@[simp]
theorem add_monoid_hom.map_dfinsupp_sum {ι : Type u} {β : ι → Type v} [decidable_eq ι] {R : Type u_1} {S : Type u_2} [Π (i : ι), has_zero (β i)] [Π (i : ι) (x : β i), decidable (x 0)] [add_comm_monoid R] [add_comm_monoid S] (h : R →+ S) (f : Π₀ (i : ι), β i) (g : Π (i : ι), β i → R) :
h (f.sum g) = f.sum (λ (a : ι) (b : β a), h (g a b))
@[simp]
theorem monoid_hom.map_dfinsupp_prod {ι : Type u} {β : ι → Type v} [decidable_eq ι] {R : Type u_1} {S : Type u_2} [Π (i : ι), has_zero (β i)] [Π (i : ι) (x : β i), decidable (x 0)] [comm_monoid R] [comm_monoid S] (h : R →* S) (f : Π₀ (i : ι), β i) (g : Π (i : ι), β i → R) :
h (f.prod g) = f.prod (λ (a : ι) (b : β a), h (g a b))
theorem add_monoid_hom.coe_dfinsupp_sum {ι : Type u} {β : ι → Type v} [decidable_eq ι] {R : Type u_1} {S : Type u_2} [Π (i : ι), has_zero (β i)] [Π (i : ι) (x : β i), decidable (x 0)] [add_monoid R] [add_comm_monoid S] (f : Π₀ (i : ι), β i) (g : Π (i : ι), β iR →+ S) :
(f.sum g) = f.sum (λ (a : ι) (b : β a), (g a b))
theorem monoid_hom.coe_dfinsupp_prod {ι : Type u} {β : ι → Type v} [decidable_eq ι] {R : Type u_1} {S : Type u_2} [Π (i : ι), has_zero (β i)] [Π (i : ι) (x : β i), decidable (x 0)] [monoid R] [comm_monoid S] (f : Π₀ (i : ι), β i) (g : Π (i : ι), β iR →* S) :
(f.prod g) = f.prod (λ (a : ι) (b : β a), (g a b))
@[simp]
theorem monoid_hom.dfinsupp_prod_apply {ι : Type u} {β : ι → Type v} [decidable_eq ι] {R : Type u_1} {S : Type u_2} [Π (i : ι), has_zero (β i)] [Π (i : ι) (x : β i), decidable (x 0)] [monoid R] [comm_monoid S] (f : Π₀ (i : ι), β i) (g : Π (i : ι), β iR →* S) (r : R) :
(f.prod g) r = f.prod (λ (a : ι) (b : β a), (g a b) r)
@[simp]
theorem add_monoid_hom.dfinsupp_sum_apply {ι : Type u} {β : ι → Type v} [decidable_eq ι] {R : Type u_1} {S : Type u_2} [Π (i : ι), has_zero (β i)] [Π (i : ι) (x : β i), decidable (x 0)] [add_monoid R] [add_comm_monoid S] (f : Π₀ (i : ι), β i) (g : Π (i : ι), β iR →+ S) (r : R) :
(f.sum g) r = f.sum (λ (a : ι) (b : β a), (g a b) r)
@[simp]
theorem ring_hom.map_dfinsupp_prod {ι : Type u} {β : ι → Type v} [decidable_eq ι] {R : Type u_1} {S : Type u_2} [Π (i : ι), has_zero (β i)] [Π (i : ι) (x : β i), decidable (x 0)] [comm_semiring R] [comm_semiring S] (h : R →+* S) (f : Π₀ (i : ι), β i) (g : Π (i : ι), β i → R) :
h (f.prod g) = f.prod (λ (a : ι) (b : β a), h (g a b))
@[simp]
theorem ring_hom.map_dfinsupp_sum {ι : Type u} {β : ι → Type v} [decidable_eq ι] {R : Type u_1} {S : Type u_2} [Π (i : ι), has_zero (β i)] [Π (i : ι) (x : β i), decidable (x 0)] [non_assoc_semiring R] [non_assoc_semiring S] (h : R →+* S) (f : Π₀ (i : ι), β i) (g : Π (i : ι), β i → R) :
h (f.sum g) = f.sum (λ (a : ι) (b : β a), h (g a b))
@[simp]
theorem add_equiv.map_dfinsupp_sum {ι : Type u} {β : ι → Type v} [decidable_eq ι] {R : Type u_1} {S : Type u_2} [Π (i : ι), has_zero (β i)] [Π (i : ι) (x : β i), decidable (x 0)] [add_comm_monoid R] [add_comm_monoid S] (h : R ≃+ S) (f : Π₀ (i : ι), β i) (g : Π (i : ι), β i → R) :
h (f.sum g) = f.sum (λ (a : ι) (b : β a), h (g a b))
@[simp]
theorem mul_equiv.map_dfinsupp_prod {ι : Type u} {β : ι → Type v} [decidable_eq ι] {R : Type u_1} {S : Type u_2} [Π (i : ι), has_zero (β i)] [Π (i : ι) (x : β i), decidable (x 0)] [comm_monoid R] [comm_monoid S] (h : R ≃* S) (f : Π₀ (i : ι), β i) (g : Π (i : ι), β i → R) :
h (f.prod g) = f.prod (λ (a : ι) (b : β a), h (g a b))

The above lemmas, repeated for dfinsupp.sum_add_hom.

@[simp]
theorem add_monoid_hom.map_dfinsupp_sum_add_hom {ι : Type u} {β : ι → Type v} [decidable_eq ι] {R : Type u_1} {S : Type u_2} [add_comm_monoid R] [add_comm_monoid S] [Π (i : ι), add_zero_class (β i)] (h : R →+ S) (f : Π₀ (i : ι), β i) (g : Π (i : ι), β i →+ R) :
h ((dfinsupp.sum_add_hom g) f) = (dfinsupp.sum_add_hom (λ (i : ι), h.comp (g i))) f
@[simp]
theorem add_monoid_hom.dfinsupp_sum_add_hom_apply {ι : Type u} {β : ι → Type v} [decidable_eq ι] {R : Type u_1} {S : Type u_2} [add_zero_class R] [add_comm_monoid S] [Π (i : ι), add_zero_class (β i)] (f : Π₀ (i : ι), β i) (g : Π (i : ι), β i →+ R →+ S) (r : R) :
theorem add_monoid_hom.coe_dfinsupp_sum_add_hom {ι : Type u} {β : ι → Type v} [decidable_eq ι] {R : Type u_1} {S : Type u_2} [add_zero_class R] [add_comm_monoid S] [Π (i : ι), add_zero_class (β i)] (f : Π₀ (i : ι), β i) (g : Π (i : ι), β i →+ R →+ S) :
@[simp]
theorem ring_hom.map_dfinsupp_sum_add_hom {ι : Type u} {β : ι → Type v} [decidable_eq ι] {R : Type u_1} {S : Type u_2} [non_assoc_semiring R] [non_assoc_semiring S] [Π (i : ι), add_zero_class (β i)] (h : R →+* S) (f : Π₀ (i : ι), β i) (g : Π (i : ι), β i →+ R) :
@[simp]
theorem add_equiv.map_dfinsupp_sum_add_hom {ι : Type u} {β : ι → Type v} [decidable_eq ι] {R : Type u_1} {S : Type u_2} [add_comm_monoid R] [add_comm_monoid S] [Π (i : ι), add_zero_class (β i)] (h : R ≃+ S) (f : Π₀ (i : ι), β i) (g : Π (i : ι), β i →+ R) :