Zulip Chat Archive
Stream: Is there code for X?
Topic: OrdClosure
Eric Paul (Mar 03 2025 at 04:53):
Does there exist some form of the following notion of ordClosure
which takes a set and returns the smallest OrdConnected
set containing it?
import Mathlib
variable {α : Type*} [Preorder α]
def Set.ordClosure (s : Set α) :=
(upperClosure s : Set α) ∩ (lowerClosure s : Set α)
theorem ordConnected_ordClosure (s : Set α) :
s.ordClosure.OrdConnected :=
Set.OrdConnected.inter
(IsUpperSet.ordConnected (upperClosure s).upper)
(IsLowerSet.ordConnected (lowerClosure s).lower)
Yaël Dillies (Mar 03 2025 at 10:11):
I was going to say "Yes, take the intersection of the upper and lower closures", but I see you've already found that :sweat_smile:
Eric Paul (Mar 03 2025 at 22:30):
Yeah that seemed like the closest thing from my search. It seems like a common enough idea to be useful in mathlib but I might be biased. Regardless, here are the facts I wanted about it in case someone else needs it:
import Mathlib
variable {α : Type*} [Preorder α]
def Set.ordClosure (s : Set α) :=
(upperClosure s : Set α) ∩ (lowerClosure s : Set α)
theorem mem_ordClosure {s : Set α} {z : α} :
z ∈ s.ordClosure ↔ ∃x ∈ s, ∃y ∈ s, z ∈ Set.Icc x y := by
simp only [Set.ordClosure, Set.mem_inter_iff, SetLike.mem_coe,
mem_upperClosure, mem_lowerClosure, Set.mem_Icc]
tauto
theorem subset_ordClosure (s : Set α) : s ⊆ s.ordClosure := by
intro x hx
simp only [mem_ordClosure, Set.mem_Icc]
have s_subset_upper : s ⊆ upperClosure s := subset_upperClosure
have s_subset_lower : s ⊆ lowerClosure s := subset_lowerClosure
tauto
theorem ordConnected_ordClosure (s : Set α) :
s.ordClosure.OrdConnected :=
Set.OrdConnected.inter
(IsUpperSet.ordConnected (upperClosure s).upper)
(IsLowerSet.ordConnected (lowerClosure s).lower)
theorem ordClosure_subset_ordConnected {s : Set α} {t : Set α}
(s_sub_t : s ⊆ t) (ht : t.OrdConnected) : s.ordClosure ⊆ t := by
intro z hz
obtain ⟨x, hx, y, hy , hxy⟩ := mem_ordClosure.mp hz
exact ht.out' (s_sub_t hx) (s_sub_t hy) hxy
theorem inter_eq_ordClosure (s : Set α) :
⋂₀ {S : Set α | s ⊆ S ∧ S.OrdConnected} = s.ordClosure := by
apply Set.eq_of_subset_of_subset
· apply Set.sInter_subset_of_mem
simp only [Set.mem_setOf_eq]
exact ⟨subset_ordClosure s, ordConnected_ordClosure s⟩
· simp only [Set.subset_sInter_iff, Set.mem_setOf_eq, and_imp]
intro t s_subset_t t_ordConnected
exact ordClosure_subset_ordConnected s_subset_t t_ordConnected
Last updated: May 02 2025 at 03:31 UTC