@@ -1003,76 +1003,10 @@ theorem le_enum_succ {o : Ordinal} (a : (succ o).ToType) :
10031003 ← lt_succ_iff]
10041004 apply typein_lt_self
10051005
1006- /-! ### Universal ordinal -/
1007-
1008- -- intended to be used with explicit universe parameters
1009- /-- `univ.{u v}` is the order type of the ordinals of `Type u` as a member
1010- of `Ordinal.{v}` (when `u < v`). It is an inaccessible cardinal. -/
1011- @ [pp_with_univ, nolint checkUnivs]
1012- def univ : Ordinal.{max (u + 1 ) v} :=
1013- lift.{v, u + 1 } (typeLT Ordinal)
1014-
1015- @[simp]
1016- theorem type_lt_ordinal : typeLT Ordinal = univ.{u, u + 1 } :=
1017- (lift_id _).symm
1018-
1019- @ [deprecated type_lt_ordinal (since := "2026-03-20" )]
1020- theorem univ_id : univ.{u, u + 1 } = typeLT Ordinal :=
1021- lift_id _
1022-
1023- @[simp]
1024- theorem lift_univ : lift.{w} univ.{u, v} = univ.{u, max v w} :=
1025- lift_lift _
1026-
1027- theorem univ_umax : univ.{u, max (u + 1 ) v} = univ.{u, v} :=
1028- congr_fun lift_umax _
1029-
1030- /-- Principal segment version of the lift operation on ordinals, embedding `Ordinal.{u}` in
1031- `Ordinal.{v}` as a principal segment when `u < v`. -/
1032- def liftPrincipalSeg : Ordinal.{u} <i Ordinal.{max (u + 1 ) v} :=
1033- ⟨↑liftInitialSeg.{max (u + 1 ) v, u}, univ.{u, v}, by
1034- refine fun b => inductionOn b ?_; intro β s _
1035- rw [univ, ← lift_umax]; constructor <;> intro h
1036- · obtain ⟨a, e⟩ := h
1037- rw [← e]
1038- refine inductionOn a ?_
1039- intro α r _
1040- exact lift_type_lt.{u, u + 1 , max (u + 1 ) v}.2 ⟨typein r⟩
1041- · rw [← lift_id (type s)] at h ⊢
1042- obtain ⟨f⟩ := lift_type_lt.{_,_,v}.1 h
1043- obtain ⟨f, a, hf⟩ := f
1044- exists a
1045- induction a using inductionOn with | type α r
1046- refine lift_type_eq.{u, max (u + 1 ) v, max (u + 1 ) v}.2
1047- ⟨(RelIso.ofSurjective (RelEmbedding.ofMonotone ?_ ?_) ?_).symm⟩
1048- · exact fun b => enum r ⟨f b, (hf _).1 ⟨_, rfl⟩⟩
1049- · refine fun a b h => (typein_lt_typein r).1 ?_
1050- rw [typein_enum, typein_enum]
1051- exact f.map_rel_iff.2 h
1052- · intro a'
1053- obtain ⟨b, e⟩ := (hf _).2 (typein_lt_type _ a')
1054- exists b
1055- simp only [RelEmbedding.ofMonotone_coe]
1056- simp [e]⟩
1057-
1058- @[simp]
1059- theorem liftPrincipalSeg_coe :
1060- (liftPrincipalSeg.{u, v} : Ordinal → Ordinal) = lift.{max (u + 1 ) v} :=
1061- rfl
1062-
1063- @[simp]
1064- theorem liftPrincipalSeg_top : (liftPrincipalSeg.{u, v}).top = univ.{u, v} :=
1065- rfl
1066-
1067- @ [deprecated liftPrincipalSeg_top (since := "2026-03-20" )]
1068- theorem liftPrincipalSeg_top' : liftPrincipalSeg.{u, u + 1 }.top = typeLT Ordinal := by
1069- simp
1070-
10711006end Ordinal
10721007
10731008/-! ### Representing a cardinal with an ordinal -/
10741009
1075-
10761010namespace Cardinal
10771011
10781012open Ordinal
@@ -1290,80 +1224,6 @@ def ord.orderEmbedding : Cardinal ↪o Ordinal :=
12901224theorem ord.orderEmbedding_coe : (ord.orderEmbedding : Cardinal → Ordinal) = ord :=
12911225 rfl
12921226
1293- -- intended to be used with explicit universe parameters
1294- /-- The cardinal `univ` is the cardinality of ordinal `univ`, or
1295- equivalently the cardinal of `Ordinal.{u}`, or `Cardinal.{u}`,
1296- as an element of `Cardinal.{v}` (when `u < v`). -/
1297- @ [pp_with_univ, nolint checkUnivs]
1298- def univ :=
1299- lift.{v, u + 1 } #Ordinal
1300-
1301- theorem univ_id : univ.{u, u + 1 } = #Ordinal :=
1302- lift_id _
1303-
1304- @[simp]
1305- theorem lift_univ : lift.{w} univ.{u, v} = univ.{u, max v w} :=
1306- lift_lift _
1307-
1308- theorem univ_umax : univ.{u, max (u + 1 ) v} = univ.{u, v} :=
1309- congr_fun lift_umax _
1310-
1311- theorem lift_lt_univ (c : Cardinal) : lift.{u + 1 , u} c < univ.{u, u + 1 } := by
1312- simpa only [liftPrincipalSeg_coe, lift_ord, lift_succ, ord_le, succ_le_iff] using
1313- le_of_lt (liftPrincipalSeg.{u, u + 1 }.lt_top (succ c).ord)
1314-
1315- theorem lift_lt_univ' (c : Cardinal) : lift.{max (u + 1 ) v, u} c < univ.{u, v} := by
1316- have := lift_lt.{_, max (u + 1 ) v}.2 (lift_lt_univ c)
1317- rw [lift_lift, lift_univ, univ_umax.{u, v}] at this
1318- exact this
1319-
1320- theorem aleph0_lt_univ : ℵ₀ < univ.{u, v} := by
1321- simpa using lift_lt_univ' ℵ₀
1322-
1323- theorem nat_lt_univ (n : ℕ) : n < univ.{u, v} := natCast_lt_aleph0.trans aleph0_lt_univ
1324-
1325- theorem univ_pos : 0 < univ.{u, v} :=
1326- aleph0_pos.trans aleph0_lt_univ
1327-
1328- theorem univ_ne_zero : univ.{u, v} ≠ 0 :=
1329- univ_pos.ne'
1330-
1331- @[simp]
1332- theorem ord_univ : ord univ.{u, v} = Ordinal.univ.{u, v} := by
1333- refine le_antisymm (ord_card_le _) <| le_of_forall_lt fun o h => lt_ord.2 ?_
1334- have := liftPrincipalSeg.mem_range_of_rel_top (by simpa only [liftPrincipalSeg_coe] using h)
1335- rcases this with ⟨o, h'⟩
1336- rw [← h', liftPrincipalSeg_coe, ← lift_card]
1337- apply lift_lt_univ'
1338-
1339- theorem lt_univ {c} : c < univ.{u, u + 1 } ↔ ∃ c', c = lift.{u + 1 , u} c' :=
1340- ⟨fun h => by
1341- have := ord_lt_ord.2 h
1342- rw [ord_univ] at this
1343- obtain ⟨o, e⟩ := liftPrincipalSeg.mem_range_of_rel_top (by simpa only [liftPrincipalSeg_top])
1344- have := card_ord c
1345- rw [← e, liftPrincipalSeg_coe, ← lift_card] at this
1346- exact ⟨_, this.symm⟩, fun ⟨_, e⟩ => e.symm ▸ lift_lt_univ _⟩
1347-
1348- theorem lt_univ' {c} : c < univ.{u, v} ↔ ∃ c', c = lift.{max (u + 1 ) v, u} c' :=
1349- ⟨fun h => by
1350- let ⟨a, h', e⟩ := lt_lift_iff.1 h
1351- rw [← univ_id] at h'
1352- rcases lt_univ.{u}.1 h' with ⟨c', rfl⟩
1353- exact ⟨c', by simp only [e.symm, lift_lift]⟩, fun ⟨_, e⟩ => e.symm ▸ lift_lt_univ' _⟩
1354-
1355- theorem IsStrongLimit.univ : IsStrongLimit univ.{u, v} :=
1356- ⟨univ_ne_zero, fun c h ↦ let ⟨w, h⟩ := lt_univ'.1 h; lt_univ'.2 ⟨2 ^ w, by simp [h]⟩⟩
1357-
1358- theorem small_iff_lift_mk_lt_univ {α : Type u} :
1359- Small.{v} α ↔ Cardinal.lift.{v + 1 , _} #α < univ.{v, max u (v + 1 )} := by
1360- rw [lt_univ']
1361- constructor
1362- · rintro ⟨β, e⟩
1363- exact ⟨#β, lift_mk_eq.{u, _, v + 1 }.2 e⟩
1364- · rintro ⟨c, hc⟩
1365- exact ⟨⟨c.out, lift_mk_eq.{u, _, v + 1 }.1 (hc.trans (congr rfl c.mk_out.symm))⟩⟩
1366-
13671227/-- If a cardinal `c` is nonzero, then `c.ord.ToType` has a least element. -/
13681228@[implicit_reducible]
13691229noncomputable def toTypeOrderBot {c : Cardinal} (hc : c ≠ 0 ) :
@@ -1374,10 +1234,6 @@ end Cardinal
13741234
13751235namespace Ordinal
13761236
1377- @[simp]
1378- theorem card_univ : card univ.{u, v} = Cardinal.univ.{u, v} :=
1379- rfl
1380-
13811237@[simp]
13821238theorem nat_le_card {o} {n : ℕ} : (n : Cardinal) ≤ card o ↔ (n : Ordinal) ≤ o := by
13831239 rw [← Cardinal.ord_le, Cardinal.ord_nat]
@@ -1516,5 +1372,3 @@ theorem List.SortedGT.lt_ord_of_lt [LinearOrder α] [WellFoundedLT α] {l m : Li
15161372 (List.head_le_of_lt hmltl))
15171373
15181374@ [deprecated (since := "2025-11-27" )] alias List.Sorted.lt_ord_of_lt := List.SortedGT.lt_ord_of_lt
1519-
1520- set_option linter.style.longFile 1700
0 commit comments