Support of a function #
THIS FILE IS SYNCHRONIZED WITH MATHLIB4. Any changes to this file require a corresponding PR to mathlib4.
In this file we define function.support f = {x | f x ≠ 0} and prove its basic properties.
We also define function.mul_support f = {x | f x ≠ 1}.
support of a function is the set of points x such that f x ≠ 0.
Equations
- function.support f = {x : α | f x ≠ 0}
 
mul_support of a function is the set of points x such that f x ≠ 1.
Equations
- function.mul_support f = {x : α | f x ≠ 1}
 
    
theorem
function.support_eq_preimage
    {α : Type u_1}
    {M : Type u_5}
    [has_zero M]
    (f : α → M) :
function.support f = f ⁻¹' {0}ᶜ
    
theorem
function.mul_support_eq_preimage
    {α : Type u_1}
    {M : Type u_5}
    [has_one M]
    (f : α → M) :
function.mul_support f = f ⁻¹' {1}ᶜ
    
theorem
function.nmem_mul_support
    {α : Type u_1}
    {M : Type u_5}
    [has_one M]
    {f : α → M}
    {x : α} :
x ∉ function.mul_support f ↔ f x = 1
    
theorem
function.nmem_support
    {α : Type u_1}
    {M : Type u_5}
    [has_zero M]
    {f : α → M}
    {x : α} :
x ∉ function.support f ↔ f x = 0
    
theorem
function.compl_mul_support
    {α : Type u_1}
    {M : Type u_5}
    [has_one M]
    {f : α → M} :
(function.mul_support f)ᶜ = {x : α | f x = 1}
    
theorem
function.compl_support
    {α : Type u_1}
    {M : Type u_5}
    [has_zero M]
    {f : α → M} :
(function.support f)ᶜ = {x : α | f x = 0}
@[simp]
    
theorem
function.mem_mul_support
    {α : Type u_1}
    {M : Type u_5}
    [has_one M]
    {f : α → M}
    {x : α} :
x ∈ function.mul_support f ↔ f x ≠ 1
@[simp]
    
theorem
function.mem_support
    {α : Type u_1}
    {M : Type u_5}
    [has_zero M]
    {f : α → M}
    {x : α} :
x ∈ function.support f ↔ f x ≠ 0
@[simp]
    
theorem
function.support_subset_iff
    {α : Type u_1}
    {M : Type u_5}
    [has_zero M]
    {f : α → M}
    {s : set α} :
function.support f ⊆ s ↔ ∀ (x : α), f x ≠ 0 → x ∈ s
@[simp]
    
theorem
function.mul_support_subset_iff
    {α : Type u_1}
    {M : Type u_5}
    [has_one M]
    {f : α → M}
    {s : set α} :
function.mul_support f ⊆ s ↔ ∀ (x : α), f x ≠ 1 → x ∈ s
    
theorem
function.support_subset_iff'
    {α : Type u_1}
    {M : Type u_5}
    [has_zero M]
    {f : α → M}
    {s : set α} :
function.support f ⊆ s ↔ ∀ (x : α), x ∉ s → f x = 0
    
theorem
function.mul_support_subset_iff'
    {α : Type u_1}
    {M : Type u_5}
    [has_one M]
    {f : α → M}
    {s : set α} :
function.mul_support f ⊆ s ↔ ∀ (x : α), x ∉ s → f x = 1
    
theorem
function.support_disjoint_iff
    {α : Type u_1}
    {M : Type u_5}
    [has_zero M]
    {f : α → M}
    {s : set α} :
disjoint (function.support f) s ↔ set.eq_on f 0 s
    
theorem
function.mul_support_disjoint_iff
    {α : Type u_1}
    {M : Type u_5}
    [has_one M]
    {f : α → M}
    {s : set α} :
disjoint (function.mul_support f) s ↔ set.eq_on f 1 s
    
theorem
function.disjoint_support_iff
    {α : Type u_1}
    {M : Type u_5}
    [has_zero M]
    {f : α → M}
    {s : set α} :
disjoint s (function.support f) ↔ set.eq_on f 0 s
    
