Skip to content

Commit 7525a4b

Browse files
committed
Update IsLUB.lean
1 parent b359794 commit 7525a4b

1 file changed

Lines changed: 82 additions & 0 deletions

File tree

Mathlib/Topology/Order/IsLUB.lean

Lines changed: 82 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -166,6 +166,88 @@ theorem Dense.isGLB_inter_iff {α : Type*} [TopologicalSpace α] [Preorder α] [
166166
IsGLB (t ∩ s) x ↔ IsGLB t x :=
167167
hs.isLUB_inter_iff (α := αᵒᵈ) ht
168168

169+
theorem Dense.continuous_upperBounds {α : Type*} [TopologicalSpace α] [Preorder α]
170+
[ClosedIicTopology α] {f : γ → α} [TopologicalSpace γ] {S : Set γ} (hS : Dense S)
171+
(hf : Continuous f) :
172+
upperBounds (f '' S) = upperBounds (range f) := by
173+
refine subset_antisymm ?_ fun _ => upperBounds_mono (Set.image_subset_range f S) le_rfl
174+
refine subset_trans ?_ fun _ => upperBounds_mono (hf.range_subset_closure_image_dense hS) le_rfl
175+
intro x hx i hi
176+
rw [mem_closure_iff_frequently] at hi
177+
exact (hi.mono hx).mem_of_closed isClosed_Iic
178+
179+
theorem Dense.continuous_lowerBounds {α : Type*} [TopologicalSpace α] [Preorder α]
180+
[ClosedIciTopology α] {f : γ → α} [TopologicalSpace γ] {S : Set γ} (hS : Dense S)
181+
(hf : Continuous f) :
182+
lowerBounds (f '' S) = lowerBounds (range f) := by
183+
refine subset_antisymm ?_ fun _ => lowerBounds_mono (Set.image_subset_range f S) le_rfl
184+
refine subset_trans ?_ fun _ => lowerBounds_mono (hf.range_subset_closure_image_dense hS) le_rfl
185+
intro x hx i hi
186+
rw [mem_closure_iff_frequently] at hi
187+
exact (hi.mono hx).mem_of_closed isClosed_Ici
188+
189+
theorem Dense.continuous_sup {α : Type*} [TopologicalSpace α]
190+
[ConditionallyCompleteLattice α] [ClosedIicTopology α] {f : γ → α} [TopologicalSpace γ]
191+
{S : Set γ} (hS : Dense S) (hf : Continuous f) (h : BddAbove (range f)) :
192+
⨆ i, f i = ⨆ s : S, f s := by
193+
rw [← sSup_range, ← sSup_range]
194+
obtain (_ | _) := isEmpty_or_nonempty γ
195+
· simp [Set.range_eq_empty]
196+
refine (isLUB_csSup (range_nonempty f) h).unique ?_
197+
refine (isLUB_congr (hS.continuous_upperBounds hf)).mp (isLUB_ciSup_set ?_ hS.nonempty)
198+
exact h.mono (by grind)
199+
200+
theorem Dense.continuous_inf {α : Type*} [TopologicalSpace α]
201+
[ConditionallyCompleteLattice α] [ClosedIciTopology α] {f : γ → α} [TopologicalSpace γ]
202+
{S : Set γ} (hS : Dense S) (hf : Continuous f) (h : BddBelow (range f)) :
203+
⨅ i, f i = ⨅ s : S, f s := by
204+
rw [← sInf_range, ← sInf_range]
205+
obtain (_ | _) := isEmpty_or_nonempty γ
206+
· simp [Set.range_eq_empty]
207+
refine (isGLB_csInf (range_nonempty f) h).unique ?_
208+
refine (isGLB_congr (hS.continuous_lowerBounds hf)).mp (isGLB_ciInf_set ?_ hS.nonempty)
209+
exact h.mono (by grind)
210+
211+
theorem Dense.continuous_sup' {α : Type*} [TopologicalSpace α]
212+
[ConditionallyCompleteLinearOrder α] [ClosedIicTopology α] {f : γ → α} [TopologicalSpace γ]
213+
{S : Set γ} (hS : Dense S) (hf : Continuous f) :
214+
⨆ i, f i = ⨆ s : S, f s := by
215+
rw [← sSup_range, ← sSup_range]
216+
obtain (_ | _) := isEmpty_or_nonempty γ
217+
· simp [Set.range_eq_empty]
218+
by_cases h1 : BddAbove (range f)
219+
· refine (isLUB_csSup (range_nonempty f) h1).unique ?_
220+
refine (isLUB_congr (hS.continuous_upperBounds hf)).mp (isLUB_ciSup_set ?_ hS.nonempty)
221+
exact h1.mono (by grind)
222+
· have h2 : ¬ BddAbove (range (fun s : S => f (Subtype.val s))) := by
223+
intro h
224+
have := range_comp' f (Subtype.val : S → γ)
225+
simp_all only [Subtype.range_coe_subtype, setOf_mem_eq]
226+
have := h.closure.mono (image_closure_subset_closure_image hf)
227+
simp only [hS.closure_eq, image_univ] at this
228+
exact h1 this
229+
simp [csSup_of_not_bddAbove h1, csSup_of_not_bddAbove h2]
230+
231+
theorem Dense.continuous_inf' {α : Type*} [TopologicalSpace α]
232+
[ConditionallyCompleteLinearOrder α] [ClosedIciTopology α] {f : γ → α} [TopologicalSpace γ]
233+
{S : Set γ} (hS : Dense S) (hf : Continuous f) :
234+
⨅ i, f i = ⨅ s : S, f s := by
235+
rw [← sInf_range, ← sInf_range]
236+
obtain (_ | _) := isEmpty_or_nonempty γ
237+
· simp [Set.range_eq_empty]
238+
by_cases h1 : BddBelow (range f)
239+
· refine (isGLB_csInf (range_nonempty f) h1).unique ?_
240+
refine (isGLB_congr (hS.continuous_lowerBounds hf)).mp (isGLB_ciInf_set ?_ hS.nonempty)
241+
exact h1.mono (by grind)
242+
· have h2 : ¬ BddBelow (range (fun s : S => f (Subtype.val s))) := by
243+
intro h
244+
have := range_comp' f (Subtype.val : S → γ)
245+
simp_all only [Subtype.range_coe_subtype, setOf_mem_eq]
246+
have := h.closure.mono (image_closure_subset_closure_image hf)
247+
simp only [hS.closure_eq, image_univ] at this
248+
exact h1 this
249+
simp [csInf_of_not_bddBelow h1, csInf_of_not_bddBelow h2]
250+
169251
/-!
170252
### Existence of sequences tending to `sInf` or `sSup` of a given set
171253
-/

0 commit comments

Comments
 (0)