Skip to content
This repository was archived by the owner on Jul 24, 2024. It is now read-only.

Commit 7952bc6

Browse files
urkudj-loreaux
andcommitted
feat(topology/locally_finite): add lemmas about option _ and sum _ _ (#15923)
Co-authored-by: Jireh Loreaux <loreaujy@gmail.com>
1 parent 7c0ff89 commit 7952bc6

File tree

3 files changed

+48
-20
lines changed

3 files changed

+48
-20
lines changed

src/data/set/basic.lean

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2158,6 +2158,11 @@ is_compl.compl_eq is_compl_range_inl_range_inr
21582158
@[simp] lemma compl_range_inr : (range (sum.inr : β → α ⊕ β))ᶜ = range (sum.inl : α → α ⊕ β) :=
21592159
is_compl.compl_eq is_compl_range_inl_range_inr.symm
21602160

2161+
theorem image_preimage_inl_union_image_preimage_inr (s : set (α ⊕ β)) :
2162+
sum.inl '' (sum.inl ⁻¹' s) ∪ sum.inr '' (sum.inr ⁻¹' s) = s :=
2163+
by rw [image_preimage_eq_inter_range, image_preimage_eq_inter_range, ← inter_distrib_left,
2164+
range_inl_union_range_inr, inter_univ]
2165+
21612166
@[simp] theorem range_quot_mk (r : α → α → Prop) : range (quot.mk r) = univ :=
21622167
(surjective_quot_mk r).range_eq
21632168

src/data/set/finite.lean

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -597,6 +597,11 @@ theorem finite_mem_finset (s : finset α) : {a | a ∈ s}.finite := to_finite _
597597
lemma subsingleton.finite {s : set α} (h : s.subsingleton) : s.finite :=
598598
h.induction_on finite_empty finite_singleton
599599

600+
lemma finite_preimage_inl_and_inr {s : set (α ⊕ β)} :
601+
(sum.inl ⁻¹' s).finite ∧ (sum.inr ⁻¹' s).finite ↔ s.finite :=
602+
⟨λ h, image_preimage_inl_union_image_preimage_inr s ▸ (h.1.image _).union (h.2.image _),
603+
λ h, ⟨h.preimage (sum.inl_injective.inj_on _), h.preimage (sum.inr_injective.inj_on _)⟩⟩
604+
600605
theorem exists_finite_iff_finset {p : set α → Prop} :
601606
(∃ s : set α, s.finite ∧ p s) ↔ ∃ s : finset α, p ↑s :=
602607
⟨λ ⟨s, hs, hps⟩, ⟨hs.to_finset, hs.coe_to_finset.symm ▸ hps⟩,

src/topology/locally_finite.lean

Lines changed: 38 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,8 @@ In this file we give the definition and prove basic properties of locally finite
1919
open set function filter
2020
open_locale topological_space filter
2121

22-
variables {ι ι' α X Y : Type*} [topological_space X] [topological_space Y]
22+
universe u
23+
variables {ι : Type u} {ι' α X Y : Type*} [topological_space X] [topological_space Y]
2324
{f g : ι → set X}
2425

2526
/-- A family of sets in `set X` is locally finite if at every point `x : X`,
@@ -45,34 +46,25 @@ lemma comp_inj_on {g : ι' → ι} (hf : locally_finite f)
4546
λ x, let ⟨t, htx, htf⟩ := hf x in ⟨t, htx, htf.preimage $ hg.mono $ λ i hi,
4647
hi.out.mono $ inter_subset_left _ _⟩
4748

48-
lemma comp_injective {g : ι' → ι} (hf : locally_finite f)
49-
(hg : function.injective g) : locally_finite (f ∘ g) :=
49+
lemma comp_injective {g : ι' → ι} (hf : locally_finite f) (hg : injective g) :
50+
locally_finite (f ∘ g) :=
5051
hf.comp_inj_on (hg.inj_on _)
5152

52-
lemma eventually_finite (hf : locally_finite f) (x : X) :
53+
lemma _root_.locally_finite_iff_small_sets :
54+
locally_finite f ↔ ∀ x, ∀ᶠ s in (𝓝 x).small_sets, {i | (f i ∩ s).nonempty}.finite :=
55+
forall_congr $ λ x, iff.symm $ eventually_small_sets' $ λ s t hst ht, ht.subset $
56+
λ i hi, hi.mono $ inter_subset_inter_right _ hst
57+
58+
protected lemma eventually_small_sets (hf : locally_finite f) (x : X) :
5359
∀ᶠ s in (𝓝 x).small_sets, {i | (f i ∩ s).nonempty}.finite :=
54-
eventually_small_sets.2 $ let ⟨s, hsx, hs⟩ := hf x in
55-
⟨s, hsx, λ t hts, hs.subset $ λ i hi, hi.out.mono $ inter_subset_inter_right _ hts⟩
60+
locally_finite_iff_small_sets.mp hf x
5661

5762
lemma exists_mem_basis {ι' : Sort*} (hf : locally_finite f) {p : ι' → Prop}
5863
{s : ι' → set X} {x : X} (hb : (𝓝 x).has_basis p s) :
5964
∃ i (hi : p i), {j | (f j ∩ s i).nonempty}.finite :=
60-
let ⟨i, hpi, hi⟩ := hb.small_sets.eventually_iff.mp (hf.eventually_finite x)
65+
let ⟨i, hpi, hi⟩ := hb.small_sets.eventually_iff.mp (hf.eventually_small_sets x)
6166
in ⟨i, hpi, hi subset.rfl⟩
6267

63-
lemma sum_elim {g : ι' → set X} (hf : locally_finite f) (hg : locally_finite g) :
64-
locally_finite (sum.elim f g) :=
65-
begin
66-
intro x,
67-
obtain ⟨s, hsx, hsf, hsg⟩ :
68-
∃ s, s ∈ 𝓝 x ∧ {i | (f i ∩ s).nonempty}.finite ∧ {j | (g j ∩ s).nonempty}.finite,
69-
from ((𝓝 x).frequently_small_sets_mem.and_eventually
70-
((hf.eventually_finite x).and (hg.eventually_finite x))).exists,
71-
refine ⟨s, hsx, _⟩,
72-
convert (hsf.image sum.inl).union (hsg.image sum.inr) using 1,
73-
ext (i|j); simp
74-
end
75-
7668
protected lemma closure (hf : locally_finite f) : locally_finite (λ i, closure (f i)) :=
7769
begin
7870
intro x,
@@ -162,3 +154,29 @@ lemma preimage_continuous {g : Y → X} (hf : locally_finite f) (hg : continuous
162154
in ⟨g ⁻¹' s, hg.continuous_at hsx, hs.subset $ λ i ⟨y, hy⟩, ⟨g y, hy⟩⟩
163155

164156
end locally_finite
157+
158+
@[simp] lemma equiv.locally_finite_comp_iff (e : ι' ≃ ι) :
159+
locally_finite (f ∘ e) ↔ locally_finite f :=
160+
⟨λ h, by simpa only [(∘), e.apply_symm_apply] using h.comp_injective e.symm.injective,
161+
λ h, h.comp_injective e.injective⟩
162+
163+
lemma locally_finite_sum {f : ι ⊕ ι' → set X} :
164+
locally_finite f ↔ locally_finite (f ∘ sum.inl) ∧ locally_finite (f ∘ sum.inr) :=
165+
by simp only [locally_finite_iff_small_sets, ← forall_and_distrib, ← finite_preimage_inl_and_inr,
166+
preimage_set_of_eq, (∘), eventually_and]
167+
168+
lemma locally_finite.sum_elim {g : ι' → set X} (hf : locally_finite f) (hg : locally_finite g) :
169+
locally_finite (sum.elim f g) :=
170+
locally_finite_sum.mpr ⟨hf, hg⟩
171+
172+
lemma locally_finite_option {f : option ι → set X} :
173+
locally_finite f ↔ locally_finite (f ∘ some) :=
174+
begin
175+
simp only [← (equiv.option_equiv_sum_punit.{u} ι).symm.locally_finite_comp_iff,
176+
locally_finite_sum, locally_finite_of_finite, and_true],
177+
refl
178+
end
179+
180+
lemma locally_finite.option_elim (hf : locally_finite f) (s : set X) :
181+
locally_finite (option.elim s f) :=
182+
locally_finite_option.2 hf

0 commit comments

Comments
 (0)