The set lattice #
This file provides usual set notation for unions and intersections, a complete_lattice
instance
for set α
, and some more set constructions.
Main declarations #
set.Union
: Union of an indexed family of sets.set.Inter
: Intersection of an indexed family of sets.set.sInter
: set Inter. Intersection of sets belonging to a set of sets.set.sUnion
: set Union. Union of sets belonging to a set of sets. This is actually defined in core Lean.set.sInter_eq_bInter
,set.sUnion_eq_bInter
: Shows that⋂₀ s = ⋂ x ∈ s, x
and⋃₀ s = ⋃ x ∈ s, x
.set.complete_boolean_algebra
:set α
is acomplete_boolean_algebra
with≤ = ⊆
,< = ⊂
,⊓ = ∩
,⊔ = ∪
,⨅ = ⋂
,⨆ = ⋃
and\
as the set difference. Seeset.boolean_algebra
.set.kern_image
: For a functionf : α → β
,s.kern_image f
is the set ofy
such thatf ⁻¹ y ⊆ s
.set.seq
: Union of the image of a set under a sequence of functions.seq s t
is the union off '' t
over allf ∈ s
, wheret : set α
ands : set (α → β)
.set.Union_eq_sigma_of_disjoint
: Equivalence between⋃ i, t i
andΣ i, t i
, wheret
is an indexed family of disjoint sets.
Notation #
⋃
:set.Union
⋂
:set.Inter
⋃₀
:set.sUnion
⋂₀
:set.sInter
Complete lattice and complete Boolean algebra instances #
@[protected, instance]
Equations
- set.has_Sup = {Sup := set.sUnion α}
@[protected, instance]
Equations
- set.complete_boolean_algebra = {sup := boolean_algebra.sup set.boolean_algebra, le := boolean_algebra.le set.boolean_algebra, lt := boolean_algebra.lt set.boolean_algebra, le_refl := _, le_trans := _, lt_iff_le_not_le := _, le_antisymm := _, le_sup_left := _, le_sup_right := _, sup_le := _, inf := boolean_algebra.inf set.boolean_algebra, inf_le_left := _, inf_le_right := _, le_inf := _, le_sup_inf := _, sdiff := boolean_algebra.sdiff set.boolean_algebra, bot := boolean_algebra.bot set.boolean_algebra, sup_inf_sdiff := _, inf_inf_sdiff := _, compl := boolean_algebra.compl set.boolean_algebra, top := boolean_algebra.top set.boolean_algebra, inf_compl_le_bot := _, top_le_sup_compl := _, le_top := _, bot_le := _, sdiff_eq := _, Sup := Sup set.has_Sup, le_Sup := _, Sup_le := _, Inf := Inf set.has_Inf, Inf_le := _, le_Inf := _, infi_sup_le_sup_Inf := _, inf_Sup_le_supr_inf := _}
set.image
is monotone. See set.image_image
for the statement in terms of ⊆
.
theorem
set.monotone_set_of
{α : Type u_1}
{β : Type u_2}
[preorder α]
{p : α → β → Prop}
(hp : ∀ (b : β), monotone (λ (a : α), p a b)) :
monotone (λ (a : α), {b : β | p a b})
@[protected]
theorem
set.image_preimage
{α : Type u_1}
{β : Type u_2}
{f : α → β} :
galois_connection (set.image f) (set.preimage f)
kern_image f s
is the set of y
such that f ⁻¹ y ⊆ s
.
Equations
- set.kern_image f s = {y : β | ∀ ⦃x : α⦄, f x = y → x ∈ s}
@[protected]
Union and intersection over an indexed family of sets #
@[protected, instance]
theorem
set.set_of_exists
{β : Type u_2}
{ι : Sort u_4}
(p : ι → β → Prop) :
{x : β | ∃ (i : ι), p i x} = ⋃ (i : ι), {x : β | p i x}
theorem
set.set_of_forall
{β : Type u_2}
{ι : Sort u_4}
(p : ι → β → Prop) :
{x : β | ∀ (i : ι), p i x} = ⋂ (i : ι), {x : β | p i x}
theorem
set.subset_Union
{β : Type u_2}
{ι : Sort u_4}
(s : ι → set β)
(i : ι) :
s i ⊆ ⋃ (i : ι), s i
theorem
set.Inter_subset
{β : Type u_2}
{ι : Sort u_4}
(s : ι → set β)
(i : ι) :
(⋂ (i : ι), s i) ⊆ s i
theorem
set.Inter_subset_Inter
{α : Type u_1}
{ι : Sort u_4}
{s t : ι → set α}
(h : ∀ (i : ι), s i ⊆ t i) :
(⋂ (i : ι), s i) ⊆ ⋂ (i : ι), t i
theorem
set.Inter_set_of
{α : Type u_1}
{ι : Sort u_4}
(P : ι → α → Prop) :
(⋂ (i : ι), {x : α | P i x}) = {x : α | ∀ (i : ι), P i x}
theorem
set.Union_congr
{α : Type u_1}
{ι : Sort u_4}
{ι₂ : Sort u_6}
{f : ι → set α}
{g : ι₂ → set α}
(h : ι → ι₂)
(h1 : function.surjective h)
(h2 : ∀ (x : ι), g (h x) = f x) :
(⋃ (x : ι), f x) = ⋃ (y : ι₂), g y
theorem
set.Inter_congr
{α : Type u_1}
{ι : Sort u_4}
{ι₂ : Sort u_6}
{f : ι → set α}
{g : ι₂ → set α}
(h : ι → ι₂)
(h1 : function.surjective h)
(h2 : ∀ (x : ι), g (h x) = f x) :
(⋂ (x : ι), f x) = ⋂ (y : ι₂), g y
theorem
set.directed_on_Union
{α : Type u_1}
{ι : Sort u_4}
{r : α → α → Prop}
{f : ι → set α}
(hd : directed has_subset.subset f)
(h : ∀ (x : ι), directed_on r (f x)) :
directed_on r (⋃ (x : ι), f x)
theorem
set.Union_inter_of_monotone
{ι : Type u_1}
{α : Type u_2}
[semilattice_sup ι]
{s t : ι → set α}
(hs : monotone s)
(ht : monotone t) :
theorem
set.Union_Inter_subset
{ι : Sort u_1}
{ι' : Sort u_2}
{α : Type u_3}
{s : ι → ι' → set α} :
(⋃ (j : ι'), ⋂ (i : ι), s i j) ⊆ ⋂ (i : ι), ⋃ (j : ι'), s i j
An equality version of this lemma is Union_Inter_of_monotone
in data.set.finite
.
theorem
set.Union_ite
{α : Type u_1}
{ι : Sort u_4}
(p : ι → Prop)
[decidable_pred p]
(f g : ι → set α) :
theorem
set.Inter_ite
{α : Type u_1}
{ι : Sort u_4}
(p : ι → Prop)
[decidable_pred p]
(f g : ι → set α) :
Unions and intersections indexed by Prop
#
@[simp]
theorem
set.Union_comm
{α : Type u_1}
{ι : Sort u_4}
{ι' : Sort u_5}
(s : ι → ι' → set α) :
(⋃ (i : ι) (i' : ι'), s i i') = ⋃ (i' : ι') (i : ι), s i i'
theorem
set.Inter_comm
{α : Type u_1}
{ι : Sort u_4}
{ι' : Sort u_5}
(s : ι → ι' → set α) :
(⋂ (i : ι) (i' : ι'), s i i') = ⋂ (i' : ι') (i : ι), s i i'
Bounded unions and intersections #
@[simp]
@[simp]
theorem
set.Union_subset_Union
{α : Type u_1}
{ι : Sort u_4}
{s t : ι → set α}
(h : ∀ (i : ι), s i ⊆ t i) :
(⋃ (i : ι), s i) ⊆ ⋃ (i : ι), t i
theorem
set.Union_subset_Union_const
{α : Type u_1}
{ι : Sort u_4}
{ι₂ : Sort u_6}
{s : set α}
(h : ι → ι₂) :
(⋃ (i : ι), s) ⊆ ⋃ (j : ι₂), s
@[simp]
theorem
set.Union_range_eq_Union
{ι : Type u_1}
{α : Type u_2}
{β : Type u_3}
(C : ι → set α)
{f : Π (x : ι), β → ↥(C x)}
(hf : ∀ (x : ι), function.surjective (f x)) :
maps_to
#
theorem
set.maps_to_sUnion
{α : Type u_1}
{β : Type u_2}
{S : set (set α)}
{t : set β}
{f : α → β}
(H : ∀ (s : set α), s ∈ S → set.maps_to f s t) :
set.maps_to f (⋃₀S) t
theorem
set.maps_to_Union
{α : Type u_1}
{β : Type u_2}
{ι : Sort u_4}
{s : ι → set α}
{t : set β}
{f : α → β}
(H : ∀ (i : ι), set.maps_to f (s i) t) :
set.maps_to f (⋃ (i : ι), s i) t
theorem
set.maps_to_bUnion
{α : Type u_1}
{β : Type u_2}
{ι : Sort u_4}
{p : ι → Prop}
{s : Π (i : ι), p i → set α}
{t : set β}
{f : α → β}
(H : ∀ (i : ι) (hi : p i), set.maps_to f (s i hi) t) :
set.maps_to f (⋃ (i : ι) (hi : p i), s i hi) t
theorem
set.maps_to_Union_Union
{α : Type u_1}
{β : Type u_2}
{ι : Sort u_4}
{s : ι → set α}
{t : ι → set β}
{f : α → β}
(H : ∀ (i : ι), set.maps_to f (s i) (t i)) :
set.maps_to f (⋃ (i : ι), s i) (⋃ (i : ι), t i)
theorem
set.maps_to_bUnion_bUnion
{α : Type u_1}
{β : Type u_2}
{ι : Sort u_4}
{p : ι → Prop}
{s : Π (i : ι), p i → set α}
{t : Π (i : ι), p i → set β}
{f : α → β}
(H : ∀ (i : ι) (hi : p i), set.maps_to f (s i hi) (t i hi)) :
set.maps_to f (⋃ (i : ι) (hi : p i), s i hi) (⋃ (i : ι) (hi : p i), t i hi)
theorem
set.maps_to_sInter
{α : Type u_1}
{β : Type u_2}
{s : set α}
{T : set (set β)}
{f : α → β}
(H : ∀ (t : set β), t ∈ T → set.maps_to f s t) :
set.maps_to f s (⋂₀T)
theorem
set.maps_to_Inter
{α : Type u_1}
{β : Type u_2}
{ι : Sort u_4}
{s : set α}
{t : ι → set β}
{f : α → β}
(H : ∀ (i : ι), set.maps_to f s (t i)) :
set.maps_to f s (⋂ (i : ι), t i)
theorem
set.maps_to_bInter
{α : Type u_1}
{β : Type u_2}
{ι : Sort u_4}
{p : ι → Prop}
{s : set α}
{t : Π (i : ι), p i → set β}
{f : α → β}
(H : ∀ (i : ι) (hi : p i), set.maps_to f s (t i hi)) :
set.maps_to f s (⋂ (i : ι) (hi : p i), t i hi)
theorem
set.maps_to_Inter_Inter
{α : Type u_1}
{β : Type u_2}
{ι : Sort u_4}
{s : ι → set α}
{t : ι → set β}
{f : α → β}
(H : ∀ (i : ι), set.maps_to f (s i) (t i)) :
set.maps_to f (⋂ (i : ι), s i) (⋂ (i : ι), t i)
theorem
set.maps_to_bInter_bInter
{α : Type u_1}
{β : Type u_2}
{ι : Sort u_4}
{p : ι → Prop}
{s : Π (i : ι), p i → set α}
{t : Π (i : ι), p i → set β}
{f : α → β}
(H : ∀ (i : ι) (hi : p i), set.maps_to f (s i hi) (t i hi)) :
set.maps_to f (⋂ (i : ι) (hi : p i), s i hi) (⋂ (i : ι) (hi : p i), t i hi)
inj_on
#
theorem
set.inj_on.image_Inter_eq
{α : Type u_1}
{β : Type u_2}
{ι : Sort u_4}
[nonempty ι]
{s : ι → set α}
{f : α → β}
(h : set.inj_on f (⋃ (i : ι), s i)) :
theorem
set.inj_on.image_bInter_eq
{α : Type u_1}
{β : Type u_2}
{ι : Sort u_4}
{p : ι → Prop}
{s : Π (i : ι), p i → set α}
(hp : ∃ (i : ι), p i)
{f : α → β}
(h : set.inj_on f (⋃ (i : ι) (hi : p i), s i hi)) :
theorem
set.inj_on_Union_of_directed
{α : Type u_1}
{β : Type u_2}
{ι : Sort u_4}
{s : ι → set α}
(hs : directed has_subset.subset s)
{f : α → β}
(hf : ∀ (i : ι), set.inj_on f (s i)) :
set.inj_on f (⋃ (i : ι), s i)
surj_on
#
theorem
set.surj_on_sUnion
{α : Type u_1}
{β : Type u_2}
{s : set α}
{T : set (set β)}
{f : α → β}
(H : ∀ (t : set β), t ∈ T → set.surj_on f s t) :
set.surj_on f s (⋃₀T)
theorem
set.surj_on_Union
{α : Type u_1}
{β : Type u_2}
{ι : Sort u_4}
{s : set α}
{t : ι → set β}
{f : α → β}
(H : ∀ (i : ι), set.surj_on f s (t i)) :
set.surj_on f s (⋃ (i : ι), t i)
theorem
set.surj_on_Union_Union
{α : Type u_1}
{β : Type u_2}
{ι : Sort u_4}
{s : ι → set α}
{t : ι → set β}
{f : α → β}
(H : ∀ (i : ι), set.surj_on f (s i) (t i)) :
set.surj_on f (⋃ (i : ι), s i) (⋃ (i : ι), t i)
theorem
set.surj_on_bUnion
{α : Type u_1}
{β : Type u_2}
{ι : Sort u_4}
{p : ι → Prop}
{s : set α}
{t : Π (i : ι), p i → set β}
{f : α → β}
(H : ∀ (i : ι) (hi : p i), set.surj_on f s (t i hi)) :
set.surj_on f s (⋃ (i : ι) (hi : p i), t i hi)
theorem
set.surj_on_bUnion_bUnion
{α : Type u_1}
{β : Type u_2}
{ι : Sort u_4}
{p : ι → Prop}
{s : Π (i : ι), p i → set α}
{t : Π (i : ι), p i → set β}
{f : α → β}
(H : ∀ (i : ι) (hi : p i), set.surj_on f (s i hi) (t i hi)) :
set.surj_on f (⋃ (i : ι) (hi : p i), s i hi) (⋃ (i : ι) (hi : p i), t i hi)
theorem
set.surj_on_Inter
{α : Type u_1}
{β : Type u_2}
{ι : Sort u_4}
[hi : nonempty ι]
{s : ι → set α}
{t : set β}
{f : α → β}
(H : ∀ (i : ι), set.surj_on f (s i) t)
(Hinj : set.inj_on f (⋃ (i : ι), s i)) :
set.surj_on f (⋂ (i : ι), s i) t
theorem
set.surj_on_Inter_Inter
{α : Type u_1}
{β : Type u_2}
{ι : Sort u_4}
[hi : nonempty ι]
{s : ι → set α}
{t : ι → set β}
{f : α → β}
(H : ∀ (i : ι), set.surj_on f (s i) (t i))
(Hinj : set.inj_on f (⋃ (i : ι), s i)) :
set.surj_on f (⋂ (i : ι), s i) (⋂ (i : ι), t i)
bij_on
#
theorem
set.bij_on_Union
{α : Type u_1}
{β : Type u_2}
{ι : Sort u_4}
{s : ι → set α}
{t : ι → set β}
{f : α → β}
(H : ∀ (i : ι), set.bij_on f (s i) (t i))
(Hinj : set.inj_on f (⋃ (i : ι), s i)) :
set.bij_on f (⋃ (i : ι), s i) (⋃ (i : ι), t i)
theorem
set.bij_on_Inter
{α : Type u_1}
{β : Type u_2}
{ι : Sort u_4}
[hi : nonempty ι]
{s : ι → set α}
{t : ι → set β}
{f : α → β}
(H : ∀ (i : ι), set.bij_on f (s i) (t i))
(Hinj : set.inj_on f (⋃ (i : ι), s i)) :
set.bij_on f (⋂ (i : ι), s i) (⋂ (i : ι), t i)
theorem
set.bij_on_Union_of_directed
{α : Type u_1}
{β : Type u_2}
{ι : Sort u_4}
{s : ι → set α}
(hs : directed has_subset.subset s)
{t : ι → set β}
{f : α → β}
(H : ∀ (i : ι), set.bij_on f (s i) (t i)) :
set.bij_on f (⋃ (i : ι), s i) (⋃ (i : ι), t i)
theorem
set.bij_on_Inter_of_directed
{α : Type u_1}
{β : Type u_2}
{ι : Sort u_4}
[nonempty ι]
{s : ι → set α}
(hs : directed has_subset.subset s)
{t : ι → set β}
{f : α → β}
(H : ∀ (i : ι), set.bij_on f (s i) (t i)) :
set.bij_on f (⋂ (i : ι), s i) (⋂ (i : ι), t i)
image
, preimage
#
@[simp]
theorem
set.Union_Union_eq'
{α : Type u_1}
{β : Type u_2}
{ι : Sort u_4}
{f : ι → α}
{g : α → set β} :
@[simp]
theorem
set.Inter_Inter_eq'
{α : Type u_1}
{β : Type u_2}
{ι : Sort u_4}
{f : ι → α}
{g : α → set β} :
theorem
set.Union_prod_of_monotone
{α : Type u_1}
{β : Type u_2}
{γ : Type u_3}
[semilattice_sup α]
{s : α → set β}
{t : α → set γ}
(hs : monotone s)
(ht : monotone t) :
theorem
set.Union_image_left
{α : Type u_1}
{β : Type u_2}
{γ : Type u_3}
(f : α → β → γ)
{s : set α}
{t : set β} :
(⋃ (a : α) (H : a ∈ s), f a '' t) = set.image2 f s t
theorem
set.Union_image_right
{α : Type u_1}
{β : Type u_2}
{γ : Type u_3}
(f : α → β → γ)
{s : set α}
{t : set β} :
(⋃ (b : β) (H : b ∈ t), (λ (a : α), f a b) '' s) = set.image2 f s t
theorem
set.image2_Union_left
{α : Type u_1}
{β : Type u_2}
{γ : Type u_3}
{ι : Sort u_4}
(f : α → β → γ)
(s : ι → set α)
(t : set β) :
set.image2 f (⋃ (i : ι), s i) t = ⋃ (i : ι), set.image2 f (s i) t
theorem
set.image2_Union_right
{α : Type u_1}
{β : Type u_2}
{γ : Type u_3}
{ι : Sort u_4}
(f : α → β → γ)
(s : set α)
(t : ι → set β) :
set.image2 f s (⋃ (i : ι), t i) = ⋃ (i : ι), set.image2 f s (t i)
theorem
set.image_seq
{α : Type u_1}
{β : Type u_2}
{γ : Type u_3}
{f : β → γ}
{s : set (α → β)}
{t : set α} :
theorem
set.image2_eq_seq
{α : Type u_1}
{β : Type u_2}
{γ : Type u_3}
(f : α → β → γ)
(s : set α)
(t : set β) :
set.image2 f s t = (f '' s).seq t
theorem
set.pi_def
{α : Type u_1}
{π : α → Type u_7}
(i : set α)
(s : Π (a : α), set (π a)) :
i.pi s = ⋂ (a : α) (H : a ∈ i), function.eval a ⁻¹' s a
theorem
set.univ_pi_eq_Inter
{α : Type u_1}
{π : α → Type u_7}
(t : Π (i : α), set (π i)) :
set.univ.pi t = ⋂ (i : α), function.eval i ⁻¹' t i
theorem
function.surjective.Union_comp
{α : Type u_1}
{ι : Sort u_4}
{ι₂ : Sort u_6}
{f : ι → ι₂}
(hf : function.surjective f)
(g : ι₂ → set α) :
(⋃ (x : ι), g (f x)) = ⋃ (y : ι₂), g y
theorem
function.surjective.Inter_comp
{α : Type u_1}
{ι : Sort u_4}
{ι₂ : Sort u_6}
{f : ι → ι₂}
(hf : function.surjective f)
(g : ι₂ → set α) :
(⋂ (x : ι), g (f x)) = ⋂ (y : ι₂), g y
Disjoint sets #
We define some lemmas in the disjoint
namespace to be able to use projection notation.
theorem
set.disjoint_image_of_injective
{α : Type u_1}
{β : Type u_2}
{f : α → β}
(hf : function.injective f)
{s t : set α}
(hd : disjoint s t) :
def
set.sigma_to_Union
{α : Type u_1}
{β : Type u_2}
(t : α → set β)
(x : Σ (i : α), ↥(t i)) :
↥⋃ (i : α), t i
If t
is an indexed family of sets, then there is a natural map from Σ i, t i
to ⋃ i, t i
sending ⟨i, x⟩
to x
.
Equations
- set.sigma_to_Union t x = ⟨↑(x.snd), _⟩
theorem
set.sigma_to_Union_injective
{α : Type u_1}
{β : Type u_2}
(t : α → set β)
(h : ∀ (i j : α), i ≠ j → disjoint (t i) (t j)) :
theorem
set.sigma_to_Union_bijective
{α : Type u_1}
{β : Type u_2}
(t : α → set β)
(h : ∀ (i j : α), i ≠ j → disjoint (t i) (t j)) :
noncomputable
def
set.Union_eq_sigma_of_disjoint
{α : Type u_1}
{β : Type u_2}
{t : α → set β}
(h : ∀ (i j : α), i ≠ j → disjoint (t i) (t j)) :
Equivalence between a disjoint union and a dependent sum.