theorem
function.disjoint_mul_support_iff
    {α : Type u_1}
    {M : Type u_5}
    [has_one M]
    {f : α → M}
    {s : set α} :
disjoint s (function.mul_support f) ↔ set.eq_on f 1 s
@[simp]
    
theorem
function.mul_support_eq_empty_iff
    {α : Type u_1}
    {M : Type u_5}
    [has_one M]
    {f : α → M} :
function.mul_support f = ∅ ↔ f = 1
@[simp]
    
theorem
function.support_eq_empty_iff
    {α : Type u_1}
    {M : Type u_5}
    [has_zero M]
    {f : α → M} :
function.support f = ∅ ↔ f = 0
@[simp]
    
theorem
function.support_nonempty_iff
    {α : Type u_1}
    {M : Type u_5}
    [has_zero M]
    {f : α → M} :
(function.support f).nonempty ↔ f ≠ 0
@[simp]
    
theorem
function.mul_support_nonempty_iff
    {α : Type u_1}
    {M : Type u_5}
    [has_one M]
    {f : α → M} :
(function.mul_support f).nonempty ↔ f ≠ 1
    
theorem
function.range_subset_insert_image_support
    {α : Type u_1}
    {M : Type u_5}
    [has_zero M]
    (f : α → M) :
set.range f ⊆ has_insert.insert 0 (f '' function.support f)
    
theorem
function.range_subset_insert_image_mul_support
    {α : Type u_1}
    {M : Type u_5}
    [has_one M]
    (f : α → M) :
set.range f ⊆ has_insert.insert 1 (f '' function.mul_support f)
@[simp]
@[simp]
@[simp]
    
theorem
function.mul_support_one
    {α : Type u_1}
    {M : Type u_5}
    [has_one M] :
function.mul_support (λ (x : α), 1) = ∅
@[simp]
    
theorem
function.support_zero
    {α : Type u_1}
    {M : Type u_5}
    [has_zero M] :
function.support (λ (x : α), 0) = ∅
    
theorem
function.mul_support_const
    {α : Type u_1}
    {M : Type u_5}
    [has_one M]
    {c : M}
    (hc : c ≠ 1) :
function.mul_support (λ (x : α), c) = set.univ
    
theorem
function.support_const
    {α : Type u_1}
    {M : Type u_5}
    [has_zero M]
    {c : M}
    (hc : c ≠ 0) :
function.support (λ (x : α), c) = set.univ
    
theorem
function.mul_support_binop_subset
    {α : Type u_1}
    {M : Type u_5}
    {N : Type u_6}
    {P : Type u_7}
    [has_one M]
    [has_one N]
    [has_one P]
    (op : M → N → P)
    (op1 : op 1 1 = 1)
    (f : α → M)
    (g : α → N) :
function.mul_support (λ (x : α), op (f x) (g x)) ⊆ function.mul_support f ∪ function.mul_support g
    
theorem
function.support_binop_subset
    {α : Type u_1}
    {M : Type u_5}
    {N : Type u_6}
    {P : Type u_7}
    [has_zero M]
    [has_zero N]
    [has_zero P]
    (op : M → N → P)
    (op1 : op 0 0 = 0)
    (f : α → M)
    (g : α → N) :
function.support (λ (x : α), op (f x) (g x)) ⊆ function.support f ∪ function.support g
    
theorem
function.support_sup
    {α : Type u_1}
    {M : Type u_5}
    [has_zero M]
    [semilattice_sup M]
    (f g : α → M) :
function.support (λ (x : α), f x ⊔ g x) ⊆ function.support f ∪ function.support g
    
theorem
function.mul_support_sup
    {α : Type u_1}
    {M : Type u_5}
    [has_one M]
    [semilattice_sup M]
    (f g : α → M) :
function.mul_support (λ (x : α), f x ⊔ g x) ⊆ function.mul_support f ∪ function.mul_support g
    
theorem
function.support_inf
    {α : Type u_1}
    {M : Type u_5}
    [has_zero M]
    [semilattice_inf M]
    (f g : α → M) :
function.support (λ (x : α), f x ⊓ g x) ⊆ function.support f ∪ function.support g
    
