Skip to content

Commit 068ec5b

Browse files
committed
feat(SetTheory/Cardinal/Aleph): IsStrongLimit (preBeth x) (leanprover-community#26895)
1 parent b81a8b6 commit 068ec5b

3 files changed

Lines changed: 41 additions & 13 deletions

File tree

Mathlib/SetTheory/Cardinal/Aleph.lean

Lines changed: 26 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -512,6 +512,10 @@ theorem preBeth_lt_preBeth {o₁ o₂ : Ordinal} : preBeth o₁ < preBeth o₂
512512
theorem preBeth_le_preBeth {o₁ o₂ : Ordinal} : preBeth o₁ ≤ preBeth o₂ ↔ o₁ ≤ o₂ :=
513513
preBeth_strictMono.le_iff_le
514514

515+
@[simp]
516+
theorem preBeth_inj {o₁ o₂ : Ordinal} : preBeth o₁ = preBeth o₂ ↔ o₁ = o₂ :=
517+
preBeth_strictMono.injective.eq_iff
518+
515519
@[simp]
516520
theorem preBeth_zero : preBeth 0 = 0 := by
517521
rw [preBeth]
@@ -538,7 +542,7 @@ theorem isNormal_preBeth : Order.IsNormal preBeth := by
538542

539543
theorem preBeth_nat : ∀ n : ℕ, preBeth n = (2 ^ ·)^[n] (0 : ℕ)
540544
| 0 => by simp
541-
| (n + 1) => by
545+
| n + 1 => by
542546
rw [natCast_succ, preBeth_succ, Function.iterate_succ_apply', preBeth_nat]
543547
simp
544548

@@ -560,6 +564,25 @@ theorem preBeth_omega : preBeth ω = ℵ₀ := by
560564
theorem preBeth_pos {o : Ordinal} : 0 < preBeth o ↔ 0 < o := by
561565
simpa using preBeth_lt_preBeth (o₁ := 0)
562566

567+
@[simp]
568+
theorem preBeth_eq_zero {o : Ordinal} : preBeth o = 0 ↔ o = 0 := by
569+
simpa using preBeth_inj (o₂ := 0)
570+
571+
theorem isStrongLimit_preBeth {o : Ordinal} : IsStrongLimit (preBeth o) ↔ IsSuccLimit o := by
572+
by_cases H : IsSuccLimit o
573+
· refine iff_of_true ⟨by simpa using H.ne_bot, fun a ha ↦ ?_⟩ H
574+
rw [preBeth_limit H.isSuccPrelimit] at ha
575+
rcases exists_lt_of_lt_ciSup' ha with ⟨⟨i, hi⟩, ha⟩
576+
have := power_le_power_left two_ne_zero ha.le
577+
rw [← preBeth_succ] at this
578+
exact this.trans_lt (preBeth_strictMono (H.succ_lt hi))
579+
· apply iff_of_false _ H
580+
rw [not_isSuccLimit_iff, not_isSuccPrelimit_iff'] at H
581+
obtain ho | ⟨a, rfl⟩ := H
582+
· simp [ho.eq_bot]
583+
· intro h
584+
simpa using h.two_power_lt (preBeth_strictMono (lt_succ a))
585+
563586
/-- The Beth function is defined so that `beth 0 = ℵ₀'`, `beth (succ o) = 2 ^ beth o`, and that for
564587
a limit ordinal `o`, `beth o` is the supremum of `beth a` for `a < o`.
565588
@@ -619,17 +642,7 @@ theorem beth_pos (o : Ordinal) : 0 < ℶ_ o :=
619642
theorem beth_ne_zero (o : Ordinal) : ℶ_ o ≠ 0 :=
620643
(beth_pos o).ne'
621644

622-
theorem isStrongLimit_beth {o : Ordinal} (H : IsSuccPrelimit o) : IsStrongLimit (ℶ_ o) := by
623-
rcases eq_or_ne o 0 with (rfl | h)
624-
· rw [beth_zero]
625-
exact isStrongLimit_aleph0
626-
· refine ⟨beth_ne_zero o, fun a ha ↦ ?_⟩
627-
rw [beth_limit] at ha
628-
· rcases exists_lt_of_lt_ciSup' ha with ⟨⟨i, hi⟩, ha⟩
629-
have := power_le_power_left two_ne_zero ha.le
630-
rw [← beth_succ] at this
631-
exact this.trans_lt (beth_strictMono (H.succ_lt hi))
632-
· rw [isSuccLimit_iff]
633-
exact ⟨h, H⟩
645+
theorem isStrongLimit_beth {o : Ordinal} : IsStrongLimit (ℶ_ o) ↔ IsSuccPrelimit o := by
646+
rw [beth_eq_preBeth, isStrongLimit_preBeth, isSuccLimit_add_iff_of_isSuccLimit isSuccLimit_omega0]
634647

635648
end Cardinal

Mathlib/SetTheory/Cardinal/Order.lean

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -435,6 +435,10 @@ theorem isSuccPrelimit_zero : IsSuccPrelimit (0 : Cardinal) :=
435435
protected theorem isSuccLimit_iff {c : Cardinal} : IsSuccLimit c ↔ c ≠ 0 ∧ IsSuccPrelimit c :=
436436
isSuccLimit_iff
437437

438+
@[simp]
439+
protected theorem not_isSuccLimit_zero : ¬ IsSuccLimit (0 : Cardinal) :=
440+
not_isSuccLimit_bot
441+
438442
/-- A cardinal is a strong limit if it is not zero and it is closed under powersets.
439443
Note that `ℵ₀` is a strong limit by this definition. -/
440444
structure IsStrongLimit (c : Cardinal) : Prop where
@@ -449,6 +453,10 @@ protected theorem IsStrongLimit.isSuccLimit {c} (H : IsStrongLimit c) : IsSuccLi
449453
protected theorem IsStrongLimit.isSuccPrelimit {c} (H : IsStrongLimit c) : IsSuccPrelimit c :=
450454
H.isSuccLimit.isSuccPrelimit
451455

456+
@[simp]
457+
theorem not_isStrongLimit_zero : ¬ IsStrongLimit (0 : Cardinal) :=
458+
fun h ↦ h.ne_zero rfl
459+
452460
/-! ### Indexed cardinal `sum` -/
453461

454462
theorem le_sum {ι} (f : ι → Cardinal) (i) : f i ≤ sum f := by

Mathlib/SetTheory/Ordinal/Arithmetic.lean

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -994,6 +994,13 @@ theorem isSuccLimit_add_iff {a b : Ordinal} :
994994
· exact isSuccLimit_add a h
995995
· simpa only [add_zero]
996996

997+
theorem isSuccLimit_add_iff_of_isSuccLimit {a b : Ordinal} (h : IsSuccLimit a) :
998+
IsSuccLimit (a + b) ↔ IsSuccPrelimit b := by
999+
rw [isSuccLimit_add_iff]
1000+
obtain rfl | hb := eq_or_ne b 0
1001+
· simpa
1002+
· simp [hb, isSuccLimit_iff]
1003+
9971004
@[deprecated (since := "2025-07-09")]
9981005
alias isLimit_add_iff := isSuccLimit_add_iff
9991006

0 commit comments

Comments
 (0)