|
444 | 444 |
|
445 | 445 | lemma le_digits_len_le (b n m : ℕ) (h : n ≤ m) : (digits b n).length ≤ (digits b m).length :=
|
446 | 446 | monotone_of_monotone_nat (digits_len_le_digits_len_succ b) h
|
| 447 | + |
| 448 | +-- future refactor to proof using lists (see lt_base_pow_length_digits) |
| 449 | +lemma base_pow_length_digits_le' (b m : ℕ) : m ≠ 0 → (b + 2) ^ ((digits (b + 2) m).length) ≤ (b + 2) * m := |
| 450 | +begin |
| 451 | + apply nat.strong_induction_on m, |
| 452 | + clear m, |
| 453 | + intros n IH npos, |
| 454 | + cases n, |
| 455 | + { contradiction }, |
| 456 | + { unfold digits at IH ⊢, |
| 457 | + rw [digits_aux_def (b+2) (by simp) n.succ nat.succ_pos', list.length_cons], |
| 458 | + specialize IH ((n.succ) / (b+2)) (nat.div_lt_self' n b), |
| 459 | + rw [nat.pow_add, nat.pow_one, nat.mul_comm], |
| 460 | + cases nat.lt_or_ge n.succ (b+2), |
| 461 | + { rw [nat.div_eq_of_lt h, digits_aux_zero, list.length, nat.pow_zero], |
| 462 | + apply nat.mul_le_mul_left, |
| 463 | + exact nat.succ_pos n }, |
| 464 | + { have geb : (n.succ / (b + 2)) ≥ 1 := nat.div_pos h (by linarith), |
| 465 | + specialize IH (by linarith [geb]), |
| 466 | + replace IH := nat.mul_le_mul_left (b + 2) IH, |
| 467 | + have IH' : (b + 2) * ((b + 2) * (n.succ / (b + 2))) ≤ (b + 2) * n.succ, |
| 468 | + { apply nat.mul_le_mul_left, |
| 469 | + rw nat.mul_comm, |
| 470 | + exact nat.div_mul_le_self n.succ (b + 2) }, |
| 471 | + exact le_trans IH IH' } } |
| 472 | +end |
| 473 | + |
| 474 | +lemma base_pow_length_digits_le (b m : ℕ) (hb : 2 ≤ b): m ≠ 0 → b ^ ((digits b m).length) ≤ b * m := |
| 475 | +begin |
| 476 | + rcases b with _ | _ | b; try { linarith }, |
| 477 | + exact base_pow_length_digits_le' b m, |
| 478 | +end |
0 commit comments