Lean source · namespace BFPP
CofinalSequences.lean
BFPP/CofinalSequences.lean · 85 lines
1import BFPP.OrdinalIndex2import Mathlib.SetTheory.Cardinal.Cofinality.Ordinal34/-! # Cofinal sequences indexed by regular limit ordinals -/56namespace BFPP78set_option autoImplicit false9open Set Order Ordinal Cardinal1011universe u12variable (A : Type u) [LinearOrder A] [Nonempty A] [NoMaxOrder A]1314theorem exists_regular_cofinal_sequence :15 ∃ τ : Ordinal.{u}, IsSuccLimit τ ∧ τ.cof.ord = τ ∧16 ∃ f : Iio τ → A, StrictMono f ∧ IsCofinal (range f) := by17 classical18 let R : Set A := {a | ∀ b, WellOrderingRel b a → b < a}19 have hR : IsCofinal R := isCofinal_setOfPred_imp_lt WellOrderingRel20 have hrel : ∀ a b : R, a < b → WellOrderingRel a.val b.val := by21 intro a b hab22 rcases trichotomous_of WellOrderingRel a.val b.val with hr | heq | hr23 · exact hr24 · exact (ne_of_lt hab (Subtype.ext heq)).elim25 · exact ((a.property b.val hr).not_gt hab).elim26 letI : WellFoundedLT R := ⟨(InvImage.wf Subtype.val WellOrderingRel.isWellOrder.wf).mono27 (fun {a b} hab => hrel a b hab)⟩28 letI : Nonempty R := hR.nonempty.to_subtype29 letI : NoMaxOrder R := ⟨by30 intro a31 obtain ⟨b, hab⟩ := exists_gt a.val32 obtain ⟨c, hc, hbc⟩ := hR b33 exact ⟨⟨c, hc⟩, hab.trans_le hbc⟩⟩34 obtain ⟨S, hS, htype⟩ := Ordinal.exists_ord_cof_eq R35 letI : Nonempty S := hS.nonempty.to_subtype36 letI : NoMaxOrder S := ⟨by37 intro a38 obtain ⟨b, hab⟩ := exists_gt a.val39 obtain ⟨c, hc, hbc⟩ := hS b40 exact ⟨⟨c, hc⟩, hab.trans_le hbc⟩⟩41 let τ := typeLT S42 have hlimit : IsSuccLimit τ := by43 apply Ordinal.one_lt_cof_iff.mp44 rw [Ordinal.cof_type]45 exact Order.one_lt_cof46 have hregular : τ.cof.ord = τ := by47 change (typeLT S).cof.ord = typeLT S48 rw [htype, Order.cof_ord_cof]49 let e : Iio τ ≃o S := OrderIso.ofRelIsoLT (Ordinal.enum (α := S) (· < ·))50 let f : Iio τ → A := fun i => (e i).val.val51 refine ⟨τ, hlimit, hregular, f, ?_, ?_⟩52 · intro i j hij53 exact e.strictMono hij54 · intro a55 obtain ⟨b, hb, hab⟩ := hR a56 obtain ⟨c, hc, hbc⟩ := hS ⟨b, hb⟩57 refine ⟨c.val, ⟨e.symm ⟨c, hc⟩, ?_⟩, hab.trans hbc⟩58 simp [f]5960variable [OrderBot A]6162theorem exists_regular_cofinal_sequence_from_bot :63 ∃ τ : Ordinal.{u}, ∃ hτ : IsSuccLimit τ, τ.cof.ord = τ ∧64 ∃ f : Iio τ → A, Monotone f ∧ f ⟨0, hτ.pos⟩ = ⊥ ∧ IsCofinal (range f) := by65 classical66 obtain ⟨τ, hτ, hreg, f, hf, hcof⟩ := exists_regular_cofinal_sequence A67 let g : Iio τ → A := fun i => if i.val = 0 then ⊥ else f i68 refine ⟨τ, hτ, hreg, g, ?_, ?_, ?_⟩69 · intro i j hij70 by_cases hi : i.val = 071 · simp only [g, if_pos hi]72 exact bot_le73 · have hj : j.val ≠ 0 := by74 intro hj75 exact hi (le_antisymm (hj ▸ hij) bot_le)76 simpa only [g, if_neg hi, if_neg hj] using hf.monotone hij77 · simp [g]78 · intro a79 obtain ⟨_, ⟨i, rfl⟩, hai⟩ := hcof a80 obtain ⟨j, hij⟩ := hτ.isSuccPrelimit.noMaxOrder_Iio.exists_gt i81 have hj : j.val ≠ 0 := ne_of_gt (lt_of_le_of_lt bot_le hij)82 refine ⟨g j, mem_range_self j, ?_⟩83 simpa only [g, if_neg hj] using hai.trans (hf hij).le8485end BFPPSHA-256
6a0378b21863a1f0c2ff7790b3625306738242d0b1c99275b3dda5ed3f7d190d