theorem
function.mul_support_inf
    {α : Type u_1}
    {M : Type u_5}
    [has_one M]
    [semilattice_inf M]
    (f g : α → M) :
function.mul_support (λ (x : α), f x ⊓ g x) ⊆ function.mul_support f ∪ function.mul_support g
    
theorem
function.mul_support_max
    {α : Type u_1}
    {M : Type u_5}
    [has_one M]
    [linear_order M]
    (f g : α → M) :
function.mul_support (λ (x : α), linear_order.max (f x) (g x)) ⊆ function.mul_support f ∪ function.mul_support g
    
theorem
function.support_max
    {α : Type u_1}
    {M : Type u_5}
    [has_zero M]
    [linear_order M]
    (f g : α → M) :
function.support (λ (x : α), linear_order.max (f x) (g x)) ⊆ function.support f ∪ function.support g
    
theorem
function.mul_support_min
    {α : Type u_1}
    {M : Type u_5}
    [has_one M]
    [linear_order M]
    (f g : α → M) :
function.mul_support (λ (x : α), linear_order.min (f x) (g x)) ⊆ function.mul_support f ∪ function.mul_support g
    
theorem
function.support_min
    {α : Type u_1}
    {M : Type u_5}
    [has_zero M]
    [linear_order M]
    (f g : α → M) :
function.support (λ (x : α), linear_order.min (f x) (g x)) ⊆ function.support f ∪ function.support g
    
theorem
function.mul_support_supr
    {α : Type u_1}
    {M : Type u_5}
    {ι : Sort u_13}
    [has_one M]
    [conditionally_complete_lattice M]
    [nonempty ι]
    (f : ι → α → M) :
function.mul_support (λ (x : α), ⨆ (i : ι), f i x) ⊆ ⋃ (i : ι), function.mul_support (f i)
    
theorem
function.support_supr
    {α : Type u_1}
    {M : Type u_5}
    {ι : Sort u_13}
    [has_zero M]
    [conditionally_complete_lattice M]
    [nonempty ι]
    (f : ι → α → M) :
function.support (λ (x : α), ⨆ (i : ι), f i x) ⊆ ⋃ (i : ι), function.support (f i)
    
theorem
function.mul_support_infi
    {α : Type u_1}
    {M : Type u_5}
    {ι : Sort u_13}
    [has_one M]
    [conditionally_complete_lattice M]
    [nonempty ι]
    (f : ι → α → M) :
function.mul_support (λ (x : α), ⨅ (i : ι), f i x) ⊆ ⋃ (i : ι), function.mul_support (f i)
    
theorem
function.support_infi
    {α : Type u_1}
    {M : Type u_5}
    {ι : Sort u_13}
    [has_zero M]
    [conditionally_complete_lattice M]
    [nonempty ι]
    (f : ι → α → M) :
function.support (λ (x : α), ⨅ (i : ι), f i x) ⊆ ⋃ (i : ι), function.support (f i)
    
theorem
function.mul_support_comp_subset
    {α : Type u_1}
    {M : Type u_5}
    {N : Type u_6}
    [has_one M]
    [has_one N]
    {g : M → N}
    (hg : g 1 = 1)
    (f : α → M) :
function.mul_support (g ∘ f) ⊆ function.mul_support f
    
theorem
function.support_comp_subset
    {α : Type u_1}
    {M : Type u_5}
    {N : Type u_6}
    [has_zero M]
    [has_zero N]
    {g : M → N}
    (hg : g 0 = 0)
    (f : α → M) :
function.support (g ∘ f) ⊆ function.support f
    
theorem
function.mul_support_subset_comp
    {α : Type u_1}
    {M : Type u_5}
    {N : Type u_6}
    [has_one M]
    [has_one N]
    {g : M → N}
    (hg : ∀ {x : M}, g x = 1 → x = 1)
    (f : α → M) :
function.mul_support f ⊆ function.mul_support (g ∘ f)
    
theorem
function.support_subset_comp
    {α : Type u_1}
    {M : Type u_5}
    {N : Type u_6}
    [has_zero M]
    [has_zero N]
    {g : M → N}
    (hg : ∀ {x : M}, g x = 0 → x = 0)
    (f : α → M) :
