390 lemma bigo_mult6: "\<forall>x. f x ~= 0 \<Longrightarrow> |
390 lemma bigo_mult6: "\<forall>x. f x ~= 0 \<Longrightarrow> |
391 O(f * g) = (f\<Colon>'a => ('b\<Colon>{linordered_field,number_ring})) *o O(g)" |
391 O(f * g) = (f\<Colon>'a => ('b\<Colon>{linordered_field,number_ring})) *o O(g)" |
392 by (metis bigo_mult2 bigo_mult5 order_antisym) |
392 by (metis bigo_mult2 bigo_mult5 order_antisym) |
393 |
393 |
394 (*proof requires relaxing relevance: 2007-01-25*) |
394 (*proof requires relaxing relevance: 2007-01-25*) |
395 declare bigo_mult6 [simp] |
395 declare bigo_mult6 [simp] |
|
396 |
396 lemma bigo_mult7: "\<forall>x. f x ~= 0 \<Longrightarrow> |
397 lemma bigo_mult7: "\<forall>x. f x ~= 0 \<Longrightarrow> |
397 O(f * g) <= O(f\<Colon>'a => ('b\<Colon>{linordered_field,number_ring})) \<otimes> O(g)" |
398 O(f * g) <= O(f\<Colon>'a => ('b\<Colon>{linordered_field,number_ring})) \<otimes> O(g)" |
398 (* sledgehammer *) |
399 (* sledgehammer *) |
399 apply (subst bigo_mult6) |
400 apply (subst bigo_mult6) |
400 apply assumption |
401 apply assumption |
798 (* sledgehammer *) |
799 (* sledgehammer *) |
799 apply (case_tac "0 <= f x - k x") |
800 apply (case_tac "0 <= f x - k x") |
800 apply simp |
801 apply simp |
801 apply (subst abs_of_nonneg) |
802 apply (subst abs_of_nonneg) |
802 apply (drule_tac x = x in spec) back |
803 apply (drule_tac x = x in spec) back |
803 apply (metis diff_less_0_iff_less linorder_not_le not_leE uminus_add_conv_diff xt1(12) xt1(6)) |
804 apply (metis diff_less_0_iff_less linorder_not_le not_leE xt1(12) xt1(6)) |
804 apply (metis add_minus_cancel diff_le_eq le_diff_eq uminus_add_conv_diff) |
805 apply (metis add_minus_cancel diff_le_eq le_diff_eq uminus_add_conv_diff) |
805 apply (metis abs_ge_zero linorder_linear min_max.sup_absorb1 min_max.sup_commute) |
806 apply (metis abs_ge_zero linorder_linear min_max.sup_absorb1 min_max.sup_commute) |
806 done |
807 done |
807 |
808 |
808 lemma bigo_lesso4: "f <o g =o O(k\<Colon>'a=>'b\<Colon>{linordered_field,number_ring}) \<Longrightarrow> |
809 lemma bigo_lesso4: |
809 g =o h +o O(k) \<Longrightarrow> f <o h =o O(k)" |
810 "f <o g =o O(k\<Colon>'a=>'b\<Colon>{linordered_field,number_ring}) \<Longrightarrow> |
810 apply (unfold lesso_def) |
811 g =o h +o O(k) \<Longrightarrow> f <o h =o O(k)" |
811 apply (drule set_plus_imp_minus) |
812 apply (unfold lesso_def) |
812 apply (drule bigo_abs5) back |
813 apply (drule set_plus_imp_minus) |
813 apply (simp add: fun_diff_def) |
814 apply (drule bigo_abs5) back |
814 apply (drule bigo_useful_add) |
815 apply (simp add: fun_diff_def) |
815 apply assumption |
816 apply (drule bigo_useful_add, assumption) |
816 apply (erule bigo_lesseq2) back |
817 apply (erule bigo_lesseq2) back |
817 apply (rule allI) |
818 apply (rule allI) |
818 apply (auto simp add: func_plus fun_diff_def algebra_simps |
819 by (auto simp add: func_plus fun_diff_def algebra_simps |
819 split: split_max abs_split) |
820 split: split_max abs_split) |
820 done |
821 |
821 |
822 lemma bigo_lesso5: "f <o g =o O(h) \<Longrightarrow> \<exists>C. \<forall>x. f x <= g x + C * abs (h x)" |
822 lemma bigo_lesso5: "f <o g =o O(h) \<Longrightarrow> \<exists>C. \<forall>x. f x <= g x + C * abs(h x)" |
823 apply (simp only: lesso_def bigo_alt_def) |
823 apply (simp only: lesso_def bigo_alt_def) |
824 apply clarsimp |
824 apply clarsimp |
825 by (metis abs_if abs_mult add_commute diff_le_eq less_not_permute) |
825 apply (metis abs_if abs_mult add_commute diff_le_eq less_not_permute) |
|
826 done |
|
827 |
826 |
828 end |
827 end |