126 sledgehammer_params [isar_proofs, compress = 1] |
126 sledgehammer_params [isar_proofs, compress = 1] |
127 |
127 |
128 lemma bigo_alt_def: "O(f) = {h. \<exists>c. (0 < c \<and> (\<forall>x. \<bar>h x\<bar> <= c * \<bar>f x\<bar>))}" |
128 lemma bigo_alt_def: "O(f) = {h. \<exists>c. (0 < c \<and> (\<forall>x. \<bar>h x\<bar> <= c * \<bar>f x\<bar>))}" |
129 by (auto simp add: bigo_def bigo_pos_const) |
129 by (auto simp add: bigo_def bigo_pos_const) |
130 |
130 |
131 lemma bigo_elt_subset [intro]: "f : O(g) \<Longrightarrow> O(f) \<le> O(g)" |
131 lemma bigo_elt_subset [intro]: "f \<in> O(g) \<Longrightarrow> O(f) \<le> O(g)" |
132 apply (auto simp add: bigo_alt_def) |
132 apply (auto simp add: bigo_alt_def) |
133 apply (rule_tac x = "ca * c" in exI) |
133 apply (rule_tac x = "ca * c" in exI) |
134 apply (metis algebra_simps mult_le_cancel_left_pos order_trans mult_pos_pos) |
134 apply (metis algebra_simps mult_le_cancel_left_pos order_trans mult_pos_pos) |
135 done |
135 done |
136 |
136 |
137 lemma bigo_refl [intro]: "f : O(f)" |
137 lemma bigo_refl [intro]: "f \<in> O(f)" |
138 unfolding bigo_def mem_Collect_eq |
138 unfolding bigo_def mem_Collect_eq |
139 by (metis mult_1 order_refl) |
139 by (metis mult_1 order_refl) |
140 |
140 |
141 lemma bigo_zero: "0 : O(g)" |
141 lemma bigo_zero: "0 \<in> O(g)" |
142 apply (auto simp add: bigo_def func_zero) |
142 apply (auto simp add: bigo_def func_zero) |
143 by (metis mult_zero_left order_refl) |
143 by (metis mult_zero_left order_refl) |
144 |
144 |
145 lemma bigo_zero2: "O(\<lambda>x. 0) = {\<lambda>x. 0}" |
145 lemma bigo_zero2: "O(\<lambda>x. 0) = {\<lambda>x. 0}" |
146 by (auto simp add: bigo_def) |
146 by (auto simp add: bigo_def) |
208 apply (metis add_nonneg_nonneg) |
208 apply (metis add_nonneg_nonneg) |
209 apply (rule add_mono) |
209 apply (rule add_mono) |
210 apply (metis max.cobounded2 linorder_linear max.absorb1 mult_right_mono xt1(6)) |
210 apply (metis max.cobounded2 linorder_linear max.absorb1 mult_right_mono xt1(6)) |
211 by (metis max.cobounded2 linorder_not_le mult_le_cancel_right order_trans) |
211 by (metis max.cobounded2 linorder_not_le mult_le_cancel_right order_trans) |
212 |
212 |
213 lemma bigo_bounded_alt: "\<forall>x. 0 <= f x \<Longrightarrow> \<forall>x. f x <= c * g x \<Longrightarrow> f : O(g)" |
213 lemma bigo_bounded_alt: "\<forall>x. 0 \<le> f x \<Longrightarrow> \<forall>x. f x \<le> c * g x \<Longrightarrow> f \<in> O(g)" |
214 apply (auto simp add: bigo_def) |
214 apply (auto simp add: bigo_def) |
215 (* Version 1: one-line proof *) |
215 (* Version 1: one-line proof *) |
216 by (metis abs_le_D1 linorder_class.not_less order_less_le Orderings.xt1(12) abs_mult) |
216 by (metis abs_le_D1 linorder_class.not_less order_less_le Orderings.xt1(12) abs_mult) |
217 |
217 |
218 lemma "\<forall>x. 0 <= f x \<Longrightarrow> \<forall>x. f x <= c * g x \<Longrightarrow> f : O(g)" |
218 lemma "\<forall>x. 0 \<le> f x \<Longrightarrow> \<forall>x. f x \<le> c * g x \<Longrightarrow> f \<in> O(g)" |
219 apply (auto simp add: bigo_def) |
219 apply (auto simp add: bigo_def) |
220 (* Version 2: structured proof *) |
220 (* Version 2: structured proof *) |
221 proof - |
221 proof - |
222 assume "\<forall>x. f x \<le> c * g x" |
222 assume "\<forall>x. f x \<le> c * g x" |
223 thus "\<exists>c. \<forall>x. f x \<le> c * \<bar>g x\<bar>" by (metis abs_mult abs_ge_self order_trans) |
223 thus "\<exists>c. \<forall>x. f x \<le> c * \<bar>g x\<bar>" by (metis abs_mult abs_ge_self order_trans) |
224 qed |
224 qed |
225 |
225 |
226 lemma bigo_bounded: "\<forall>x. 0 <= f x \<Longrightarrow> \<forall>x. f x <= g x \<Longrightarrow> f : O(g)" |
226 lemma bigo_bounded: "\<forall>x. 0 \<le> f x \<Longrightarrow> \<forall>x. f x \<le> g x \<Longrightarrow> f \<in> O(g)" |
227 apply (erule bigo_bounded_alt [of f 1 g]) |
227 apply (erule bigo_bounded_alt [of f 1 g]) |
228 by (metis mult_1) |
228 by (metis mult_1) |
229 |
229 |
230 lemma bigo_bounded2: "\<forall>x. lb x <= f x \<Longrightarrow> \<forall>x. f x <= lb x + g x \<Longrightarrow> f : lb +o O(g)" |
230 lemma bigo_bounded2: "\<forall>x. lb x \<le> f x \<Longrightarrow> \<forall>x. f x \<le> lb x + g x \<Longrightarrow> f \<in> lb +o O(g)" |
231 apply (rule set_minus_imp_plus) |
231 apply (rule set_minus_imp_plus) |
232 apply (rule bigo_bounded) |
232 apply (rule bigo_bounded) |
233 apply (metis add_le_cancel_left diff_add_cancel diff_self minus_apply |
233 apply (metis add_le_cancel_left diff_add_cancel diff_self minus_apply |
234 algebra_simps) |
234 algebra_simps) |
235 by (metis add_le_cancel_left diff_add_cancel func_plus le_fun_def |
235 by (metis add_le_cancel_left diff_add_cancel func_plus le_fun_def |
256 lemma bigo_abs4: "f =o g +o O(h) \<Longrightarrow> (\<lambda>x. \<bar>f x\<bar>) =o (\<lambda>x. \<bar>g x\<bar>) +o O(h)" |
256 lemma bigo_abs4: "f =o g +o O(h) \<Longrightarrow> (\<lambda>x. \<bar>f x\<bar>) =o (\<lambda>x. \<bar>g x\<bar>) +o O(h)" |
257 apply (drule set_plus_imp_minus) |
257 apply (drule set_plus_imp_minus) |
258 apply (rule set_minus_imp_plus) |
258 apply (rule set_minus_imp_plus) |
259 apply (subst fun_diff_def) |
259 apply (subst fun_diff_def) |
260 proof - |
260 proof - |
261 assume a: "f - g : O(h)" |
261 assume a: "f - g \<in> O(h)" |
262 have "(\<lambda>x. \<bar>f x\<bar> - \<bar>g x\<bar>) =o O(\<lambda>x. \<bar>\<bar>f x\<bar> - \<bar>g x\<bar>\<bar>)" |
262 have "(\<lambda>x. \<bar>f x\<bar> - \<bar>g x\<bar>) =o O(\<lambda>x. \<bar>\<bar>f x\<bar> - \<bar>g x\<bar>\<bar>)" |
263 by (rule bigo_abs2) |
263 by (rule bigo_abs2) |
264 also have "... <= O(\<lambda>x. \<bar>f x - g x\<bar>)" |
264 also have "\<dots> <= O(\<lambda>x. \<bar>f x - g x\<bar>)" |
265 apply (rule bigo_elt_subset) |
265 apply (rule bigo_elt_subset) |
266 apply (rule bigo_bounded) |
266 apply (rule bigo_bounded) |
267 apply (metis abs_ge_zero) |
267 apply (metis abs_ge_zero) |
268 by (metis abs_triangle_ineq3) |
268 by (metis abs_triangle_ineq3) |
269 also have "... <= O(f - g)" |
269 also have "\<dots> <= O(f - g)" |
270 apply (rule bigo_elt_subset) |
270 apply (rule bigo_elt_subset) |
271 apply (subst fun_diff_def) |
271 apply (subst fun_diff_def) |
272 apply (rule bigo_abs) |
272 apply (rule bigo_abs) |
273 done |
273 done |
274 also have "... <= O(h)" |
274 also have "\<dots> <= O(h)" |
275 using a by (rule bigo_elt_subset) |
275 using a by (rule bigo_elt_subset) |
276 finally show "(\<lambda>x. \<bar>f x\<bar> - \<bar>g x\<bar>) : O(h)" . |
276 finally show "(\<lambda>x. \<bar>f x\<bar> - \<bar>g x\<bar>) \<in> O(h)" . |
277 qed |
277 qed |
278 |
278 |
279 lemma bigo_abs5: "f =o O(g) \<Longrightarrow> (\<lambda>x. \<bar>f x\<bar>) =o O(g)" |
279 lemma bigo_abs5: "f =o O(g) \<Longrightarrow> (\<lambda>x. \<bar>f x\<bar>) =o O(g)" |
280 by (unfold bigo_def, auto) |
280 by (unfold bigo_def, auto) |
281 |
281 |
282 lemma bigo_elt_subset2 [intro]: "f : g +o O(h) \<Longrightarrow> O(f) <= O(g) + O(h)" |
282 lemma bigo_elt_subset2 [intro]: "f \<in> g +o O(h) \<Longrightarrow> O(f) \<le> O(g) + O(h)" |
283 proof - |
283 proof - |
284 assume "f : g +o O(h)" |
284 assume "f \<in> g +o O(h)" |
285 also have "... <= O(g) + O(h)" |
285 also have "\<dots> \<le> O(g) + O(h)" |
286 by (auto del: subsetI) |
286 by (auto del: subsetI) |
287 also have "... = O(\<lambda>x. \<bar>g x\<bar>) + O(\<lambda>x. \<bar>h x\<bar>)" |
287 also have "\<dots> = O(\<lambda>x. \<bar>g x\<bar>) + O(\<lambda>x. \<bar>h x\<bar>)" |
288 by (metis bigo_abs3) |
288 by (metis bigo_abs3) |
289 also have "... = O((\<lambda>x. \<bar>g x\<bar>) + (\<lambda>x. \<bar>h x\<bar>))" |
289 also have "... = O((\<lambda>x. \<bar>g x\<bar>) + (\<lambda>x. \<bar>h x\<bar>))" |
290 by (rule bigo_plus_eq [symmetric], auto) |
290 by (rule bigo_plus_eq [symmetric], auto) |
291 finally have "f : ...". |
291 finally have "f \<in> \<dots>". |
292 then have "O(f) <= ..." |
292 then have "O(f) \<le> \<dots>" |
293 by (elim bigo_elt_subset) |
293 by (elim bigo_elt_subset) |
294 also have "... = O(\<lambda>x. \<bar>g x\<bar>) + O(\<lambda>x. \<bar>h x\<bar>)" |
294 also have "\<dots> = O(\<lambda>x. \<bar>g x\<bar>) + O(\<lambda>x. \<bar>h x\<bar>)" |
295 by (rule bigo_plus_eq, auto) |
295 by (rule bigo_plus_eq, auto) |
296 finally show ?thesis |
296 finally show ?thesis |
297 by (simp add: bigo_abs3 [symmetric]) |
297 by (simp add: bigo_abs3 [symmetric]) |
298 qed |
298 qed |
299 |
299 |
311 by (metis mult.assoc mult.left_commute abs_of_pos mult.left_commute abs_mult) |
311 by (metis mult.assoc mult.left_commute abs_of_pos mult.left_commute abs_mult) |
312 |
312 |
313 lemma bigo_mult2 [intro]: "f *o O(g) <= O(f * g)" |
313 lemma bigo_mult2 [intro]: "f *o O(g) <= O(f * g)" |
314 by (metis bigo_mult bigo_refl set_times_mono3 subset_trans) |
314 by (metis bigo_mult bigo_refl set_times_mono3 subset_trans) |
315 |
315 |
316 lemma bigo_mult3: "f : O(h) \<Longrightarrow> g : O(j) \<Longrightarrow> f * g : O(h * j)" |
316 lemma bigo_mult3: "f \<in> O(h) \<Longrightarrow> g \<in> O(j) \<Longrightarrow> f * g \<in> O(h * j)" |
317 by (metis bigo_mult set_rev_mp set_times_intro) |
317 by (metis bigo_mult set_rev_mp set_times_intro) |
318 |
318 |
319 lemma bigo_mult4 [intro]:"f : k +o O(h) \<Longrightarrow> g * f : (g * k) +o O(g * h)" |
319 lemma bigo_mult4 [intro]:"f \<in> k +o O(h) \<Longrightarrow> g * f \<in> (g * k) +o O(g * h)" |
320 by (metis bigo_mult2 set_plus_mono_b set_times_intro2 set_times_plus_distrib) |
320 by (metis bigo_mult2 set_plus_mono_b set_times_intro2 set_times_plus_distrib) |
321 |
321 |
322 lemma bigo_mult5: "\<forall>x. f x ~= 0 \<Longrightarrow> |
322 lemma bigo_mult5: "\<forall>x. f x ~= 0 \<Longrightarrow> |
323 O(f * g) <= (f::'a => ('b::linordered_field)) *o O(g)" |
323 O(f * g) <= (f::'a => ('b::linordered_field)) *o O(g)" |
324 proof - |
324 proof - |
325 assume a: "\<forall>x. f x ~= 0" |
325 assume a: "\<forall>x. f x \<noteq> 0" |
326 show "O(f * g) <= f *o O(g)" |
326 show "O(f * g) <= f *o O(g)" |
327 proof |
327 proof |
328 fix h |
328 fix h |
329 assume h: "h : O(f * g)" |
329 assume h: "h \<in> O(f * g)" |
330 then have "(\<lambda>x. 1 / (f x)) * h : (\<lambda>x. 1 / f x) *o O(f * g)" |
330 then have "(\<lambda>x. 1 / (f x)) * h \<in> (\<lambda>x. 1 / f x) *o O(f * g)" |
331 by auto |
331 by auto |
332 also have "... <= O((\<lambda>x. 1 / f x) * (f * g))" |
332 also have "... <= O((\<lambda>x. 1 / f x) * (f * g))" |
333 by (rule bigo_mult2) |
333 by (rule bigo_mult2) |
334 also have "(\<lambda>x. 1 / f x) * (f * g) = g" |
334 also have "(\<lambda>x. 1 / f x) * (f * g) = g" |
335 by (simp add: fun_eq_iff a) |
335 by (simp add: fun_eq_iff a) |
336 finally have "(\<lambda>x. (1::'b) / f x) * h : O(g)". |
336 finally have "(\<lambda>x. (1::'b) / f x) * h \<in> O(g)". |
337 then have "f * ((\<lambda>x. (1::'b) / f x) * h) : f *o O(g)" |
337 then have "f * ((\<lambda>x. (1::'b) / f x) * h) \<in> f *o O(g)" |
338 by auto |
338 by auto |
339 also have "f * ((\<lambda>x. (1::'b) / f x) * h) = h" |
339 also have "f * ((\<lambda>x. (1::'b) / f x) * h) = h" |
340 by (simp add: func_times fun_eq_iff a) |
340 by (simp add: func_times fun_eq_iff a) |
341 finally show "h : f *o O(g)". |
341 finally show "h \<in> f *o O(g)". |
342 qed |
342 qed |
343 qed |
343 qed |
344 |
344 |
345 lemma bigo_mult6: |
345 lemma bigo_mult6: |
346 "\<forall>x. f x \<noteq> 0 \<Longrightarrow> O(f * g) = (f::'a \<Rightarrow> ('b::linordered_field)) *o O(g)" |
346 "\<forall>x. f x \<noteq> 0 \<Longrightarrow> O(f * g) = (f::'a \<Rightarrow> ('b::linordered_field)) *o O(g)" |
358 |
358 |
359 lemma bigo_mult8: |
359 lemma bigo_mult8: |
360 "\<forall>x. f x \<noteq> 0 \<Longrightarrow> O(f * g) = O(f::'a \<Rightarrow> ('b::linordered_field)) * O(g)" |
360 "\<forall>x. f x \<noteq> 0 \<Longrightarrow> O(f * g) = O(f::'a \<Rightarrow> ('b::linordered_field)) * O(g)" |
361 by (metis bigo_mult bigo_mult7 order_antisym_conv) |
361 by (metis bigo_mult bigo_mult7 order_antisym_conv) |
362 |
362 |
363 lemma bigo_minus [intro]: "f : O(g) \<Longrightarrow> - f : O(g)" |
363 lemma bigo_minus [intro]: "f \<in> O(g) \<Longrightarrow> - f \<in> O(g)" |
364 by (auto simp add: bigo_def fun_Compl_def) |
364 by (auto simp add: bigo_def fun_Compl_def) |
365 |
365 |
366 lemma bigo_minus2: "f : g +o O(h) \<Longrightarrow> -f : -g +o O(h)" |
366 lemma bigo_minus2: "f \<in> g +o O(h) \<Longrightarrow> -f \<in> -g +o O(h)" |
367 by (metis (no_types, lifting) bigo_minus diff_minus_eq_add minus_add_distrib |
367 by (metis (no_types, lifting) bigo_minus diff_minus_eq_add minus_add_distrib |
368 minus_minus set_minus_imp_plus set_plus_imp_minus) |
368 minus_minus set_minus_imp_plus set_plus_imp_minus) |
369 |
369 |
370 lemma bigo_minus3: "O(-f) = O(f)" |
370 lemma bigo_minus3: "O(-f) = O(f)" |
371 by (metis bigo_elt_subset bigo_minus bigo_refl equalityI minus_minus) |
371 by (metis bigo_elt_subset bigo_minus bigo_refl equalityI minus_minus) |
372 |
372 |
373 lemma bigo_plus_absorb_lemma1: "f : O(g) \<Longrightarrow> f +o O(g) \<le> O(g)" |
373 lemma bigo_plus_absorb_lemma1: "f \<in> O(g) \<Longrightarrow> f +o O(g) \<le> O(g)" |
374 by (metis bigo_plus_idemp set_plus_mono3) |
374 by (metis bigo_plus_idemp set_plus_mono3) |
375 |
375 |
376 lemma bigo_plus_absorb_lemma2: "f : O(g) \<Longrightarrow> O(g) \<le> f +o O(g)" |
376 lemma bigo_plus_absorb_lemma2: "f \<in> O(g) \<Longrightarrow> O(g) \<le> f +o O(g)" |
377 by (metis (no_types) bigo_minus bigo_plus_absorb_lemma1 right_minus |
377 by (metis (no_types) bigo_minus bigo_plus_absorb_lemma1 right_minus |
378 set_plus_mono set_plus_rearrange2 set_zero_plus subsetD subset_refl |
378 set_plus_mono set_plus_rearrange2 set_zero_plus subsetD subset_refl |
379 subset_trans) |
379 subset_trans) |
380 |
380 |
381 lemma bigo_plus_absorb [simp]: "f : O(g) \<Longrightarrow> f +o O(g) = O(g)" |
381 lemma bigo_plus_absorb [simp]: "f \<in> O(g) \<Longrightarrow> f +o O(g) = O(g)" |
382 by (metis bigo_plus_absorb_lemma1 bigo_plus_absorb_lemma2 order_eq_iff) |
382 by (metis bigo_plus_absorb_lemma1 bigo_plus_absorb_lemma2 order_eq_iff) |
383 |
383 |
384 lemma bigo_plus_absorb2 [intro]: "f : O(g) \<Longrightarrow> A <= O(g) \<Longrightarrow> f +o A \<le> O(g)" |
384 lemma bigo_plus_absorb2 [intro]: "f \<in> O(g) \<Longrightarrow> A \<subseteq> O(g) \<Longrightarrow> f +o A \<subseteq> O(g)" |
385 by (metis bigo_plus_absorb set_plus_mono) |
385 by (metis bigo_plus_absorb set_plus_mono) |
386 |
386 |
387 lemma bigo_add_commute_imp: "f : g +o O(h) \<Longrightarrow> g : f +o O(h)" |
387 lemma bigo_add_commute_imp: "f \<in> g +o O(h) \<Longrightarrow> g \<in> f +o O(h)" |
388 by (metis bigo_minus minus_diff_eq set_plus_imp_minus set_minus_plus) |
388 by (metis bigo_minus minus_diff_eq set_plus_imp_minus set_minus_plus) |
389 |
389 |
390 lemma bigo_add_commute: "(f : g +o O(h)) = (g : f +o O(h))" |
390 lemma bigo_add_commute: "(f \<in> g +o O(h)) = (g \<in> f +o O(h))" |
391 by (metis bigo_add_commute_imp) |
391 by (metis bigo_add_commute_imp) |
392 |
392 |
393 lemma bigo_const1: "(\<lambda>x. c) : O(\<lambda>x. 1)" |
393 lemma bigo_const1: "(\<lambda>x. c) \<in> O(\<lambda>x. 1)" |
394 by (auto simp add: bigo_def ac_simps) |
394 by (auto simp add: bigo_def ac_simps) |
395 |
395 |
396 lemma bigo_const2 [intro]: "O(\<lambda>x. c) \<le> O(\<lambda>x. 1)" |
396 lemma bigo_const2 [intro]: "O(\<lambda>x. c) \<le> O(\<lambda>x. 1)" |
397 by (metis bigo_const1 bigo_elt_subset) |
397 by (metis bigo_const1 bigo_elt_subset) |
398 |
398 |
399 lemma bigo_const3: "(c::'a::linordered_field) ~= 0 \<Longrightarrow> (\<lambda>x. 1) : O(\<lambda>x. c)" |
399 lemma bigo_const3: "(c::'a::linordered_field) \<noteq> 0 \<Longrightarrow> (\<lambda>x. 1) \<in> O(\<lambda>x. c)" |
400 apply (simp add: bigo_def) |
400 apply (simp add: bigo_def) |
401 by (metis abs_eq_0 left_inverse order_refl) |
401 by (metis abs_eq_0 left_inverse order_refl) |
402 |
402 |
403 lemma bigo_const4: "(c::'a::linordered_field) ~= 0 \<Longrightarrow> O(\<lambda>x. 1) <= O(\<lambda>x. c)" |
403 lemma bigo_const4: "(c::'a::linordered_field) \<noteq> 0 \<Longrightarrow> O(\<lambda>x. 1) \<subseteq> O(\<lambda>x. c)" |
404 by (metis bigo_elt_subset bigo_const3) |
404 by (metis bigo_elt_subset bigo_const3) |
405 |
405 |
406 lemma bigo_const [simp]: "(c::'a::linordered_field) ~= 0 \<Longrightarrow> |
406 lemma bigo_const [simp]: "(c::'a::linordered_field) ~= 0 \<Longrightarrow> |
407 O(\<lambda>x. c) = O(\<lambda>x. 1)" |
407 O(\<lambda>x. c) = O(\<lambda>x. 1)" |
408 by (metis bigo_const2 bigo_const4 equalityI) |
408 by (metis bigo_const2 bigo_const4 equalityI) |
409 |
409 |
410 lemma bigo_const_mult1: "(\<lambda>x. c * f x) : O(f)" |
410 lemma bigo_const_mult1: "(\<lambda>x. c * f x) \<in> O(f)" |
411 apply (simp add: bigo_def abs_mult) |
411 apply (simp add: bigo_def abs_mult) |
412 by (metis le_less) |
412 by (metis le_less) |
413 |
413 |
414 lemma bigo_const_mult2: "O(\<lambda>x. c * f x) \<le> O(f)" |
414 lemma bigo_const_mult2: "O(\<lambda>x. c * f x) \<le> O(f)" |
415 by (rule bigo_elt_subset, rule bigo_const_mult1) |
415 by (rule bigo_elt_subset, rule bigo_const_mult1) |
416 |
416 |
417 lemma bigo_const_mult3: "(c::'a::linordered_field) ~= 0 \<Longrightarrow> f : O(\<lambda>x. c * f x)" |
417 lemma bigo_const_mult3: "(c::'a::linordered_field) \<noteq> 0 \<Longrightarrow> f \<in> O(\<lambda>x. c * f x)" |
418 apply (simp add: bigo_def) |
418 apply (simp add: bigo_def) |
419 by (metis (no_types) abs_mult mult.assoc mult_1 order_refl left_inverse) |
419 by (metis (no_types) abs_mult mult.assoc mult_1 order_refl left_inverse) |
420 |
420 |
421 lemma bigo_const_mult4: |
421 lemma bigo_const_mult4: |
422 "(c::'a::linordered_field) \<noteq> 0 \<Longrightarrow> O(f) \<le> O(\<lambda>x. c * f x)" |
422 "(c::'a::linordered_field) \<noteq> 0 \<Longrightarrow> O(f) \<le> O(\<lambda>x. c * f x)" |
423 by (metis bigo_elt_subset bigo_const_mult3) |
423 by (metis bigo_elt_subset bigo_const_mult3) |
424 |
424 |
425 lemma bigo_const_mult [simp]: "(c::'a::linordered_field) ~= 0 \<Longrightarrow> |
425 lemma bigo_const_mult [simp]: "(c::'a::linordered_field) \<noteq> 0 \<Longrightarrow> |
426 O(\<lambda>x. c * f x) = O(f)" |
426 O(\<lambda>x. c * f x) = O(f)" |
427 by (metis equalityI bigo_const_mult2 bigo_const_mult4) |
427 by (metis equalityI bigo_const_mult2 bigo_const_mult4) |
428 |
428 |
429 lemma bigo_const_mult5 [simp]: "(c::'a::linordered_field) ~= 0 \<Longrightarrow> |
429 lemma bigo_const_mult5 [simp]: "(c::'a::linordered_field) \<noteq> 0 \<Longrightarrow> |
430 (\<lambda>x. c) *o O(f) = O(f)" |
430 (\<lambda>x. c) *o O(f) = O(f)" |
431 apply (auto del: subsetI) |
431 apply (auto del: subsetI) |
432 apply (rule order_trans) |
432 apply (rule order_trans) |
433 apply (rule bigo_mult2) |
433 apply (rule bigo_mult2) |
434 apply (simp add: func_times) |
434 apply (simp add: func_times) |