function.support f ⊆ function.support (g ∘ f)
    
theorem
function.mul_support_comp_eq
    {α : Type u_1}
    {M : Type u_5}
    {N : Type u_6}
    [has_one M]
    [has_one N]
    (g : M → N)
    (hg : ∀ {x : M}, g x = 1 ↔ x = 1)
    (f : α → M) :
function.mul_support (g ∘ f) = function.mul_support f
    
theorem
function.support_comp_eq
    {α : Type u_1}
    {M : Type u_5}
    {N : Type u_6}
    [has_zero M]
    [has_zero N]
    (g : M → N)
    (hg : ∀ {x : M}, g x = 0 ↔ x = 0)
    (f : α → M) :
function.support (g ∘ f) = function.support f
    
theorem
function.support_comp_eq_preimage
    {α : Type u_1}
    {β : Type u_2}
    {M : Type u_5}
    [has_zero M]
    (g : β → M)
    (f : α → β) :
function.support (g ∘ f) = f ⁻¹' function.support g
    
theorem
function.mul_support_comp_eq_preimage
    {α : Type u_1}
    {β : Type u_2}
    {M : Type u_5}
    [has_one M]
    (g : β → M)
    (f : α → β) :
function.mul_support (g ∘ f) = f ⁻¹' function.mul_support g
    
theorem
function.support_prod_mk
    {α : Type u_1}
    {M : Type u_5}
    {N : Type u_6}
    [has_zero M]
    [has_zero N]
    (f : α → M)
    (g : α → N) :
function.support (λ (x : α), (f x, g x)) = function.support f ∪ function.support g
    
theorem
function.mul_support_prod_mk
    {α : Type u_1}
    {M : Type u_5}
    {N : Type u_6}
    [has_one M]
    [has_one N]
    (f : α → M)
    (g : α → N) :
function.mul_support (λ (x : α), (f x, g x)) = function.mul_support f ∪ function.mul_support g
    
theorem
function.mul_support_prod_mk'
    {α : Type u_1}
    {M : Type u_5}
    {N : Type u_6}
    [has_one M]
    [has_one N]
    (f : α → M × N) :
function.mul_support f = function.mul_support (λ (x : α), (f x).fst) ∪ function.mul_support (λ (x : α), (f x).snd)
    
theorem
function.support_prod_mk'
    {α : Type u_1}
    {M : Type u_5}
    {N : Type u_6}
    [has_zero M]
    [has_zero N]
    (f : α → M × N) :
function.support f = function.support (λ (x : α), (f x).fst) ∪ function.support (λ (x : α), (f x).snd)
    
theorem
function.mul_support_along_fiber_subset
    {α : Type u_1}
    {β : Type u_2}
    {M : Type u_5}
    [has_one M]
    (f : α × β → M)
    (a : α) :
function.mul_support (λ (b : β), f (a, b)) ⊆ prod.snd '' function.mul_support f
    
theorem
function.support_along_fiber_subset
    {α : Type u_1}
    {β : Type u_2}
    {M : Type u_5}
    [has_zero M]
    (f : α × β → M)
    (a : α) :
function.support (λ (b : β), f (a, b)) ⊆ prod.snd '' function.support f
@[simp]
    
theorem
function.support_along_fiber_finite_of_finite
    {α : Type u_1}
    {β : Type u_2}
    {M : Type u_5}
    [has_zero M]
    (f : α × β → M)
    (a : α)
    (h : (function.support f).finite) :
(function.support (λ (b : β), f (a, b))).finite
@[simp]
    
theorem
function.mul_support_along_fiber_finite_of_finite
    {α : Type u_1}
    {β : Type u_2}
    {M : Type u_5}
    [has_one M]
    (f : α × β → M)
    (a : α)
    (h : (function.mul_support f).finite) :
(function.mul_support (λ (b : β), f (a, b))).finite
    
theorem
function.support_add
    {α : Type u_1}
    {M : Type u_5}
    [add_zero_class M]
    (f g : α → M) :
