File: Mathlib/NumberTheory/Liouville/LiouvilleNumber.lean

full_name: liouvilleNumber
code: /-- For a real number `m`, Liouville's constant is
$$
\sum_{i=0}^\infty\frac{1}{m^{i!}}.
$$
The series converges only for `1 < m`. However, there is no restriction on `m`, since,
if the series does not converge, then the sum of the series is defined to be zero.
-/
def liouvilleNumber (m : ℝ) : ℝ 
goal: ℝ

full_name: LiouvilleNumber.partialSum
code: /-- `LiouvilleNumber.partialSum` is the sum of the first `k + 1` terms of Liouville's constant,
i.e.
$$
\sum_{i=0}^k\frac{1}{m^{i!}}.
$$
-/
def partialSum (m : ℝ) (k : ℕ) : ℝ 
goal: ℝ

full_name: LiouvilleNumber.remainder
code: /-- `LiouvilleNumber.remainder` is the sum of the series of the terms in `liouvilleNumber m`
starting from `k+1`, i.e
$$
\sum_{i=k+1}^\infty\frac{1}{m^{i!}}.
$$
-/
def remainder (m : ℝ) (k : ℕ) : ℝ 
goal: ℝ

full_name: LiouvilleNumber.summable
code: protected theorem summable {m : ℝ} (hm : 1 < m) : Summable fun i : ℕ => 1 / m ^ i ! 
goal: Summable fun i => 1 / m ^ i !

full_name: LiouvilleNumber.remainder_summable
code: theorem remainder_summable {m : ℝ} (hm : 1 < m) (k : ℕ) :
    Summable fun i : ℕ => 1 / m ^ (i + (k + 1))! 
goal: Summable fun i => 1 / m ^ (i + (k + 1))!

full_name: LiouvilleNumber.remainder_pos
code: theorem remainder_pos {m : ℝ} (hm : 1 < m) (k : ℕ) : 0 < remainder m k 
goal: 0 < LiouvilleNumber.remainder m k

full_name: LiouvilleNumber.partialSum_succ
code: theorem partialSum_succ (m : ℝ) (n : ℕ) :
    partialSum m (n + 1) = partialSum m n + 1 / m ^ (n + 1)! 
goal: LiouvilleNumber.partialSum m (n + 1) = LiouvilleNumber.partialSum m n + 1 / m ^ (n + 1)!

full_name: LiouvilleNumber.partialSum_add_remainder
code: /-- Split the sum defining a Liouville number into the first `k` terms and the rest. -/
theorem partialSum_add_remainder {m : ℝ} (hm : 1 < m) (k : ℕ) :
    partialSum m k + remainder m k = liouvilleNumber m 
goal: LiouvilleNumber.partialSum m k + LiouvilleNumber.remainder m k = liouvilleNumber m

full_name: LiouvilleNumber.remainder_lt'
code: /-- An upper estimate on the remainder. This estimate works with `m ∈ ℝ` satisfying `1 < m` and is
stronger than the estimate `LiouvilleNumber.remainder_lt` below. However, the latter estimate is
more useful for the proof. -/
theorem remainder_lt' (n : ℕ) {m : ℝ} (m1 : 1 < m) :
    remainder m n < (1 - 1 / m)⁻¹ * (1 / m ^ (n + 1)!) 
goal: LiouvilleNumber.remainder m n < (1 - 1 / m)⁻¹ * (1 / m ^ (n + 1)!)

full_name: LiouvilleNumber.aux_calc
code: theorem aux_calc (n : ℕ) {m : ℝ} (hm : 2 ≤ m) :
    (1 - 1 / m)⁻¹ * (1 / m ^ (n + 1)!) ≤ 1 / (m ^ n !) ^ n 
goal: (1 - 1 / m)⁻¹ * (1 / m ^ (n + 1)!) ≤ 1 / (m ^ n !) ^ n

full_name: LiouvilleNumber.remainder_lt
code: /-- An upper estimate on the remainder. This estimate works with `m ∈ ℝ` satisfying `2 ≤ m` and is
weaker than the estimate `LiouvilleNumber.remainder_lt'` above. However, this estimate is
more useful for the proof. -/
theorem remainder_lt (n : ℕ) {m : ℝ} (m2 : 2 ≤ m) : remainder m n < 1 / (m ^ n !) ^ n 
goal: LiouvilleNumber.remainder m n < 1 / (m ^ n !) ^ n

full_name: LiouvilleNumber.partialSum_eq_rat
code: /-- The sum of the `k` initial terms of the Liouville number to base `m` is a ratio of natural
numbers where the denominator is `m ^ k!`. -/
theorem partialSum_eq_rat {m : ℕ} (hm : 0 < m) (k : ℕ) :
    ∃ p : ℕ, partialSum m k = p / ((m ^ k ! :) : ℝ) 
goal: ∃ p, LiouvilleNumber.partialSum (↑m) k = ↑p / ↑(m ^ k !)

full_name: liouville_liouvilleNumber
code: theorem liouville_liouvilleNumber {m : ℕ} (hm : 2 ≤ m) : Liouville (liouvilleNumber m) 
goal: Liouville (liouvilleNumber ↑m)

full_name: transcendental_liouvilleNumber
code: theorem transcendental_liouvilleNumber {m : ℕ} (hm : 2 ≤ m) :
    Transcendental ℤ (liouvilleNumber m) 
goal: Transcendental ℤ (liouvilleNumber ↑m)