@@ -120,6 +120,17 @@ by { rw ←pow_le_iff_le_log hb (pow_pos (zero_lt_one.trans hb) _),
120
120
lemma log_pos {b n : ℕ} (hb : 1 < b) (hn : b ≤ n) : 0 < log b n :=
121
121
by { rwa [←succ_le_iff, ←pow_le_iff_le_log hb (hb.le.trans hn), pow_one] }
122
122
123
+ lemma log_mul_base (b n : ℕ) (hb : 1 < b) (hn : 0 < n) : log b (n * b) = log b n + 1 :=
124
+ eq_of_forall_le_iff $ λ z,
125
+ begin
126
+ cases z,
127
+ { simp },
128
+ have : 0 < b := zero_lt_one.trans hb,
129
+ rw [←pow_le_iff_le_log hb, pow_succ', (strict_mono_mul_right_of_pos this ).le_iff_le,
130
+ pow_le_iff_le_log hb hn, nat.succ_le_succ_iff],
131
+ simp [hn, this ]
132
+ end
133
+
123
134
lemma lt_pow_succ_log_self {b : ℕ} (hb : 1 < b) {x : ℕ} (hx : 0 < x) :
124
135
x < b ^ (log b x).succ :=
125
136
begin
@@ -157,6 +168,45 @@ lemma log_monotone {b : ℕ} : monotone (λ n : ℕ, log b n) :=
157
168
lemma log_antitone_left {n : ℕ} : antitone_on (λ b, log b n) (set.Ioi 1 ) :=
158
169
λ _ hc _ _ hb, log_le_log_of_left_ge (set.mem_Iio.1 hc) hb
159
170
171
+ @[simp] lemma log_div_mul_self (b n : ℕ) : log b (n / b * b) = log b n :=
172
+ begin
173
+ refine eq_of_forall_le_iff (λ z, _),
174
+ split,
175
+ { intro h,
176
+ exact h.trans (log_monotone (div_mul_le_self _ _)) },
177
+ { intro h,
178
+ rcases b with _|_|b,
179
+ { simpa using h },
180
+ { simpa using h },
181
+ rcases n.zero_le.eq_or_lt with rfl|hn,
182
+ { simpa using h },
183
+ cases le_or_lt b.succ.succ n with hb hb,
184
+ { cases z,
185
+ { simp },
186
+ have : 0 < b.succ.succ := nat.succ_pos',
187
+ rw [←pow_le_iff_le_log, pow_succ'] at h ⊢,
188
+ { rwa [(strict_mono_mul_right_of_pos this ).le_iff_le,
189
+ nat.le_div_iff_mul_le _ _ nat.succ_pos'] },
190
+ all_goals { simp [hn, nat.div_pos hb nat.succ_pos'] } },
191
+ { simpa [div_eq_of_lt, hb, log_eq_zero] using h } }
192
+ end
193
+
194
+ @[simp] lemma log_div_base (b n : ℕ) : log b (n / b) = log b n - 1 :=
195
+ begin
196
+ cases lt_or_le n b with h h,
197
+ { simp [div_eq_of_lt, h, log_eq_zero] },
198
+ rcases n.zero_le.eq_or_lt with rfl|hn,
199
+ { simp },
200
+ rcases b with _|_|b,
201
+ { simp },
202
+ { simp },
203
+ rw [←succ_inj', ←succ_inj'],
204
+ simp_rw succ_eq_add_one,
205
+ rw [nat.sub_add_cancel, ←log_mul_base];
206
+ { simp [succ_le_iff, log_pos, h, nat.div_pos] },
207
+ end
208
+
209
+
160
210
private lemma add_pred_div_lt {b n : ℕ} (hb : 1 < b) (hn : 2 ≤ n) : (n + b - 1 )/b < n :=
161
211
begin
162
212
rw [div_lt_iff_lt_mul _ _ (zero_lt_one.trans hb), ←succ_le_iff, ←pred_eq_sub_one,
0 commit comments