From dc5f7fbf06912c55134411276f15af6cf2c2463d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Violeta=20Hern=C3=A1ndez?= Date: Fri, 11 Mar 2022 19:18:31 +0000 Subject: [PATCH] feat(set_theory/ordinal_arithmetic): Further theorems on normal functions (#12484) We prove various theorems giving more convenient characterizations of normal functions. --- src/set_theory/ordinal_arithmetic.lean | 28 ++++++++++++++++++++++++-- 1 file changed, 26 insertions(+), 2 deletions(-) diff --git a/src/set_theory/ordinal_arithmetic.lean b/src/set_theory/ordinal_arithmetic.lean index c36d99bcd727a..225884b5c8bab 100644 --- a/src/set_theory/ordinal_arithmetic.lean +++ b/src/set_theory/ordinal_arithmetic.lean @@ -383,6 +383,11 @@ theorem is_normal.strict_mono {f} (H : is_normal f) : strict_mono f := (λ b l IH h, lt_of_lt_of_le (H.1 a) ((H.2 _ l _).1 le_rfl _ (l.2 _ h))) +theorem is_normal_iff_strict_mono_limit (f : ordinal → ordinal) : + is_normal f ↔ (strict_mono f ∧ ∀ o, is_limit o → ∀ a, (∀ b < o, f b ≤ a) → f o ≤ a) := +⟨λ hf, ⟨hf.strict_mono, λ a ha c, (hf.2 a ha c).2⟩, λ ⟨hs, hl⟩, ⟨λ a, hs (ordinal.lt_succ_self a), + λ a ha c, ⟨λ hac b hba, ((hs hba).trans_le hac).le, hl a ha c⟩⟩⟩ + theorem is_normal.lt_iff {f} (H : is_normal f) {a b} : f a < f b ↔ a < b := strict_mono.lt_iff_lt $ H.strict_mono @@ -1342,6 +1347,13 @@ theorem bsup_eq_blsub_iff_lt_bsup {o} (f : Π a < o, ordinal) : bsup o f = blsub o f ↔ ∀ i hi, f i hi < bsup o f := ⟨λ h i, (by { rw h, apply lt_blsub }), λ h, le_antisymm (bsup_le_blsub f) (blsub_le.2 h)⟩ +theorem bsup_eq_blsub_of_lt_succ_limit {o} (ho : is_limit o) {f : Π a < o, ordinal} + (hf : ∀ a ha, f a ha < f a.succ (ho.2 a ha)) : bsup o f = blsub o f := +begin + rw bsup_eq_blsub_iff_lt_bsup, + exact λ i hi, (hf i hi).trans_le (le_bsup f _ _) +end + @[simp] theorem blsub_eq_zero_iff {o} {f : Π a < o, ordinal} : blsub o f = 0 ↔ o = 0 := by { rw [blsub_eq_lsub, lsub_eq_zero_iff], exact out_empty_iff_eq_zero } @@ -1405,9 +1417,21 @@ by { rw [←is_normal.bsup.{u u} H (λ x _, x) h.1, bsup_id_limit h.2] } theorem is_normal.blsub_eq {f} (H : is_normal f) {o : ordinal} (h : is_limit o) : blsub.{u} o (λ x _, f x) = f o := +by { rw [←H.bsup_eq h, bsup_eq_blsub_of_lt_succ_limit h], exact (λ a _, H.1 a) } + +theorem is_normal_iff_lt_succ_and_bsup_eq {f} : + is_normal f ↔ (∀ a, f a < f a.succ) ∧ ∀ o, is_limit o → bsup o (λ x _, f x) = f o := +⟨λ h, ⟨h.1, @is_normal.bsup_eq f h⟩, λ ⟨h₁, h₂⟩, ⟨h₁, λ o ho a, (by {rw ←h₂ o ho, exact bsup_le})⟩⟩ + +theorem is_normal_iff_lt_succ_and_blsub_eq {f} : + is_normal f ↔ (∀ a, f a < f a.succ) ∧ ∀ o, is_limit o → blsub o (λ x _, f x) = f o := begin - rw ←H.bsup_eq h, - exact ((bsup_eq_blsub_iff_lt_bsup _).2 (λ a ha, (H.1 a).trans_le (le_bsup _ _ (h.2 a ha)))).symm + rw [is_normal_iff_lt_succ_and_bsup_eq, and.congr_right_iff], + intro h, + split; + intros H o ho; + have := H o ho; + rwa ←bsup_eq_blsub_of_lt_succ_limit ho (λ a _, h a) at * end theorem is_normal.eq_iff_zero_and_succ {f : ordinal.{u} → ordinal.{u}} (hf : is_normal f) {g}