function.support (λ (x : α), f x + g x) ⊆ function.support f ∪ function.support g
    
theorem
function.mul_support_mul
    {α : Type u_1}
    {M : Type u_5}
    [mul_one_class M]
    (f g : α → M) :
function.mul_support (λ (x : α), f x * g x) ⊆ function.mul_support f ∪ function.mul_support g
    
theorem
function.support_nsmul
    {α : Type u_1}
    {M : Type u_5}
    [add_monoid M]
    (f : α → M)
    (n : ℕ) :
function.support (λ (x : α), n • f x) ⊆ function.support f
    
theorem
function.mul_support_pow
    {α : Type u_1}
    {M : Type u_5}
    [monoid M]
    (f : α → M)
    (n : ℕ) :
function.mul_support (λ (x : α), f x ^ n) ⊆ function.mul_support f
@[simp]
    
theorem
function.mul_support_inv
    {α : Type u_1}
    {G : Type u_10}
    [division_monoid G]
    (f : α → G) :
function.mul_support (λ (x : α), (f x)⁻¹) = function.mul_support f
@[simp]
    
theorem
function.support_neg
    {α : Type u_1}
    {G : Type u_10}
    [subtraction_monoid G]
    (f : α → G) :
function.support (λ (x : α), -f x) = function.support f
@[simp]
@[simp]
    
theorem
function.mul_support_mul_inv
    {α : Type u_1}
    {G : Type u_10}
    [division_monoid G]
    (f g : α → G) :
function.mul_support (λ (x : α), f x * (g x)⁻¹) ⊆ function.mul_support f ∪ function.mul_support g
    
theorem
function.support_add_neg
    {α : Type u_1}
    {G : Type u_10}
    [subtraction_monoid G]
    (f g : α → G) :
function.support (λ (x : α), f x + -g x) ⊆ function.support f ∪ function.support g
    
theorem
function.mul_support_div
    {α : Type u_1}
    {G : Type u_10}
    [division_monoid G]
    (f g : α → G) :
function.mul_support (λ (x : α), f x / g x) ⊆ function.mul_support f ∪ function.mul_support g
    
theorem
function.support_sub
    {α : Type u_1}
    {G : Type u_10}
    [subtraction_monoid G]
    (f g : α → G) :
function.support (λ (x : α), f x - g x) ⊆ function.support f ∪ function.support g
@[simp]
@[simp]
    
theorem
function.mul_support_zero
    {α : Type u_1}
    (R : Type u_8)
    [has_zero R]
    [has_one R]
    [ne_zero 1] :
    
theorem
function.support_nat_cast
    {α : Type u_1}
    {R : Type u_8}
    [add_monoid_with_one R]
    [char_zero R]
    {n : ℕ}
    (hn : n ≠ 0) :
    
theorem
function.mul_support_nat_cast
    {α : Type u_1}
    {R : Type u_8}
    [add_monoid_with_one R]
    [char_zero R]
    {n : ℕ}
    (hn : n ≠ 1) :
    
theorem
function.support_int_cast
    {α : Type u_1}
    {R : Type u_8}
    [add_group_with_one R]
    [char_zero R]
    {n : ℤ}
    (hn : n ≠ 0) :
    
theorem
function.mul_support_int_cast
    {α : Type u_1}
    {R : Type u_8}
    [add_group_with_one R]
    [char_zero R]
    {n : ℤ}
    (hn : n ≠ 1) :
    
theorem
function.support_smul
    {α : Type u_1}
    {M : Type u_5}
    {R : Type u_8}
    [has_zero R]
    [has_zero M]
    [smul_with_zero R M]
    [no_zero_smul_divisors R M]
    (f : α → R)
    (g : α → M) :
function.support (f • g) = function.support f ∩ function.support g
@[simp]
    
theorem
function.support_mul
    {α : Type u_1}
    {R : Type u_8}
    [mul_zero_class R]
    [no_zero_divisors R]
    (f g : α → R) :
function.support (λ (x : α), f x * g x) = function.support f ∩ function.support g
@[simp]
    
