@@ -12,24 +12,24 @@ public import Mathlib.Topology.Order.Monotone
1212public import Mathlib.Topology.Order.SuccPred
1313
1414/-!
15- ### Topology of ordinals
15+ # Topology of ordinals
1616
1717We prove some miscellaneous results involving the order topology of ordinals.
1818
19- ### Main results
19+ ## Main results
2020
21- * `Ordinal.isClosed_iff_iSup` / `Ordinal.isClosed_iff_bsup` : A set of ordinals is closed iff it's
21+ * `Ordinal.isClosed_iff_iSup`: A set of ordinals is closed iff it's
2222 closed under suprema.
23- * `Ordinal.isNormal_iff_strictMono_and_continuous`: A characterization of normal ordinal
24- functions.
2523* `Ordinal.enumOrd_isNormal_iff_isClosed`: The function enumerating the ordinals of a set is
2624 normal iff the set is closed.
27- -/
2825
29- @[expose] public section
26+ ## Todo
3027
28+ Most things in this file should be generalized to other well-orders, or to Scott-Hausdorff
29+ topologies.
30+ -/
3131
32- noncomputable section
32+ @[expose] public noncomputable section
3333
3434universe u v
3535
@@ -60,8 +60,6 @@ theorem mem_closure_tfae (a : Ordinal.{u}) (s : Set Ordinal) :
6060 a ∈ closure (s ∩ Iic a),
6161 (s ∩ Iic a).Nonempty ∧ sSup (s ∩ Iic a) = a,
6262 ∃ t, t ⊆ s ∧ t.Nonempty ∧ BddAbove t ∧ sSup t = a,
63- ∃ (o : Ordinal.{u}), o ≠ 0 ∧ ∃ (f : ∀ x < o, Ordinal),
64- (∀ x hx, f x hx ∈ s) ∧ bsup.{u, u} o f = a,
6563 ∃ (ι : Type u), Nonempty ι ∧ ∃ f : ι → Ordinal, (∀ i, f i ∈ s) ∧ ⨆ i, f i = a] := by
6664 tfae_have 1 → 2 := by
6765 simpa only [mem_closure_iff_nhdsWithin_neBot, inter_comm s, nhdsWithin_inter',
@@ -75,21 +73,14 @@ theorem mem_closure_tfae (a : Ordinal.{u}) (s : Set Ordinal) :
7573 tfae_have 3 → 4
7674 | h => ⟨_, inter_subset_left, h.1 , bddAbove_Iic.mono inter_subset_right, h.2 ⟩
7775 tfae_have 4 → 5 := by
78- rintro ⟨t, hts, hne, hbdd, rfl⟩
79- have hlub : IsLUB t (sSup t) := isLUB_csSup hne hbdd
80- let ⟨y, hyt⟩ := hne
81- classical
82- refine ⟨_, (add_pos_of_right zero_lt_one (sSup t)).ne',
83- fun x _ ↦ if x ∈ t then x else y, fun x _ => ?_, ?_⟩
84- · simp only
85- split_ifs with h <;> exact hts ‹_›
86- · refine le_antisymm (bsup_le fun x _ => ?_) (csSup_le hne fun x hx => ?_)
87- · split_ifs <;> exact hlub.1 ‹_›
88- · refine (if_pos hx).symm.trans_le (le_bsup _ _ <| (hlub.1 hx).trans_lt (lt_succ _))
89- tfae_have 5 → 6 := by
90- rintro ⟨o, h₀, f, hfs, rfl⟩
91- exact ⟨_, nonempty_toType_iff.2 h₀, familyOfBFamily o f, fun _ => hfs _ _, rfl⟩
92- tfae_have 6 → 1 := by
76+ rintro ⟨t, ht, ht₀, ht₁, rfl⟩
77+ rw [bddAbove_iff_small] at ht₁
78+ refine ⟨Shrink t, ?_, Subtype.val ∘ (equivShrink _).symm, ?_, ?_⟩
79+ · have := ht₀.to_subtype
80+ exact (equivShrink _).symm.nonempty
81+ · simpa [← (equivShrink t).forall_congr_left (p := (·.1 ∈ s))]
82+ · simp [(equivShrink t).symm.iSup_comp, ← sSup_eq_iSup']
83+ tfae_have 5 → 1 := by
9384 rintro ⟨ι, hne, f, hfs, rfl⟩
9485 exact closure_mono (range_subset_iff.2 hfs) <| csSup_mem_closure (range_nonempty f)
9586 (bddAbove_range.{u, u} f)
@@ -98,21 +89,28 @@ theorem mem_closure_tfae (a : Ordinal.{u}) (s : Set Ordinal) :
9889theorem mem_closure_iff_iSup :
9990 a ∈ closure s ↔
10091 ∃ (ι : Type u) (_ : Nonempty ι) (f : ι → Ordinal), (∀ i, f i ∈ s) ∧ ⨆ i, f i = a := by
101- apply ((mem_closure_tfae a s).out 0 5 ).trans
92+ apply ((mem_closure_tfae a s).out 0 4 ).trans
10293 simp_rw [exists_prop]
10394
10495theorem mem_iff_iSup_of_isClosed (hs : IsClosed s) :
10596 a ∈ s ↔ ∃ (ι : Type u) (_hι : Nonempty ι) (f : ι → Ordinal),
10697 (∀ i, f i ∈ s) ∧ ⨆ i, f i = a := by
10798 rw [← mem_closure_iff_iSup, hs.closure_eq]
10899
100+ @ [deprecated mem_closure_iff_iSup (since := "2026-04-05" )]
109101theorem mem_closure_iff_bsup :
110102 a ∈ closure s ↔
111103 ∃ (o : Ordinal) (_ho : o ≠ 0 ) (f : ∀ a < o, Ordinal),
112104 (∀ i hi, f i hi ∈ s) ∧ bsup.{u, u} o f = a := by
113- apply ((mem_closure_tfae a s).out 0 4 ).trans
114- simp_rw [exists_prop]
105+ rw [mem_closure_iff_iSup]
106+ constructor
107+ · rintro ⟨ι, _, f, hf, rfl⟩
108+ exact ⟨_, by simp, bfamilyOfFamily f, fun i hi ↦ hf .., bsup_eq_iSup f⟩
109+ · rintro ⟨o, ho, f, hf, rfl⟩
110+ exact ⟨_, by simpa, familyOfBFamily _ f, fun i ↦ hf .., iSup_eq_bsup f⟩
115111
112+ set_option linter.deprecated false in
113+ @ [deprecated mem_closure_iff_iSup (since := "2026-04-05" )]
116114theorem mem_closed_iff_bsup (hs : IsClosed s) :
117115 a ∈ s ↔
118116 ∃ (o : Ordinal) (_ho : o ≠ 0 ) (f : ∀ a < o, Ordinal),
@@ -128,6 +126,7 @@ theorem isClosed_iff_iSup :
128126 rcases mem_closure_iff_iSup.1 hx with ⟨ι, hι, f, hf, rfl⟩
129127 exact h hι f hf
130128
129+ @ [deprecated isClosed_iff_iSup (since := "2026-04-05" )]
131130theorem isClosed_iff_bsup :
132131 IsClosed s ↔
133132 ∀ {o : Ordinal}, o ≠ 0 → ∀ f : ∀ a < o, Ordinal,
@@ -158,17 +157,15 @@ theorem enumOrd_isNormal_iff_isClosed (hs : ¬ BddAbove s) :
158157 ext x
159158 change (enumOrdOrderIso s hs _).val = f x
160159 rw [OrderIso.apply_symm_apply]
161- · rw [isClosed_iff_bsup] at h
162- suffices enumOrd s a ≤ bsup.{u, u} a fun b (_ : b < a) => enumOrd s b from
163- this.trans (bsup_le H)
164- obtain ⟨b, hb⟩ := enumOrd_surjective hs (h ha.ne_bot (fun b _ => enumOrd s b)
165- fun b _ => enumOrd_mem hs b)
166- rw [← hb]
167- apply Hs.monotone
168- by_contra! hba
169- apply (Hs (lt_succ b)).not_ge
170- rw [hb]
171- exact le_bsup.{u, u} _ _ (ha.succ_lt hba)
160+ · have := csSup_mem_closure (ha.nonempty_Iio.image (enumOrd s)) (bddAbove_of_small _)
161+ have := h.closure_eq ▸ closure_mono (t := s) ?_ this
162+ · apply (Set.image_subset_range ..).trans_eq
163+ rw [range_enumOrd hs]
164+ · apply (enumOrd_le_of_forall_lt this _).trans
165+ · apply csSup_le'
166+ grind [upperBounds]
167+ · exact fun b hb ↦ (enumOrd_strictMono hs (lt_add_one b)).trans_le <|
168+ le_csSup (bddAbove_of_small _) <| Set.mem_image_of_mem _ (ha.add_one_lt hb)
172169
173170open Set Filter Set.Notation
174171
0 commit comments