Module docstring
{"# Sets in sigma types
This file defines Set.sigma, the indexed sum of sets.
"}
{"# Sets in sigma types
This file defines Set.sigma, the indexed sum of sets.
"}
Set.range_sigmaMk
theorem
(i : ι) : range (Sigma.mk i : α i → Sigma α) = Sigma.fst ⁻¹' { i }
@[simp]
theorem range_sigmaMk (i : ι) : range (Sigma.mk i : α i → Sigma α) = Sigma.fstSigma.fst ⁻¹' {i} := by
apply Subset.antisymm
· rintro _ ⟨b, rfl⟩
simp
· rintro ⟨x, y⟩ (rfl | _)
exact mem_range_self y
Set.preimage_image_sigmaMk_of_ne
theorem
(h : i ≠ j) (s : Set (α j)) : Sigma.mk i ⁻¹' (Sigma.mk j '' s) = ∅
theorem preimage_image_sigmaMk_of_ne (h : i ≠ j) (s : Set (α j)) :
Sigma.mkSigma.mk i ⁻¹' (Sigma.mk j '' s) = ∅ := by
ext x
simp [h.symm]
Set.image_sigmaMk_preimage_sigmaMap_subset
theorem
{β : ι' → Type*} (f : ι → ι') (g : ∀ i, α i → β (f i)) (i : ι) (s : Set (β (f i))) :
Sigma.mk i '' (g i ⁻¹' s) ⊆ Sigma.map f g ⁻¹' (Sigma.mk (f i) '' s)
theorem image_sigmaMk_preimage_sigmaMap_subset {β : ι' → Type*} (f : ι → ι')
(g : ∀ i, α i → β (f i)) (i : ι) (s : Set (β (f i))) :
Sigma.mkSigma.mk i '' (g i ⁻¹' s)Sigma.mk i '' (g i ⁻¹' s) ⊆ Sigma.map f g ⁻¹' (Sigma.mk (f i) '' s) :=
image_subset_iff.2 fun x hx ↦ ⟨g i x, hx, rfl⟩
Set.image_sigmaMk_preimage_sigmaMap
theorem
{β : ι' → Type*} {f : ι → ι'} (hf : Function.Injective f) (g : ∀ i, α i → β (f i)) (i : ι) (s : Set (β (f i))) :
Sigma.mk i '' (g i ⁻¹' s) = Sigma.map f g ⁻¹' (Sigma.mk (f i) '' s)
theorem image_sigmaMk_preimage_sigmaMap {β : ι' → Type*} {f : ι → ι'} (hf : Function.Injective f)
(g : ∀ i, α i → β (f i)) (i : ι) (s : Set (β (f i))) :
Sigma.mkSigma.mk i '' (g i ⁻¹' s) = Sigma.mapSigma.map f g ⁻¹' (Sigma.mk (f i) '' s) := by
refine (image_sigmaMk_preimage_sigmaMap_subset f g i s).antisymm ?_
rintro ⟨j, x⟩ ⟨y, hys, hxy⟩
simp only [hf.eq_iff, Sigma.map, Sigma.ext_iff] at hxy
rcases hxy with ⟨rfl, hxy⟩; rw [heq_iff_eq] at hxy; subst y
exact ⟨x, hys, rfl⟩
Set.sigma
definition
(s : Set ι) (t : ∀ i, Set (α i)) : Set (Σ i, α i)
Set.mem_sigma_iff
theorem
: x ∈ s.sigma t ↔ x.1 ∈ s ∧ x.2 ∈ t x.1
@[simp] theorem mem_sigma_iff : x ∈ s.sigma tx ∈ s.sigma t ↔ x.1 ∈ s ∧ x.2 ∈ t x.1 := Iff.rfl
Set.mk_sigma_iff
theorem
: (⟨i, a⟩ : Σ i, α i) ∈ s.sigma t ↔ i ∈ s ∧ a ∈ t i
theorem mk_sigma_iff : (⟨i, a⟩ : Σ i, α i) ∈ s.sigma t(⟨i, a⟩ : Σ i, α i) ∈ s.sigma t ↔ i ∈ s ∧ a ∈ t i := Iff.rfl
Set.mk_mem_sigma
theorem
(hi : i ∈ s) (ha : a ∈ t i) : (⟨i, a⟩ : Σ i, α i) ∈ s.sigma t
theorem mk_mem_sigma (hi : i ∈ s) (ha : a ∈ t i) : (⟨i, a⟩ : Σ i, α i) ∈ s.sigma t := ⟨hi, ha⟩
Set.sigma_mono
theorem
(hs : s₁ ⊆ s₂) (ht : ∀ i, t₁ i ⊆ t₂ i) : s₁.sigma t₁ ⊆ s₂.sigma t₂
theorem sigma_mono (hs : s₁ ⊆ s₂) (ht : ∀ i, t₁ i ⊆ t₂ i) : s₁.sigma t₁ ⊆ s₂.sigma t₂ := fun _ hx ↦
⟨hs hx.1, ht _ hx.2⟩
Set.sigma_subset_iff
theorem
: s.sigma t ⊆ u ↔ ∀ ⦃i⦄, i ∈ s → ∀ ⦃a⦄, a ∈ t i → (⟨i, a⟩ : Σ i, α i) ∈ u
Set.forall_sigma_iff
theorem
{p : (Σ i, α i) → Prop} : (∀ x ∈ s.sigma t, p x) ↔ ∀ ⦃i⦄, i ∈ s → ∀ ⦃a⦄, a ∈ t i → p ⟨i, a⟩
theorem forall_sigma_iff {p : (Σ i, α i) → Prop} :
(∀ x ∈ s.sigma t, p x) ↔ ∀ ⦃i⦄, i ∈ s → ∀ ⦃a⦄, a ∈ t i → p ⟨i, a⟩ := sigma_subset_iff
Set.exists_sigma_iff
theorem
{p : (Σ i, α i) → Prop} : (∃ x ∈ s.sigma t, p x) ↔ ∃ i ∈ s, ∃ a ∈ t i, p ⟨i, a⟩
theorem exists_sigma_iff {p : (Σi, α i) → Prop} :
(∃ x ∈ s.sigma t, p x) ↔ ∃ i ∈ s, ∃ a ∈ t i, p ⟨i, a⟩ :=
⟨fun ⟨⟨i, a⟩, ha, h⟩ ↦ ⟨i, ha.1, a, ha.2, h⟩, fun ⟨i, hi, a, ha, h⟩ ↦ ⟨⟨i, a⟩, ⟨hi, ha⟩, h⟩⟩
Set.sigma_empty
theorem
: s.sigma (fun i ↦ (∅ : Set (α i))) = ∅
Set.empty_sigma
theorem
: (∅ : Set ι).sigma t = ∅
Set.univ_sigma_univ
theorem
: (@univ ι).sigma (fun _ ↦ @univ (α i)) = univ
Set.sigma_univ
theorem
: s.sigma (fun _ ↦ univ : ∀ i, Set (α i)) = Sigma.fst ⁻¹' s
@[simp]
theorem sigma_univ : s.sigma (fun _ ↦ univ : ∀ i, Set (α i)) = Sigma.fstSigma.fst ⁻¹' s :=
ext fun _ ↦ iff_of_eq (and_true _)
Set.univ_sigma_preimage_mk
theorem
(s : Set (Σ i, α i)) : (univ : Set ι).sigma (fun i ↦ Sigma.mk i ⁻¹' s) = s
@[simp] theorem univ_sigma_preimage_mk (s : Set (Σ i, α i)) :
(univ : Set ι).sigma (fun i ↦ Sigma.mkSigma.mk i ⁻¹' s) = s :=
ext <| by simp
Set.singleton_sigma
theorem
: ({ i } : Set ι).sigma t = Sigma.mk i '' t i
@[simp]
theorem singleton_sigma : ({i} : Set ι).sigma t = Sigma.mkSigma.mk i '' t i :=
ext fun x ↦ by
constructor
· obtain ⟨j, a⟩ := x
rintro ⟨rfl : j = i, ha⟩
exact mem_image_of_mem _ ha
· rintro ⟨b, hb, rfl⟩
exact ⟨rfl, hb⟩
Set.sigma_singleton
theorem
{a : ∀ i, α i} : s.sigma (fun i ↦ ({a i} : Set (α i))) = (fun i ↦ Sigma.mk i <| a i) '' s
@[simp]
theorem sigma_singleton {a : ∀ i, α i} :
s.sigma (fun i ↦ ({a i} : Set (α i))) = (fun i ↦ Sigma.mk i <| a i) '' s := by
ext ⟨x, y⟩
simp [and_left_comm, eq_comm]
Set.singleton_sigma_singleton
theorem
{a : ∀ i, α i} : (({ i } : Set ι).sigma fun i ↦ ({a i} : Set (α i))) = {⟨i, a i⟩}
theorem singleton_sigma_singleton {a : ∀ i, α i} :
(({i} : Set ι).sigma fun i ↦ ({a i} : Set (α i))) = {⟨i, a i⟩} := by
rw [sigma_singleton, image_singleton]
Set.union_sigma
theorem
: (s₁ ∪ s₂).sigma t = s₁.sigma t ∪ s₂.sigma t
@[simp]
theorem union_sigma : (s₁ ∪ s₂).sigma t = s₁.sigma t ∪ s₂.sigma t := ext fun _ ↦ or_and_right
Set.sigma_union
theorem
: s.sigma (fun i ↦ t₁ i ∪ t₂ i) = s.sigma t₁ ∪ s.sigma t₂
@[simp]
theorem sigma_union : s.sigma (fun i ↦ t₁ i ∪ t₂ i) = s.sigma t₁ ∪ s.sigma t₂ :=
ext fun _ ↦ and_or_left
Set.sigma_inter_sigma
theorem
: s₁.sigma t₁ ∩ s₂.sigma t₂ = (s₁ ∩ s₂).sigma fun i ↦ t₁ i ∩ t₂ i
theorem sigma_inter_sigma : s₁.sigma t₁ ∩ s₂.sigma t₂ = (s₁ ∩ s₂).sigma fun i ↦ t₁ i ∩ t₂ i := by
ext ⟨x, y⟩
simp [and_assoc, and_left_comm]
biSup_sigma
theorem
(s : Set ι) (t : ∀ i, Set (α i)) (f : Sigma α → β) : ⨆ ij ∈ s.sigma t, f ij = ⨆ (i ∈ s) (j ∈ t i), f ⟨i, j⟩
theorem _root_.biSup_sigma (s : Set ι) (t : ∀ i, Set (α i)) (f : Sigma α → β) :
⨆ ij ∈ s.sigma t, f ij = ⨆ (i ∈ s) (j ∈ t i), f ⟨i, j⟩ :=
eq_of_forall_ge_iff fun _ ↦ ⟨by simp_all, by simp_all⟩
biSup_sigma'
theorem
(s : Set ι) (t : ∀ i, Set (α i)) (f : ∀ i, α i → β) : ⨆ (i ∈ s) (j ∈ t i), f i j = ⨆ ij ∈ s.sigma t, f ij.fst ij.snd
theorem _root_.biSup_sigma' (s : Set ι) (t : ∀ i, Set (α i)) (f : ∀ i, α i → β) :
⨆ (i ∈ s) (j ∈ t i), f i j = ⨆ ij ∈ s.sigma t, f ij.fst ij.snd :=
Eq.symm (biSup_sigma _ _ _)
biInf_sigma
theorem
(s : Set ι) (t : ∀ i, Set (α i)) (f : Sigma α → β) : ⨅ ij ∈ s.sigma t, f ij = ⨅ (i ∈ s) (j ∈ t i), f ⟨i, j⟩
theorem _root_.biInf_sigma (s : Set ι) (t : ∀ i, Set (α i)) (f : Sigma α → β) :
⨅ ij ∈ s.sigma t, f ij = ⨅ (i ∈ s) (j ∈ t i), f ⟨i, j⟩ :=
biSup_sigma (β := βᵒᵈ) _ _ _
biInf_sigma'
theorem
(s : Set ι) (t : ∀ i, Set (α i)) (f : ∀ i, α i → β) : ⨅ (i ∈ s) (j ∈ t i), f i j = ⨅ ij ∈ s.sigma t, f ij.fst ij.snd
theorem _root_.biInf_sigma' (s : Set ι) (t : ∀ i, Set (α i)) (f : ∀ i, α i → β) :
⨅ (i ∈ s) (j ∈ t i), f i j = ⨅ ij ∈ s.sigma t, f ij.fst ij.snd :=
Eq.symm (biInf_sigma _ _ _)
Set.biUnion_sigma
theorem
(s : Set ι) (t : ∀ i, Set (α i)) (f : Sigma α → Set β) : ⋃ ij ∈ s.sigma t, f ij = ⋃ i ∈ s, ⋃ j ∈ t i, f ⟨i, j⟩
theorem biUnion_sigma (s : Set ι) (t : ∀ i, Set (α i)) (f : Sigma α → Set β) :
⋃ ij ∈ s.sigma t, f ij = ⋃ i ∈ s, ⋃ j ∈ t i, f ⟨i, j⟩ :=
biSup_sigma _ _ _
Set.biUnion_sigma'
theorem
(s : Set ι) (t : ∀ i, Set (α i)) (f : ∀ i, α i → Set β) : ⋃ i ∈ s, ⋃ j ∈ t i, f i j = ⋃ ij ∈ s.sigma t, f ij.fst ij.snd
theorem biUnion_sigma' (s : Set ι) (t : ∀ i, Set (α i)) (f : ∀ i, α i → Set β) :
⋃ i ∈ s, ⋃ j ∈ t i, f i j = ⋃ ij ∈ s.sigma t, f ij.fst ij.snd :=
biSup_sigma' _ _ _
Set.biInter_sigma
theorem
(s : Set ι) (t : ∀ i, Set (α i)) (f : Sigma α → Set β) : ⋂ ij ∈ s.sigma t, f ij = ⋂ i ∈ s, ⋂ j ∈ t i, f ⟨i, j⟩
theorem biInter_sigma (s : Set ι) (t : ∀ i, Set (α i)) (f : Sigma α → Set β) :
⋂ ij ∈ s.sigma t, f ij = ⋂ i ∈ s, ⋂ j ∈ t i, f ⟨i, j⟩ :=
biInf_sigma _ _ _
Set.biInter_sigma'
theorem
(s : Set ι) (t : ∀ i, Set (α i)) (f : ∀ i, α i → Set β) : ⋂ i ∈ s, ⋂ j ∈ t i, f i j = ⋂ ij ∈ s.sigma t, f ij.fst ij.snd
theorem biInter_sigma' (s : Set ι) (t : ∀ i, Set (α i)) (f : ∀ i, α i → Set β) :
⋂ i ∈ s, ⋂ j ∈ t i, f i j = ⋂ ij ∈ s.sigma t, f ij.fst ij.snd :=
biInf_sigma' _ _ _
Set.insert_sigma
theorem
: (insert i s).sigma t = Sigma.mk i '' t i ∪ s.sigma t
theorem insert_sigma : (insert i s).sigma t = Sigma.mkSigma.mk i '' t iSigma.mk i '' t i ∪ s.sigma t := by
rw [insert_eq, union_sigma, singleton_sigma]
Set.sigma_insert
theorem
{a : ∀ i, α i} : s.sigma (fun i ↦ insert (a i) (t i)) = (fun i ↦ ⟨i, a i⟩) '' s ∪ s.sigma t
theorem sigma_insert {a : ∀ i, α i} :
s.sigma (fun i ↦ insert (a i) (t i)) = (fun i ↦ ⟨i, a i⟩) '' s(fun i ↦ ⟨i, a i⟩) '' s ∪ s.sigma t := by
simp_rw [insert_eq, sigma_union, sigma_singleton]
Set.sigma_preimage_eq
theorem
{f : ι' → ι} {g : ∀ i, β i → α i} :
(f ⁻¹' s).sigma (fun i ↦ g (f i) ⁻¹' t (f i)) = (fun p : Σ i, β (f i) ↦ Sigma.mk _ (g _ p.2)) ⁻¹' s.sigma t
theorem sigma_preimage_eq {f : ι' → ι} {g : ∀ i, β i → α i} :
(f ⁻¹' s).sigma (fun i ↦ g (f i) ⁻¹' t (f i)) =
(fun p : Σ i, β (f i) ↦ Sigma.mk _ (g _ p.2)) ⁻¹' s.sigma t := rfl
Set.sigma_preimage_left
theorem
{f : ι' → ι} : ((f ⁻¹' s).sigma fun i ↦ t (f i)) = (fun p : Σ i, α (f i) ↦ Sigma.mk _ p.2) ⁻¹' s.sigma t
theorem sigma_preimage_left {f : ι' → ι} :
((f ⁻¹' s).sigma fun i ↦ t (f i)) = (fun p : Σ i, α (f i) ↦ Sigma.mk _ p.2) ⁻¹' s.sigma t :=
rfl
Set.sigma_preimage_right
theorem
{g : ∀ i, β i → α i} : (s.sigma fun i ↦ g i ⁻¹' t i) = (fun p : Σ i, β i ↦ Sigma.mk p.1 (g _ p.2)) ⁻¹' s.sigma t
theorem sigma_preimage_right {g : ∀ i, β i → α i} :
(s.sigma fun i ↦ g i ⁻¹' t i) = (fun p : Σ i, β i ↦ Sigma.mk p.1 (g _ p.2)) ⁻¹' s.sigma t :=
rfl
Set.preimage_sigmaMap_sigma
theorem
{α' : ι' → Type*} (f : ι → ι') (g : ∀ i, α i → α' (f i)) (s : Set ι') (t : ∀ i, Set (α' i)) :
Sigma.map f g ⁻¹' s.sigma t = (f ⁻¹' s).sigma fun i ↦ g i ⁻¹' t (f i)
theorem preimage_sigmaMap_sigma {α' : ι' → Type*} (f : ι → ι') (g : ∀ i, α i → α' (f i))
(s : Set ι') (t : ∀ i, Set (α' i)) :
Sigma.mapSigma.map f g ⁻¹' s.sigma t = (f ⁻¹' s).sigma fun i ↦ g i ⁻¹' t (f i) := rfl
Set.mk_preimage_sigma
theorem
(hi : i ∈ s) : Sigma.mk i ⁻¹' s.sigma t = t i
@[simp]
theorem mk_preimage_sigma (hi : i ∈ s) : Sigma.mkSigma.mk i ⁻¹' s.sigma t = t i :=
ext fun _ ↦ and_iff_right hi
Set.mk_preimage_sigma_eq_empty
theorem
(hi : i ∉ s) : Sigma.mk i ⁻¹' s.sigma t = ∅
@[simp]
theorem mk_preimage_sigma_eq_empty (hi : i ∉ s) : Sigma.mkSigma.mk i ⁻¹' s.sigma t = ∅ :=
ext fun _ ↦ iff_of_false (hi ∘ And.left) id
Set.mk_preimage_sigma_eq_if
theorem
[DecidablePred (· ∈ s)] : Sigma.mk i ⁻¹' s.sigma t = if i ∈ s then t i else ∅
theorem mk_preimage_sigma_eq_if [DecidablePred (· ∈ s)] :
Sigma.mkSigma.mk i ⁻¹' s.sigma t = if i ∈ s then t i else ∅ := by split_ifs <;> simp [*]
Set.mk_preimage_sigma_fn_eq_if
theorem
{β : Type*} [DecidablePred (· ∈ s)] (g : β → α i) :
(fun b ↦ Sigma.mk i (g b)) ⁻¹' s.sigma t = if i ∈ s then g ⁻¹' t i else ∅
theorem mk_preimage_sigma_fn_eq_if {β : Type*} [DecidablePred (· ∈ s)] (g : β → α i) :
(fun b ↦ Sigma.mk i (g b)) ⁻¹' s.sigma t = if i ∈ s then g ⁻¹' t i else ∅ :=
ext fun _ ↦ by split_ifs <;> simp [*]
Set.sigma_univ_range_eq
theorem
{f : ∀ i, α i → β i} : (univ : Set ι).sigma (fun i ↦ range (f i)) = range fun x : Σ i, α i ↦ ⟨x.1, f _ x.2⟩
theorem sigma_univ_range_eq {f : ∀ i, α i → β i} :
(univ : Set ι).sigma (fun i ↦ range (f i)) = range fun x : Σ i, α i ↦ ⟨x.1, f _ x.2⟩ :=
ext <| by simp [range, Sigma.forall]
Set.Nonempty.sigma
theorem
: s.Nonempty → (∀ i, (t i).Nonempty) → (s.sigma t).Nonempty
protected theorem Nonempty.sigma :
s.Nonempty → (∀ i, (t i).Nonempty) → (s.sigma t).Nonempty := fun ⟨i, hi⟩ h ↦
let ⟨a, ha⟩ := h i
⟨⟨i, a⟩, hi, ha⟩
Set.Nonempty.sigma_fst
theorem
: (s.sigma t).Nonempty → s.Nonempty
theorem Nonempty.sigma_fst : (s.sigma t).Nonempty → s.Nonempty := fun ⟨x, hx⟩ ↦ ⟨x.1, hx.1⟩
Set.Nonempty.sigma_snd
theorem
: (s.sigma t).Nonempty → ∃ i ∈ s, (t i).Nonempty
theorem Nonempty.sigma_snd : (s.sigma t).Nonempty → ∃ i ∈ s, (t i).Nonempty :=
fun ⟨x, hx⟩ ↦ ⟨x.1, hx.1, x.2, hx.2⟩
Set.sigma_nonempty_iff
theorem
: (s.sigma t).Nonempty ↔ ∃ i ∈ s, (t i).Nonempty
Set.sigma_eq_empty_iff
theorem
: s.sigma t = ∅ ↔ ∀ i ∈ s, t i = ∅
theorem sigma_eq_empty_iff : s.sigma t = ∅ ↔ ∀ i ∈ s, t i = ∅ :=
not_nonempty_iff_eq_empty.symm.trans <|
sigma_nonempty_iff.not.trans <| by
simp only [not_nonempty_iff_eq_empty, not_and, not_exists]
Set.image_sigmaMk_subset_sigma_left
theorem
{a : ∀ i, α i} (ha : ∀ i, a i ∈ t i) : (fun i ↦ Sigma.mk i (a i)) '' s ⊆ s.sigma t
theorem image_sigmaMk_subset_sigma_left {a : ∀ i, α i} (ha : ∀ i, a i ∈ t i) :
(fun i ↦ Sigma.mk i (a i)) '' s(fun i ↦ Sigma.mk i (a i)) '' s ⊆ s.sigma t :=
image_subset_iff.2 fun _ hi ↦ ⟨hi, ha _⟩
Set.image_sigmaMk_subset_sigma_right
theorem
(hi : i ∈ s) : Sigma.mk i '' t i ⊆ s.sigma t
theorem image_sigmaMk_subset_sigma_right (hi : i ∈ s) : Sigma.mkSigma.mk i '' t iSigma.mk i '' t i ⊆ s.sigma t :=
image_subset_iff.2 fun _ ↦ And.intro hi
Set.sigma_subset_preimage_fst
theorem
(s : Set ι) (t : ∀ i, Set (α i)) : s.sigma t ⊆ Sigma.fst ⁻¹' s
theorem sigma_subset_preimage_fst (s : Set ι) (t : ∀ i, Set (α i)) : s.sigma t ⊆ Sigma.fst ⁻¹' s :=
fun _ ↦ And.left
Set.fst_image_sigma_subset
theorem
(s : Set ι) (t : ∀ i, Set (α i)) : Sigma.fst '' s.sigma t ⊆ s
theorem fst_image_sigma_subset (s : Set ι) (t : ∀ i, Set (α i)) : Sigma.fstSigma.fst '' s.sigma tSigma.fst '' s.sigma t ⊆ s :=
image_subset_iff.2 fun _ ↦ And.left
Set.fst_image_sigma
theorem
(s : Set ι) (ht : ∀ i, (t i).Nonempty) : Sigma.fst '' s.sigma t = s
theorem fst_image_sigma (s : Set ι) (ht : ∀ i, (t i).Nonempty) : Sigma.fstSigma.fst '' s.sigma t = s :=
(fst_image_sigma_subset _ _).antisymm fun i hi ↦
let ⟨a, ha⟩ := ht i
⟨⟨i, a⟩, ⟨hi, ha⟩, rfl⟩
Set.sigma_diff_sigma
theorem
: s₁.sigma t₁ \ s₂.sigma t₂ = s₁.sigma (t₁ \ t₂) ∪ (s₁ \ s₂).sigma t₁
theorem sigma_diff_sigma : s₁.sigma t₁ \ s₂.sigma t₂ = s₁.sigma (t₁ \ t₂) ∪ (s₁ \ s₂).sigma t₁ :=
ext fun x ↦ by
by_cases h₁ : x.1 ∈ s₁ <;> by_cases h₂ : x.2 ∈ t₁ x.1 <;> simp [*, ← imp_iff_or_not]