theorem
function.support_mul_subset_left
    {α : Type u_1}
    {R : Type u_8}
    [mul_zero_class R]
    (f g : α → R) :
function.support (λ (x : α), f x * g x) ⊆ function.support f
@[simp]
    
theorem
function.support_mul_subset_right
    {α : Type u_1}
    {R : Type u_8}
    [mul_zero_class R]
    (f g : α → R) :
function.support (λ (x : α), f x * g x) ⊆ function.support g
    
theorem
function.support_smul_subset_right
    {α : Type u_1}
    {A : Type u_3}
    {B : Type u_4}
    [add_monoid A]
    [monoid B]
    [distrib_mul_action B A]
    (b : B)
    (f : α → A) :
function.support (b • f) ⊆ function.support f
    
theorem
function.support_smul_subset_left
    {α : Type u_1}
    {β : Type u_2}
    {M : Type u_5}
    [has_zero M]
    [has_zero β]
    [smul_with_zero M β]
    (f : α → M)
    (g : α → β) :
function.support (f • g) ⊆ function.support f
    
theorem
function.support_const_smul_of_ne_zero
    {α : Type u_1}
    {M : Type u_5}
    {R : Type u_8}
    [semiring R]
    [add_comm_monoid M]
    [module R M]
    [no_zero_smul_divisors R M]
    (c : R)
    (g : α → M)
    (hc : c ≠ 0) :
function.support (c • g) = function.support g
@[simp]
    
theorem
function.support_inv
    {α : Type u_1}
    {G₀ : Type u_12}
    [group_with_zero G₀]
    (f : α → G₀) :
function.support (λ (x : α), (f x)⁻¹) = function.support f
@[simp]
    
theorem
function.support_div
    {α : Type u_1}
    {G₀ : Type u_12}
    [group_with_zero G₀]
    (f g : α → G₀) :
function.support (λ (x : α), f x / g x) = function.support f ∩ function.support g
    
theorem
function.mul_support_prod
    {α : Type u_1}
    {β : Type u_2}
    {M : Type u_5}
    [comm_monoid M]
    (s : finset α)
    (f : α → β → M) :
function.mul_support (λ (x : β), s.prod (λ (i : α), f i x)) ⊆ ⋃ (i : α) (H : i ∈ s), function.mul_support (f i)
    
theorem
function.support_sum
    {α : Type u_1}
    {β : Type u_2}
    {M : Type u_5}
    [add_comm_monoid M]
    (s : finset α)
    (f : α → β → M) :
function.support (λ (x : β), s.sum (λ (i : α), f i x)) ⊆ ⋃ (i : α) (H : i ∈ s), function.support (f i)
    
theorem
function.support_prod_subset
    {α : Type u_1}
    {β : Type u_2}
    {A : Type u_3}
    [comm_monoid_with_zero A]
    (s : finset α)
    (f : α → β → A) :
function.support (λ (x : β), s.prod (λ (i : α), f i x)) ⊆ ⋂ (i : α) (H : i ∈ s), function.support (f i)
    
theorem
function.support_prod
    {α : Type u_1}
    {β : Type u_2}
    {A : Type u_3}
    [comm_monoid_with_zero A]
    [no_zero_divisors A]
    [nontrivial A]
    (s : finset α)
    (f : α → β → A) :
function.support (λ (x : β), s.prod (λ (i : α), f i x)) = ⋂ (i : α) (H : i ∈ s), function.support (f i)
    
theorem
function.mul_support_one_add
    {α : Type u_1}
    {R : Type u_8}
    [has_one R]
    [add_left_cancel_monoid R]
    (f : α → R) :
function.mul_support (λ (x : α), 1 + f x) = function.support f
    
theorem
function.mul_support_one_add'
    {α : Type u_1}
    {R : Type u_8}
    [has_one R]
    [add_left_cancel_monoid R]
    (f : α → R) :
function.mul_support (1 + f) = function.support f
    
theorem
function.mul_support_add_one
    {α : Type u_1}
    {R : Type u_8}
    [has_one R]
    [add_right_cancel_monoid R]
    (f : α → R) :
function.mul_support (λ (x : α), f x + 1) = function.support f
    
