Skip to content

Commit

Permalink
feat(order/filter/ultrafilter): Restriction of ultrafilters along lar…
Browse files Browse the repository at this point in the history
…ge embeddings (#5195)

This PR adds the fact that the `comap` of an ultrafilter along a "large" embedding (meaning the image is large w.r.t. the ultrafilter) is again an ultrafilter.



Co-authored-by: Adam Topaz <adamtopaz@users.noreply.github.com>
Co-authored-by: Yury G. Kudryashov <urkud@urkud.name>
  • Loading branch information
3 people committed Dec 7, 2020
1 parent 67eb675 commit b2427d5
Show file tree
Hide file tree
Showing 3 changed files with 28 additions and 7 deletions.
9 changes: 9 additions & 0 deletions src/data/set/basic.lean
Expand Up @@ -1682,6 +1682,15 @@ begin
{ exact λ h, ⟨default ι, h.symm⟩ }
end

lemma range_diff_image_subset (f : α → β) (s : set α) :
range f \ f '' s ⊆ f '' sᶜ :=
λ y ⟨⟨x, h₁⟩, h₂⟩, ⟨x, λ h, h₂ ⟨x, h, h₁⟩, h₁⟩

lemma range_diff_image {f : α → β} (H : injective f) (s : set α) :
range f \ f '' s = f '' sᶜ :=
subset.antisymm (range_diff_image_subset f s) $ λ y ⟨x, hx, hy⟩, hy ▸
⟨mem_range_self _, λ ⟨x', hx', eq⟩, hx $ H eq ▸ hx'⟩

end range

/-- The set `s` is pairwise `r` if `r x y` for all *distinct* `x y ∈ s`. -/
Expand Down
17 changes: 10 additions & 7 deletions src/order/filter/basic.lean
Expand Up @@ -1254,12 +1254,15 @@ iff.rfl
lemma image_mem_map (hs : s ∈ f) : m '' s ∈ map m f :=
f.sets_of_superset hs $ subset_preimage_image m s

lemma image_mem_map_iff (hf : function.injective m) : m '' s ∈ map m f ↔ s ∈ f :=
⟨λ h, by rwa [← preimage_image_eq s hf], image_mem_map⟩

lemma range_mem_map : range m ∈ map m f :=
by rw ←image_univ; exact image_mem_map univ_mem_sets

lemma mem_map_sets_iff : t ∈ map m f ↔ (∃s∈f, m '' s ⊆ t) :=
iff.intro
(assume ht, ⟨set.preimage m t, ht, image_preimage_subset _ _⟩)
(assume ht, ⟨m ⁻¹' t, ht, image_preimage_subset _ _⟩)
(assume ⟨s, hs, ht⟩, mem_sets_of_superset (image_mem_map hs) ht)

@[simp] lemma map_id : filter.map id f = f :=
Expand Down Expand Up @@ -1506,15 +1509,15 @@ image_mem_sets (by simp [h]) W_in

lemma comap_map {f : filter α} {m : α → β} (h : function.injective m) :
comap m (map m f) = f :=
have ∀s, preimage m (image m s) = s,
from assume s, preimage_image_eq s h,
le_antisymm
(assume s hs, ⟨
image m s,
f.sets_of_superset hs $ by simp only [this, subset.refl],
by simp only [this, subset.refl]⟩)
(assume s hs, mem_sets_of_superset (preimage_mem_comap $ image_mem_map hs) $
by simp only [preimage_image_eq s h])
le_comap_map

lemma mem_comap_iff {f : filter β} {m : α → β} (inj : function.injective m)
(large : set.range m ∈ f) {S : set α} : S ∈ comap m f ↔ m '' S ∈ f :=
by rw [← image_mem_map_iff inj, map_comap large]

lemma le_of_map_le_map_inj' {f g : filter α} {m : α → β} {s : set α}
(hsf : s ∈ f) (hsg : s ∈ g) (hm : ∀x∈s, ∀y∈s, m x = m y → x = y)
(h : map m f ≤ map m g) : f ≤ g :=
Expand Down
9 changes: 9 additions & 0 deletions src/order/filter/ultrafilter.lean
Expand Up @@ -261,6 +261,15 @@ instance ultrafilter.inhabited [inhabited α] : inhabited (ultrafilter α) :=

instance {F : ultrafilter α} : ne_bot F.1 := F.2.1

/--
The pullback of an ultrafilter along an injection whose image is large
with respect to the given ultrafilter. -/
def ultrafilter.comap {m : α → β} (u : ultrafilter β) (inj : function.injective m)
(large : set.range m ∈ u.1) : ultrafilter α :=
⟨comap m u.1, u.2.1.comap_of_range_mem large, λ g hg hgu s hs,
(mem_comap_iff inj large).2 $ u.2.2 (g.map m) (hg.map m) (map_le_iff_le_comap.2 hgu)
(image_mem_map hs)⟩

/-- The ultra-filter extending the cofinite filter. -/
noncomputable def hyperfilter : filter α := ultrafilter_of cofinite

Expand Down

0 comments on commit b2427d5

Please sign in to comment.