Documentation

Mathlib.SetTheory.Ordinal.Veblen

Veblen hierarchy #

We define the two-arguments Veblen function, which satisfies veblen 0 a = ω ^ a and that for o ≠ 0, veblen o enumerates the common fixed points of veblen o' for o' < o.

Main definitions #

TODO #

Veblen function with a given starting function #

@[irreducible]

veblenWith f o is the o-th function in the Veblen hierarchy starting with f. This is defined so that

Equations
  • One or more equations did not get rendered due to their size.
Instances For
    theorem Ordinal.veblenWith_of_ne_zero {o : Ordinal.{u}} (f : Ordinal.{u}Ordinal.{u}) (h : o 0) :
    veblenWith f o = derivFamily fun (x : (Set.Iio o)) => veblenWith f x

    veblenWith f o is always normal for o ≠ 0. See isNormal_veblenWith for a version which assumes IsNormal f.

    veblenWith f o is always normal whenever f is. See isNormal_veblenWith' for a version which does not assume IsNormal f.

    Alias of Ordinal.isNormal_veblenWith.


    veblenWith f o is always normal whenever f is. See isNormal_veblenWith' for a version which does not assume IsNormal f.

    theorem Ordinal.veblenWith_veblenWith_of_lt {f : Ordinal.{u}Ordinal.{u}} {o₁ o₂ : Ordinal.{u}} (hf : IsNormal f) (h : o₁ < o₂) (a : Ordinal.{u}) :
    veblenWith f o₁ (veblenWith f o₂ a) = veblenWith f o₂ a
    @[simp]
    theorem Ordinal.veblenWith_inj {f : Ordinal.{u}Ordinal.{u}} {o a b : Ordinal.{u}} (hf : IsNormal f) :
    veblenWith f o a = veblenWith f o b a = b
    theorem Ordinal.veblenWith_pos {f : Ordinal.{u}Ordinal.{u}} {o a : Ordinal.{u}} (hf : IsNormal f) (hp : 0 < f 0) :
    0 < veblenWith f o a
    theorem Ordinal.veblenWith_zero_lt_veblenWith_zero {f : Ordinal.{u}Ordinal.{u}} {o₁ o₂ : Ordinal.{u}} (hf : IsNormal f) (hp : 0 < f 0) :
    veblenWith f o₁ 0 < veblenWith f o₂ 0 o₁ < o₂
    theorem Ordinal.veblenWith_zero_le_veblenWith_zero {f : Ordinal.{u}Ordinal.{u}} {o₁ o₂ : Ordinal.{u}} (hf : IsNormal f) (hp : 0 < f 0) :
    veblenWith f o₁ 0 veblenWith f o₂ 0 o₁ o₂
    theorem Ordinal.veblenWith_zero_inj {f : Ordinal.{u}Ordinal.{u}} {o₁ o₂ : Ordinal.{u}} (hf : IsNormal f) (hp : 0 < f 0) :
    veblenWith f o₁ 0 = veblenWith f o₂ 0 o₁ = o₂
    theorem Ordinal.left_le_veblenWith {f : Ordinal.{u}Ordinal.{u}} (hf : IsNormal f) (hp : 0 < f 0) (o a : Ordinal.{u}) :
    o veblenWith f o a
    theorem Ordinal.IsNormal.veblenWith_zero {f : Ordinal.{u}Ordinal.{u}} (hf : IsNormal f) (hp : 0 < f 0) :
    IsNormal fun (x : Ordinal.{u}) => veblenWith f x 0
    theorem Ordinal.cmp_veblenWith {f : Ordinal.{u}Ordinal.{u}} {o₁ o₂ a b : Ordinal.{u}} (hf : IsNormal f) :
    cmp (veblenWith f o₁ a) (veblenWith f o₂ b) = match cmp o₁ o₂ with | Ordering.eq => cmp a b | Ordering.lt => cmp a (veblenWith f o₂ b) | Ordering.gt => cmp (veblenWith f o₁ a) b
    theorem Ordinal.veblenWith_lt_veblenWith_iff {f : Ordinal.{u}Ordinal.{u}} {o₁ o₂ a b : Ordinal.{u}} (hf : IsNormal f) :
    veblenWith f o₁ a < veblenWith f o₂ b o₁ = o₂ a < b o₁ < o₂ a < veblenWith f o₂ b o₂ < o₁ veblenWith f o₁ a < b

    veblenWith f o₁ a < veblenWith f o₂ b iff one of the following holds:

    • o₁ = o₂ and a < b
    • o₁ < o₂ and a < veblenWith f o₂ b
    • o₁ > o₂ and veblenWith f o₁ a < b
    theorem Ordinal.veblenWith_le_veblenWith_iff {f : Ordinal.{u}Ordinal.{u}} {o₁ o₂ a b : Ordinal.{u}} (hf : IsNormal f) :
    veblenWith f o₁ a veblenWith f o₂ b o₁ = o₂ a b o₁ < o₂ a veblenWith f o₂ b o₂ < o₁ veblenWith f o₁ a b

    veblenWith f o₁ a ≤ veblenWith f o₂ b iff one of the following holds:

    • o₁ = o₂ and a ≤ b
    • o₁ < o₂ and a ≤ veblenWith f o₂ b
    • o₁ > o₂ and veblenWith f o₁ a ≤ b
    theorem Ordinal.veblenWith_eq_veblenWith_iff {f : Ordinal.{u}Ordinal.{u}} {o₁ o₂ a b : Ordinal.{u}} (hf : IsNormal f) :
    veblenWith f o₁ a = veblenWith f o₂ b o₁ = o₂ a = b o₁ < o₂ a = veblenWith f o₂ b o₂ < o₁ veblenWith f o₁ a = b

    veblenWith f o₁ a = veblenWith f o₂ b iff one of the following holds:

    • o₁ = o₂ and a = b
    • o₁ < o₂ and a = veblenWith f o₂ b
    • o₁ > o₂ and veblenWith f o₁ a = b

    Veblen function #

    veblen o is the o-th function in the Veblen hierarchy starting with ω ^ ·. That is:

    • veblen 0 a = ω ^ a.
    • veblen o for o ≠ 0 enumerates the fixed points of veblen o' for o' < o.
    Equations
    Instances For
      @[simp]
      theorem Ordinal.veblen_zero :
      veblen 0 = fun (a : Ordinal.{u_1}) => omega0 ^ a
      theorem Ordinal.veblen_of_ne_zero {o : Ordinal.{u}} (h : o 0) :
      veblen o = derivFamily fun (x : (Set.Iio o)) => veblen x
      theorem Ordinal.veblen_veblen_of_lt {o₁ o₂ : Ordinal.{u}} (h : o₁ < o₂) (a : Ordinal.{u}) :
      veblen o₁ (veblen o₂ a) = veblen o₂ a
      @[simp]
      theorem Ordinal.veblen_inj {o a b : Ordinal.{u}} :
      veblen o a = veblen o b a = b
      @[simp]
      theorem Ordinal.veblen_pos {o a : Ordinal.{u}} :
      0 < veblen o a
      @[simp]
      theorem Ordinal.veblen_zero_lt_veblen_zero {o₁ o₂ : Ordinal.{u}} :
      veblen o₁ 0 < veblen o₂ 0 o₁ < o₂
      @[simp]
      theorem Ordinal.veblen_zero_le_veblen_zero {o₁ o₂ : Ordinal.{u}} :
      veblen o₁ 0 veblen o₂ 0 o₁ o₂
      @[simp]
      theorem Ordinal.veblen_zero_inj {o₁ o₂ : Ordinal.{u}} :
      veblen o₁ 0 = veblen o₂ 0 o₁ = o₂
      theorem Ordinal.cmp_veblen {o₁ o₂ a b : Ordinal.{u}} :
      cmp (veblen o₁ a) (veblen o₂ b) = match cmp o₁ o₂ with | Ordering.eq => cmp a b | Ordering.lt => cmp a (veblen o₂ b) | Ordering.gt => cmp (veblen o₁ a) b
      theorem Ordinal.veblen_lt_veblen_iff {o₁ o₂ a b : Ordinal.{u}} :
      veblen o₁ a < veblen o₂ b o₁ = o₂ a < b o₁ < o₂ a < veblen o₂ b o₂ < o₁ veblen o₁ a < b

      veblen o₁ a < veblen o₂ b iff one of the following holds:

      • o₁ = o₂ and a < b
      • o₁ < o₂ and a < veblen o₂ b
      • o₁ > o₂ and veblen o₁ a < b
      theorem Ordinal.veblen_le_veblen_iff {o₁ o₂ a b : Ordinal.{u}} :
      veblen o₁ a veblen o₂ b o₁ = o₂ a b o₁ < o₂ a veblen o₂ b o₂ < o₁ veblen o₁ a b

      veblen o₁ a ≤ veblen o₂ b iff one of the following holds:

      • o₁ = o₂ and a ≤ b
      • o₁ < o₂ and a ≤ veblen o₂ b
      • o₁ > o₂ and veblen o₁ a ≤ b
      theorem Ordinal.veblen_eq_veblen_iff {o₁ o₂ a b : Ordinal.{u}} :
      veblen o₁ a = veblen o₂ b o₁ = o₂ a = b o₁ < o₂ a = veblen o₂ b o₂ < o₁ veblen o₁ a = b

      veblen o₁ a ≤ veblen o₂ b iff one of the following holds:

      • o₁ = o₂ and a = b
      • o₁ < o₂ and a = veblen o₂ b
      • o₁ > o₂ and veblen o₁ a = b