theorem
function.mul_support_add_one'
    {α : Type u_1}
    {R : Type u_8}
    [has_one R]
    [add_right_cancel_monoid R]
    (f : α → R) :
function.mul_support (f + 1) = function.support f
    
theorem
function.mul_support_one_sub'
    {α : Type u_1}
    {R : Type u_8}
    [has_one R]
    [add_group R]
    (f : α → R) :
function.mul_support (1 - f) = function.support f
    
theorem
function.mul_support_one_sub
    {α : Type u_1}
    {R : Type u_8}
    [has_one R]
    [add_group R]
    (f : α → R) :
function.mul_support (λ (x : α), 1 - f x) = function.support f
    
theorem
set.image_inter_mul_support_eq
    {α : Type u_1}
    {β : Type u_2}
    {M : Type u_3}
    [has_one M]
    {f : α → M}
    {s : set β}
    {g : β → α} :
g '' s ∩ function.mul_support f = g '' (s ∩ function.mul_support (f ∘ g))
    
theorem
set.image_inter_support_eq
    {α : Type u_1}
    {β : Type u_2}
    {M : Type u_3}
    [has_zero M]
    {f : α → M}
    {s : set β}
    {g : β → α} :
g '' s ∩ function.support f = g '' (s ∩ function.support (f ∘ g))
    
theorem
pi.support_single_subset
    {A : Type u_1}
    {B : Type u_2}
    [decidable_eq A]
    [has_zero B]
    {a : A}
    {b : B} :
function.support (pi.single a b) ⊆ {a}
    
theorem
pi.mul_support_mul_single_subset
    {A : Type u_1}
    {B : Type u_2}
    [decidable_eq A]
    [has_one B]
    {a : A}
    {b : B} :
function.mul_support (pi.mul_single a b) ⊆ {a}
    
theorem
pi.mul_support_mul_single_one
    {A : Type u_1}
    {B : Type u_2}
    [decidable_eq A]
    [has_one B]
    {a : A} :
function.mul_support (pi.mul_single a 1) = ∅
    
theorem
pi.support_single_zero
    {A : Type u_1}
    {B : Type u_2}
    [decidable_eq A]
    [has_zero B]
    {a : A} :
function.support (pi.single a 0) = ∅
@[simp]
    
theorem
pi.support_single_of_ne
    {A : Type u_1}
    {B : Type u_2}
    [decidable_eq A]
    [has_zero B]
    {a : A}
    {b : B}
    (h : b ≠ 0) :
function.support (pi.single a b) = {a}
@[simp]
    
theorem
pi.mul_support_mul_single_of_ne
    {A : Type u_1}
    {B : Type u_2}
    [decidable_eq A]
    [has_one B]
    {a : A}
    {b : B}
    (h : b ≠ 1) :
function.mul_support (pi.mul_single a b) = {a}
    
theorem
pi.mul_support_mul_single
    {A : Type u_1}
    {B : Type u_2}
    [decidable_eq A]
    [has_one B]
    {a : A}
    {b : B}
    [decidable_eq B] :
function.mul_support (pi.mul_single a b) = ite (b = 1) ∅ {a}
    
theorem
pi.support_single
    {A : Type u_1}
    {B : Type u_2}
    [decidable_eq A]
    [has_zero B]
    {a : A}
    {b : B}
    [decidable_eq B] :
    
theorem
pi.mul_support_mul_single_disjoint
    {A : Type u_1}
    {B : Type u_2}
    [decidable_eq A]
    [has_one B]
    {b b' : B}
    (hb : b ≠ 1)
    (hb' : b' ≠ 1)
    {i j : A} :
disjoint (function.mul_support (pi.mul_single i b)) (function.mul_support (pi.mul_single j b')) ↔ i ≠ j
    
theorem
pi.support_single_disjoint
    {A : Type u_1}
    {B : Type u_2}
    [decidable_eq A]
    [has_zero B]
    {b b' : B}
    (hb : b ≠ 0)
    (hb' : b' ≠ 0)
    {i j : A} :
disjoint (function.support (pi.single i b)) (function.support (pi.single j b')) ↔ i ≠ j