Zulip Chat Archive
Stream: mathlib4
Topic: Cardinal lift of aleph
Violeta Hernández (Aug 30 2024 at 08:49):
Does anyone have any ideas on how to golf down this proof?
import Mathlib
open Ordinal Cardinal
theorem lift_aleph' (o : Ordinal.{u}) : lift.{v} (aleph' o) = aleph' (Ordinal.lift.{v} o) := by
refine o.limitRecOn ?_ ?_ ?_
· simp
· simp
· intro o ho IH
rw [aleph'_limit ho, aleph'_limit ((lift_isLimit o).2 ho), lift_iSup, iSup, iSup]
congr
ext c
constructor <;>
rintro ⟨⟨a, ha : a < _⟩, rfl⟩ <;>
dsimp
· rw [IH _ ha]
let x : Set.Iio (Ordinal.lift.{v, u} o) := ⟨_, Ordinal.lift_lt.2 ha⟩
exact Set.mem_range_self x
· obtain ⟨b, rfl⟩ := Ordinal.lift_down ha.le
rw [Ordinal.lift_lt] at ha
exact ⟨⟨b, ha⟩, IH _ ha⟩
· use aleph' o
rintro a ⟨b, rfl⟩
exact aleph'_le.2 b.2.le
A cleaner argument would go something like "both lift ⚬ aleph' and aleph' ⚬ lift are initial segment embeddings of Ordinal.{u} → Cardinal.{max u v}
, hence equal". But I don't really know how to write this down nicely.
Daniel Weber (Aug 30 2024 at 13:09):
import Mathlib
open Ordinal Cardinal
universe u v
def Cardinal.lift.initialSeg : @InitialSeg Cardinal.{u} Cardinal.{max u v} (· < ·) (· < ·) :=
⟨⟨⟨lift.{v}, fun _ _ => lift_inj.1⟩, lift_lt⟩, fun _ _ h => lift_down (le_of_lt h)⟩
theorem lift_aleph' (o : Ordinal.{u}) : lift.{v} (aleph' o) = aleph' (Ordinal.lift.{v} o) := by
change (InitialSeg.ofIso Cardinal.Aleph'.relIso).trans Cardinal.lift.initialSeg o =
Ordinal.lift.initialSeg.trans (InitialSeg.ofIso Cardinal.Aleph'.relIso) o
congr!
subsingleton
Violeta Hernández (Aug 31 2024 at 00:49):
Whoa, this is exactly what I was looking for. Mind if I add this to my PR #16306?
Daniel Weber (Aug 31 2024 at 01:26):
Sure
Last updated: May 02 2025 at 03:31 UTC