@@ -41,10 +41,65 @@ open Function Set Cardinal Equiv Order Ordinal
41
41
42
42
universe u v w
43
43
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
45
98
46
99
/-! ### Aleph cardinals -/
47
100
101
+ namespace Cardinal
102
+
48
103
/-- The `aleph'` function gives the cardinals listed by their ordinal index. `aleph' n = n`,
49
104
`aleph' ω = ℵ₀`, `aleph' (ω + 1) = succ ℵ₀`, etc.
50
105
0 commit comments