@@ -41,10 +41,65 @@ open Function Set Cardinal Equiv Order Ordinal
4141
4242universe u v w
4343
44- namespace Cardinal
44+ /-! ### Omega ordinals -/
45+
46+ namespace Ordinal
47+
48+ /-- An ordinal is initial when it is the first ordinal with a given cardinality.
49+
50+ This is written as `o.card.ord = o`, i.e. `o` is the smallest ordinal with cardinality `o.card`. -/
51+ def IsInitial (o : Ordinal) : Prop :=
52+ o.card.ord = o
53+
54+ theorem IsInitial.ord_card {o : Ordinal} (h : IsInitial o) : o.card.ord = o := h
55+
56+ theorem IsInitial.card_le_card {a b : Ordinal} (ha : IsInitial a) : a.card ≤ b.card ↔ a ≤ b := by
57+ refine ⟨fun h ↦ ?_, Ordinal.card_le_card⟩
58+ rw [← ord_le_ord, ha.ord_card] at h
59+ exact h.trans (ord_card_le b)
60+
61+ theorem IsInitial.card_lt_card {a b : Ordinal} (hb : IsInitial b) : a.card < b.card ↔ a < b :=
62+ lt_iff_lt_of_le_iff_le hb.card_le_card
63+
64+ theorem isInitial_ord (c : Cardinal) : IsInitial c.ord := by
65+ rw [IsInitial, card_ord]
66+
67+ theorem isInitial_natCast (n : ℕ) : IsInitial n := by
68+ rw [IsInitial, card_nat, ord_nat]
69+
70+ theorem isInitial_zero : IsInitial 0 := by
71+ exact_mod_cast isInitial_natCast 0
72+
73+ theorem isInitial_one : IsInitial 1 := by
74+ exact_mod_cast isInitial_natCast 1
75+
76+ theorem isInitial_omega0 : IsInitial ω := by
77+ rw [IsInitial, card_omega0, ord_aleph0]
78+
79+ theorem not_bddAbove_isInitial : ¬ BddAbove {x | IsInitial x} := by
80+ rintro ⟨a, ha⟩
81+ have := ha (isInitial_ord (succ a.card))
82+ rw [ord_le] at this
83+ exact (lt_succ _).not_le this
84+
85+ /-- Initial ordinals are order-isomorphic to the cardinals. -/
86+ @[simps!]
87+ def isInitialIso : {x // IsInitial x} ≃o Cardinal where
88+ toFun x := x.1 .card
89+ invFun x := ⟨x.ord, isInitial_ord _⟩
90+ left_inv x := Subtype.ext x.2 .ord_card
91+ right_inv x := card_ord x
92+ map_rel_iff' {a _} := a.2 .card_le_card
93+
94+ -- TODO: define `omega` as the enumerator function of `IsInitial`, and redefine
95+ -- `aleph x = (omega x).card`.
96+
97+ end Ordinal
4598
4699/-! ### Aleph cardinals -/
47100
101+ namespace Cardinal
102+
48103/-- The `aleph'` function gives the cardinals listed by their ordinal index. `aleph' n = n`,
49104`aleph' ω = ℵ₀`, `aleph' (ω + 1) = succ ℵ₀`, etc.
50105
0 commit comments