Ordinal exponential #
THIS FILE IS SYNCHRONIZED WITH MATHLIB4. Any changes to this file require a corresponding PR to mathlib4.
In this file we define the power function and the logarithm function on ordinals. The two are
related by the lemma ordinal.opow_le_iff_le_log : (b^c) ≤ x ↔ c ≤ log b x
for nontrivial inputs
b
, c
.
@[protected, instance]
The ordinal exponential, defined by transfinite recursion.
theorem
ordinal.opow_is_normal
{a : ordinal}
(h : 1 < a) :
ordinal.is_normal (λ (_y : ordinal), a ^ _y)
theorem
ordinal.opow_lt_opow_left_of_succ
{a b c : ordinal}
(ab : a < b) :
a ^ order.succ c < b ^ order.succ c
Ordinal logarithm #
theorem
ordinal.log_def
{b : ordinal}
(h : 1 < b)
(x : ordinal) :
ordinal.log b x = (has_Inf.Inf {o : ordinal | x < b ^ o}).pred
theorem
ordinal.log_of_not_one_lt_left
{b : ordinal}
(h : ¬1 < b)
(x : ordinal) :
ordinal.log b x = 0
theorem
ordinal.succ_log_def
{b x : ordinal}
(hb : 1 < b)
(hx : x ≠ 0) :
order.succ (ordinal.log b x) = has_Inf.Inf {o : ordinal | x < b ^ o}
theorem
ordinal.lt_opow_succ_log_self
{b : ordinal}
(hb : 1 < b)
(x : ordinal) :
x < b ^ order.succ (ordinal.log b x)
theorem
ordinal.opow_le_iff_le_log
{b x c : ordinal}
(hb : 1 < b)
(hx : x ≠ 0) :
b ^ c ≤ x ↔ c ≤ ordinal.log b x
opow b
and log b
(almost) form a Galois connection.
theorem
ordinal.lt_opow_iff_log_lt
{b x c : ordinal}
(hb : 1 < b)
(hx : x ≠ 0) :
x < b ^ c ↔ ordinal.log b x < c
theorem
ordinal.log_pos
{b o : ordinal}
(hb : 1 < b)
(ho : o ≠ 0)
(hbo : b ≤ o) :
0 < ordinal.log b o
theorem
ordinal.log_mono_right
(b : ordinal)
{x y : ordinal}
(xy : x ≤ y) :
ordinal.log b x ≤ ordinal.log b y
theorem
ordinal.mod_opow_log_lt_self
(b : ordinal)
{o : ordinal}
(ho : o ≠ 0) :
o % b ^ ordinal.log b o < o
theorem
ordinal.log_mod_opow_log_lt_log_self
{b o : ordinal}
(hb : 1 < b)
(ho : o ≠ 0)
(hbo : b ≤ o) :
ordinal.log b (o % b ^ ordinal.log b o) < ordinal.log b o
theorem
ordinal.div_opow_log_pos
(b : ordinal)
{o : ordinal}
(ho : o ≠ 0) :
0 < o / b ^ ordinal.log b o
theorem
ordinal.div_opow_log_lt
{b : ordinal}
(o : ordinal)
(hb : 1 < b) :
o / b ^ ordinal.log b o < b
theorem
ordinal.add_log_le_log_mul
{x y : ordinal}
(b : ordinal)
(hx : x ≠ 0)
(hy : y ≠ 0) :
ordinal.log b x + ordinal.log b y ≤ ordinal.log b (x * y)
theorem
ordinal.sup_opow_nat
{o : ordinal}
(ho : 0 < o) :
ordinal.sup (λ (n : ℕ), o ^ ↑n) = o ^ ordinal.omega