Documentation

Mathlib.SetTheory.Ordinal.FixedPoint

Fixed points of normal functions #

We prove various statements about the fixed points of normal ordinal functions. We state them in three forms: as statements about type-indexed families of normal functions, as statements about ordinal-indexed families of normal functions, and as statements about a single normal function. For the most part, the first case encompasses the others.

Moreover, we prove some lemmas about the fixed points of specific normal functions.

Main definitions and results #

Fixed points of type-indexed families of ordinals #

def Ordinal.nfpFamily {ι : Type u_1} (f : ιOrdinal.{u}Ordinal.{u}) (a : Ordinal.{u}) :

The next common fixed point, at least a, for a family of normal functions.

This is defined for any family of functions, as the supremum of all values reachable by applying finitely many functions in the family to a.

Ordinal.nfpFamily_fp shows this is a fixed point, Ordinal.le_nfpFamily shows it's at least a, and Ordinal.nfpFamily_le_fp shows this is the least ordinal with these properties.

Equations
    Instances For
      theorem Ordinal.foldr_le_nfpFamily {ι : Type u_1} [Small.{u, u_1} ι] (f : ιOrdinal.{u}Ordinal.{u}) (a : Ordinal.{u}) (l : List ι) :
      theorem Ordinal.le_nfpFamily {ι : Type u_1} [Small.{u, u_1} ι] (f : ιOrdinal.{u}Ordinal.{u}) (a : Ordinal.{u}) :
      theorem Ordinal.lt_nfpFamily_iff {ι : Type u_1} {f : ιOrdinal.{u}Ordinal.{u}} [Small.{u, u_1} ι] {a b : Ordinal.{u}} :
      a < nfpFamily f b ∃ (l : List ι), a < List.foldr f b l
      @[deprecated Ordinal.lt_nfpFamily_iff (since := "2025-02-16")]
      theorem Ordinal.lt_nfpFamily {ι : Type u_1} {f : ιOrdinal.{u}Ordinal.{u}} [Small.{u, u_1} ι] {a b : Ordinal.{u}} :
      a < nfpFamily f b ∃ (l : List ι), a < List.foldr f b l

      Alias of Ordinal.lt_nfpFamily_iff.

      theorem Ordinal.nfpFamily_le_iff {ι : Type u_1} {f : ιOrdinal.{u}Ordinal.{u}} [Small.{u, u_1} ι] {a b : Ordinal.{u}} :
      nfpFamily f a b ∀ (l : List ι), List.foldr f a l b
      theorem Ordinal.nfpFamily_le {ι : Type u_1} {f : ιOrdinal.{u}Ordinal.{u}} {a b : Ordinal.{u}} :
      (∀ (l : List ι), List.foldr f a l b)nfpFamily f a b
      theorem Ordinal.nfpFamily_monotone {ι : Type u_1} {f : ιOrdinal.{u}Ordinal.{u}} [Small.{u, u_1} ι] (hf : ∀ (i : ι), Monotone (f i)) :
      theorem Ordinal.apply_lt_nfpFamily {ι : Type u_1} {f : ιOrdinal.{u}Ordinal.{u}} [Small.{u, u_1} ι] (H : ∀ (i : ι), IsNormal (f i)) {a b : Ordinal.{u}} (hb : b < nfpFamily f a) (i : ι) :
      f i b < nfpFamily f a
      theorem Ordinal.apply_lt_nfpFamily_iff {ι : Type u_1} {f : ιOrdinal.{u}Ordinal.{u}} [Nonempty ι] [Small.{u, u_1} ι] (H : ∀ (i : ι), IsNormal (f i)) {a b : Ordinal.{u}} :
      (∀ (i : ι), f i b < nfpFamily f a) b < nfpFamily f a
      theorem Ordinal.nfpFamily_le_apply {ι : Type u_1} {f : ιOrdinal.{u}Ordinal.{u}} [Nonempty ι] [Small.{u, u_1} ι] (H : ∀ (i : ι), IsNormal (f i)) {a b : Ordinal.{u}} :
      (∃ (i : ι), nfpFamily f a f i b) nfpFamily f a b
      theorem Ordinal.nfpFamily_le_fp {ι : Type u_1} {f : ιOrdinal.{u}Ordinal.{u}} (H : ∀ (i : ι), Monotone (f i)) {a b : Ordinal.{u}} (ab : a b) (h : ∀ (i : ι), f i b b) :
      theorem Ordinal.nfpFamily_fp {ι : Type u_1} {f : ιOrdinal.{u}Ordinal.{u}} [Small.{u, u_1} ι] {i : ι} (H : IsNormal (f i)) (a : Ordinal.{u}) :
      f i (nfpFamily f a) = nfpFamily f a
      theorem Ordinal.apply_le_nfpFamily {ι : Type u_1} {f : ιOrdinal.{u}Ordinal.{u}} [Small.{u, u_1} ι] [ : Nonempty ι] (H : ∀ (i : ι), IsNormal (f i)) {a b : Ordinal.{u}} :
      (∀ (i : ι), f i b nfpFamily f a) b nfpFamily f a
      theorem Ordinal.nfpFamily_eq_self {ι : Type u_1} {f : ιOrdinal.{u}Ordinal.{u}} [Small.{u, u_1} ι] {a : Ordinal.{u}} (h : ∀ (i : ι), f i a = a) :
      nfpFamily f a = a
      theorem Ordinal.not_bddAbove_fp_family {ι : Type u_1} {f : ιOrdinal.{u}Ordinal.{u}} [Small.{u, u_1} ι] (H : ∀ (i : ι), IsNormal (f i)) :
      ¬BddAbove (⋂ (i : ι), Function.fixedPoints (f i))

      A generalization of the fixed point lemma for normal functions: any family of normal functions has an unbounded set of common fixed points.

      The derivative of a family of normal functions is the sequence of their common fixed points.

      This is defined for all functions such that Ordinal.derivFamily_zero, Ordinal.derivFamily_succ, and Ordinal.derivFamily_limit are satisfied.

      Equations
        Instances For
          @[simp]
          theorem Ordinal.derivFamily_zero {ι : Type u_1} (f : ιOrdinal.{u_2}Ordinal.{u_2}) :
          theorem Ordinal.derivFamily_limit {ι : Type u_1} (f : ιOrdinal.{u_2}Ordinal.{u_2}) {o : Ordinal.{u_2}} :
          Order.IsSuccLimit oderivFamily f o = ⨆ (b : (Set.Iio o)), derivFamily f b
          theorem Ordinal.derivFamily_fp {ι : Type u_1} {f : ιOrdinal.{u}Ordinal.{u}} [Small.{u, u_1} ι] {i : ι} (H : IsNormal (f i)) (o : Ordinal.{u}) :
          f i (derivFamily f o) = derivFamily f o
          theorem Ordinal.le_iff_derivFamily {ι : Type u_1} {f : ιOrdinal.{u}Ordinal.{u}} [Small.{u, u_1} ι] (H : ∀ (i : ι), IsNormal (f i)) {a : Ordinal.{u}} :
          (∀ (i : ι), f i a a) ∃ (o : Ordinal.{u}), derivFamily f o = a
          theorem Ordinal.fp_iff_derivFamily {ι : Type u_1} {f : ιOrdinal.{u}Ordinal.{u}} [Small.{u, u_1} ι] (H : ∀ (i : ι), IsNormal (f i)) {a : Ordinal.{u}} :
          (∀ (i : ι), f i a = a) ∃ (o : Ordinal.{u}), derivFamily f o = a
          theorem Ordinal.derivFamily_eq_enumOrd {ι : Type u_1} {f : ιOrdinal.{u}Ordinal.{u}} [Small.{u, u_1} ι] (H : ∀ (i : ι), IsNormal (f i)) :
          derivFamily f = enumOrd (⋂ (i : ι), Function.fixedPoints (f i))

          For a family of normal functions, Ordinal.derivFamily enumerates the common fixed points.

          Fixed points of a single function #

          The next fixed point function, the least fixed point of the normal function f, at least a.

          This is defined as nfpFamily applied to a family consisting only of f.

          Equations
            Instances For
              theorem Ordinal.iSup_iterate_eq_nfp (f : Ordinal.{u}Ordinal.{u}) (a : Ordinal.{u}) :
              ⨆ (n : ), f^[n] a = nfp f a
              theorem Ordinal.lt_nfp_iff {f : Ordinal.{u}Ordinal.{u}} {a b : Ordinal.{u}} :
              a < nfp f b ∃ (n : ), a < f^[n] b
              theorem Ordinal.nfp_le_iff {f : Ordinal.{u}Ordinal.{u}} {a b : Ordinal.{u}} :
              nfp f a b ∀ (n : ), f^[n] a b
              theorem Ordinal.nfp_le {f : Ordinal.{u}Ordinal.{u}} {a b : Ordinal.{u}} :
              (∀ (n : ), f^[n] a b)nfp f a b
              @[simp]
              theorem Ordinal.iterate_lt_nfp {f : Ordinal.{u}Ordinal.{u}} (hf : StrictMono f) {a : Ordinal.{u}} (h : a < f a) (n : ) :
              f^[n] a < nfp f a
              theorem Ordinal.IsNormal.apply_lt_nfp {f : Ordinal.{u}Ordinal.{u}} (H : IsNormal f) {a b : Ordinal.{u}} :
              f b < nfp f a b < nfp f a
              theorem Ordinal.nfp_le_fp {f : Ordinal.{u}Ordinal.{u}} (H : Monotone f) {a b : Ordinal.{u}} (ab : a b) (h : f b b) :
              nfp f a b
              theorem Ordinal.IsNormal.nfp_fp {f : Ordinal.{u}Ordinal.{u}} (H : IsNormal f) (a : Ordinal.{u}) :
              f (nfp f a) = nfp f a
              theorem Ordinal.nfp_eq_self {f : Ordinal.{u}Ordinal.{u}} {a : Ordinal.{u}} (h : f a = a) :
              nfp f a = a

              The fixed point lemma for normal functions: any normal function has an unbounded set of fixed points.

              The derivative of a normal function f is the sequence of fixed points of f.

              This is defined as Ordinal.derivFamily applied to a trivial family consisting only of f.

              Equations
                Instances For
                  theorem Ordinal.IsNormal.fp_iff_deriv {f : Ordinal.{u}Ordinal.{u}} (H : IsNormal f) {a : Ordinal.{u}} :
                  f a = a ∃ (o : Ordinal.{u}), deriv f o = a

                  Ordinal.deriv enumerates the fixed points of a normal function.

                  @[simp]
                  @[simp]

                  Fixed points of addition #

                  @[simp]
                  theorem Ordinal.nfp_add_zero (a : Ordinal.{u_1}) :
                  nfp (fun (x : Ordinal.{u_1}) => a + x) 0 = a * omega0
                  theorem Ordinal.nfp_add_eq_mul_omega0 {a b : Ordinal.{u_1}} (hba : b a * omega0) :
                  nfp (fun (x : Ordinal.{u_1}) => a + x) b = a * omega0

                  Fixed points of multiplication #

                  @[simp]
                  theorem Ordinal.nfp_mul_one {a : Ordinal.{u_1}} (ha : 0 < a) :
                  nfp (fun (x : Ordinal.{u_1}) => a * x) 1 = a ^ omega0
                  @[simp]
                  theorem Ordinal.nfp_mul_zero (a : Ordinal.{u_1}) :
                  nfp (fun (x : Ordinal.{u_1}) => a * x) 0 = 0
                  theorem Ordinal.nfp_mul_eq_opow_omega0 {a b : Ordinal.{u_1}} (hb : 0 < b) (hba : b a ^ omega0) :
                  nfp (fun (x : Ordinal.{u_1}) => a * x) b = a ^ omega0
                  theorem Ordinal.nfp_mul_opow_omega0_add {a c : Ordinal.{u_1}} (b : Ordinal.{u_1}) (ha : 0 < a) (hc : 0 < c) (hca : c a ^ omega0) :
                  nfp (fun (x : Ordinal.{u_1}) => a * x) (a ^ omega0 * b + c) = a ^ omega0 * Order.succ b
                  theorem Ordinal.deriv_mul_eq_opow_omega0_mul {a : Ordinal.{u}} (ha : 0 < a) (b : Ordinal.{u}) :
                  deriv (fun (x : Ordinal.{u}) => a * x) b = a ^ omega0 * b