Documentation

Mathlib.Data.Nat.Digits.Lemmas

Digits of a natural number #

This provides lemma about the digits of natural numbers.

theorem Nat.ofDigits_eq_sum_mapIdx_aux (b : ) (l : List ) :
(List.zipWith (fun (a i : ) => a * b ^ (i + 1)) l (List.range l.length)).sum = b * (List.zipWith (fun (a i : ) => a * b ^ i) l (List.range l.length)).sum
theorem Nat.ofDigits_eq_sum_mapIdx (b : ) (L : List ) :
ofDigits b L = (List.mapIdx (fun (i a : ) => a * b ^ i) L).sum

Properties #

This section contains various lemmas of properties relating to digits and ofDigits.

theorem Nat.digits_len (b n : ) (hb : 1 < b) (hn : n 0) :
(b.digits n).length = log b n + 1
theorem Nat.getLast_digit_ne_zero (b : ) {m : } (hm : m 0) :
(b.digits m).getLast 0
theorem Nat.digits_append_digits {b m n : } (hb : 0 < b) :
b.digits n ++ b.digits m = b.digits (n + b ^ (b.digits n).length * m)
theorem Nat.digits_append_zeroes_append_digits {b k m n : } (hb : 1 < b) (hm : 0 < m) :
b.digits n ++ List.replicate k 0 ++ b.digits m = b.digits (n + b ^ ((b.digits n).length + k) * m)
theorem Nat.le_digits_len_le (b n m : ) (h : n m) :
theorem Nat.pow_length_le_mul_ofDigits {b : } {l : List } (hl : l []) (hl2 : l.getLast hl 0) :
(b + 2) ^ l.length (b + 2) * ofDigits (b + 2) l
theorem Nat.base_pow_length_digits_le' (b m : ) (hm : m 0) :
(b + 2) ^ ((b + 2).digits m).length (b + 2) * m

Any non-zero natural number m is greater than (b+2)^((number of digits in the base (b+2) representation of m) - 1)

theorem Nat.base_pow_length_digits_le (b m : ) (hb : 1 < b) :
m 0b ^ (b.digits m).length b * m

Any non-zero natural number m is greater than b^((number of digits in the base b representation of m) - 1)

theorem Nat.sub_one_mul_sum_div_pow_eq_sub_sum_digits {p : } (L : List ) {h_nonempty : L []} (h_ne_zero : L.getLast h_nonempty 0) (h_lt : lL, l < p) :
(p - 1) * iFinset.range L.length, ofDigits p L / p ^ i.succ = ofDigits p L - L.sum
theorem Nat.sub_one_mul_sum_log_div_pow_eq_sub_sum_digits {p : } (n : ) :
(p - 1) * iFinset.range (log p n).succ, n / p ^ i.succ = n - (p.digits n).sum

Binary #

theorem Nat.digits_two_eq_bits (n : ) :
digits 2 n = List.map (fun (b : Bool) => bif b then 1 else 0) n.bits

Modular Arithmetic #

theorem Nat.dvd_ofDigits_sub_ofDigits {α : Type u_1} [CommRing α] {a b k : α} (h : k a - b) (L : List ) :
theorem Nat.ofDigits_modEq' (b b' k : ) (h : b b' [MOD k]) (L : List ) :
theorem Nat.ofDigits_modEq (b k : ) (L : List ) :
ofDigits b L ofDigits (b % k) L [MOD k]
theorem Nat.ofDigits_mod (b k : ) (L : List ) :
ofDigits b L % k = ofDigits (b % k) L % k
theorem Nat.ofDigits_mod_eq_head! (b : ) (l : List ) :
ofDigits b l % b = l.head! % b
theorem Nat.head!_digits {b n : } (h : b 1) :
(b.digits n).head! = n % b
theorem Nat.ofDigits_zmodeq' (b b' : ) (k : ) (h : b b' [ZMOD k]) (L : List ) :
ofDigits b L ofDigits b' L [ZMOD k]
theorem Nat.ofDigits_zmodeq (b : ) (k : ) (L : List ) :
ofDigits b L ofDigits (b % k) L [ZMOD k]
theorem Nat.ofDigits_zmod (b : ) (k : ) (L : List ) :
ofDigits b L % k = ofDigits (b % k) L % k
theorem Nat.modEq_digits_sum (b b' : ) (h : b' % b = 1) (n : ) :
n (b'.digits n).sum [MOD b]
theorem Nat.zmodeq_ofDigits_digits (b b' : ) (c : ) (h : b' c [ZMOD b]) (n : ) :
n ofDigits c (b'.digits n) [ZMOD b]
theorem Nat.ofDigits_neg_one (L : List ) :
ofDigits (-1) L = (List.map (fun (n : ) => n) L).alternatingSum