Documentation

Mathlib.Data.Finset.Preimage

Preimage of a Finset under an injective map. #

noncomputable def Finset.preimage {α : Type u} {β : Type v} (s : Finset β) (f : αβ) (hf : Set.InjOn f (f ⁻¹' s)) :

Preimage of s : Finset β under a map f injective on f ⁻¹' s as a Finset.

Equations
@[simp]
theorem Finset.mem_preimage {α : Type u} {β : Type v} {f : αβ} {s : Finset β} {hf : Set.InjOn f (f ⁻¹' s)} {x : α} :
x s.preimage f hf f x s
@[simp]
theorem Finset.coe_preimage {α : Type u} {β : Type v} {f : αβ} (s : Finset β) (hf : Set.InjOn f (f ⁻¹' s)) :
(s.preimage f hf) = f ⁻¹' s
@[simp]
theorem Finset.preimage_empty {α : Type u} {β : Type v} {f : αβ} :
@[simp]
theorem Finset.preimage_univ {α : Type u} {β : Type v} {f : αβ} [Fintype α] [Fintype β] (hf : Set.InjOn f (f ⁻¹' univ)) :
@[simp]
theorem Finset.preimage_inter {α : Type u} {β : Type v} [DecidableEq α] [DecidableEq β] {f : αβ} {s t : Finset β} (hs : Set.InjOn f (f ⁻¹' s)) (ht : Set.InjOn f (f ⁻¹' t)) :
(s t).preimage f = s.preimage f hs t.preimage f ht
@[simp]
theorem Finset.preimage_union {α : Type u} {β : Type v} [DecidableEq α] [DecidableEq β] {f : αβ} {s t : Finset β} (hst : Set.InjOn f (f ⁻¹' ↑(s t))) :
(s t).preimage f hst = s.preimage f t.preimage f
@[simp]
theorem Finset.preimage_compl' {α : Type u} {β : Type v} [DecidableEq α] [DecidableEq β] [Fintype α] [Fintype β] {f : αβ} (s : Finset β) (hfc : Set.InjOn f (f ⁻¹' s)) (hf : Set.InjOn f (f ⁻¹' s)) :
s.preimage f hfc = (s.preimage f hf)
theorem Finset.preimage_compl {α : Type u} {β : Type v} [DecidableEq α] [DecidableEq β] [Fintype α] [Fintype β] {f : αβ} (s : Finset β) (hf : Function.Injective f) :
s.preimage f = (s.preimage f )
@[simp]
theorem Finset.preimage_map {α : Type u} {β : Type v} (f : α β) (s : Finset α) :
(map f s).preimage f = s
theorem Finset.monotone_preimage {α : Type u} {β : Type v} {f : αβ} (h : Function.Injective f) :
Monotone fun (s : Finset β) => s.preimage f
theorem Finset.image_subset_iff_subset_preimage {α : Type u} {β : Type v} [DecidableEq β] {f : αβ} {s : Finset α} {t : Finset β} (hf : Set.InjOn f (f ⁻¹' t)) :
image f s t s t.preimage f hf
theorem Finset.map_subset_iff_subset_preimage {α : Type u} {β : Type v} {f : α β} {s : Finset α} {t : Finset β} :
map f s t s t.preimage f
theorem Finset.card_preimage {α : Type u} {β : Type v} (s : Finset β) (f : αβ) (hf : Set.InjOn f (f ⁻¹' s)) [DecidablePred fun (x : β) => x Set.range f] :
(s.preimage f hf).card = {xs | x Set.range f}.card
theorem Finset.image_preimage {α : Type u} {β : Type v} [DecidableEq β] (f : αβ) (s : Finset β) [(x : β) → Decidable (x Set.range f)] (hf : Set.InjOn f (f ⁻¹' s)) :
image f (s.preimage f hf) = {xs | x Set.range f}
theorem Finset.image_preimage_of_bij {α : Type u} {β : Type v} [DecidableEq β] (f : αβ) (s : Finset β) (hf : Set.BijOn f (f ⁻¹' s) s) :
image f (s.preimage f ) = s
theorem Finset.preimage_subset_of_subset_image {α : Type u} {β : Type v} [DecidableEq β] {f : αβ} {s : Finset β} {t : Finset α} (hs : s image f t) {hf : Set.InjOn f (f ⁻¹' s)} :
s.preimage f hf t
theorem Finset.preimage_subset {α : Type u} {β : Type v} {f : α β} {s : Finset β} {t : Finset α} (hs : s map f t) :
s.preimage f t
theorem Finset.subset_map_iff {α : Type u} {β : Type v} {f : α β} {s : Finset β} {t : Finset α} :
s map f t ut, s = map f u
theorem Finset.sigma_preimage_mk {α : Type u} {β : αType u_1} [DecidableEq α] (s : Finset ((a : α) × β a)) (t : Finset α) :
(t.sigma fun (a : α) => s.preimage (Sigma.mk a) ) = {as | a.fst t}
theorem Finset.sigma_preimage_mk_of_subset {α : Type u} {β : αType u_1} [DecidableEq α] (s : Finset ((a : α) × β a)) {t : Finset α} (ht : image Sigma.fst s t) :
(t.sigma fun (a : α) => s.preimage (Sigma.mk a) ) = s
theorem Finset.sigma_image_fst_preimage_mk {α : Type u} {β : αType u_1} [DecidableEq α] (s : Finset ((a : α) × β a)) :
((image Sigma.fst s).sigma fun (a : α) => s.preimage (Sigma.mk a) ) = s
@[simp]
theorem Finset.preimage_inl {α : Type u} {β : Type v} (s : Finset (α β)) :
@[simp]
theorem Finset.preimage_inr {α : Type u} {β : Type v} (s : Finset (α β)) :
def Equiv.restrictPreimageFinset {α : Type u} {β : Type v} (e : α β) (s : Finset β) :
{ x : α // x s.preimage e } { x : β // x s }

Given an equivalence e : α ≃ β and s : Finset β, restrict e to an equivalence from e ⁻¹' s to s.

Equations
@[simp]
theorem Equiv.restrictPreimageFinset_symm_apply_coe {α : Type u} {β : Type v} (e : α β) (s : Finset β) (b : { x : β // x s }) :
((e.restrictPreimageFinset s).symm b) = e.symm b
@[simp]
theorem Equiv.restrictPreimageFinset_apply_coe {α : Type u} {β : Type v} (e : α β) (s : Finset β) (a : { x : α // x s.preimage e }) :
((e.restrictPreimageFinset s) a) = e a
theorem Finset.restrict_comp_piCongrLeft {α : Type u} {β : Type v} {π : βType u_1} (s : Finset β) (e : α β) :
s.restrict (Equiv.piCongrLeft π e) = (Equiv.piCongrLeft (fun (b : { x : β // x s }) => π b) (e.restrictPreimageFinset s)) (s.preimage e ).restrict

Reindexing and then restricting to a Finset is the same as first restricting to the preimage of this Finset and then reindexing.