| author | wenzelm | 
| Fri, 27 Sep 2024 22:44:30 +0200 | |
| changeset 80982 | 7638776e0977 | 
| parent 80653 | b98f1057da0e | 
| child 81107 | ad5fc948e053 | 
| permissions | -rw-r--r-- | 
| 68246 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1 | (* | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2 | File: Landau_Symbols_Definition.thy | 
| 74543 | 3 | Author: Manuel Eberl <manuel@pruvisto.org> | 
| 68246 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 4 | |
| 74324 | 5 | Landau symbols for reasoning about the asymptotic growth of functions. | 
| 68246 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 6 | *) | 
| 69272 | 7 | section \<open>Definition of Landau symbols\<close> | 
| 68246 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 8 | |
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 9 | theory Landau_Symbols | 
| 74324 | 10 | imports | 
| 68246 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 11 | Complex_Main | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 12 | begin | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 13 | |
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 14 | lemma eventually_subst': | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 15 | "eventually (\<lambda>x. f x = g x) F \<Longrightarrow> eventually (\<lambda>x. P x (f x)) F = eventually (\<lambda>x. P x (g x)) F" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 16 | by (rule eventually_subst, erule eventually_rev_mp) simp | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 17 | |
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 18 | |
| 69272 | 19 | subsection \<open>Definition of Landau symbols\<close> | 
| 68246 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 20 | |
| 69272 | 21 | text \<open> | 
| 74324 | 22 | Our Landau symbols are sign-oblivious, i.e. any function always has the same growth | 
| 23 | as its absolute. This has the advantage of making some cancelling rules for sums nicer, but | |
| 68246 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 24 | introduces some problems in other places. Nevertheless, we found this definition more convenient | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 25 | to work with. | 
| 69272 | 26 | \<close> | 
| 68246 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 27 | |
| 74324 | 28 | definition bigo :: "'a filter \<Rightarrow> ('a \<Rightarrow> ('b :: real_normed_field)) \<Rightarrow> ('a \<Rightarrow> 'b) set"
 | 
| 69597 | 29 | (\<open>(1O[_]'(_'))\<close>) | 
| 74324 | 30 |   where "bigo F g = {f. (\<exists>c>0. eventually (\<lambda>x. norm (f x) \<le> c * norm (g x)) F)}"
 | 
| 68246 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 31 | |
| 74324 | 32 | definition smallo :: "'a filter \<Rightarrow> ('a \<Rightarrow> ('b :: real_normed_field)) \<Rightarrow> ('a \<Rightarrow> 'b) set"
 | 
| 69597 | 33 | (\<open>(1o[_]'(_'))\<close>) | 
| 68246 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 34 |   where "smallo F g = {f. (\<forall>c>0. eventually (\<lambda>x. norm (f x) \<le> c * norm (g x)) F)}"
 | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 35 | |
| 74324 | 36 | definition bigomega :: "'a filter \<Rightarrow> ('a \<Rightarrow> ('b :: real_normed_field)) \<Rightarrow> ('a \<Rightarrow> 'b) set"
 | 
| 69597 | 37 | (\<open>(1\<Omega>[_]'(_'))\<close>) | 
| 74324 | 38 |   where "bigomega F g = {f. (\<exists>c>0. eventually (\<lambda>x. norm (f x) \<ge> c * norm (g x)) F)}"
 | 
| 68246 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 39 | |
| 74324 | 40 | definition smallomega :: "'a filter \<Rightarrow> ('a \<Rightarrow> ('b :: real_normed_field)) \<Rightarrow> ('a \<Rightarrow> 'b) set"
 | 
| 69597 | 41 | (\<open>(1\<omega>[_]'(_'))\<close>) | 
| 68246 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 42 |   where "smallomega F g = {f. (\<forall>c>0. eventually (\<lambda>x. norm (f x) \<ge> c * norm (g x)) F)}"
 | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 43 | |
| 74324 | 44 | definition bigtheta :: "'a filter \<Rightarrow> ('a \<Rightarrow> ('b :: real_normed_field)) \<Rightarrow> ('a \<Rightarrow> 'b) set"
 | 
| 69597 | 45 | (\<open>(1\<Theta>[_]'(_'))\<close>) | 
| 68246 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 46 | where "bigtheta F g = bigo F g \<inter> bigomega F g" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 47 | |
| 69597 | 48 | abbreviation bigo_at_top (\<open>(2O'(_'))\<close>) where | 
| 74324 | 49 | "O(g) \<equiv> bigo at_top g" | 
| 68246 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 50 | |
| 69597 | 51 | abbreviation smallo_at_top (\<open>(2o'(_'))\<close>) where | 
| 68246 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 52 | "o(g) \<equiv> smallo at_top g" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 53 | |
| 69597 | 54 | abbreviation bigomega_at_top (\<open>(2\<Omega>'(_'))\<close>) where | 
| 68246 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 55 | "\<Omega>(g) \<equiv> bigomega at_top g" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 56 | |
| 69597 | 57 | abbreviation smallomega_at_top (\<open>(2\<omega>'(_'))\<close>) where | 
| 68246 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 58 | "\<omega>(g) \<equiv> smallomega at_top g" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 59 | |
| 69597 | 60 | abbreviation bigtheta_at_top (\<open>(2\<Theta>'(_'))\<close>) where | 
| 68246 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 61 | "\<Theta>(g) \<equiv> bigtheta at_top g" | 
| 74324 | 62 | |
| 68246 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 63 | |
| 69272 | 64 | text \<open>The following is a set of properties that all Landau symbols satisfy.\<close> | 
| 68246 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 65 | |
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 66 | named_theorems landau_divide_simps | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 67 | |
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 68 | locale landau_symbol = | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 69 |   fixes L  :: "'a filter \<Rightarrow> ('a \<Rightarrow> ('b :: real_normed_field)) \<Rightarrow> ('a \<Rightarrow> 'b) set"
 | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 70 |   and   L'  :: "'c filter \<Rightarrow> ('c \<Rightarrow> ('b :: real_normed_field)) \<Rightarrow> ('c \<Rightarrow> 'b) set"
 | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 71 |   and   Lr  :: "'a filter \<Rightarrow> ('a \<Rightarrow> real) \<Rightarrow> ('a \<Rightarrow> real) set"
 | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 72 | assumes bot': "L bot f = UNIV" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 73 | assumes filter_mono': "F1 \<le> F2 \<Longrightarrow> L F2 f \<subseteq> L F1 f" | 
| 74324 | 74 | assumes in_filtermap_iff: | 
| 68246 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 75 | "f' \<in> L (filtermap h' F') g' \<longleftrightarrow> (\<lambda>x. f' (h' x)) \<in> L' F' (\<lambda>x. g' (h' x))" | 
| 74324 | 76 | assumes filtercomap: | 
| 68246 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 77 | "f' \<in> L F'' g' \<Longrightarrow> (\<lambda>x. f' (h' x)) \<in> L' (filtercomap h' F'') (\<lambda>x. g' (h' x))" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 78 | assumes sup: "f \<in> L F1 g \<Longrightarrow> f \<in> L F2 g \<Longrightarrow> f \<in> L (sup F1 F2) g" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 79 | assumes in_cong: "eventually (\<lambda>x. f x = g x) F \<Longrightarrow> f \<in> L F (h) \<longleftrightarrow> g \<in> L F (h)" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 80 | assumes cong: "eventually (\<lambda>x. f x = g x) F \<Longrightarrow> L F (f) = L F (g)" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 81 | assumes cong_bigtheta: "f \<in> \<Theta>[F](g) \<Longrightarrow> L F (f) = L F (g)" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 82 | assumes in_cong_bigtheta: "f \<in> \<Theta>[F](g) \<Longrightarrow> f \<in> L F (h) \<longleftrightarrow> g \<in> L F (h)" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 83 | assumes cmult [simp]: "c \<noteq> 0 \<Longrightarrow> L F (\<lambda>x. c * f x) = L F (f)" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 84 | assumes cmult_in_iff [simp]: "c \<noteq> 0 \<Longrightarrow> (\<lambda>x. c * f x) \<in> L F (g) \<longleftrightarrow> f \<in> L F (g)" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 85 | assumes mult_left [simp]: "f \<in> L F (g) \<Longrightarrow> (\<lambda>x. h x * f x) \<in> L F (\<lambda>x. h x * g x)" | 
| 74324 | 86 | assumes inverse: "eventually (\<lambda>x. f x \<noteq> 0) F \<Longrightarrow> eventually (\<lambda>x. g x \<noteq> 0) F \<Longrightarrow> | 
| 68246 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 87 | f \<in> L F (g) \<Longrightarrow> (\<lambda>x. inverse (g x)) \<in> L F (\<lambda>x. inverse (f x))" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 88 | assumes subsetI: "f \<in> L F (g) \<Longrightarrow> L F (f) \<subseteq> L F (g)" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 89 | assumes plus_subset1: "f \<in> o[F](g) \<Longrightarrow> L F (g) \<subseteq> L F (\<lambda>x. f x + g x)" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 90 | assumes trans: "f \<in> L F (g) \<Longrightarrow> g \<in> L F (h) \<Longrightarrow> f \<in> L F (h)" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 91 | assumes compose: "f \<in> L F (g) \<Longrightarrow> filterlim h' F G \<Longrightarrow> (\<lambda>x. f (h' x)) \<in> L' G (\<lambda>x. g (h' x))" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 92 | assumes norm_iff [simp]: "(\<lambda>x. norm (f x)) \<in> Lr F (\<lambda>x. norm (g x)) \<longleftrightarrow> f \<in> L F (g)" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 93 | assumes abs [simp]: "Lr Fr (\<lambda>x. \<bar>fr x\<bar>) = Lr Fr fr" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 94 | assumes abs_in_iff [simp]: "(\<lambda>x. \<bar>fr x\<bar>) \<in> Lr Fr gr \<longleftrightarrow> fr \<in> Lr Fr gr" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 95 | begin | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 96 | |
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 97 | lemma bot [simp]: "f \<in> L bot g" by (simp add: bot') | 
| 74324 | 98 | |
| 68246 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 99 | lemma filter_mono: "F1 \<le> F2 \<Longrightarrow> f \<in> L F2 g \<Longrightarrow> f \<in> L F1 g" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 100 | using filter_mono'[of F1 F2] by blast | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 101 | |
| 74324 | 102 | lemma cong_ex: | 
| 68246 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 103 | "eventually (\<lambda>x. f1 x = f2 x) F \<Longrightarrow> eventually (\<lambda>x. g1 x = g2 x) F \<Longrightarrow> | 
| 74324 | 104 | f1 \<in> L F (g1) \<longleftrightarrow> f2 \<in> L F (g2)" | 
| 68246 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 105 | by (subst cong, assumption, subst in_cong, assumption, rule refl) | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 106 | |
| 74324 | 107 | lemma cong_ex_bigtheta: | 
| 108 | "f1 \<in> \<Theta>[F](f2) \<Longrightarrow> g1 \<in> \<Theta>[F](g2) \<Longrightarrow> f1 \<in> L F (g1) \<longleftrightarrow> f2 \<in> L F (g2)" | |
| 68246 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 109 | by (subst cong_bigtheta, assumption, subst in_cong_bigtheta, assumption, rule refl) | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 110 | |
| 74324 | 111 | lemma bigtheta_trans1: | 
| 68246 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 112 | "f \<in> L F (g) \<Longrightarrow> g \<in> \<Theta>[F](h) \<Longrightarrow> f \<in> L F (h)" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 113 | by (subst cong_bigtheta[symmetric]) | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 114 | |
| 74324 | 115 | lemma bigtheta_trans2: | 
| 68246 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 116 | "f \<in> \<Theta>[F](g) \<Longrightarrow> g \<in> L F (h) \<Longrightarrow> f \<in> L F (h)" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 117 | by (subst in_cong_bigtheta) | 
| 74324 | 118 | |
| 68246 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 119 | lemma cmult' [simp]: "c \<noteq> 0 \<Longrightarrow> L F (\<lambda>x. f x * c) = L F (f)" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 120 | by (subst mult.commute) (rule cmult) | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 121 | |
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 122 | lemma cmult_in_iff' [simp]: "c \<noteq> 0 \<Longrightarrow> (\<lambda>x. f x * c) \<in> L F (g) \<longleftrightarrow> f \<in> L F (g)" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 123 | by (subst mult.commute) (rule cmult_in_iff) | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 124 | |
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 125 | lemma cdiv [simp]: "c \<noteq> 0 \<Longrightarrow> L F (\<lambda>x. f x / c) = L F (f)" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 126 | using cmult'[of "inverse c" F f] by (simp add: field_simps) | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 127 | |
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 128 | lemma cdiv_in_iff' [simp]: "c \<noteq> 0 \<Longrightarrow> (\<lambda>x. f x / c) \<in> L F (g) \<longleftrightarrow> f \<in> L F (g)" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 129 | using cmult_in_iff'[of "inverse c" f] by (simp add: field_simps) | 
| 74324 | 130 | |
| 68246 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 131 | lemma uminus [simp]: "L F (\<lambda>x. -g x) = L F (g)" using cmult[of "-1"] by simp | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 132 | |
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 133 | lemma uminus_in_iff [simp]: "(\<lambda>x. -f x) \<in> L F (g) \<longleftrightarrow> f \<in> L F (g)" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 134 | using cmult_in_iff[of "-1"] by simp | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 135 | |
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 136 | lemma const: "c \<noteq> 0 \<Longrightarrow> L F (\<lambda>_. c) = L F (\<lambda>_. 1)" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 137 | by (subst (2) cmult[symmetric]) simp_all | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 138 | |
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 139 | (* Simplifier loops without the NO_MATCH *) | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 140 | lemma const' [simp]: "NO_MATCH 1 c \<Longrightarrow> c \<noteq> 0 \<Longrightarrow> L F (\<lambda>_. c) = L F (\<lambda>_. 1)" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 141 | by (rule const) | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 142 | |
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 143 | lemma const_in_iff: "c \<noteq> 0 \<Longrightarrow> (\<lambda>_. c) \<in> L F (f) \<longleftrightarrow> (\<lambda>_. 1) \<in> L F (f)" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 144 | using cmult_in_iff'[of c "\<lambda>_. 1"] by simp | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 145 | |
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 146 | lemma const_in_iff' [simp]: "NO_MATCH 1 c \<Longrightarrow> c \<noteq> 0 \<Longrightarrow> (\<lambda>_. c) \<in> L F (f) \<longleftrightarrow> (\<lambda>_. 1) \<in> L F (f)" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 147 | by (rule const_in_iff) | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 148 | |
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 149 | lemma plus_subset2: "g \<in> o[F](f) \<Longrightarrow> L F (f) \<subseteq> L F (\<lambda>x. f x + g x)" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 150 | by (subst add.commute) (rule plus_subset1) | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 151 | |
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 152 | lemma mult_right [simp]: "f \<in> L F (g) \<Longrightarrow> (\<lambda>x. f x * h x) \<in> L F (\<lambda>x. g x * h x)" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 153 | using mult_left by (simp add: mult.commute) | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 154 | |
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 155 | lemma mult: "f1 \<in> L F (g1) \<Longrightarrow> f2 \<in> L F (g2) \<Longrightarrow> (\<lambda>x. f1 x * f2 x) \<in> L F (\<lambda>x. g1 x * g2 x)" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 156 | by (rule trans, erule mult_left, erule mult_right) | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 157 | |
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 158 | lemma inverse_cancel: | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 159 | assumes "eventually (\<lambda>x. f x \<noteq> 0) F" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 160 | assumes "eventually (\<lambda>x. g x \<noteq> 0) F" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 161 | shows "(\<lambda>x. inverse (f x)) \<in> L F (\<lambda>x. inverse (g x)) \<longleftrightarrow> g \<in> L F (f)" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 162 | proof | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 163 | assume "(\<lambda>x. inverse (f x)) \<in> L F (\<lambda>x. inverse (g x))" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 164 | from inverse[OF _ _ this] assms show "g \<in> L F (f)" by simp | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 165 | qed (intro inverse assms) | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 166 | |
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 167 | lemma divide_right: | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 168 | assumes "eventually (\<lambda>x. h x \<noteq> 0) F" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 169 | assumes "f \<in> L F (g)" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 170 | shows "(\<lambda>x. f x / h x) \<in> L F (\<lambda>x. g x / h x)" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 171 | by (subst (1 2) divide_inverse) (intro mult_right inverse assms) | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 172 | |
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 173 | lemma divide_right_iff: | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 174 | assumes "eventually (\<lambda>x. h x \<noteq> 0) F" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 175 | shows "(\<lambda>x. f x / h x) \<in> L F (\<lambda>x. g x / h x) \<longleftrightarrow> f \<in> L F (g)" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 176 | proof | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 177 | assume "(\<lambda>x. f x / h x) \<in> L F (\<lambda>x. g x / h x)" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 178 | from mult_right[OF this, of h] assms show "f \<in> L F (g)" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 179 | by (subst (asm) cong_ex[of _ f F _ g]) (auto elim!: eventually_mono) | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 180 | qed (simp add: divide_right assms) | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 181 | |
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 182 | lemma divide_left: | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 183 | assumes "eventually (\<lambda>x. f x \<noteq> 0) F" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 184 | assumes "eventually (\<lambda>x. g x \<noteq> 0) F" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 185 | assumes "g \<in> L F(f)" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 186 | shows "(\<lambda>x. h x / f x) \<in> L F (\<lambda>x. h x / g x)" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 187 | by (subst (1 2) divide_inverse) (intro mult_left inverse assms) | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 188 | |
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 189 | lemma divide_left_iff: | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 190 | assumes "eventually (\<lambda>x. f x \<noteq> 0) F" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 191 | assumes "eventually (\<lambda>x. g x \<noteq> 0) F" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 192 | assumes "eventually (\<lambda>x. h x \<noteq> 0) F" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 193 | shows "(\<lambda>x. h x / f x) \<in> L F (\<lambda>x. h x / g x) \<longleftrightarrow> g \<in> L F (f)" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 194 | proof | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 195 | assume A: "(\<lambda>x. h x / f x) \<in> L F (\<lambda>x. h x / g x)" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 196 | from assms have B: "eventually (\<lambda>x. h x / f x / h x = inverse (f x)) F" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 197 | by eventually_elim (simp add: divide_inverse) | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 198 | from assms have C: "eventually (\<lambda>x. h x / g x / h x = inverse (g x)) F" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 199 | by eventually_elim (simp add: divide_inverse) | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 200 | from divide_right[OF assms(3) A] assms show "g \<in> L F (f)" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 201 | by (subst (asm) cong_ex[OF B C]) (simp add: inverse_cancel) | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 202 | qed (simp add: divide_left assms) | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 203 | |
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 204 | lemma divide: | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 205 | assumes "eventually (\<lambda>x. g1 x \<noteq> 0) F" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 206 | assumes "eventually (\<lambda>x. g2 x \<noteq> 0) F" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 207 | assumes "f1 \<in> L F (f2)" "g2 \<in> L F (g1)" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 208 | shows "(\<lambda>x. f1 x / g1 x) \<in> L F (\<lambda>x. f2 x / g2 x)" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 209 | by (subst (1 2) divide_inverse) (intro mult inverse assms) | 
| 74324 | 210 | |
| 68246 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 211 | lemma divide_eq1: | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 212 | assumes "eventually (\<lambda>x. h x \<noteq> 0) F" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 213 | shows "f \<in> L F (\<lambda>x. g x / h x) \<longleftrightarrow> (\<lambda>x. f x * h x) \<in> L F (g)" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 214 | proof- | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 215 | have "f \<in> L F (\<lambda>x. g x / h x) \<longleftrightarrow> (\<lambda>x. f x * h x / h x) \<in> L F (\<lambda>x. g x / h x)" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 216 | using assms by (intro in_cong) (auto elim: eventually_mono) | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 217 | thus ?thesis by (simp only: divide_right_iff assms) | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 218 | qed | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 219 | |
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 220 | lemma divide_eq2: | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 221 | assumes "eventually (\<lambda>x. h x \<noteq> 0) F" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 222 | shows "(\<lambda>x. f x / h x) \<in> L F (\<lambda>x. g x) \<longleftrightarrow> f \<in> L F (\<lambda>x. g x * h x)" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 223 | proof- | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 224 | have "L F (\<lambda>x. g x) = L F (\<lambda>x. g x * h x / h x)" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 225 | using assms by (intro cong) (auto elim: eventually_mono) | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 226 | thus ?thesis by (simp only: divide_right_iff assms) | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 227 | qed | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 228 | |
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 229 | lemma inverse_eq1: | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 230 | assumes "eventually (\<lambda>x. g x \<noteq> 0) F" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 231 | shows "f \<in> L F (\<lambda>x. inverse (g x)) \<longleftrightarrow> (\<lambda>x. f x * g x) \<in> L F (\<lambda>_. 1)" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 232 | using divide_eq1[of g F f "\<lambda>_. 1"] by (simp add: divide_inverse assms) | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 233 | |
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 234 | lemma inverse_eq2: | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 235 | assumes "eventually (\<lambda>x. f x \<noteq> 0) F" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 236 | shows "(\<lambda>x. inverse (f x)) \<in> L F (g) \<longleftrightarrow> (\<lambda>x. 1) \<in> L F (\<lambda>x. f x * g x)" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 237 | using divide_eq2[of f F "\<lambda>_. 1" g] by (simp add: divide_inverse assms mult_ac) | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 238 | |
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 239 | lemma inverse_flip: | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 240 | assumes "eventually (\<lambda>x. g x \<noteq> 0) F" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 241 | assumes "eventually (\<lambda>x. h x \<noteq> 0) F" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 242 | assumes "(\<lambda>x. inverse (g x)) \<in> L F (h)" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 243 | shows "(\<lambda>x. inverse (h x)) \<in> L F (g)" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 244 | using assms by (simp add: divide_eq1 divide_eq2 inverse_eq_divide mult.commute) | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 245 | |
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 246 | lemma lift_trans: | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 247 | assumes "f \<in> L F (g)" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 248 | assumes "(\<lambda>x. t x (g x)) \<in> L F (h)" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 249 | assumes "\<And>f g. f \<in> L F (g) \<Longrightarrow> (\<lambda>x. t x (f x)) \<in> L F (\<lambda>x. t x (g x))" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 250 | shows "(\<lambda>x. t x (f x)) \<in> L F (h)" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 251 | by (rule trans[OF assms(3)[OF assms(1)] assms(2)]) | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 252 | |
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 253 | lemma lift_trans': | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 254 | assumes "f \<in> L F (\<lambda>x. t x (g x))" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 255 | assumes "g \<in> L F (h)" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 256 | assumes "\<And>g h. g \<in> L F (h) \<Longrightarrow> (\<lambda>x. t x (g x)) \<in> L F (\<lambda>x. t x (h x))" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 257 | shows "f \<in> L F (\<lambda>x. t x (h x))" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 258 | by (rule trans[OF assms(1) assms(3)[OF assms(2)]]) | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 259 | |
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 260 | lemma lift_trans_bigtheta: | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 261 | assumes "f \<in> L F (g)" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 262 | assumes "(\<lambda>x. t x (g x)) \<in> \<Theta>[F](h)" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 263 | assumes "\<And>f g. f \<in> L F (g) \<Longrightarrow> (\<lambda>x. t x (f x)) \<in> L F (\<lambda>x. t x (g x))" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 264 | shows "(\<lambda>x. t x (f x)) \<in> L F (h)" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 265 | using cong_bigtheta[OF assms(2)] assms(3)[OF assms(1)] by simp | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 266 | |
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 267 | lemma lift_trans_bigtheta': | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 268 | assumes "f \<in> L F (\<lambda>x. t x (g x))" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 269 | assumes "g \<in> \<Theta>[F](h)" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 270 | assumes "\<And>g h. g \<in> \<Theta>[F](h) \<Longrightarrow> (\<lambda>x. t x (g x)) \<in> \<Theta>[F](\<lambda>x. t x (h x))" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 271 | shows "f \<in> L F (\<lambda>x. t x (h x))" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 272 | using cong_bigtheta[OF assms(3)[OF assms(2)]] assms(1) by simp | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 273 | |
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 274 | lemma (in landau_symbol) mult_in_1: | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 275 | assumes "f \<in> L F (\<lambda>_. 1)" "g \<in> L F (\<lambda>_. 1)" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 276 | shows "(\<lambda>x. f x * g x) \<in> L F (\<lambda>_. 1)" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 277 | using mult[OF assms] by simp | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 278 | |
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 279 | lemma (in landau_symbol) of_real_cancel: | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 280 | "(\<lambda>x. of_real (f x)) \<in> L F (\<lambda>x. of_real (g x)) \<Longrightarrow> f \<in> Lr F g" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 281 | by (subst (asm) norm_iff [symmetric], subst (asm) (1 2) norm_of_real) simp_all | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 282 | |
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 283 | lemma (in landau_symbol) of_real_iff: | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 284 | "(\<lambda>x. of_real (f x)) \<in> L F (\<lambda>x. of_real (g x)) \<longleftrightarrow> f \<in> Lr F g" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 285 | by (subst norm_iff [symmetric], subst (1 2) norm_of_real) simp_all | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 286 | |
| 74324 | 287 | lemmas [landau_divide_simps] = | 
| 68246 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 288 | inverse_cancel divide_left_iff divide_eq1 divide_eq2 inverse_eq1 inverse_eq2 | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 289 | |
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 290 | end | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 291 | |
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 292 | |
| 69272 | 293 | text \<open> | 
| 74324 | 294 | The symbols $O$ and $o$ and $\Omega$ and $\omega$ are dual, so for many rules, replacing $O$ with | 
| 68246 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 295 | $\Omega$, $o$ with $\omega$, and $\leq$ with $\geq$ in a theorem yields another valid theorem. | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 296 | The following locale captures this fact. | 
| 69272 | 297 | \<close> | 
| 68246 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 298 | |
| 74324 | 299 | locale landau_pair = | 
| 68246 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 300 |   fixes L l :: "'a filter \<Rightarrow> ('a \<Rightarrow> ('b :: real_normed_field)) \<Rightarrow> ('a \<Rightarrow> 'b) set"
 | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 301 |   fixes L' l' :: "'c filter \<Rightarrow> ('c \<Rightarrow> ('b :: real_normed_field)) \<Rightarrow> ('c \<Rightarrow> 'b) set"
 | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 302 |   fixes Lr lr :: "'a filter \<Rightarrow> ('a \<Rightarrow> real) \<Rightarrow> ('a \<Rightarrow> real) set"
 | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 303 | and R :: "real \<Rightarrow> real \<Rightarrow> bool" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 304 |   assumes L_def: "L F g = {f. \<exists>c>0. eventually (\<lambda>x. R (norm (f x)) (c * norm (g x))) F}"
 | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 305 |   and     l_def: "l F g = {f. \<forall>c>0. eventually (\<lambda>x. R (norm (f x)) (c * norm (g x))) F}"
 | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 306 |   and     L'_def: "L' F' g' = {f. \<exists>c>0. eventually (\<lambda>x. R (norm (f x)) (c * norm (g' x))) F'}"
 | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 307 |   and     l'_def: "l' F' g' = {f. \<forall>c>0. eventually (\<lambda>x. R (norm (f x)) (c * norm (g' x))) F'}"
 | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 308 |   and     Lr_def: "Lr F'' g'' = {f. \<exists>c>0. eventually (\<lambda>x. R (norm (f x)) (c * norm (g'' x))) F''}"
 | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 309 |   and     lr_def: "lr F'' g'' = {f. \<forall>c>0. eventually (\<lambda>x. R (norm (f x)) (c * norm (g'' x))) F''}"
 | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 310 | and R: "R = (\<le>) \<or> R = (\<ge>)" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 311 | |
| 74324 | 312 | interpretation landau_o: | 
| 68246 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 313 | landau_pair bigo smallo bigo smallo bigo smallo "(\<le>)" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 314 | by unfold_locales (auto simp: bigo_def smallo_def intro!: ext) | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 315 | |
| 74324 | 316 | interpretation landau_omega: | 
| 68246 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 317 | landau_pair bigomega smallomega bigomega smallomega bigomega smallomega "(\<ge>)" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 318 | by unfold_locales (auto simp: bigomega_def smallomega_def intro!: ext) | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 319 | |
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 320 | |
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 321 | context landau_pair | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 322 | begin | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 323 | |
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 324 | lemmas R_E = disjE [OF R, case_names le ge] | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 325 | |
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 326 | lemma bigI: | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 327 | "c > 0 \<Longrightarrow> eventually (\<lambda>x. R (norm (f x)) (c * norm (g x))) F \<Longrightarrow> f \<in> L F (g)" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 328 | unfolding L_def by blast | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 329 | |
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 330 | lemma bigE: | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 331 | assumes "f \<in> L F (g)" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 332 | obtains c where "c > 0" "eventually (\<lambda>x. R (norm (f x)) (c * (norm (g x)))) F" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 333 | using assms unfolding L_def by blast | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 334 | |
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 335 | lemma smallI: | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 336 | "(\<And>c. c > 0 \<Longrightarrow> eventually (\<lambda>x. R (norm (f x)) (c * (norm (g x)))) F) \<Longrightarrow> f \<in> l F (g)" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 337 | unfolding l_def by blast | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 338 | |
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 339 | lemma smallD: | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 340 | "f \<in> l F (g) \<Longrightarrow> c > 0 \<Longrightarrow> eventually (\<lambda>x. R (norm (f x)) (c * (norm (g x)))) F" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 341 | unfolding l_def by blast | 
| 74324 | 342 | |
| 68246 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 343 | lemma bigE_nonneg_real: | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 344 | assumes "f \<in> Lr F (g)" "eventually (\<lambda>x. f x \<ge> 0) F" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 345 | obtains c where "c > 0" "eventually (\<lambda>x. R (f x) (c * \<bar>g x\<bar>)) F" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 346 | proof- | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 347 | from assms(1) obtain c where c: "c > 0" "eventually (\<lambda>x. R (norm (f x)) (c * norm (g x))) F" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 348 | by (auto simp: Lr_def) | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 349 | from c(2) assms(2) have "eventually (\<lambda>x. R (f x) (c * \<bar>g x\<bar>)) F" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 350 | by eventually_elim simp | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 351 | from c(1) and this show ?thesis by (rule that) | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 352 | qed | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 353 | |
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 354 | lemma smallD_nonneg_real: | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 355 | assumes "f \<in> lr F (g)" "eventually (\<lambda>x. f x \<ge> 0) F" "c > 0" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 356 | shows "eventually (\<lambda>x. R (f x) (c * \<bar>g x\<bar>)) F" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 357 | using assms by (auto simp: lr_def dest!: spec[of _ c] elim: eventually_elim2) | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 358 | |
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 359 | lemma small_imp_big: "f \<in> l F (g) \<Longrightarrow> f \<in> L F (g)" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 360 | by (rule bigI[OF _ smallD, of 1]) simp_all | 
| 74324 | 361 | |
| 68246 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 362 | lemma small_subset_big: "l F (g) \<subseteq> L F (g)" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 363 | using small_imp_big by blast | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 364 | |
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 365 | lemma R_refl [simp]: "R x x" using R by auto | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 366 | |
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 367 | lemma R_linear: "\<not>R x y \<Longrightarrow> R y x" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 368 | using R by auto | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 369 | |
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 370 | lemma R_trans [trans]: "R a b \<Longrightarrow> R b c \<Longrightarrow> R a c" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 371 | using R by auto | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 372 | |
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 373 | lemma R_mult_left_mono: "R a b \<Longrightarrow> c \<ge> 0 \<Longrightarrow> R (c*a) (c*b)" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 374 | using R by (auto simp: mult_left_mono) | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 375 | |
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 376 | lemma R_mult_right_mono: "R a b \<Longrightarrow> c \<ge> 0 \<Longrightarrow> R (a*c) (b*c)" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 377 | using R by (auto simp: mult_right_mono) | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 378 | |
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 379 | lemma big_trans: | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 380 | assumes "f \<in> L F (g)" "g \<in> L F (h)" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 381 | shows "f \<in> L F (h)" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 382 | proof- | 
| 74324 | 383 | from assms obtain c d where *: "0 < c" "0 < d" | 
| 384 | and **: "\<forall>\<^sub>F x in F. R (norm (f x)) (c * norm (g x))" | |
| 385 | "\<forall>\<^sub>F x in F. R (norm (g x)) (d * norm (h x))" | |
| 386 | by (elim bigE) | |
| 387 | from ** have "eventually (\<lambda>x. R (norm (f x)) (c * d * (norm (h x)))) F" | |
| 68246 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 388 | proof eventually_elim | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 389 | fix x assume "R (norm (f x)) (c * (norm (g x)))" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 390 | also assume "R (norm (g x)) (d * (norm (h x)))" | 
| 74324 | 391 | with \<open>0 < c\<close> have "R (c * (norm (g x))) (c * (d * (norm (h x))))" | 
| 68246 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 392 | by (intro R_mult_left_mono) simp_all | 
| 74324 | 393 | finally show "R (norm (f x)) (c * d * (norm (h x)))" | 
| 394 | by (simp add: algebra_simps) | |
| 68246 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 395 | qed | 
| 74324 | 396 | with * show ?thesis by (intro bigI[of "c*d"]) simp_all | 
| 68246 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 397 | qed | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 398 | |
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 399 | lemma big_small_trans: | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 400 | assumes "f \<in> L F (g)" "g \<in> l F (h)" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 401 | shows "f \<in> l F (h)" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 402 | proof (rule smallI) | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 403 | fix c :: real assume c: "c > 0" | 
| 74324 | 404 | from assms(1) obtain d where d: "d > 0" and *: "\<forall>\<^sub>F x in F. R (norm (f x)) (d * norm (g x))" | 
| 405 | by (elim bigE) | |
| 406 | from assms(2) c d have "eventually (\<lambda>x. R (norm (g x)) (c * inverse d * norm (h x))) F" | |
| 68246 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 407 | by (intro smallD) simp_all | 
| 74324 | 408 | with * show "eventually (\<lambda>x. R (norm (f x)) (c * (norm (h x)))) F" | 
| 409 | proof eventually_elim | |
| 410 | case (elim x) | |
| 411 | show ?case | |
| 412 | by (use elim(1) in \<open>rule R_trans\<close>) (use elim(2) R d in \<open>auto simp: field_simps\<close>) | |
| 413 | qed | |
| 68246 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 414 | qed | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 415 | |
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 416 | lemma small_big_trans: | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 417 | assumes "f \<in> l F (g)" "g \<in> L F (h)" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 418 | shows "f \<in> l F (h)" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 419 | proof (rule smallI) | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 420 | fix c :: real assume c: "c > 0" | 
| 74324 | 421 | from assms(2) obtain d where d: "d > 0" and *: "\<forall>\<^sub>F x in F. R (norm (g x)) (d * norm (h x))" | 
| 422 | by (elim bigE) | |
| 423 | from assms(1) c d have "eventually (\<lambda>x. R (norm (f x)) (c * inverse d * norm (g x))) F" | |
| 68246 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 424 | by (intro smallD) simp_all | 
| 74324 | 425 | with * show "eventually (\<lambda>x. R (norm (f x)) (c * norm (h x))) F" | 
| 426 | by eventually_elim (rotate_tac 2, erule R_trans, insert R c d, auto simp: field_simps) | |
| 68246 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 427 | qed | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 428 | |
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 429 | lemma small_trans: | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 430 | "f \<in> l F (g) \<Longrightarrow> g \<in> l F (h) \<Longrightarrow> f \<in> l F (h)" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 431 | by (rule big_small_trans[OF small_imp_big]) | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 432 | |
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 433 | lemma small_big_trans': | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 434 | "f \<in> l F (g) \<Longrightarrow> g \<in> L F (h) \<Longrightarrow> f \<in> L F (h)" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 435 | by (rule small_imp_big[OF small_big_trans]) | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 436 | |
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 437 | lemma big_small_trans': | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 438 | "f \<in> L F (g) \<Longrightarrow> g \<in> l F (h) \<Longrightarrow> f \<in> L F (h)" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 439 | by (rule small_imp_big[OF big_small_trans]) | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 440 | |
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 441 | lemma big_subsetI [intro]: "f \<in> L F (g) \<Longrightarrow> L F (f) \<subseteq> L F (g)" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 442 | by (intro subsetI) (drule (1) big_trans) | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 443 | |
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 444 | lemma small_subsetI [intro]: "f \<in> L F (g) \<Longrightarrow> l F (f) \<subseteq> l F (g)" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 445 | by (intro subsetI) (drule (1) small_big_trans) | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 446 | |
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 447 | lemma big_refl [simp]: "f \<in> L F (f)" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 448 | by (rule bigI[of 1]) simp_all | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 449 | |
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 450 | lemma small_refl_iff: "f \<in> l F (f) \<longleftrightarrow> eventually (\<lambda>x. f x = 0) F" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 451 | proof (rule iffI[OF _ smallI]) | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 452 | assume f: "f \<in> l F f" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 453 | have "(1/2::real) > 0" "(2::real) > 0" by simp_all | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 454 | from smallD[OF f this(1)] smallD[OF f this(2)] | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 455 | show "eventually (\<lambda>x. f x = 0) F" by eventually_elim (insert R, auto) | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 456 | next | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 457 | fix c :: real assume "c > 0" "eventually (\<lambda>x. f x = 0) F" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 458 | from this(2) show "eventually (\<lambda>x. R (norm (f x)) (c * norm (f x))) F" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 459 | by eventually_elim simp_all | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 460 | qed | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 461 | |
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 462 | lemma big_small_asymmetric: "f \<in> L F (g) \<Longrightarrow> g \<in> l F (f) \<Longrightarrow> eventually (\<lambda>x. f x = 0) F" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 463 | by (drule (1) big_small_trans) (simp add: small_refl_iff) | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 464 | |
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 465 | lemma small_big_asymmetric: "f \<in> l F (g) \<Longrightarrow> g \<in> L F (f) \<Longrightarrow> eventually (\<lambda>x. f x = 0) F" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 466 | by (drule (1) small_big_trans) (simp add: small_refl_iff) | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 467 | |
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 468 | lemma small_asymmetric: "f \<in> l F (g) \<Longrightarrow> g \<in> l F (f) \<Longrightarrow> eventually (\<lambda>x. f x = 0) F" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 469 | by (drule (1) small_trans) (simp add: small_refl_iff) | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 470 | |
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 471 | |
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 472 | lemma plus_aux: | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 473 | assumes "f \<in> o[F](g)" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 474 | shows "g \<in> L F (\<lambda>x. f x + g x)" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 475 | proof (rule R_E) | 
| 74324 | 476 | assume R: "R = (\<le>)" | 
| 68246 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 477 | have A: "1/2 > (0::real)" by simp | 
| 74324 | 478 | have B: "1/2 * (norm (g x)) \<le> norm (f x + g x)" | 
| 479 | if "norm (f x) \<le> 1/2 * norm (g x)" for x | |
| 480 | proof - | |
| 481 | from that have "1/2 * (norm (g x)) \<le> (norm (g x)) - (norm (f x))" | |
| 482 | by simp | |
| 68246 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 483 | also have "norm (g x) - norm (f x) \<le> norm (f x + g x)" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 484 | by (subst add.commute) (rule norm_diff_ineq) | 
| 74324 | 485 | finally show ?thesis by simp | 
| 486 | qed | |
| 68246 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 487 | show "g \<in> L F (\<lambda>x. f x + g x)" | 
| 74324 | 488 | apply (rule bigI[of "2"]) | 
| 489 | apply simp | |
| 490 | apply (use landau_o.smallD[OF assms A] in eventually_elim) | |
| 491 | apply (use B in \<open>simp add: R algebra_simps\<close>) | |
| 68246 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 492 | done | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 493 | next | 
| 74324 | 494 | assume R: "R = (\<lambda>x y. x \<ge> y)" | 
| 68246 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 495 | show "g \<in> L F (\<lambda>x. f x + g x)" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 496 | proof (rule bigI[of "1/2"]) | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 497 | show "eventually (\<lambda>x. R (norm (g x)) (1/2 * norm (f x + g x))) F" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 498 | using landau_o.smallD[OF assms zero_less_one] | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 499 | proof eventually_elim | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 500 | case (elim x) | 
| 74324 | 501 | have "norm (f x + g x) \<le> norm (f x) + norm (g x)" | 
| 502 | by (rule norm_triangle_ineq) | |
| 68246 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 503 | also note elim | 
| 74324 | 504 | finally show ?case by (simp add: R) | 
| 68246 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 505 | qed | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 506 | qed simp_all | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 507 | qed | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 508 | |
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 509 | end | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 510 | |
| 75462 
7448423e5dba
Renamed the misleading has_field_derivative_iff_has_vector_derivative. Inserted a number of minor lemmas
 paulson <lp15@cam.ac.uk> parents: 
74543diff
changeset | 511 | lemma summable_comparison_test_bigo: | 
| 
7448423e5dba
Renamed the misleading has_field_derivative_iff_has_vector_derivative. Inserted a number of minor lemmas
 paulson <lp15@cam.ac.uk> parents: 
74543diff
changeset | 512 | fixes f :: "nat \<Rightarrow> real" | 
| 
7448423e5dba
Renamed the misleading has_field_derivative_iff_has_vector_derivative. Inserted a number of minor lemmas
 paulson <lp15@cam.ac.uk> parents: 
74543diff
changeset | 513 | assumes "summable (\<lambda>n. norm (g n))" "f \<in> O(g)" | 
| 
7448423e5dba
Renamed the misleading has_field_derivative_iff_has_vector_derivative. Inserted a number of minor lemmas
 paulson <lp15@cam.ac.uk> parents: 
74543diff
changeset | 514 | shows "summable f" | 
| 
7448423e5dba
Renamed the misleading has_field_derivative_iff_has_vector_derivative. Inserted a number of minor lemmas
 paulson <lp15@cam.ac.uk> parents: 
74543diff
changeset | 515 | proof - | 
| 
7448423e5dba
Renamed the misleading has_field_derivative_iff_has_vector_derivative. Inserted a number of minor lemmas
 paulson <lp15@cam.ac.uk> parents: 
74543diff
changeset | 516 | from \<open>f \<in> O(g)\<close> obtain C where C: "eventually (\<lambda>x. norm (f x) \<le> C * norm (g x)) at_top" | 
| 
7448423e5dba
Renamed the misleading has_field_derivative_iff_has_vector_derivative. Inserted a number of minor lemmas
 paulson <lp15@cam.ac.uk> parents: 
74543diff
changeset | 517 | by (auto elim: landau_o.bigE) | 
| 
7448423e5dba
Renamed the misleading has_field_derivative_iff_has_vector_derivative. Inserted a number of minor lemmas
 paulson <lp15@cam.ac.uk> parents: 
74543diff
changeset | 518 | thus ?thesis | 
| 
7448423e5dba
Renamed the misleading has_field_derivative_iff_has_vector_derivative. Inserted a number of minor lemmas
 paulson <lp15@cam.ac.uk> parents: 
74543diff
changeset | 519 | by (rule summable_comparison_test_ev) (insert assms, auto intro: summable_mult) | 
| 
7448423e5dba
Renamed the misleading has_field_derivative_iff_has_vector_derivative. Inserted a number of minor lemmas
 paulson <lp15@cam.ac.uk> parents: 
74543diff
changeset | 520 | qed | 
| 68246 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 521 | |
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 522 | lemma bigomega_iff_bigo: "g \<in> \<Omega>[F](f) \<longleftrightarrow> f \<in> O[F](g)" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 523 | proof | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 524 | assume "f \<in> O[F](g)" | 
| 74324 | 525 | then obtain c where "0 < c" "\<forall>\<^sub>F x in F. norm (f x) \<le> c * norm (g x)" | 
| 526 | by (rule landau_o.bigE) | |
| 527 | then show "g \<in> \<Omega>[F](f)" | |
| 528 | by (intro landau_omega.bigI[of "inverse c"]) (simp_all add: field_simps) | |
| 68246 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 529 | next | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 530 | assume "g \<in> \<Omega>[F](f)" | 
| 74324 | 531 | then obtain c where "0 < c" "\<forall>\<^sub>F x in F. c * norm (f x) \<le> norm (g x)" | 
| 532 | by (rule landau_omega.bigE) | |
| 533 | then show "f \<in> O[F](g)" | |
| 534 | by (intro landau_o.bigI[of "inverse c"]) (simp_all add: field_simps) | |
| 68246 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 535 | qed | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 536 | |
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 537 | lemma smallomega_iff_smallo: "g \<in> \<omega>[F](f) \<longleftrightarrow> f \<in> o[F](g)" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 538 | proof | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 539 | assume "f \<in> o[F](g)" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 540 | from landau_o.smallD[OF this, of "inverse c" for c] | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 541 | show "g \<in> \<omega>[F](f)" by (intro landau_omega.smallI) (simp_all add: field_simps) | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 542 | next | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 543 | assume "g \<in> \<omega>[F](f)" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 544 | from landau_omega.smallD[OF this, of "inverse c" for c] | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 545 | show "f \<in> o[F](g)" by (intro landau_o.smallI) (simp_all add: field_simps) | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 546 | qed | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 547 | |
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 548 | |
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 549 | context landau_pair | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 550 | begin | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 551 | |
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 552 | lemma big_mono: | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 553 | "eventually (\<lambda>x. R (norm (f x)) (norm (g x))) F \<Longrightarrow> f \<in> L F (g)" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 554 | by (rule bigI[OF zero_less_one]) simp | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 555 | |
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 556 | lemma big_mult: | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 557 | assumes "f1 \<in> L F (g1)" "f2 \<in> L F (g2)" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 558 | shows "(\<lambda>x. f1 x * f2 x) \<in> L F (\<lambda>x. g1 x * g2 x)" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 559 | proof- | 
| 74324 | 560 | from assms obtain c1 c2 where *: "c1 > 0" "c2 > 0" | 
| 561 | and **: "\<forall>\<^sub>F x in F. R (norm (f1 x)) (c1 * norm (g1 x))" | |
| 562 | "\<forall>\<^sub>F x in F. R (norm (f2 x)) (c2 * norm (g2 x))" | |
| 563 | by (elim bigE) | |
| 564 | from * have "c1 * c2 > 0" by simp | |
| 68246 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 565 | moreover have "eventually (\<lambda>x. R (norm (f1 x * f2 x)) (c1 * c2 * norm (g1 x * g2 x))) F" | 
| 74324 | 566 | using ** | 
| 68246 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 567 | proof eventually_elim | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 568 | case (elim x) | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 569 | show ?case | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 570 | proof (cases rule: R_E) | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 571 | case le | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 572 | have "norm (f1 x) * norm (f2 x) \<le> (c1 * norm (g1 x)) * (c2 * norm (g2 x))" | 
| 74324 | 573 | using elim le * by (intro mult_mono mult_nonneg_nonneg) auto | 
| 68246 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 574 | with le show ?thesis by (simp add: le norm_mult mult_ac) | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 575 | next | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 576 | case ge | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 577 | have "(c1 * norm (g1 x)) * (c2 * norm (g2 x)) \<le> norm (f1 x) * norm (f2 x)" | 
| 74324 | 578 | using elim ge * by (intro mult_mono mult_nonneg_nonneg) auto | 
| 68246 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 579 | with ge show ?thesis by (simp_all add: norm_mult mult_ac) | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 580 | qed | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 581 | qed | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 582 | ultimately show ?thesis by (rule bigI) | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 583 | qed | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 584 | |
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 585 | lemma small_big_mult: | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 586 | assumes "f1 \<in> l F (g1)" "f2 \<in> L F (g2)" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 587 | shows "(\<lambda>x. f1 x * f2 x) \<in> l F (\<lambda>x. g1 x * g2 x)" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 588 | proof (rule smallI) | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 589 | fix c1 :: real assume c1: "c1 > 0" | 
| 74324 | 590 | from assms(2) obtain c2 where c2: "c2 > 0" | 
| 591 | and *: "\<forall>\<^sub>F x in F. R (norm (f2 x)) (c2 * norm (g2 x))" by (elim bigE) | |
| 592 | from assms(1) c1 c2 have "eventually (\<lambda>x. R (norm (f1 x)) (c1 * inverse c2 * norm (g1 x))) F" | |
| 68246 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 593 | by (auto intro!: smallD) | 
| 74324 | 594 | with * show "eventually (\<lambda>x. R (norm (f1 x * f2 x)) (c1 * norm (g1 x * g2 x))) F" | 
| 68246 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 595 | proof eventually_elim | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 596 | case (elim x) | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 597 | show ?case | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 598 | proof (cases rule: R_E) | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 599 | case le | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 600 | have "norm (f1 x) * norm (f2 x) \<le> (c1 * inverse c2 * norm (g1 x)) * (c2 * norm (g2 x))" | 
| 74324 | 601 | using elim le c1 c2 by (intro mult_mono mult_nonneg_nonneg) auto | 
| 602 | with le c2 show ?thesis by (simp add: le norm_mult field_simps) | |
| 68246 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 603 | next | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 604 | case ge | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 605 | have "norm (f1 x) * norm (f2 x) \<ge> (c1 * inverse c2 * norm (g1 x)) * (c2 * norm (g2 x))" | 
| 74324 | 606 | using elim ge c1 c2 by (intro mult_mono mult_nonneg_nonneg) auto | 
| 607 | with ge c2 show ?thesis by (simp add: ge norm_mult field_simps) | |
| 68246 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 608 | qed | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 609 | qed | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 610 | qed | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 611 | |
| 74324 | 612 | lemma big_small_mult: | 
| 68246 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 613 | "f1 \<in> L F (g1) \<Longrightarrow> f2 \<in> l F (g2) \<Longrightarrow> (\<lambda>x. f1 x * f2 x) \<in> l F (\<lambda>x. g1 x * g2 x)" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 614 | by (subst (1 2) mult.commute) (rule small_big_mult) | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 615 | |
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 616 | lemma small_mult: "f1 \<in> l F (g1) \<Longrightarrow> f2 \<in> l F (g2) \<Longrightarrow> (\<lambda>x. f1 x * f2 x) \<in> l F (\<lambda>x. g1 x * g2 x)" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 617 | by (rule small_big_mult, assumption, rule small_imp_big) | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 618 | |
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 619 | lemmas mult = big_mult small_big_mult big_small_mult small_mult | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 620 | |
| 77200 
8f2e6186408f
Some more new material and some tidying of existing proofs
 paulson <lp15@cam.ac.uk> parents: 
75462diff
changeset | 621 | lemma big_power: | 
| 
8f2e6186408f
Some more new material and some tidying of existing proofs
 paulson <lp15@cam.ac.uk> parents: 
75462diff
changeset | 622 | assumes "f \<in> L F (g)" | 
| 
8f2e6186408f
Some more new material and some tidying of existing proofs
 paulson <lp15@cam.ac.uk> parents: 
75462diff
changeset | 623 | shows "(\<lambda>x. f x ^ m) \<in> L F (\<lambda>x. g x ^ m)" | 
| 
8f2e6186408f
Some more new material and some tidying of existing proofs
 paulson <lp15@cam.ac.uk> parents: 
75462diff
changeset | 624 | using assms by (induction m) (auto intro: mult) | 
| 68246 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 625 | |
| 77200 
8f2e6186408f
Some more new material and some tidying of existing proofs
 paulson <lp15@cam.ac.uk> parents: 
75462diff
changeset | 626 | lemma (in landau_pair) small_power: | 
| 
8f2e6186408f
Some more new material and some tidying of existing proofs
 paulson <lp15@cam.ac.uk> parents: 
75462diff
changeset | 627 | assumes "f \<in> l F (g)" "m > 0" | 
| 
8f2e6186408f
Some more new material and some tidying of existing proofs
 paulson <lp15@cam.ac.uk> parents: 
75462diff
changeset | 628 | shows "(\<lambda>x. f x ^ m) \<in> l F (\<lambda>x. g x ^ m)" | 
| 
8f2e6186408f
Some more new material and some tidying of existing proofs
 paulson <lp15@cam.ac.uk> parents: 
75462diff
changeset | 629 | proof - | 
| 
8f2e6186408f
Some more new material and some tidying of existing proofs
 paulson <lp15@cam.ac.uk> parents: 
75462diff
changeset | 630 | have "(\<lambda>x. f x * f x ^ (m - 1)) \<in> l F (\<lambda>x. g x * g x ^ (m - 1))" | 
| 
8f2e6186408f
Some more new material and some tidying of existing proofs
 paulson <lp15@cam.ac.uk> parents: 
75462diff
changeset | 631 | by (intro small_big_mult assms big_power[OF small_imp_big]) | 
| 
8f2e6186408f
Some more new material and some tidying of existing proofs
 paulson <lp15@cam.ac.uk> parents: 
75462diff
changeset | 632 | thus ?thesis | 
| 
8f2e6186408f
Some more new material and some tidying of existing proofs
 paulson <lp15@cam.ac.uk> parents: 
75462diff
changeset | 633 | using assms by (cases m) (simp_all add: mult_ac) | 
| 
8f2e6186408f
Some more new material and some tidying of existing proofs
 paulson <lp15@cam.ac.uk> parents: 
75462diff
changeset | 634 | qed | 
| 
8f2e6186408f
Some more new material and some tidying of existing proofs
 paulson <lp15@cam.ac.uk> parents: 
75462diff
changeset | 635 | |
| 
8f2e6186408f
Some more new material and some tidying of existing proofs
 paulson <lp15@cam.ac.uk> parents: 
75462diff
changeset | 636 | lemma big_power_increasing: | 
| 
8f2e6186408f
Some more new material and some tidying of existing proofs
 paulson <lp15@cam.ac.uk> parents: 
75462diff
changeset | 637 | assumes "(\<lambda>_. 1) \<in> L F f" "m \<le> n" | 
| 
8f2e6186408f
Some more new material and some tidying of existing proofs
 paulson <lp15@cam.ac.uk> parents: 
75462diff
changeset | 638 | shows "(\<lambda>x. f x ^ m) \<in> L F (\<lambda>x. f x ^ n)" | 
| 
8f2e6186408f
Some more new material and some tidying of existing proofs
 paulson <lp15@cam.ac.uk> parents: 
75462diff
changeset | 639 | proof - | 
| 
8f2e6186408f
Some more new material and some tidying of existing proofs
 paulson <lp15@cam.ac.uk> parents: 
75462diff
changeset | 640 | have "(\<lambda>x. f x ^ m * 1 ^ (n - m)) \<in> L F (\<lambda>x. f x ^ m * f x ^ (n - m))" | 
| 
8f2e6186408f
Some more new material and some tidying of existing proofs
 paulson <lp15@cam.ac.uk> parents: 
75462diff
changeset | 641 | using assms by (intro mult big_power) auto | 
| 
8f2e6186408f
Some more new material and some tidying of existing proofs
 paulson <lp15@cam.ac.uk> parents: 
75462diff
changeset | 642 | also have "(\<lambda>x. f x ^ m * f x ^ (n - m)) = (\<lambda>x. f x ^ (m + (n - m)))" | 
| 
8f2e6186408f
Some more new material and some tidying of existing proofs
 paulson <lp15@cam.ac.uk> parents: 
75462diff
changeset | 643 | by (subst power_add [symmetric]) (rule refl) | 
| 
8f2e6186408f
Some more new material and some tidying of existing proofs
 paulson <lp15@cam.ac.uk> parents: 
75462diff
changeset | 644 | also have "m + (n - m) = n" | 
| 
8f2e6186408f
Some more new material and some tidying of existing proofs
 paulson <lp15@cam.ac.uk> parents: 
75462diff
changeset | 645 | using assms by simp | 
| 
8f2e6186408f
Some more new material and some tidying of existing proofs
 paulson <lp15@cam.ac.uk> parents: 
75462diff
changeset | 646 | finally show ?thesis by simp | 
| 
8f2e6186408f
Some more new material and some tidying of existing proofs
 paulson <lp15@cam.ac.uk> parents: 
75462diff
changeset | 647 | qed | 
| 
8f2e6186408f
Some more new material and some tidying of existing proofs
 paulson <lp15@cam.ac.uk> parents: 
75462diff
changeset | 648 | |
| 
8f2e6186408f
Some more new material and some tidying of existing proofs
 paulson <lp15@cam.ac.uk> parents: 
75462diff
changeset | 649 | lemma small_power_increasing: | 
| 
8f2e6186408f
Some more new material and some tidying of existing proofs
 paulson <lp15@cam.ac.uk> parents: 
75462diff
changeset | 650 | assumes "(\<lambda>_. 1) \<in> l F f" "m < n" | 
| 
8f2e6186408f
Some more new material and some tidying of existing proofs
 paulson <lp15@cam.ac.uk> parents: 
75462diff
changeset | 651 | shows "(\<lambda>x. f x ^ m) \<in> l F (\<lambda>x. f x ^ n)" | 
| 
8f2e6186408f
Some more new material and some tidying of existing proofs
 paulson <lp15@cam.ac.uk> parents: 
75462diff
changeset | 652 | proof - | 
| 
8f2e6186408f
Some more new material and some tidying of existing proofs
 paulson <lp15@cam.ac.uk> parents: 
75462diff
changeset | 653 | note [trans] = small_big_trans | 
| 
8f2e6186408f
Some more new material and some tidying of existing proofs
 paulson <lp15@cam.ac.uk> parents: 
75462diff
changeset | 654 | have "(\<lambda>x. f x ^ m * 1) \<in> l F (\<lambda>x. f x ^ m * f x)" | 
| 
8f2e6186408f
Some more new material and some tidying of existing proofs
 paulson <lp15@cam.ac.uk> parents: 
75462diff
changeset | 655 | using assms by (intro big_small_mult) auto | 
| 
8f2e6186408f
Some more new material and some tidying of existing proofs
 paulson <lp15@cam.ac.uk> parents: 
75462diff
changeset | 656 | also have "(\<lambda>x. f x ^ m * f x) = (\<lambda>x. f x ^ Suc m)" | 
| 
8f2e6186408f
Some more new material and some tidying of existing proofs
 paulson <lp15@cam.ac.uk> parents: 
75462diff
changeset | 657 | by (simp add: mult_ac) | 
| 
8f2e6186408f
Some more new material and some tidying of existing proofs
 paulson <lp15@cam.ac.uk> parents: 
75462diff
changeset | 658 | also have "\<dots> \<in> L F (\<lambda>x. f x ^ n)" | 
| 
8f2e6186408f
Some more new material and some tidying of existing proofs
 paulson <lp15@cam.ac.uk> parents: 
75462diff
changeset | 659 | using assms by (intro big_power_increasing[OF small_imp_big]) auto | 
| 
8f2e6186408f
Some more new material and some tidying of existing proofs
 paulson <lp15@cam.ac.uk> parents: 
75462diff
changeset | 660 | finally show ?thesis by simp | 
| 
8f2e6186408f
Some more new material and some tidying of existing proofs
 paulson <lp15@cam.ac.uk> parents: 
75462diff
changeset | 661 | qed | 
| 
8f2e6186408f
Some more new material and some tidying of existing proofs
 paulson <lp15@cam.ac.uk> parents: 
75462diff
changeset | 662 | |
| 68246 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 663 | sublocale big: landau_symbol L L' Lr | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 664 | proof | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 665 | have L: "L = bigo \<or> L = bigomega" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 666 | by (rule R_E) (auto simp: bigo_def L_def bigomega_def fun_eq_iff) | 
| 74324 | 667 | have A: "(\<lambda>x. c * f x) \<in> L F f" if "c \<noteq> 0" for c :: 'b and F and f :: "'a \<Rightarrow> 'b" | 
| 668 | using that by (intro bigI[of "norm c"]) (simp_all add: norm_mult) | |
| 669 | show "L F (\<lambda>x. c * f x) = L F f" if "c \<noteq> 0" for c :: 'b and F and f :: "'a \<Rightarrow> 'b" | |
| 670 | using \<open>c \<noteq> 0\<close> and A[of c f] and A[of "inverse c" "\<lambda>x. c * f x"] | |
| 671 | by (intro equalityI big_subsetI) (simp_all add: field_simps) | |
| 672 | show "((\<lambda>x. c * f x) \<in> L F g) = (f \<in> L F g)" if "c \<noteq> 0" | |
| 673 | for c :: 'b and F and f g :: "'a \<Rightarrow> 'b" | |
| 674 | proof - | |
| 69272 | 675 | from \<open>c \<noteq> 0\<close> and A[of c f] and A[of "inverse c" "\<lambda>x. c * f x"] | 
| 74324 | 676 | have "(\<lambda>x. c * f x) \<in> L F f" "f \<in> L F (\<lambda>x. c * f x)" | 
| 677 | by (simp_all add: field_simps) | |
| 678 | then show ?thesis by (intro iffI) (erule (1) big_trans)+ | |
| 679 | qed | |
| 680 | show "(\<lambda>x. inverse (g x)) \<in> L F (\<lambda>x. inverse (f x))" | |
| 681 | if *: "f \<in> L F (g)" and **: "eventually (\<lambda>x. f x \<noteq> 0) F" "eventually (\<lambda>x. g x \<noteq> 0) F" | |
| 682 | for f g :: "'a \<Rightarrow> 'b" and F | |
| 683 | proof - | |
| 684 | from * obtain c where c: "c > 0" and ***: "\<forall>\<^sub>F x in F. R (norm (f x)) (c * norm (g x))" | |
| 685 | by (elim bigE) | |
| 686 | from ** *** have "eventually (\<lambda>x. R (norm (inverse (g x))) (c * norm (inverse (f x)))) F" | |
| 687 | by eventually_elim (rule R_E, simp_all add: field_simps norm_inverse norm_divide c) | |
| 688 | with c show ?thesis by (rule bigI) | |
| 689 | qed | |
| 690 | show "L F g \<subseteq> L F (\<lambda>x. f x + g x)" if "f \<in> o[F](g)" for f g :: "'a \<Rightarrow> 'b" and F | |
| 691 | using plus_aux that by (blast intro!: big_subsetI) | |
| 692 | show "L F (f) = L F (g)" if "eventually (\<lambda>x. f x = g x) F" for f g :: "'a \<Rightarrow> 'b" and F | |
| 693 | unfolding L_def by (subst eventually_subst'[OF that]) (rule refl) | |
| 694 | show "f \<in> L F (h) \<longleftrightarrow> g \<in> L F (h)" if "eventually (\<lambda>x. f x = g x) F" | |
| 695 | for f g h :: "'a \<Rightarrow> 'b" and F | |
| 696 | unfolding L_def mem_Collect_eq | |
| 697 | by (subst (1) eventually_subst'[OF that]) (rule refl) | |
| 698 | show "L F f \<subseteq> L F g" if "f \<in> L F g" for f g :: "'a \<Rightarrow> 'b" and F | |
| 699 | using that by (rule big_subsetI) | |
| 700 | show "L F (f) = L F (g)" if "f \<in> \<Theta>[F](g)" for f g :: "'a \<Rightarrow> 'b" and F | |
| 701 | using L that unfolding bigtheta_def | |
| 702 | by (intro equalityI big_subsetI) (auto simp: bigomega_iff_bigo) | |
| 703 | show "f \<in> L F (h) \<longleftrightarrow> g \<in> L F (h)" if "f \<in> \<Theta>[F](g)" for f g h :: "'a \<Rightarrow> 'b" and F | |
| 704 | by (rule disjE[OF L]) | |
| 705 | (use that in \<open>auto simp: bigtheta_def bigomega_iff_bigo intro: landau_o.big_trans\<close>) | |
| 706 | show "(\<lambda>x. h x * f x) \<in> L F (\<lambda>x. h x * g x)" if "f \<in> L F g" for f g h :: "'a \<Rightarrow> 'b" and F | |
| 707 | using that by (intro big_mult) simp | |
| 708 | show "f \<in> L F (h)" if "f \<in> L F g" "g \<in> L F h" for f g h :: "'a \<Rightarrow> 'b" and F | |
| 709 | using that by (rule big_trans) | |
| 710 | show "(\<lambda>x. f (h x)) \<in> L' G (\<lambda>x. g (h x))" | |
| 711 | if "f \<in> L F g" and "filterlim h F G" | |
| 712 | for f g :: "'a \<Rightarrow> 'b" and h :: "'c \<Rightarrow> 'a" and F G | |
| 713 | using that by (auto simp: L_def L'_def filterlim_iff) | |
| 714 | show "f \<in> L (sup F G) g" if "f \<in> L F g" "f \<in> L G g" | |
| 715 | for f g :: "'a \<Rightarrow> 'b" and F G :: "'a filter" | |
| 716 | proof - | |
| 717 | from that [THEN bigE] obtain c1 c2 | |
| 718 | where *: "c1 > 0" "c2 > 0" | |
| 719 | and **: "\<forall>\<^sub>F x in F. R (norm (f x)) (c1 * norm (g x))" | |
| 720 | "\<forall>\<^sub>F x in G. R (norm (f x)) (c2 * norm (g x))" . | |
| 68246 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 721 | define c where "c = (if R c1 c2 then c2 else c1)" | 
| 74324 | 722 | from * have c: "R c1 c" "R c2 c" "c > 0" | 
| 723 | by (auto simp: c_def dest: R_linear) | |
| 724 | with ** have "eventually (\<lambda>x. R (norm (f x)) (c * norm (g x))) F" | |
| 725 | "eventually (\<lambda>x. R (norm (f x)) (c * norm (g x))) G" | |
| 68246 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 726 | by (force elim: eventually_mono intro: R_trans[OF _ R_mult_right_mono])+ | 
| 74324 | 727 | with c show "f \<in> L (sup F G) g" | 
| 728 | by (auto simp: L_def eventually_sup) | |
| 729 | qed | |
| 730 | show "((\<lambda>x. f (h x)) \<in> L' (filtercomap h F) (\<lambda>x. g (h x)))" if "(f \<in> L F g)" | |
| 731 | for f g :: "'a \<Rightarrow> 'b" and h :: "'c \<Rightarrow> 'a" and F G :: "'a filter" | |
| 732 | using that unfolding L_def L'_def by auto | |
| 68246 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 733 | qed (auto simp: L_def Lr_def eventually_filtermap L'_def | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 734 | intro: filter_leD exI[of _ "1::real"]) | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 735 | |
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 736 | sublocale small: landau_symbol l l' lr | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 737 | proof | 
| 74324 | 738 | have A: "(\<lambda>x. c * f x) \<in> L F f" if "c \<noteq> 0" for c :: 'b and f :: "'a \<Rightarrow> 'b" and F | 
| 739 | using that by (intro bigI[of "norm c"]) (simp_all add: norm_mult) | |
| 740 | show "l F (\<lambda>x. c * f x) = l F f" if "c \<noteq> 0" for c :: 'b and f :: "'a \<Rightarrow> 'b" and F | |
| 741 | using that and A[of c f] and A[of "inverse c" "\<lambda>x. c * f x"] | |
| 742 | by (intro equalityI small_subsetI) (simp_all add: field_simps) | |
| 743 | show "((\<lambda>x. c * f x) \<in> l F g) = (f \<in> l F g)" if "c \<noteq> 0" for c :: 'b and f g :: "'a \<Rightarrow> 'b" and F | |
| 744 | proof - | |
| 745 | from that and A[of c f] and A[of "inverse c" "\<lambda>x. c * f x"] | |
| 746 | have "(\<lambda>x. c * f x) \<in> L F f" "f \<in> L F (\<lambda>x. c * f x)" | |
| 747 | by (simp_all add: field_simps) | |
| 748 | then show ?thesis | |
| 749 | by (intro iffI) (erule (1) big_small_trans)+ | |
| 750 | qed | |
| 751 | show "l F g \<subseteq> l F (\<lambda>x. f x + g x)" if "f \<in> o[F](g)" for f g :: "'a \<Rightarrow> 'b" and F | |
| 752 | using plus_aux that by (blast intro!: small_subsetI) | |
| 753 | show "(\<lambda>x. inverse (g x)) \<in> l F (\<lambda>x. inverse (f x))" | |
| 754 | if A: "f \<in> l F (g)" and B: "eventually (\<lambda>x. f x \<noteq> 0) F" "eventually (\<lambda>x. g x \<noteq> 0) F" | |
| 755 | for f g :: "'a \<Rightarrow> 'b" and F | |
| 756 | proof (rule smallI) | |
| 757 | fix c :: real assume c: "c > 0" | |
| 758 | from B smallD[OF A c] | |
| 759 | show "eventually (\<lambda>x. R (norm (inverse (g x))) (c * norm (inverse (f x)))) F" | |
| 760 | by eventually_elim (rule R_E, simp_all add: field_simps norm_inverse norm_divide) | |
| 761 | qed | |
| 762 | show "l F (f) = l F (g)" if "eventually (\<lambda>x. f x = g x) F" for f g :: "'a \<Rightarrow> 'b" and F | |
| 763 | unfolding l_def by (subst eventually_subst'[OF that]) (rule refl) | |
| 764 | show "f \<in> l F (h) \<longleftrightarrow> g \<in> l F (h)" if "eventually (\<lambda>x. f x = g x) F" for f g h :: "'a \<Rightarrow> 'b" and F | |
| 765 | unfolding l_def mem_Collect_eq by (subst (1) eventually_subst'[OF that]) (rule refl) | |
| 766 | show "l F f \<subseteq> l F g" if "f \<in> l F g" for f g :: "'a \<Rightarrow> 'b" and F | |
| 767 | using that by (intro small_subsetI small_imp_big) | |
| 768 | show "l F (f) = l F (g)" if "f \<in> \<Theta>[F](g)" for f g :: "'a \<Rightarrow> 'b" and F | |
| 769 | proof - | |
| 68246 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 770 | have L: "L = bigo \<or> L = bigomega" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 771 | by (rule R_E) (auto simp: bigo_def L_def bigomega_def fun_eq_iff) | 
| 74324 | 772 | with that show ?thesis unfolding bigtheta_def | 
| 68246 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 773 | by (intro equalityI small_subsetI) (auto simp: bigomega_iff_bigo) | 
| 74324 | 774 | qed | 
| 775 | show "f \<in> l F (h) \<longleftrightarrow> g \<in> l F (h)" if "f \<in> \<Theta>[F](g)" for f g h :: "'a \<Rightarrow> 'b" and F | |
| 776 | proof - | |
| 68246 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 777 | have l: "l = smallo \<or> l = smallomega" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 778 | by (rule R_E) (auto simp: smallo_def l_def smallomega_def fun_eq_iff) | 
| 74324 | 779 | show ?thesis | 
| 780 | by (rule disjE[OF l]) | |
| 781 | (use that in \<open>auto simp: bigtheta_def bigomega_iff_bigo smallomega_iff_smallo | |
| 782 | intro: landau_o.big_small_trans landau_o.small_big_trans\<close>) | |
| 783 | qed | |
| 784 | show "(\<lambda>x. h x * f x) \<in> l F (\<lambda>x. h x * g x)" if "f \<in> l F g" for f g h :: "'a \<Rightarrow> 'b" and F | |
| 785 | using that by (intro big_small_mult) simp | |
| 786 | show "f \<in> l F (h)" if "f \<in> l F g" "g \<in> l F h" for f g h :: "'a \<Rightarrow> 'b" and F | |
| 787 | using that by (rule small_trans) | |
| 788 | show "(\<lambda>x. f (h x)) \<in> l' G (\<lambda>x. g (h x))" if "f \<in> l F g" and "filterlim h F G" | |
| 789 | for f g :: "'a \<Rightarrow> 'b" and h :: "'c \<Rightarrow> 'a" and F G | |
| 790 | using that by (auto simp: l_def l'_def filterlim_iff) | |
| 791 | show "((\<lambda>x. f (h x)) \<in> l' (filtercomap h F) (\<lambda>x. g (h x)))" if "f \<in> l F g" | |
| 792 | for f g :: "'a \<Rightarrow> 'b" and h :: "'c \<Rightarrow> 'a" and F G :: "'a filter" | |
| 793 | using that unfolding l_def l'_def by auto | |
| 68246 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 794 | qed (auto simp: l_def lr_def eventually_filtermap l'_def eventually_sup intro: filter_leD) | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 795 | |
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 796 | |
| 69272 | 797 | text \<open>These rules allow chaining of Landau symbol propositions in Isar with "also".\<close> | 
| 68246 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 798 | |
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 799 | lemma big_mult_1: "f \<in> L F (g) \<Longrightarrow> (\<lambda>_. 1) \<in> L F (h) \<Longrightarrow> f \<in> L F (\<lambda>x. g x * h x)" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 800 | and big_mult_1': "(\<lambda>_. 1) \<in> L F (g) \<Longrightarrow> f \<in> L F (h) \<Longrightarrow> f \<in> L F (\<lambda>x. g x * h x)" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 801 | and small_mult_1: "f \<in> l F (g) \<Longrightarrow> (\<lambda>_. 1) \<in> L F (h) \<Longrightarrow> f \<in> l F (\<lambda>x. g x * h x)" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 802 | and small_mult_1': "(\<lambda>_. 1) \<in> L F (g) \<Longrightarrow> f \<in> l F (h) \<Longrightarrow> f \<in> l F (\<lambda>x. g x * h x)" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 803 | and small_mult_1'': "f \<in> L F (g) \<Longrightarrow> (\<lambda>_. 1) \<in> l F (h) \<Longrightarrow> f \<in> l F (\<lambda>x. g x * h x)" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 804 | and small_mult_1''': "(\<lambda>_. 1) \<in> l F (g) \<Longrightarrow> f \<in> L F (h) \<Longrightarrow> f \<in> l F (\<lambda>x. g x * h x)" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 805 | by (drule (1) big.mult big_small_mult small_big_mult, simp)+ | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 806 | |
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 807 | lemma big_1_mult: "f \<in> L F (g) \<Longrightarrow> h \<in> L F (\<lambda>_. 1) \<Longrightarrow> (\<lambda>x. f x * h x) \<in> L F (g)" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 808 | and big_1_mult': "h \<in> L F (\<lambda>_. 1) \<Longrightarrow> f \<in> L F (g) \<Longrightarrow> (\<lambda>x. f x * h x) \<in> L F (g)" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 809 | and small_1_mult: "f \<in> l F (g) \<Longrightarrow> h \<in> L F (\<lambda>_. 1) \<Longrightarrow> (\<lambda>x. f x * h x) \<in> l F (g)" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 810 | and small_1_mult': "h \<in> L F (\<lambda>_. 1) \<Longrightarrow> f \<in> l F (g) \<Longrightarrow> (\<lambda>x. f x * h x) \<in> l F (g)" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 811 | and small_1_mult'': "f \<in> L F (g) \<Longrightarrow> h \<in> l F (\<lambda>_. 1) \<Longrightarrow> (\<lambda>x. f x * h x) \<in> l F (g)" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 812 | and small_1_mult''': "h \<in> l F (\<lambda>_. 1) \<Longrightarrow> f \<in> L F (g) \<Longrightarrow> (\<lambda>x. f x * h x) \<in> l F (g)" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 813 | by (drule (1) big.mult big_small_mult small_big_mult, simp)+ | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 814 | |
| 74324 | 815 | lemmas mult_1_trans = | 
| 68246 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 816 | big_mult_1 big_mult_1' small_mult_1 small_mult_1' small_mult_1'' small_mult_1''' | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 817 | big_1_mult big_1_mult' small_1_mult small_1_mult' small_1_mult'' small_1_mult''' | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 818 | |
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 819 | lemma big_equal_iff_bigtheta: "L F (f) = L F (g) \<longleftrightarrow> f \<in> \<Theta>[F](g)" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 820 | proof | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 821 | have L: "L = bigo \<or> L = bigomega" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 822 | by (rule R_E) (auto simp: fun_eq_iff L_def bigo_def bigomega_def) | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 823 | fix f g :: "'a \<Rightarrow> 'b" assume "L F (f) = L F (g)" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 824 | with big_refl[of f F] big_refl[of g F] have "f \<in> L F (g)" "g \<in> L F (f)" by simp_all | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 825 | thus "f \<in> \<Theta>[F](g)" using L unfolding bigtheta_def by (auto simp: bigomega_iff_bigo) | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 826 | qed (rule big.cong_bigtheta) | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 827 | |
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 828 | lemma big_prod: | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 829 | assumes "\<And>x. x \<in> A \<Longrightarrow> f x \<in> L F (g x)" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 830 | shows "(\<lambda>y. \<Prod>x\<in>A. f x y) \<in> L F (\<lambda>y. \<Prod>x\<in>A. g x y)" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 831 | using assms by (induction A rule: infinite_finite_induct) (auto intro!: big.mult) | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 832 | |
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 833 | lemma big_prod_in_1: | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 834 | assumes "\<And>x. x \<in> A \<Longrightarrow> f x \<in> L F (\<lambda>_. 1)" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 835 | shows "(\<lambda>y. \<Prod>x\<in>A. f x y) \<in> L F (\<lambda>_. 1)" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 836 | using assms by (induction A rule: infinite_finite_induct) (auto intro!: big.mult_in_1) | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 837 | |
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 838 | end | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 839 | |
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 840 | |
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 841 | context landau_symbol | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 842 | begin | 
| 74324 | 843 | |
| 68246 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 844 | lemma plus_absorb1: | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 845 | assumes "f \<in> o[F](g)" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 846 | shows "L F (\<lambda>x. f x + g x) = L F (g)" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 847 | proof (intro equalityI) | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 848 | from plus_subset1 and assms show "L F g \<subseteq> L F (\<lambda>x. f x + g x)" . | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 849 | from landau_o.small.plus_subset1[OF assms] and assms have "(\<lambda>x. -f x) \<in> o[F](\<lambda>x. f x + g x)" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 850 | by (auto simp: landau_o.small.uminus_in_iff) | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 851 | from plus_subset1[OF this] show "L F (\<lambda>x. f x + g x) \<subseteq> L F (g)" by simp | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 852 | qed | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 853 | |
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 854 | lemma plus_absorb2: "g \<in> o[F](f) \<Longrightarrow> L F (\<lambda>x. f x + g x) = L F (f)" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 855 | using plus_absorb1[of g F f] by (simp add: add.commute) | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 856 | |
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 857 | lemma diff_absorb1: "f \<in> o[F](g) \<Longrightarrow> L F (\<lambda>x. f x - g x) = L F (g)" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 858 | by (simp only: diff_conv_add_uminus plus_absorb1 landau_o.small.uminus uminus) | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 859 | |
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 860 | lemma diff_absorb2: "g \<in> o[F](f) \<Longrightarrow> L F (\<lambda>x. f x - g x) = L F (f)" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 861 | by (simp only: diff_conv_add_uminus plus_absorb2 landau_o.small.uminus_in_iff) | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 862 | |
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 863 | lemmas absorb = plus_absorb1 plus_absorb2 diff_absorb1 diff_absorb2 | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 864 | |
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 865 | end | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 866 | |
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 867 | |
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 868 | lemma bigthetaI [intro]: "f \<in> O[F](g) \<Longrightarrow> f \<in> \<Omega>[F](g) \<Longrightarrow> f \<in> \<Theta>[F](g)" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 869 | unfolding bigtheta_def bigomega_def by blast | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 870 | |
| 74324 | 871 | lemma bigthetaD1 [dest]: "f \<in> \<Theta>[F](g) \<Longrightarrow> f \<in> O[F](g)" | 
| 68246 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 872 | and bigthetaD2 [dest]: "f \<in> \<Theta>[F](g) \<Longrightarrow> f \<in> \<Omega>[F](g)" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 873 | unfolding bigtheta_def bigo_def bigomega_def by blast+ | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 874 | |
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 875 | lemma bigtheta_refl [simp]: "f \<in> \<Theta>[F](f)" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 876 | unfolding bigtheta_def by simp | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 877 | |
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 878 | lemma bigtheta_sym: "f \<in> \<Theta>[F](g) \<longleftrightarrow> g \<in> \<Theta>[F](f)" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 879 | unfolding bigtheta_def by (auto simp: bigomega_iff_bigo) | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 880 | |
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 881 | lemmas landau_flip = | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 882 | bigomega_iff_bigo[symmetric] smallomega_iff_smallo[symmetric] | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 883 | bigomega_iff_bigo smallomega_iff_smallo bigtheta_sym | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 884 | |
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 885 | |
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 886 | interpretation landau_theta: landau_symbol bigtheta bigtheta bigtheta | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 887 | proof | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 888 | fix f g :: "'a \<Rightarrow> 'b" and F | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 889 | assume "f \<in> o[F](g)" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 890 | hence "O[F](g) \<subseteq> O[F](\<lambda>x. f x + g x)" "\<Omega>[F](g) \<subseteq> \<Omega>[F](\<lambda>x. f x + g x)" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 891 | by (rule landau_o.big.plus_subset1 landau_omega.big.plus_subset1)+ | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 892 | thus "\<Theta>[F](g) \<subseteq> \<Theta>[F](\<lambda>x. f x + g x)" unfolding bigtheta_def by blast | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 893 | next | 
| 74324 | 894 | fix f g :: "'a \<Rightarrow> 'b" and F | 
| 68246 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 895 | assume "f \<in> \<Theta>[F](g)" | 
| 74324 | 896 | thus A: "\<Theta>[F](f) = \<Theta>[F](g)" | 
| 68246 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 897 | apply (subst (1 2) bigtheta_def) | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 898 | apply (subst landau_o.big.cong_bigtheta landau_omega.big.cong_bigtheta, assumption)+ | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 899 | apply (rule refl) | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 900 | done | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 901 | thus "\<Theta>[F](f) \<subseteq> \<Theta>[F](g)" by simp | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 902 | fix h :: "'a \<Rightarrow> 'b" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 903 | show "f \<in> \<Theta>[F](h) \<longleftrightarrow> g \<in> \<Theta>[F](h)" by (subst (1 2) bigtheta_sym) (simp add: A) | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 904 | next | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 905 | fix f g h :: "'a \<Rightarrow> 'b" and F | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 906 | assume "f \<in> \<Theta>[F](g)" "g \<in> \<Theta>[F](h)" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 907 | thus "f \<in> \<Theta>[F](h)" unfolding bigtheta_def | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 908 | by (blast intro: landau_o.big.trans landau_omega.big.trans) | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 909 | next | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 910 | fix f :: "'a \<Rightarrow> 'b" and F1 F2 :: "'a filter" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 911 | assume "F1 \<le> F2" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 912 | thus "\<Theta>[F2](f) \<subseteq> \<Theta>[F1](f)" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 913 | by (auto simp: bigtheta_def intro: landau_o.big.filter_mono landau_omega.big.filter_mono) | 
| 74324 | 914 | qed (auto simp: bigtheta_def landau_o.big.norm_iff | 
| 915 | landau_o.big.cmult landau_omega.big.cmult | |
| 916 | landau_o.big.cmult_in_iff landau_omega.big.cmult_in_iff | |
| 68246 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 917 | landau_o.big.in_cong landau_omega.big.in_cong | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 918 | landau_o.big.mult landau_omega.big.mult | 
| 74324 | 919 | landau_o.big.inverse landau_omega.big.inverse | 
| 68246 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 920 | landau_o.big.compose landau_omega.big.compose | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 921 | landau_o.big.bot' landau_omega.big.bot' | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 922 | landau_o.big.in_filtermap_iff landau_omega.big.in_filtermap_iff | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 923 | landau_o.big.sup landau_omega.big.sup | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 924 | landau_o.big.filtercomap landau_omega.big.filtercomap | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 925 | dest: landau_o.big.cong landau_omega.big.cong) | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 926 | |
| 74324 | 927 | lemmas landau_symbols = | 
| 68246 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 928 | landau_o.big.landau_symbol_axioms landau_o.small.landau_symbol_axioms | 
| 74324 | 929 | landau_omega.big.landau_symbol_axioms landau_omega.small.landau_symbol_axioms | 
| 68246 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 930 | landau_theta.landau_symbol_axioms | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 931 | |
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 932 | lemma bigoI [intro]: | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 933 | assumes "eventually (\<lambda>x. (norm (f x)) \<le> c * (norm (g x))) F" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 934 | shows "f \<in> O[F](g)" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 935 | proof (rule landau_o.bigI) | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 936 | show "max 1 c > 0" by simp | 
| 74324 | 937 | have "c * (norm (g x)) \<le> max 1 c * (norm (g x))" for x | 
| 938 | by (simp add: mult_right_mono) | |
| 939 | with assms show "eventually (\<lambda>x. (norm (f x)) \<le> max 1 c * (norm (g x))) F" | |
| 68246 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 940 | by (auto elim!: eventually_mono dest: order.trans) | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 941 | qed | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 942 | |
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 943 | lemma smallomegaD [dest]: | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 944 | assumes "f \<in> \<omega>[F](g)" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 945 | shows "eventually (\<lambda>x. (norm (f x)) \<ge> c * (norm (g x))) F" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 946 | proof (cases "c > 0") | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 947 | case False | 
| 74324 | 948 | show ?thesis | 
| 68246 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 949 | by (intro always_eventually allI, rule order.trans[of _ 0]) | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 950 | (insert False, auto intro!: mult_nonpos_nonneg) | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 951 | qed (blast dest: landau_omega.smallD[OF assms, of c]) | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 952 | |
| 74324 | 953 | |
| 68246 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 954 | lemma bigthetaI': | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 955 | assumes "c1 > 0" "c2 > 0" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 956 | assumes "eventually (\<lambda>x. c1 * (norm (g x)) \<le> (norm (f x)) \<and> (norm (f x)) \<le> c2 * (norm (g x))) F" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 957 | shows "f \<in> \<Theta>[F](g)" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 958 | apply (rule bigthetaI) | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 959 | apply (rule landau_o.bigI[OF assms(2)]) using assms(3) apply (eventually_elim, simp) | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 960 | apply (rule landau_omega.bigI[OF assms(1)]) using assms(3) apply (eventually_elim, simp) | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 961 | done | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 962 | |
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 963 | lemma bigthetaI_cong: "eventually (\<lambda>x. f x = g x) F \<Longrightarrow> f \<in> \<Theta>[F](g)" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 964 | by (intro bigthetaI'[of 1 1]) (auto elim!: eventually_mono) | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 965 | |
| 74324 | 966 | lemma (in landau_symbol) ev_eq_trans1: | 
| 68246 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 967 | "f \<in> L F (\<lambda>x. g x (h x)) \<Longrightarrow> eventually (\<lambda>x. h x = h' x) F \<Longrightarrow> f \<in> L F (\<lambda>x. g x (h' x))" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 968 | by (rule bigtheta_trans1[OF _ bigthetaI_cong]) (auto elim!: eventually_mono) | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 969 | |
| 74324 | 970 | lemma (in landau_symbol) ev_eq_trans2: | 
| 68246 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 971 | "eventually (\<lambda>x. f x = f' x) F \<Longrightarrow> (\<lambda>x. g x (f' x)) \<in> L F (h) \<Longrightarrow> (\<lambda>x. g x (f x)) \<in> L F (h)" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 972 | by (rule bigtheta_trans2[OF bigthetaI_cong]) (auto elim!: eventually_mono) | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 973 | |
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 974 | declare landau_o.smallI landau_omega.bigI landau_omega.smallI [intro] | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 975 | declare landau_o.bigE landau_omega.bigE [elim] | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 976 | declare landau_o.smallD | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 977 | |
| 74324 | 978 | lemma (in landau_symbol) bigtheta_trans1': | 
| 68246 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 979 | "f \<in> L F (g) \<Longrightarrow> h \<in> \<Theta>[F](g) \<Longrightarrow> f \<in> L F (h)" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 980 | by (subst cong_bigtheta[symmetric]) (simp add: bigtheta_sym) | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 981 | |
| 74324 | 982 | lemma (in landau_symbol) bigtheta_trans2': | 
| 68246 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 983 | "g \<in> \<Theta>[F](f) \<Longrightarrow> g \<in> L F (h) \<Longrightarrow> f \<in> L F (h)" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 984 | by (rule bigtheta_trans2, subst bigtheta_sym) | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 985 | |
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 986 | lemma bigo_bigomega_trans: "f \<in> O[F](g) \<Longrightarrow> h \<in> \<Omega>[F](g) \<Longrightarrow> f \<in> O[F](h)" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 987 | and bigo_smallomega_trans: "f \<in> O[F](g) \<Longrightarrow> h \<in> \<omega>[F](g) \<Longrightarrow> f \<in> o[F](h)" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 988 | and smallo_bigomega_trans: "f \<in> o[F](g) \<Longrightarrow> h \<in> \<Omega>[F](g) \<Longrightarrow> f \<in> o[F](h)" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 989 | and smallo_smallomega_trans: "f \<in> o[F](g) \<Longrightarrow> h \<in> \<omega>[F](g) \<Longrightarrow> f \<in> o[F](h)" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 990 | and bigomega_bigo_trans: "f \<in> \<Omega>[F](g) \<Longrightarrow> h \<in> O[F](g) \<Longrightarrow> f \<in> \<Omega>[F](h)" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 991 | and bigomega_smallo_trans: "f \<in> \<Omega>[F](g) \<Longrightarrow> h \<in> o[F](g) \<Longrightarrow> f \<in> \<omega>[F](h)" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 992 | and smallomega_bigo_trans: "f \<in> \<omega>[F](g) \<Longrightarrow> h \<in> O[F](g) \<Longrightarrow> f \<in> \<omega>[F](h)" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 993 | and smallomega_smallo_trans: "f \<in> \<omega>[F](g) \<Longrightarrow> h \<in> o[F](g) \<Longrightarrow> f \<in> \<omega>[F](h)" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 994 | by (unfold bigomega_iff_bigo smallomega_iff_smallo) | 
| 74324 | 995 | (erule (1) landau_o.big_trans landau_o.big_small_trans landau_o.small_big_trans | 
| 68246 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 996 | landau_o.big_trans landau_o.small_trans)+ | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 997 | |
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 998 | lemmas landau_trans_lift [trans] = | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 999 | landau_symbols[THEN landau_symbol.lift_trans] | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1000 | landau_symbols[THEN landau_symbol.lift_trans'] | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1001 | landau_symbols[THEN landau_symbol.lift_trans_bigtheta] | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1002 | landau_symbols[THEN landau_symbol.lift_trans_bigtheta'] | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1003 | |
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1004 | lemmas landau_mult_1_trans [trans] = | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1005 | landau_o.mult_1_trans landau_omega.mult_1_trans | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1006 | |
| 74324 | 1007 | lemmas landau_trans [trans] = | 
| 68246 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1008 | landau_symbols[THEN landau_symbol.bigtheta_trans1] | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1009 | landau_symbols[THEN landau_symbol.bigtheta_trans2] | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1010 | landau_symbols[THEN landau_symbol.bigtheta_trans1'] | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1011 | landau_symbols[THEN landau_symbol.bigtheta_trans2'] | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1012 | landau_symbols[THEN landau_symbol.ev_eq_trans1] | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1013 | landau_symbols[THEN landau_symbol.ev_eq_trans2] | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1014 | |
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1015 | landau_o.big_trans landau_o.small_trans landau_o.small_big_trans landau_o.big_small_trans | 
| 74324 | 1016 | landau_omega.big_trans landau_omega.small_trans | 
| 68246 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1017 | landau_omega.small_big_trans landau_omega.big_small_trans | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1018 | |
| 74324 | 1019 | bigo_bigomega_trans bigo_smallomega_trans smallo_bigomega_trans smallo_smallomega_trans | 
| 68246 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1020 | bigomega_bigo_trans bigomega_smallo_trans smallomega_bigo_trans smallomega_smallo_trans | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1021 | |
| 74324 | 1022 | lemma bigtheta_inverse [simp]: | 
| 68246 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1023 | shows "(\<lambda>x. inverse (f x)) \<in> \<Theta>[F](\<lambda>x. inverse (g x)) \<longleftrightarrow> f \<in> \<Theta>[F](g)" | 
| 74324 | 1024 | proof - | 
| 1025 | have "(\<lambda>x. inverse (f x)) \<in> O[F](\<lambda>x. inverse (g x))" | |
| 1026 | if A: "f \<in> \<Theta>[F](g)" | |
| 1027 | for f g :: "'a \<Rightarrow> 'b" and F | |
| 1028 | proof - | |
| 1029 | from A obtain c1 c2 :: real where *: "c1 > 0" "c2 > 0" | |
| 1030 | and **: "\<forall>\<^sub>F x in F. norm (f x) \<le> c1 * norm (g x)" | |
| 1031 | "\<forall>\<^sub>F x in F. c2 * norm (g x) \<le> norm (f x)" | |
| 1032 | unfolding bigtheta_def by (elim landau_o.bigE landau_omega.bigE IntE) | |
| 1033 | from \<open>c2 > 0\<close> have c2: "inverse c2 > 0" by simp | |
| 1034 | from ** have "eventually (\<lambda>x. norm (inverse (f x)) \<le> inverse c2 * norm (inverse (g x))) F" | |
| 68246 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1035 | proof eventually_elim | 
| 74324 | 1036 | fix x assume A: "norm (f x) \<le> c1 * norm (g x)" "c2 * norm (g x) \<le> norm (f x)" | 
| 1037 | from A * have "f x = 0 \<longleftrightarrow> g x = 0" | |
| 1038 | by (auto simp: field_simps mult_le_0_iff) | |
| 1039 | with A * show "norm (inverse (f x)) \<le> inverse c2 * norm (inverse (g x))" | |
| 68246 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1040 | by (force simp: field_simps norm_inverse norm_divide) | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1041 | qed | 
| 74324 | 1042 | with c2 show ?thesis by (rule landau_o.bigI) | 
| 1043 | qed | |
| 1044 | then show ?thesis | |
| 1045 | unfolding bigtheta_def | |
| 68246 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1046 | by (force simp: bigomega_iff_bigo bigtheta_sym) | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1047 | qed | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1048 | |
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1049 | lemma bigtheta_divide: | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1050 | assumes "f1 \<in> \<Theta>(f2)" "g1 \<in> \<Theta>(g2)" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1051 | shows "(\<lambda>x. f1 x / g1 x) \<in> \<Theta>(\<lambda>x. f2 x / g2 x)" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1052 | by (subst (1 2) divide_inverse, intro landau_theta.mult) (simp_all add: bigtheta_inverse assms) | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1053 | |
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1054 | lemma eventually_nonzero_bigtheta: | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1055 | assumes "f \<in> \<Theta>[F](g)" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1056 | shows "eventually (\<lambda>x. f x \<noteq> 0) F \<longleftrightarrow> eventually (\<lambda>x. g x \<noteq> 0) F" | 
| 74324 | 1057 | proof - | 
| 1058 | have "eventually (\<lambda>x. g x \<noteq> 0) F" | |
| 1059 | if A: "f \<in> \<Theta>[F](g)" and B: "eventually (\<lambda>x. f x \<noteq> 0) F" | |
| 1060 | for f g :: "'a \<Rightarrow> 'b" | |
| 1061 | proof - | |
| 1062 | from A obtain c1 c2 where | |
| 1063 | "\<forall>\<^sub>F x in F. norm (f x) \<le> c1 * norm (g x)" | |
| 1064 | "\<forall>\<^sub>F x in F. c2 * norm (g x) \<le> norm (f x)" | |
| 1065 | unfolding bigtheta_def by (elim landau_o.bigE landau_omega.bigE IntE) | |
| 1066 | with B show ?thesis by eventually_elim auto | |
| 1067 | qed | |
| 68246 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1068 | with assms show ?thesis by (force simp: bigtheta_sym) | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1069 | qed | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1070 | |
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1071 | |
| 69272 | 1072 | subsection \<open>Landau symbols and limits\<close> | 
| 68246 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1073 | |
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1074 | lemma bigoI_tendsto_norm: | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1075 | fixes f g | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1076 | assumes "((\<lambda>x. norm (f x / g x)) \<longlongrightarrow> c) F" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1077 | assumes "eventually (\<lambda>x. g x \<noteq> 0) F" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1078 | shows "f \<in> O[F](g)" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1079 | proof (rule bigoI) | 
| 74324 | 1080 | from assms have "eventually (\<lambda>x. dist (norm (f x / g x)) c < 1) F" | 
| 68246 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1081 | using tendstoD by force | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1082 | thus "eventually (\<lambda>x. (norm (f x)) \<le> (norm c + 1) * (norm (g x))) F" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1083 | unfolding dist_real_def using assms(2) | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1084 | proof eventually_elim | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1085 | case (elim x) | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1086 | have "(norm (f x)) - norm c * (norm (g x)) \<le> norm ((norm (f x)) - c * (norm (g x)))" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1087 | unfolding norm_mult [symmetric] using norm_triangle_ineq2[of "norm (f x)" "c * norm (g x)"] | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1088 | by (simp add: norm_mult abs_mult) | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1089 | also from elim have "\<dots> = norm (norm (g x)) * norm (norm (f x / g x) - c)" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1090 | unfolding norm_mult [symmetric] by (simp add: algebra_simps norm_divide) | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1091 | also from elim have "norm (norm (f x / g x) - c) \<le> 1" by simp | 
| 74324 | 1092 | hence "norm (norm (g x)) * norm (norm (f x / g x) - c) \<le> norm (norm (g x)) * 1" | 
| 68246 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1093 | by (rule mult_left_mono) simp_all | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1094 | finally show ?case by (simp add: algebra_simps) | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1095 | qed | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1096 | qed | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1097 | |
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1098 | lemma bigoI_tendsto: | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1099 | assumes "((\<lambda>x. f x / g x) \<longlongrightarrow> c) F" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1100 | assumes "eventually (\<lambda>x. g x \<noteq> 0) F" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1101 | shows "f \<in> O[F](g)" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1102 | using assms by (rule bigoI_tendsto_norm[OF tendsto_norm]) | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1103 | |
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1104 | lemma bigomegaI_tendsto_norm: | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1105 | assumes c_not_0: "(c::real) \<noteq> 0" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1106 | assumes lim: "((\<lambda>x. norm (f x / g x)) \<longlongrightarrow> c) F" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1107 | shows "f \<in> \<Omega>[F](g)" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1108 | proof (cases "F = bot") | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1109 | case False | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1110 | show ?thesis | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1111 | proof (rule landau_omega.bigI) | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1112 | from lim have "c \<ge> 0" by (rule tendsto_lowerbound) (insert False, simp_all) | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1113 | with c_not_0 have "c > 0" by simp | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1114 | with c_not_0 show "c/2 > 0" by simp | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1115 | from lim have ev: "\<And>\<epsilon>. \<epsilon> > 0 \<Longrightarrow> eventually (\<lambda>x. norm (norm (f x / g x) - c) < \<epsilon>) F" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1116 | by (subst (asm) tendsto_iff) (simp add: dist_real_def) | 
| 69272 | 1117 | from ev[OF \<open>c/2 > 0\<close>] show "eventually (\<lambda>x. (norm (f x)) \<ge> c/2 * (norm (g x))) F" | 
| 68246 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1118 | proof (eventually_elim) | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1119 | fix x assume B: "norm (norm (f x / g x) - c) < c / 2" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1120 | from B have g: "g x \<noteq> 0" by auto | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1121 | from B have "-c/2 < -norm (norm (f x / g x) - c)" by simp | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1122 | also have "... \<le> norm (f x / g x) - c" by simp | 
| 74324 | 1123 | finally show "(norm (f x)) \<ge> c/2 * (norm (g x))" using g | 
| 68246 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1124 | by (simp add: field_simps norm_mult norm_divide) | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1125 | qed | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1126 | qed | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1127 | qed simp | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1128 | |
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1129 | lemma bigomegaI_tendsto: | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1130 | assumes c_not_0: "(c::real) \<noteq> 0" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1131 | assumes lim: "((\<lambda>x. f x / g x) \<longlongrightarrow> c) F" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1132 | shows "f \<in> \<Omega>[F](g)" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1133 | by (rule bigomegaI_tendsto_norm[OF _ tendsto_norm, of c]) (insert assms, simp_all) | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1134 | |
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1135 | lemma smallomegaI_filterlim_at_top_norm: | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1136 | assumes lim: "filterlim (\<lambda>x. norm (f x / g x)) at_top F" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1137 | shows "f \<in> \<omega>[F](g)" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1138 | proof (rule landau_omega.smallI) | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1139 | fix c :: real assume c_pos: "c > 0" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1140 | from lim have ev: "eventually (\<lambda>x. norm (f x / g x) \<ge> c) F" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1141 | by (subst (asm) filterlim_at_top) simp | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1142 | thus "eventually (\<lambda>x. (norm (f x)) \<ge> c * (norm (g x))) F" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1143 | proof eventually_elim | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1144 | fix x assume A: "norm (f x / g x) \<ge> c" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1145 | from A c_pos have "g x \<noteq> 0" by auto | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1146 | with A show "(norm (f x)) \<ge> c * (norm (g x))" by (simp add: field_simps norm_divide) | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1147 | qed | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1148 | qed | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1149 | |
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1150 | lemma smallomegaI_filterlim_at_infinity: | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1151 | assumes lim: "filterlim (\<lambda>x. f x / g x) at_infinity F" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1152 | shows "f \<in> \<omega>[F](g)" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1153 | proof (rule smallomegaI_filterlim_at_top_norm) | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1154 | from lim show "filterlim (\<lambda>x. norm (f x / g x)) at_top F" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1155 | by (rule filterlim_at_infinity_imp_norm_at_top) | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1156 | qed | 
| 74324 | 1157 | |
| 68246 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1158 | lemma smallomegaD_filterlim_at_top_norm: | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1159 | assumes "f \<in> \<omega>[F](g)" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1160 | assumes "eventually (\<lambda>x. g x \<noteq> 0) F" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1161 | shows "LIM x F. norm (f x / g x) :> at_top" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1162 | proof (subst filterlim_at_top_gt, clarify) | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1163 | fix c :: real assume c: "c > 0" | 
| 74324 | 1164 | from landau_omega.smallD[OF assms(1) this] assms(2) | 
| 1165 | show "eventually (\<lambda>x. norm (f x / g x) \<ge> c) F" | |
| 68246 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1166 | by eventually_elim (simp add: field_simps norm_divide) | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1167 | qed | 
| 74324 | 1168 | |
| 68246 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1169 | lemma smallomegaD_filterlim_at_infinity: | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1170 | assumes "f \<in> \<omega>[F](g)" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1171 | assumes "eventually (\<lambda>x. g x \<noteq> 0) F" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1172 | shows "LIM x F. f x / g x :> at_infinity" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1173 | using assms by (intro filterlim_norm_at_top_imp_at_infinity smallomegaD_filterlim_at_top_norm) | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1174 | |
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1175 | lemma smallomega_1_conv_filterlim: "f \<in> \<omega>[F](\<lambda>_. 1) \<longleftrightarrow> filterlim f at_infinity F" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1176 | by (auto intro: smallomegaI_filterlim_at_infinity dest: smallomegaD_filterlim_at_infinity) | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1177 | |
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1178 | lemma smalloI_tendsto: | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1179 | assumes lim: "((\<lambda>x. f x / g x) \<longlongrightarrow> 0) F" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1180 | assumes "eventually (\<lambda>x. g x \<noteq> 0) F" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1181 | shows "f \<in> o[F](g)" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1182 | proof (rule landau_o.smallI) | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1183 | fix c :: real assume c_pos: "c > 0" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1184 | from c_pos and lim have ev: "eventually (\<lambda>x. norm (f x / g x) < c) F" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1185 | by (subst (asm) tendsto_iff) (simp add: dist_real_def) | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1186 | with assms(2) show "eventually (\<lambda>x. (norm (f x)) \<le> c * (norm (g x))) F" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1187 | by eventually_elim (simp add: field_simps norm_divide) | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1188 | qed | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1189 | |
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1190 | lemma smalloD_tendsto: | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1191 | assumes "f \<in> o[F](g)" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1192 | shows "((\<lambda>x. f x / g x) \<longlongrightarrow> 0) F" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1193 | unfolding tendsto_iff | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1194 | proof clarify | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1195 | fix e :: real assume e: "e > 0" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1196 | hence "e/2 > 0" by simp | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1197 | from landau_o.smallD[OF assms this] show "eventually (\<lambda>x. dist (f x / g x) 0 < e) F" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1198 | proof eventually_elim | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1199 | fix x assume "(norm (f x)) \<le> e/2 * (norm (g x))" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1200 | with e have "dist (f x / g x) 0 \<le> e/2" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1201 | by (cases "g x = 0") (simp_all add: dist_real_def norm_divide field_simps) | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1202 | also from e have "... < e" by simp | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1203 | finally show "dist (f x / g x) 0 < e" by simp | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1204 | qed | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1205 | qed | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1206 | |
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1207 | lemma bigthetaI_tendsto_norm: | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1208 | assumes c_not_0: "(c::real) \<noteq> 0" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1209 | assumes lim: "((\<lambda>x. norm (f x / g x)) \<longlongrightarrow> c) F" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1210 | shows "f \<in> \<Theta>[F](g)" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1211 | proof (rule bigthetaI) | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1212 | from c_not_0 have "\<bar>c\<bar> > 0" by simp | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1213 | with lim have "eventually (\<lambda>x. norm (norm (f x / g x) - c) < \<bar>c\<bar>) F" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1214 | by (subst (asm) tendsto_iff) (simp add: dist_real_def) | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1215 | hence g: "eventually (\<lambda>x. g x \<noteq> 0) F" by eventually_elim (auto simp add: field_simps) | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1216 | |
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1217 | from lim g show "f \<in> O[F](g)" by (rule bigoI_tendsto_norm) | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1218 | from c_not_0 and lim show "f \<in> \<Omega>[F](g)" by (rule bigomegaI_tendsto_norm) | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1219 | qed | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1220 | |
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1221 | lemma bigthetaI_tendsto: | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1222 | assumes c_not_0: "(c::real) \<noteq> 0" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1223 | assumes lim: "((\<lambda>x. f x / g x) \<longlongrightarrow> c) F" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1224 | shows "f \<in> \<Theta>[F](g)" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1225 | using assms by (intro bigthetaI_tendsto_norm[OF _ tendsto_norm, of "c"]) simp_all | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1226 | |
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1227 | lemma tendsto_add_smallo: | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1228 | assumes "(f1 \<longlongrightarrow> a) F" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1229 | assumes "f2 \<in> o[F](f1)" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1230 | shows "((\<lambda>x. f1 x + f2 x) \<longlongrightarrow> a) F" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1231 | proof (subst filterlim_cong[OF refl refl]) | 
| 74324 | 1232 | from landau_o.smallD[OF assms(2) zero_less_one] | 
| 68246 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1233 | have "eventually (\<lambda>x. norm (f2 x) \<le> norm (f1 x)) F" by simp | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1234 | thus "eventually (\<lambda>x. f1 x + f2 x = f1 x * (1 + f2 x / f1 x)) F" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1235 | by eventually_elim (auto simp: field_simps) | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1236 | next | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1237 | from assms(1) show "((\<lambda>x. f1 x * (1 + f2 x / f1 x)) \<longlongrightarrow> a) F" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1238 | by (force intro: tendsto_eq_intros smalloD_tendsto[OF assms(2)]) | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1239 | qed | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1240 | |
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1241 | lemma tendsto_diff_smallo: | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1242 | shows "(f1 \<longlongrightarrow> a) F \<Longrightarrow> f2 \<in> o[F](f1) \<Longrightarrow> ((\<lambda>x. f1 x - f2 x) \<longlongrightarrow> a) F" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1243 | using tendsto_add_smallo[of f1 a F "\<lambda>x. -f2 x"] by simp | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1244 | |
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1245 | lemma tendsto_add_smallo_iff: | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1246 | assumes "f2 \<in> o[F](f1)" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1247 | shows "(f1 \<longlongrightarrow> a) F \<longleftrightarrow> ((\<lambda>x. f1 x + f2 x) \<longlongrightarrow> a) F" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1248 | proof | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1249 | assume "((\<lambda>x. f1 x + f2 x) \<longlongrightarrow> a) F" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1250 | hence "((\<lambda>x. f1 x + f2 x - f2 x) \<longlongrightarrow> a) F" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1251 | by (rule tendsto_diff_smallo) (simp add: landau_o.small.plus_absorb2 assms) | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1252 | thus "(f1 \<longlongrightarrow> a) F" by simp | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1253 | qed (rule tendsto_add_smallo[OF _ assms]) | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1254 | |
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1255 | lemma tendsto_diff_smallo_iff: | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1256 | shows "f2 \<in> o[F](f1) \<Longrightarrow> (f1 \<longlongrightarrow> a) F \<longleftrightarrow> ((\<lambda>x. f1 x - f2 x) \<longlongrightarrow> a) F" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1257 | using tendsto_add_smallo_iff[of "\<lambda>x. -f2 x" F f1 a] by simp | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1258 | |
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1259 | lemma tendsto_divide_smallo: | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1260 | assumes "((\<lambda>x. f1 x / g1 x) \<longlongrightarrow> a) F" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1261 | assumes "f2 \<in> o[F](f1)" "g2 \<in> o[F](g1)" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1262 | assumes "eventually (\<lambda>x. g1 x \<noteq> 0) F" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1263 | shows "((\<lambda>x. (f1 x + f2 x) / (g1 x + g2 x)) \<longlongrightarrow> a) F" (is "(?f \<longlongrightarrow> _) _") | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1264 | proof (subst tendsto_cong) | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1265 | let ?f' = "\<lambda>x. (f1 x / g1 x) * (1 + f2 x / f1 x) / (1 + g2 x / g1 x)" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1266 | |
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1267 | have "(?f' \<longlongrightarrow> a * (1 + 0) / (1 + 0)) F" | 
| 74324 | 1268 | by (rule tendsto_mult tendsto_divide tendsto_add assms tendsto_const | 
| 68246 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1269 | smalloD_tendsto[OF assms(2)] smalloD_tendsto[OF assms(3)])+ simp_all | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1270 | thus "(?f' \<longlongrightarrow> a) F" by simp | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1271 | |
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1272 | have "(1/2::real) > 0" by simp | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1273 | from landau_o.smallD[OF assms(2) this] landau_o.smallD[OF assms(3) this] | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1274 | have "eventually (\<lambda>x. norm (f2 x) \<le> norm (f1 x)/2) F" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1275 | "eventually (\<lambda>x. norm (g2 x) \<le> norm (g1 x)/2) F" by simp_all | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1276 | with assms(4) show "eventually (\<lambda>x. ?f x = ?f' x) F" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1277 | proof eventually_elim | 
| 74324 | 1278 | fix x assume A: "norm (f2 x) \<le> norm (f1 x)/2" and | 
| 68246 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1279 | B: "norm (g2 x) \<le> norm (g1 x)/2" and C: "g1 x \<noteq> 0" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1280 | show "?f x = ?f' x" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1281 | proof (cases "f1 x = 0") | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1282 | assume D: "f1 x \<noteq> 0" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1283 | from D have "f1 x + f2 x = f1 x * (1 + f2 x/f1 x)" by (simp add: field_simps) | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1284 | moreover from C have "g1 x + g2 x = g1 x * (1 + g2 x/g1 x)" by (simp add: field_simps) | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1285 | ultimately have "?f x = (f1 x * (1 + f2 x/f1 x)) / (g1 x * (1 + g2 x/g1 x))" by (simp only:) | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1286 | also have "... = ?f' x" by simp | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1287 | finally show ?thesis . | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1288 | qed (insert A, simp) | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1289 | qed | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1290 | qed | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1291 | |
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1292 | |
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1293 | lemma bigo_powr: | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1294 | fixes f :: "'a \<Rightarrow> real" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1295 | assumes "f \<in> O[F](g)" "p \<ge> 0" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1296 | shows "(\<lambda>x. \<bar>f x\<bar> powr p) \<in> O[F](\<lambda>x. \<bar>g x\<bar> powr p)" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1297 | proof- | 
| 74324 | 1298 | from assms(1) obtain c where c: "c > 0" and *: "\<forall>\<^sub>F x in F. norm (f x) \<le> c * norm (g x)" | 
| 1299 | by (elim landau_o.bigE landau_omega.bigE IntE) | |
| 1300 | from assms(2) * have "eventually (\<lambda>x. (norm (f x)) powr p \<le> (c * norm (g x)) powr p) F" | |
| 68246 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1301 | by (auto elim!: eventually_mono intro!: powr_mono2) | 
| 74324 | 1302 | with c show "(\<lambda>x. \<bar>f x\<bar> powr p) \<in> O[F](\<lambda>x. \<bar>g x\<bar> powr p)" | 
| 68246 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1303 | by (intro bigoI[of _ "c powr p"]) (simp_all add: powr_mult) | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1304 | qed | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1305 | |
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1306 | lemma smallo_powr: | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1307 | fixes f :: "'a \<Rightarrow> real" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1308 | assumes "f \<in> o[F](g)" "p > 0" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1309 | shows "(\<lambda>x. \<bar>f x\<bar> powr p) \<in> o[F](\<lambda>x. \<bar>g x\<bar> powr p)" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1310 | proof (rule landau_o.smallI) | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1311 | fix c :: real assume c: "c > 0" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1312 | hence "c powr (1/p) > 0" by simp | 
| 74324 | 1313 | from landau_o.smallD[OF assms(1) this] | 
| 68246 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1314 | show "eventually (\<lambda>x. norm (\<bar>f x\<bar> powr p) \<le> c * norm (\<bar>g x\<bar> powr p)) F" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1315 | proof eventually_elim | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1316 | fix x assume "(norm (f x)) \<le> c powr (1 / p) * (norm (g x))" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1317 | with assms(2) have "(norm (f x)) powr p \<le> (c powr (1 / p) * (norm (g x))) powr p" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1318 | by (intro powr_mono2) simp_all | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1319 | also from assms(2) c have "... = c * (norm (g x)) powr p" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1320 | by (simp add: field_simps powr_mult powr_powr) | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1321 | finally show "norm (\<bar>f x\<bar> powr p) \<le> c * norm (\<bar>g x\<bar> powr p)" by simp | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1322 | qed | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1323 | qed | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1324 | |
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1325 | lemma smallo_powr_nonneg: | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1326 | fixes f :: "'a \<Rightarrow> real" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1327 | assumes "f \<in> o[F](g)" "p > 0" "eventually (\<lambda>x. f x \<ge> 0) F" "eventually (\<lambda>x. g x \<ge> 0) F" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1328 | shows "(\<lambda>x. f x powr p) \<in> o[F](\<lambda>x. g x powr p)" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1329 | proof - | 
| 74324 | 1330 | from assms(3) have "(\<lambda>x. f x powr p) \<in> \<Theta>[F](\<lambda>x. \<bar>f x\<bar> powr p)" | 
| 68246 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1331 | by (intro bigthetaI_cong) (auto elim!: eventually_mono) | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1332 | also have "(\<lambda>x. \<bar>f x\<bar> powr p) \<in> o[F](\<lambda>x. \<bar>g x\<bar> powr p)" by (intro smallo_powr) fact+ | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1333 | also from assms(4) have "(\<lambda>x. \<bar>g x\<bar> powr p) \<in> \<Theta>[F](\<lambda>x. g x powr p)" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1334 | by (intro bigthetaI_cong) (auto elim!: eventually_mono) | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1335 | finally show ?thesis . | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1336 | qed | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1337 | |
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1338 | lemma bigtheta_powr: | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1339 | fixes f :: "'a \<Rightarrow> real" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1340 | shows "f \<in> \<Theta>[F](g) \<Longrightarrow> (\<lambda>x. \<bar>f x\<bar> powr p) \<in> \<Theta>[F](\<lambda>x. \<bar>g x\<bar> powr p)" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1341 | apply (cases "p < 0") | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1342 | apply (subst bigtheta_inverse[symmetric], subst (1 2) powr_minus[symmetric]) | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1343 | unfolding bigtheta_def apply (auto simp: bigomega_iff_bigo intro!: bigo_powr) | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1344 | done | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1345 | |
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1346 | lemma bigo_powr_nonneg: | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1347 | fixes f :: "'a \<Rightarrow> real" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1348 | assumes "f \<in> O[F](g)" "p \<ge> 0" "eventually (\<lambda>x. f x \<ge> 0) F" "eventually (\<lambda>x. g x \<ge> 0) F" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1349 | shows "(\<lambda>x. f x powr p) \<in> O[F](\<lambda>x. g x powr p)" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1350 | proof - | 
| 74324 | 1351 | from assms(3) have "(\<lambda>x. f x powr p) \<in> \<Theta>[F](\<lambda>x. \<bar>f x\<bar> powr p)" | 
| 68246 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1352 | by (intro bigthetaI_cong) (auto elim!: eventually_mono) | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1353 | also have "(\<lambda>x. \<bar>f x\<bar> powr p) \<in> O[F](\<lambda>x. \<bar>g x\<bar> powr p)" by (intro bigo_powr) fact+ | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1354 | also from assms(4) have "(\<lambda>x. \<bar>g x\<bar> powr p) \<in> \<Theta>[F](\<lambda>x. g x powr p)" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1355 | by (intro bigthetaI_cong) (auto elim!: eventually_mono) | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1356 | finally show ?thesis . | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1357 | qed | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1358 | |
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1359 | lemma zero_in_smallo [simp]: "(\<lambda>_. 0) \<in> o[F](f)" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1360 | by (intro landau_o.smallI) simp_all | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1361 | |
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1362 | lemma zero_in_bigo [simp]: "(\<lambda>_. 0) \<in> O[F](f)" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1363 | by (intro landau_o.bigI[of 1]) simp_all | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1364 | |
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1365 | lemma in_bigomega_zero [simp]: "f \<in> \<Omega>[F](\<lambda>x. 0)" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1366 | by (rule landau_omega.bigI[of 1]) simp_all | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1367 | |
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1368 | lemma in_smallomega_zero [simp]: "f \<in> \<omega>[F](\<lambda>x. 0)" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1369 | by (simp add: smallomega_iff_smallo) | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1370 | |
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1371 | |
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1372 | lemma in_smallo_zero_iff [simp]: "f \<in> o[F](\<lambda>_. 0) \<longleftrightarrow> eventually (\<lambda>x. f x = 0) F" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1373 | proof | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1374 | assume "f \<in> o[F](\<lambda>_. 0)" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1375 | from landau_o.smallD[OF this, of 1] show "eventually (\<lambda>x. f x = 0) F" by simp | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1376 | next | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1377 | assume "eventually (\<lambda>x. f x = 0) F" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1378 | hence "\<forall>c>0. eventually (\<lambda>x. (norm (f x)) \<le> c * \<bar>0\<bar>) F" by simp | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1379 | thus "f \<in> o[F](\<lambda>_. 0)" unfolding smallo_def by simp | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1380 | qed | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1381 | |
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1382 | lemma in_bigo_zero_iff [simp]: "f \<in> O[F](\<lambda>_. 0) \<longleftrightarrow> eventually (\<lambda>x. f x = 0) F" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1383 | proof | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1384 | assume "f \<in> O[F](\<lambda>_. 0)" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1385 | thus "eventually (\<lambda>x. f x = 0) F" by (elim landau_o.bigE) simp | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1386 | next | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1387 | assume "eventually (\<lambda>x. f x = 0) F" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1388 | hence "eventually (\<lambda>x. (norm (f x)) \<le> 1 * \<bar>0\<bar>) F" by simp | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1389 | thus "f \<in> O[F](\<lambda>_. 0)" by (intro landau_o.bigI[of 1]) simp_all | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1390 | qed | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1391 | |
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1392 | lemma zero_in_smallomega_iff [simp]: "(\<lambda>_. 0) \<in> \<omega>[F](f) \<longleftrightarrow> eventually (\<lambda>x. f x = 0) F" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1393 | by (simp add: smallomega_iff_smallo) | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1394 | |
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1395 | lemma zero_in_bigomega_iff [simp]: "(\<lambda>_. 0) \<in> \<Omega>[F](f) \<longleftrightarrow> eventually (\<lambda>x. f x = 0) F" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1396 | by (simp add: bigomega_iff_bigo) | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1397 | |
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1398 | lemma zero_in_bigtheta_iff [simp]: "(\<lambda>_. 0) \<in> \<Theta>[F](f) \<longleftrightarrow> eventually (\<lambda>x. f x = 0) F" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1399 | unfolding bigtheta_def by simp | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1400 | |
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1401 | lemma in_bigtheta_zero_iff [simp]: "f \<in> \<Theta>[F](\<lambda>x. 0) \<longleftrightarrow> eventually (\<lambda>x. f x = 0) F" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1402 | unfolding bigtheta_def by simp | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1403 | |
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1404 | |
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1405 | lemma cmult_in_bigo_iff [simp]: "(\<lambda>x. c * f x) \<in> O[F](g) \<longleftrightarrow> c = 0 \<or> f \<in> O[F](g)" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1406 | and cmult_in_bigo_iff' [simp]: "(\<lambda>x. f x * c) \<in> O[F](g) \<longleftrightarrow> c = 0 \<or> f \<in> O[F](g)" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1407 | and cmult_in_smallo_iff [simp]: "(\<lambda>x. c * f x) \<in> o[F](g) \<longleftrightarrow> c = 0 \<or> f \<in> o[F](g)" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1408 | and cmult_in_smallo_iff' [simp]: "(\<lambda>x. f x * c) \<in> o[F](g) \<longleftrightarrow> c = 0 \<or> f \<in> o[F](g)" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1409 | by (cases "c = 0", simp, simp)+ | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1410 | |
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1411 | lemma bigo_const [simp]: "(\<lambda>_. c) \<in> O[F](\<lambda>_. 1)" by (rule bigoI[of _ "norm c"]) simp | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1412 | |
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1413 | lemma bigo_const_iff [simp]: "(\<lambda>_. c1) \<in> O[F](\<lambda>_. c2) \<longleftrightarrow> F = bot \<or> c1 = 0 \<or> c2 \<noteq> 0" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1414 | by (cases "c1 = 0"; cases "c2 = 0") | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1415 | (auto simp: bigo_def eventually_False intro: exI[of _ 1] exI[of _ "norm c1 / norm c2"]) | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1416 | |
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1417 | lemma bigomega_const_iff [simp]: "(\<lambda>_. c1) \<in> \<Omega>[F](\<lambda>_. c2) \<longleftrightarrow> F = bot \<or> c1 \<noteq> 0 \<or> c2 = 0" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1418 | by (cases "c1 = 0"; cases "c2 = 0") | 
| 74324 | 1419 | (auto simp: bigomega_def eventually_False mult_le_0_iff | 
| 68246 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1420 | intro: exI[of _ 1] exI[of _ "norm c1 / norm c2"]) | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1421 | |
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1422 | lemma smallo_real_nat_transfer: | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1423 | "(f :: real \<Rightarrow> real) \<in> o(g) \<Longrightarrow> (\<lambda>x::nat. f (real x)) \<in> o(\<lambda>x. g (real x))" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1424 | by (rule landau_o.small.compose[OF _ filterlim_real_sequentially]) | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1425 | |
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1426 | lemma bigo_real_nat_transfer: | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1427 | "(f :: real \<Rightarrow> real) \<in> O(g) \<Longrightarrow> (\<lambda>x::nat. f (real x)) \<in> O(\<lambda>x. g (real x))" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1428 | by (rule landau_o.big.compose[OF _ filterlim_real_sequentially]) | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1429 | |
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1430 | lemma smallomega_real_nat_transfer: | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1431 | "(f :: real \<Rightarrow> real) \<in> \<omega>(g) \<Longrightarrow> (\<lambda>x::nat. f (real x)) \<in> \<omega>(\<lambda>x. g (real x))" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1432 | by (rule landau_omega.small.compose[OF _ filterlim_real_sequentially]) | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1433 | |
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1434 | lemma bigomega_real_nat_transfer: | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1435 | "(f :: real \<Rightarrow> real) \<in> \<Omega>(g) \<Longrightarrow> (\<lambda>x::nat. f (real x)) \<in> \<Omega>(\<lambda>x. g (real x))" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1436 | by (rule landau_omega.big.compose[OF _ filterlim_real_sequentially]) | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1437 | |
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1438 | lemma bigtheta_real_nat_transfer: | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1439 | "(f :: real \<Rightarrow> real) \<in> \<Theta>(g) \<Longrightarrow> (\<lambda>x::nat. f (real x)) \<in> \<Theta>(\<lambda>x. g (real x))" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1440 | unfolding bigtheta_def using bigo_real_nat_transfer bigomega_real_nat_transfer by blast | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1441 | |
| 74324 | 1442 | lemmas landau_real_nat_transfer [intro] = | 
| 1443 | bigo_real_nat_transfer smallo_real_nat_transfer bigomega_real_nat_transfer | |
| 68246 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1444 | smallomega_real_nat_transfer bigtheta_real_nat_transfer | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1445 | |
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1446 | |
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1447 | lemma landau_symbol_if_at_top_eq [simp]: | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1448 | assumes "landau_symbol L L' Lr" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1449 | shows "L at_top (\<lambda>x::'a::linordered_semidom. if x = a then f x else g x) = L at_top (g)" | 
| 80175 
200107cdd3ac
Some new simprules – and patches for proofs
 paulson <lp15@cam.ac.uk> parents: 
77491diff
changeset | 1450 | apply (rule landau_symbol.cong[OF assms]) | 
| 
200107cdd3ac
Some new simprules – and patches for proofs
 paulson <lp15@cam.ac.uk> parents: 
77491diff
changeset | 1451 | by (auto simp add: frequently_def eventually_at_top_linorder dest!: spec [where x= "a + 1"]) | 
| 68246 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1452 | |
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1453 | lemmas landau_symbols_if_at_top_eq [simp] = landau_symbols[THEN landau_symbol_if_at_top_eq] | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1454 | |
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1455 | |
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1456 | |
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1457 | lemma sum_in_smallo: | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1458 | assumes "f \<in> o[F](h)" "g \<in> o[F](h)" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1459 | shows "(\<lambda>x. f x + g x) \<in> o[F](h)" "(\<lambda>x. f x - g x) \<in> o[F](h)" | 
| 74324 | 1460 | proof - | 
| 1461 | have "(\<lambda>x. f x + g x) \<in> o[F](h)" if "f \<in> o[F](h)" "g \<in> o[F](h)" for f g | |
| 1462 | proof (rule landau_o.smallI) | |
| 1463 | fix c :: real assume "c > 0" | |
| 1464 | hence "c/2 > 0" by simp | |
| 1465 | from that[THEN landau_o.smallD[OF _ this]] | |
| 1466 | show "eventually (\<lambda>x. norm (f x + g x) \<le> c * (norm (h x))) F" | |
| 1467 | by eventually_elim (auto intro: order.trans[OF norm_triangle_ineq]) | |
| 1468 | qed | |
| 68246 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1469 | from this[of f g] this[of f "\<lambda>x. -g x"] assms | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1470 | show "(\<lambda>x. f x + g x) \<in> o[F](h)" "(\<lambda>x. f x - g x) \<in> o[F](h)" by simp_all | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1471 | qed | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1472 | |
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1473 | lemma big_sum_in_smallo: | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1474 | assumes "\<And>x. x \<in> A \<Longrightarrow> f x \<in> o[F](g)" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1475 | shows "(\<lambda>x. sum (\<lambda>y. f y x) A) \<in> o[F](g)" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1476 | using assms by (induction A rule: infinite_finite_induct) (auto intro: sum_in_smallo) | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1477 | |
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1478 | lemma sum_in_bigo: | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1479 | assumes "f \<in> O[F](h)" "g \<in> O[F](h)" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1480 | shows "(\<lambda>x. f x + g x) \<in> O[F](h)" "(\<lambda>x. f x - g x) \<in> O[F](h)" | 
| 74324 | 1481 | proof - | 
| 1482 | have "(\<lambda>x. f x + g x) \<in> O[F](h)" if "f \<in> O[F](h)" "g \<in> O[F](h)" for f g | |
| 1483 | proof - | |
| 1484 | from that obtain c1 c2 where *: "c1 > 0" "c2 > 0" | |
| 1485 | and **: "\<forall>\<^sub>F x in F. norm (f x) \<le> c1 * norm (h x)" | |
| 1486 | "\<forall>\<^sub>F x in F. norm (g x) \<le> c2 * norm (h x)" | |
| 1487 | by (elim landau_o.bigE) | |
| 1488 | from ** have "eventually (\<lambda>x. norm (f x + g x) \<le> (c1 + c2) * (norm (h x))) F" | |
| 68246 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1489 | by eventually_elim (auto simp: algebra_simps intro: order.trans[OF norm_triangle_ineq]) | 
| 74324 | 1490 | then show ?thesis by (rule bigoI) | 
| 1491 | qed | |
| 1492 | from assms this[of f g] this[of f "\<lambda>x. - g x"] | |
| 1493 | show "(\<lambda>x. f x + g x) \<in> O[F](h)" "(\<lambda>x. f x - g x) \<in> O[F](h)" by simp_all | |
| 68246 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1494 | qed | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1495 | |
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1496 | lemma big_sum_in_bigo: | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1497 | assumes "\<And>x. x \<in> A \<Longrightarrow> f x \<in> O[F](g)" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1498 | shows "(\<lambda>x. sum (\<lambda>y. f y x) A) \<in> O[F](g)" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1499 | using assms by (induction A rule: infinite_finite_induct) (auto intro: sum_in_bigo) | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1500 | |
| 80653 
b98f1057da0e
New library material; also fixed the spelling error powr_ge_pzero -> powr_ge_zero
 paulson <lp15@cam.ac.uk> parents: 
80175diff
changeset | 1501 | lemma smallo_multiples: | 
| 
b98f1057da0e
New library material; also fixed the spelling error powr_ge_pzero -> powr_ge_zero
 paulson <lp15@cam.ac.uk> parents: 
80175diff
changeset | 1502 | assumes f: "f \<in> o(real)" and "k>0" | 
| 
b98f1057da0e
New library material; also fixed the spelling error powr_ge_pzero -> powr_ge_zero
 paulson <lp15@cam.ac.uk> parents: 
80175diff
changeset | 1503 | shows "(\<lambda>n. f (k * n)) \<in> o(real)" | 
| 
b98f1057da0e
New library material; also fixed the spelling error powr_ge_pzero -> powr_ge_zero
 paulson <lp15@cam.ac.uk> parents: 
80175diff
changeset | 1504 | proof (clarsimp simp: smallo_def) | 
| 
b98f1057da0e
New library material; also fixed the spelling error powr_ge_pzero -> powr_ge_zero
 paulson <lp15@cam.ac.uk> parents: 
80175diff
changeset | 1505 | fix c::real | 
| 
b98f1057da0e
New library material; also fixed the spelling error powr_ge_pzero -> powr_ge_zero
 paulson <lp15@cam.ac.uk> parents: 
80175diff
changeset | 1506 | assume "c>0" | 
| 
b98f1057da0e
New library material; also fixed the spelling error powr_ge_pzero -> powr_ge_zero
 paulson <lp15@cam.ac.uk> parents: 
80175diff
changeset | 1507 | then have "c/k > 0" | 
| 
b98f1057da0e
New library material; also fixed the spelling error powr_ge_pzero -> powr_ge_zero
 paulson <lp15@cam.ac.uk> parents: 
80175diff
changeset | 1508 | by (simp add: assms) | 
| 
b98f1057da0e
New library material; also fixed the spelling error powr_ge_pzero -> powr_ge_zero
 paulson <lp15@cam.ac.uk> parents: 
80175diff
changeset | 1509 | with assms have "\<forall>\<^sub>F n in sequentially. \<bar>f n\<bar> \<le> c / real k * n" | 
| 
b98f1057da0e
New library material; also fixed the spelling error powr_ge_pzero -> powr_ge_zero
 paulson <lp15@cam.ac.uk> parents: 
80175diff
changeset | 1510 | by (force simp: smallo_def del: divide_const_simps) | 
| 
b98f1057da0e
New library material; also fixed the spelling error powr_ge_pzero -> powr_ge_zero
 paulson <lp15@cam.ac.uk> parents: 
80175diff
changeset | 1511 | then obtain N where "\<And>n. n\<ge>N \<Longrightarrow> \<bar>f n\<bar> \<le> c/k * n" | 
| 
b98f1057da0e
New library material; also fixed the spelling error powr_ge_pzero -> powr_ge_zero
 paulson <lp15@cam.ac.uk> parents: 
80175diff
changeset | 1512 | by (meson eventually_at_top_linorder) | 
| 
b98f1057da0e
New library material; also fixed the spelling error powr_ge_pzero -> powr_ge_zero
 paulson <lp15@cam.ac.uk> parents: 
80175diff
changeset | 1513 | then have "\<And>m. (k*m)\<ge>N \<Longrightarrow> \<bar>f (k*m)\<bar> \<le> c/k * (k*m)" | 
| 
b98f1057da0e
New library material; also fixed the spelling error powr_ge_pzero -> powr_ge_zero
 paulson <lp15@cam.ac.uk> parents: 
80175diff
changeset | 1514 | by blast | 
| 
b98f1057da0e
New library material; also fixed the spelling error powr_ge_pzero -> powr_ge_zero
 paulson <lp15@cam.ac.uk> parents: 
80175diff
changeset | 1515 | with \<open>k>0\<close> have "\<forall>\<^sub>F m in sequentially. \<bar>f (k*m)\<bar> \<le> c/k * (k*m)" | 
| 
b98f1057da0e
New library material; also fixed the spelling error powr_ge_pzero -> powr_ge_zero
 paulson <lp15@cam.ac.uk> parents: 
80175diff
changeset | 1516 | by (smt (verit, del_insts) One_nat_def Suc_leI eventually_at_top_linorderI mult_1_left mult_le_mono) | 
| 
b98f1057da0e
New library material; also fixed the spelling error powr_ge_pzero -> powr_ge_zero
 paulson <lp15@cam.ac.uk> parents: 
80175diff
changeset | 1517 | then show "\<forall>\<^sub>F n in sequentially. \<bar>f (k * n)\<bar> \<le> c * n" | 
| 
b98f1057da0e
New library material; also fixed the spelling error powr_ge_pzero -> powr_ge_zero
 paulson <lp15@cam.ac.uk> parents: 
80175diff
changeset | 1518 | by eventually_elim (use \<open>k>0\<close> in auto) | 
| 
b98f1057da0e
New library material; also fixed the spelling error powr_ge_pzero -> powr_ge_zero
 paulson <lp15@cam.ac.uk> parents: 
80175diff
changeset | 1519 | qed | 
| 
b98f1057da0e
New library material; also fixed the spelling error powr_ge_pzero -> powr_ge_zero
 paulson <lp15@cam.ac.uk> parents: 
80175diff
changeset | 1520 | |
| 
b98f1057da0e
New library material; also fixed the spelling error powr_ge_pzero -> powr_ge_zero
 paulson <lp15@cam.ac.uk> parents: 
80175diff
changeset | 1521 | lemma maxmin_in_smallo: | 
| 
b98f1057da0e
New library material; also fixed the spelling error powr_ge_pzero -> powr_ge_zero
 paulson <lp15@cam.ac.uk> parents: 
80175diff
changeset | 1522 | assumes "f \<in> o[F](h)" "g \<in> o[F](h)" | 
| 
b98f1057da0e
New library material; also fixed the spelling error powr_ge_pzero -> powr_ge_zero
 paulson <lp15@cam.ac.uk> parents: 
80175diff
changeset | 1523 | shows "(\<lambda>k. max (f k) (g k)) \<in> o[F](h)" "(\<lambda>k. min (f k) (g k)) \<in> o[F](h)" | 
| 
b98f1057da0e
New library material; also fixed the spelling error powr_ge_pzero -> powr_ge_zero
 paulson <lp15@cam.ac.uk> parents: 
80175diff
changeset | 1524 | proof - | 
| 
b98f1057da0e
New library material; also fixed the spelling error powr_ge_pzero -> powr_ge_zero
 paulson <lp15@cam.ac.uk> parents: 
80175diff
changeset | 1525 |   { fix c::real
 | 
| 
b98f1057da0e
New library material; also fixed the spelling error powr_ge_pzero -> powr_ge_zero
 paulson <lp15@cam.ac.uk> parents: 
80175diff
changeset | 1526 | assume "c>0" | 
| 
b98f1057da0e
New library material; also fixed the spelling error powr_ge_pzero -> powr_ge_zero
 paulson <lp15@cam.ac.uk> parents: 
80175diff
changeset | 1527 | with assms smallo_def | 
| 
b98f1057da0e
New library material; also fixed the spelling error powr_ge_pzero -> powr_ge_zero
 paulson <lp15@cam.ac.uk> parents: 
80175diff
changeset | 1528 | have "\<forall>\<^sub>F x in F. norm (f x) \<le> c * norm(h x)" "\<forall>\<^sub>F x in F. norm(g x) \<le> c * norm(h x)" | 
| 
b98f1057da0e
New library material; also fixed the spelling error powr_ge_pzero -> powr_ge_zero
 paulson <lp15@cam.ac.uk> parents: 
80175diff
changeset | 1529 | by (auto simp: smallo_def) | 
| 
b98f1057da0e
New library material; also fixed the spelling error powr_ge_pzero -> powr_ge_zero
 paulson <lp15@cam.ac.uk> parents: 
80175diff
changeset | 1530 | then have "\<forall>\<^sub>F x in F. norm (max (f x) (g x)) \<le> c * norm(h x) \<and> norm (min (f x) (g x)) \<le> c * norm(h x)" | 
| 
b98f1057da0e
New library material; also fixed the spelling error powr_ge_pzero -> powr_ge_zero
 paulson <lp15@cam.ac.uk> parents: 
80175diff
changeset | 1531 | by (smt (verit) eventually_elim2 max_def min_def) | 
| 
b98f1057da0e
New library material; also fixed the spelling error powr_ge_pzero -> powr_ge_zero
 paulson <lp15@cam.ac.uk> parents: 
80175diff
changeset | 1532 | } with assms | 
| 
b98f1057da0e
New library material; also fixed the spelling error powr_ge_pzero -> powr_ge_zero
 paulson <lp15@cam.ac.uk> parents: 
80175diff
changeset | 1533 | show "(\<lambda>x. max (f x) (g x)) \<in> o[F](h)" "(\<lambda>x. min (f x) (g x)) \<in> o[F](h)" | 
| 
b98f1057da0e
New library material; also fixed the spelling error powr_ge_pzero -> powr_ge_zero
 paulson <lp15@cam.ac.uk> parents: 
80175diff
changeset | 1534 | by (smt (verit) eventually_elim2 landau_o.smallI)+ | 
| 
b98f1057da0e
New library material; also fixed the spelling error powr_ge_pzero -> powr_ge_zero
 paulson <lp15@cam.ac.uk> parents: 
80175diff
changeset | 1535 | qed | 
| 
b98f1057da0e
New library material; also fixed the spelling error powr_ge_pzero -> powr_ge_zero
 paulson <lp15@cam.ac.uk> parents: 
80175diff
changeset | 1536 | |
| 77491 | 1537 | lemma le_imp_bigo_real: | 
| 1538 | assumes "c \<ge> 0" "eventually (\<lambda>x. f x \<le> c * (g x :: real)) F" "eventually (\<lambda>x. 0 \<le> f x) F" | |
| 1539 | shows "f \<in> O[F](g)" | |
| 1540 | proof - | |
| 1541 | have "eventually (\<lambda>x. norm (f x) \<le> c * norm (g x)) F" | |
| 1542 | using assms(2,3) | |
| 1543 | proof eventually_elim | |
| 1544 | case (elim x) | |
| 1545 | have "norm (f x) \<le> c * g x" using elim by simp | |
| 1546 | also have "\<dots> \<le> c * norm (g x)" by (intro mult_left_mono assms) auto | |
| 1547 | finally show ?case . | |
| 1548 | qed | |
| 1549 | thus ?thesis by (intro bigoI[of _ c]) auto | |
| 1550 | qed | |
| 1551 | ||
| 68246 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1552 | context landau_symbol | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1553 | begin | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1554 | |
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1555 | lemma mult_cancel_left: | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1556 | assumes "f1 \<in> \<Theta>[F](g1)" and "eventually (\<lambda>x. g1 x \<noteq> 0) F" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1557 | notes [trans] = bigtheta_trans1 bigtheta_trans2 | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1558 | shows "(\<lambda>x. f1 x * f2 x) \<in> L F (\<lambda>x. g1 x * g2 x) \<longleftrightarrow> f2 \<in> L F (g2)" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1559 | proof | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1560 | assume A: "(\<lambda>x. f1 x * f2 x) \<in> L F (\<lambda>x. g1 x * g2 x)" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1561 | from assms have nz: "eventually (\<lambda>x. f1 x \<noteq> 0) F" by (simp add: eventually_nonzero_bigtheta) | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1562 | hence "f2 \<in> \<Theta>[F](\<lambda>x. f1 x * f2 x / f1 x)" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1563 | by (intro bigthetaI_cong) (auto elim!: eventually_mono) | 
| 74324 | 1564 | also from A assms nz have "(\<lambda>x. f1 x * f2 x / f1 x) \<in> L F (\<lambda>x. g1 x * g2 x / f1 x)" | 
| 68246 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1565 | by (intro divide_right) simp_all | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1566 | also from assms nz have "(\<lambda>x. g1 x * g2 x / f1 x) \<in> \<Theta>[F](\<lambda>x. g1 x * g2 x / g1 x)" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1567 | by (intro landau_theta.mult landau_theta.divide) (simp_all add: bigtheta_sym) | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1568 | also from assms have "(\<lambda>x. g1 x * g2 x / g1 x) \<in> \<Theta>[F](g2)" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1569 | by (intro bigthetaI_cong) (auto elim!: eventually_mono) | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1570 | finally show "f2 \<in> L F (g2)" . | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1571 | next | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1572 | assume "f2 \<in> L F (g2)" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1573 | hence "(\<lambda>x. f1 x * f2 x) \<in> L F (\<lambda>x. f1 x * g2 x)" by (rule mult_left) | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1574 | also have "(\<lambda>x. f1 x * g2 x) \<in> \<Theta>[F](\<lambda>x. g1 x * g2 x)" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1575 | by (intro landau_theta.mult_right assms) | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1576 | finally show "(\<lambda>x. f1 x * f2 x) \<in> L F (\<lambda>x. g1 x * g2 x)" . | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1577 | qed | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1578 | |
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1579 | lemma mult_cancel_right: | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1580 | assumes "f2 \<in> \<Theta>[F](g2)" and "eventually (\<lambda>x. g2 x \<noteq> 0) F" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1581 | shows "(\<lambda>x. f1 x * f2 x) \<in> L F (\<lambda>x. g1 x * g2 x) \<longleftrightarrow> f1 \<in> L F (g1)" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1582 | by (subst (1 2) mult.commute) (rule mult_cancel_left[OF assms]) | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1583 | |
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1584 | lemma divide_cancel_right: | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1585 | assumes "f2 \<in> \<Theta>[F](g2)" and "eventually (\<lambda>x. g2 x \<noteq> 0) F" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1586 | shows "(\<lambda>x. f1 x / f2 x) \<in> L F (\<lambda>x. g1 x / g2 x) \<longleftrightarrow> f1 \<in> L F (g1)" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1587 | by (subst (1 2) divide_inverse, intro mult_cancel_right bigtheta_inverse) (simp_all add: assms) | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1588 | |
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1589 | lemma divide_cancel_left: | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1590 | assumes "f1 \<in> \<Theta>[F](g1)" and "eventually (\<lambda>x. g1 x \<noteq> 0) F" | 
| 74324 | 1591 | shows "(\<lambda>x. f1 x / f2 x) \<in> L F (\<lambda>x. g1 x / g2 x) \<longleftrightarrow> | 
| 68246 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1592 | (\<lambda>x. inverse (f2 x)) \<in> L F (\<lambda>x. inverse (g2 x))" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1593 | by (simp only: divide_inverse mult_cancel_left[OF assms]) | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1594 | |
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1595 | end | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1596 | |
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1597 | |
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1598 | lemma powr_smallo_iff: | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1599 | assumes "filterlim g at_top F" "F \<noteq> bot" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1600 | shows "(\<lambda>x. g x powr p :: real) \<in> o[F](\<lambda>x. g x powr q) \<longleftrightarrow> p < q" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1601 | proof- | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1602 | from assms have "eventually (\<lambda>x. g x \<ge> 1) F" by (force simp: filterlim_at_top) | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1603 | hence A: "eventually (\<lambda>x. g x \<noteq> 0) F" by eventually_elim simp | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1604 | have B: "(\<lambda>x. g x powr q) \<in> O[F](\<lambda>x. g x powr p) \<Longrightarrow> (\<lambda>x. g x powr p) \<notin> o[F](\<lambda>x. g x powr q)" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1605 | proof | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1606 | assume "(\<lambda>x. g x powr q) \<in> O[F](\<lambda>x. g x powr p)" "(\<lambda>x. g x powr p) \<in> o[F](\<lambda>x. g x powr q)" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1607 | from landau_o.big_small_asymmetric[OF this] have "eventually (\<lambda>x. g x = 0) F" by simp | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1608 | with A have "eventually (\<lambda>_::'a. False) F" by eventually_elim simp | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1609 | thus False by (simp add: eventually_False assms) | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1610 | qed | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1611 | show ?thesis | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1612 | proof (cases p q rule: linorder_cases) | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1613 | assume "p < q" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1614 | hence "(\<lambda>x. g x powr p) \<in> o[F](\<lambda>x. g x powr q)" using assms A | 
| 68406 | 1615 | by (auto intro!: smalloI_tendsto tendsto_neg_powr simp flip: powr_diff) | 
| 69272 | 1616 | with \<open>p < q\<close> show ?thesis by auto | 
| 68246 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1617 | next | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1618 | assume "p = q" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1619 | hence "(\<lambda>x. g x powr q) \<in> O[F](\<lambda>x. g x powr p)" by (auto intro!: bigthetaD1) | 
| 69272 | 1620 | with B \<open>p = q\<close> show ?thesis by auto | 
| 68246 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1621 | next | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1622 | assume "p > q" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1623 | hence "(\<lambda>x. g x powr q) \<in> O[F](\<lambda>x. g x powr p)" using assms A | 
| 68406 | 1624 | by (auto intro!: smalloI_tendsto tendsto_neg_powr landau_o.small_imp_big simp flip: powr_diff) | 
| 69272 | 1625 | with B \<open>p > q\<close> show ?thesis by auto | 
| 68246 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1626 | qed | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1627 | qed | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1628 | |
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1629 | lemma powr_bigo_iff: | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1630 | assumes "filterlim g at_top F" "F \<noteq> bot" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1631 | shows "(\<lambda>x. g x powr p :: real) \<in> O[F](\<lambda>x. g x powr q) \<longleftrightarrow> p \<le> q" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1632 | proof- | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1633 | from assms have "eventually (\<lambda>x. g x \<ge> 1) F" by (force simp: filterlim_at_top) | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1634 | hence A: "eventually (\<lambda>x. g x \<noteq> 0) F" by eventually_elim simp | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1635 | have B: "(\<lambda>x. g x powr q) \<in> o[F](\<lambda>x. g x powr p) \<Longrightarrow> (\<lambda>x. g x powr p) \<notin> O[F](\<lambda>x. g x powr q)" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1636 | proof | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1637 | assume "(\<lambda>x. g x powr q) \<in> o[F](\<lambda>x. g x powr p)" "(\<lambda>x. g x powr p) \<in> O[F](\<lambda>x. g x powr q)" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1638 | from landau_o.small_big_asymmetric[OF this] have "eventually (\<lambda>x. g x = 0) F" by simp | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1639 | with A have "eventually (\<lambda>_::'a. False) F" by eventually_elim simp | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1640 | thus False by (simp add: eventually_False assms) | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1641 | qed | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1642 | show ?thesis | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1643 | proof (cases p q rule: linorder_cases) | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1644 | assume "p < q" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1645 | hence "(\<lambda>x. g x powr p) \<in> o[F](\<lambda>x. g x powr q)" using assms A | 
| 68406 | 1646 | by (auto intro!: smalloI_tendsto tendsto_neg_powr simp flip: powr_diff) | 
| 69272 | 1647 | with \<open>p < q\<close> show ?thesis by (auto intro: landau_o.small_imp_big) | 
| 68246 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1648 | next | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1649 | assume "p = q" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1650 | hence "(\<lambda>x. g x powr q) \<in> O[F](\<lambda>x. g x powr p)" by (auto intro!: bigthetaD1) | 
| 69272 | 1651 | with B \<open>p = q\<close> show ?thesis by auto | 
| 68246 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1652 | next | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1653 | assume "p > q" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1654 | hence "(\<lambda>x. g x powr q) \<in> o[F](\<lambda>x. g x powr p)" using assms A | 
| 68406 | 1655 | by (auto intro!: smalloI_tendsto tendsto_neg_powr simp flip: powr_diff) | 
| 69272 | 1656 | with B \<open>p > q\<close> show ?thesis by (auto intro: landau_o.small_imp_big) | 
| 68246 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1657 | qed | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1658 | qed | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1659 | |
| 74324 | 1660 | lemma powr_bigtheta_iff: | 
| 68246 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1661 | assumes "filterlim g at_top F" "F \<noteq> bot" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1662 | shows "(\<lambda>x. g x powr p :: real) \<in> \<Theta>[F](\<lambda>x. g x powr q) \<longleftrightarrow> p = q" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1663 | using assms unfolding bigtheta_def by (auto simp: bigomega_iff_bigo powr_bigo_iff) | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1664 | |
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1665 | |
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1666 | subsection \<open>Flatness of real functions\<close> | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1667 | |
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1668 | text \<open> | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1669 | Given two real-valued functions $f$ and $g$, we say that $f$ is flatter than $g$ if | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1670 | any power of $f(x)$ is asymptotically dominated by any positive power of $g(x)$. This is | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1671 | a useful notion since, given two products of powers of functions sorted by flatness, we can | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1672 | compare them asymptotically by simply comparing the exponent lists lexicographically. | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1673 | |
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1674 | A simple sufficient criterion for flatness it that $\ln f(x) \in o(\ln g(x))$, which we show | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1675 | now. | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1676 | \<close> | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1677 | lemma ln_smallo_imp_flat: | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1678 | fixes f g :: "real \<Rightarrow> real" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1679 | assumes lim_f: "filterlim f at_top at_top" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1680 | assumes lim_g: "filterlim g at_top at_top" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1681 | assumes ln_o_ln: "(\<lambda>x. ln (f x)) \<in> o(\<lambda>x. ln (g x))" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1682 | assumes q: "q > 0" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1683 | shows "(\<lambda>x. f x powr p) \<in> o(\<lambda>x. g x powr q)" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1684 | proof (rule smalloI_tendsto) | 
| 74324 | 1685 | from lim_f have "eventually (\<lambda>x. f x > 0) at_top" | 
| 68246 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1686 | by (simp add: filterlim_at_top_dense) | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1687 | hence f_nz: "eventually (\<lambda>x. f x \<noteq> 0) at_top" by eventually_elim simp | 
| 74324 | 1688 | |
| 68246 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1689 | from lim_g have g_gt_1: "eventually (\<lambda>x. g x > 1) at_top" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1690 | by (simp add: filterlim_at_top_dense) | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1691 | hence g_nz: "eventually (\<lambda>x. g x \<noteq> 0) at_top" by eventually_elim simp | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1692 | thus "eventually (\<lambda>x. g x powr q \<noteq> 0) at_top" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1693 | by eventually_elim simp | 
| 74324 | 1694 | |
| 1695 | have eq: "eventually (\<lambda>x. q * (p/q * (ln (f x) / ln (g x)) - 1) * ln (g x) = | |
| 68246 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1696 | p * ln (f x) - q * ln (g x)) at_top" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1697 | using g_gt_1 by eventually_elim (insert q, simp_all add: field_simps) | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1698 | have "filterlim (\<lambda>x. q * (p/q * (ln (f x) / ln (g x)) - 1) * ln (g x)) at_bot at_top" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1699 | by (insert q) | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1700 | (rule filterlim_tendsto_neg_mult_at_bot tendsto_mult | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1701 | tendsto_const tendsto_diff smalloD_tendsto[OF ln_o_ln] lim_g | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1702 | filterlim_compose[OF ln_at_top] | simp)+ | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1703 | hence "filterlim (\<lambda>x. p * ln (f x) - q * ln (g x)) at_bot at_top" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1704 | by (subst (asm) filterlim_cong[OF refl refl eq]) | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1705 | hence *: "((\<lambda>x. exp (p * ln (f x) - q * ln (g x))) \<longlongrightarrow> 0) at_top" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1706 | by (rule filterlim_compose[OF exp_at_bot]) | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1707 | have eq: "eventually (\<lambda>x. exp (p * ln (f x) - q * ln (g x)) = f x powr p / g x powr q) at_top" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1708 | using f_nz g_nz by eventually_elim (simp add: powr_def exp_diff) | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1709 | show "((\<lambda>x. f x powr p / g x powr q) \<longlongrightarrow> 0) at_top" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1710 | using * by (subst (asm) filterlim_cong[OF refl refl eq]) | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1711 | qed | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1712 | |
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1713 | lemma ln_smallo_imp_flat': | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1714 | fixes f g :: "real \<Rightarrow> real" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1715 | assumes lim_f: "filterlim f at_top at_top" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1716 | assumes lim_g: "filterlim g at_top at_top" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1717 | assumes ln_o_ln: "(\<lambda>x. ln (f x)) \<in> o(\<lambda>x. ln (g x))" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1718 | assumes q: "q < 0" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1719 | shows "(\<lambda>x. g x powr q) \<in> o(\<lambda>x. f x powr p)" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1720 | proof - | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1721 | from lim_f lim_g have "eventually (\<lambda>x. f x > 0) at_top" "eventually (\<lambda>x. g x > 0) at_top" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1722 | by (simp_all add: filterlim_at_top_dense) | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1723 | hence "eventually (\<lambda>x. f x \<noteq> 0) at_top" "eventually (\<lambda>x. g x \<noteq> 0) at_top" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1724 | by (auto elim: eventually_mono) | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1725 | moreover from assms have "(\<lambda>x. f x powr -p) \<in> o(\<lambda>x. g x powr -q)" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1726 | by (intro ln_smallo_imp_flat assms) simp_all | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1727 | ultimately show ?thesis unfolding powr_minus | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1728 | by (simp add: landau_o.small.inverse_cancel) | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1729 | qed | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1730 | |
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1731 | |
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1732 | subsection \<open>Asymptotic Equivalence\<close> | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1733 | |
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1734 | named_theorems asymp_equiv_intros | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1735 | named_theorems asymp_equiv_simps | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1736 | |
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1737 | definition asymp_equiv :: "('a \<Rightarrow> ('b :: real_normed_field)) \<Rightarrow> 'a filter \<Rightarrow> ('a \<Rightarrow> 'b) \<Rightarrow> bool"
 | 
| 69597 | 1738 | (\<open>_ \<sim>[_] _\<close> [51, 10, 51] 50) | 
| 68246 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1739 | where "f \<sim>[F] g \<longleftrightarrow> ((\<lambda>x. if f x = 0 \<and> g x = 0 then 1 else f x / g x) \<longlongrightarrow> 1) F" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1740 | |
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1741 | abbreviation (input) asymp_equiv_at_top where | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1742 | "asymp_equiv_at_top f g \<equiv> f \<sim>[at_top] g" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1743 | |
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1744 | bundle asymp_equiv_notation | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1745 | begin | 
| 74324 | 1746 | notation asymp_equiv_at_top (infix \<open>\<sim>\<close> 50) | 
| 68246 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1747 | end | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1748 | |
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1749 | lemma asymp_equivI: "((\<lambda>x. if f x = 0 \<and> g x = 0 then 1 else f x / g x) \<longlongrightarrow> 1) F \<Longrightarrow> f \<sim>[F] g" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1750 | by (simp add: asymp_equiv_def) | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1751 | |
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1752 | lemma asymp_equivD: "f \<sim>[F] g \<Longrightarrow> ((\<lambda>x. if f x = 0 \<and> g x = 0 then 1 else f x / g x) \<longlongrightarrow> 1) F" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1753 | by (simp add: asymp_equiv_def) | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1754 | |
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1755 | lemma asymp_equiv_filtermap_iff: | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1756 | "f \<sim>[filtermap h F] g \<longleftrightarrow> (\<lambda>x. f (h x)) \<sim>[F] (\<lambda>x. g (h x))" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1757 | by (simp add: asymp_equiv_def filterlim_filtermap) | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1758 | |
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1759 | lemma asymp_equiv_refl [simp, asymp_equiv_intros]: "f \<sim>[F] f" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1760 | proof (intro asymp_equivI) | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1761 | have "eventually (\<lambda>x. 1 = (if f x = 0 \<and> f x = 0 then 1 else f x / f x)) F" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1762 | by (intro always_eventually) simp | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1763 | moreover have "((\<lambda>_. 1) \<longlongrightarrow> 1) F" by simp | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1764 | ultimately show "((\<lambda>x. if f x = 0 \<and> f x = 0 then 1 else f x / f x) \<longlongrightarrow> 1) F" | 
| 70688 
3d894e1cfc75
new material on Analysis, plus some rearrangements
 paulson <lp15@cam.ac.uk> parents: 
70532diff
changeset | 1765 | by (simp add: tendsto_eventually) | 
| 68246 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1766 | qed | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1767 | |
| 74324 | 1768 | lemma asymp_equiv_symI: | 
| 68246 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1769 | assumes "f \<sim>[F] g" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1770 | shows "g \<sim>[F] f" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1771 | using tendsto_inverse[OF asymp_equivD[OF assms]] | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1772 | by (auto intro!: asymp_equivI simp: if_distrib conj_commute cong: if_cong) | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1773 | |
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1774 | lemma asymp_equiv_sym: "f \<sim>[F] g \<longleftrightarrow> g \<sim>[F] f" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1775 | by (blast intro: asymp_equiv_symI) | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1776 | |
| 74324 | 1777 | lemma asymp_equivI': | 
| 68246 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1778 | assumes "((\<lambda>x. f x / g x) \<longlongrightarrow> 1) F" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1779 | shows "f \<sim>[F] g" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1780 | proof (cases "F = bot") | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1781 | case False | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1782 | have "eventually (\<lambda>x. f x \<noteq> 0) F" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1783 | proof (rule ccontr) | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1784 | assume "\<not>eventually (\<lambda>x. f x \<noteq> 0) F" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1785 | hence "frequently (\<lambda>x. f x = 0) F" by (simp add: frequently_def) | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1786 | hence "frequently (\<lambda>x. f x / g x = 0) F" by (auto elim!: frequently_elim1) | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1787 | from limit_frequently_eq[OF False this assms] show False by simp_all | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1788 | qed | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1789 | hence "eventually (\<lambda>x. f x / g x = (if f x = 0 \<and> g x = 0 then 1 else f x / g x)) F" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1790 | by eventually_elim simp | 
| 74324 | 1791 | with assms show "f \<sim>[F] g" unfolding asymp_equiv_def | 
| 68246 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1792 | by (rule Lim_transform_eventually) | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1793 | qed (simp_all add: asymp_equiv_def) | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1794 | |
| 77277 
c6b50597abbc
More of Eberl's contributions: memomorphic functions
 paulson <lp15@cam.ac.uk> parents: 
77200diff
changeset | 1795 | lemma tendsto_imp_asymp_equiv_const: | 
| 
c6b50597abbc
More of Eberl's contributions: memomorphic functions
 paulson <lp15@cam.ac.uk> parents: 
77200diff
changeset | 1796 | assumes "(f \<longlongrightarrow> c) F" "c \<noteq> 0" | 
| 
c6b50597abbc
More of Eberl's contributions: memomorphic functions
 paulson <lp15@cam.ac.uk> parents: 
77200diff
changeset | 1797 | shows "f \<sim>[F] (\<lambda>_. c)" | 
| 
c6b50597abbc
More of Eberl's contributions: memomorphic functions
 paulson <lp15@cam.ac.uk> parents: 
77200diff
changeset | 1798 | by (rule asymp_equivI' tendsto_eq_intros assms refl)+ (use assms in auto) | 
| 68246 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1799 | |
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1800 | lemma asymp_equiv_cong: | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1801 | assumes "eventually (\<lambda>x. f1 x = f2 x) F" "eventually (\<lambda>x. g1 x = g2 x) F" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1802 | shows "f1 \<sim>[F] g1 \<longleftrightarrow> f2 \<sim>[F] g2" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1803 | unfolding asymp_equiv_def | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1804 | proof (rule tendsto_cong, goal_cases) | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1805 | case 1 | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1806 | from assms show ?case by eventually_elim simp | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1807 | qed | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1808 | |
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1809 | lemma asymp_equiv_eventually_zeros: | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1810 | fixes f g :: "'a \<Rightarrow> 'b :: real_normed_field" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1811 | assumes "f \<sim>[F] g" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1812 | shows "eventually (\<lambda>x. f x = 0 \<longleftrightarrow> g x = 0) F" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1813 | proof - | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1814 | let ?h = "\<lambda>x. if f x = 0 \<and> g x = 0 then 1 else f x / g x" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1815 | have "eventually (\<lambda>x. x \<noteq> 0) (nhds (1::'b))" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1816 | by (rule t1_space_nhds) auto | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1817 | hence "eventually (\<lambda>x. x \<noteq> 0) (filtermap ?h F)" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1818 | using assms unfolding asymp_equiv_def filterlim_def | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1819 | by (rule filter_leD [rotated]) | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1820 | hence "eventually (\<lambda>x. ?h x \<noteq> 0) F" by (simp add: eventually_filtermap) | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1821 | thus ?thesis by eventually_elim (auto split: if_splits) | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1822 | qed | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1823 | |
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1824 | lemma asymp_equiv_transfer: | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1825 | assumes "f1 \<sim>[F] g1" "eventually (\<lambda>x. f1 x = f2 x) F" "eventually (\<lambda>x. g1 x = g2 x) F" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1826 | shows "f2 \<sim>[F] g2" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1827 | using assms(1) asymp_equiv_cong[OF assms(2,3)] by simp | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1828 | |
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1829 | lemma asymp_equiv_transfer_trans [trans]: | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1830 | assumes "(\<lambda>x. f x (h1 x)) \<sim>[F] (\<lambda>x. g x (h1 x))" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1831 | assumes "eventually (\<lambda>x. h1 x = h2 x) F" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1832 | shows "(\<lambda>x. f x (h2 x)) \<sim>[F] (\<lambda>x. g x (h2 x))" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1833 | by (rule asymp_equiv_transfer[OF assms(1)]) (insert assms(2), auto elim!: eventually_mono) | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1834 | |
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1835 | lemma asymp_equiv_trans [trans]: | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1836 | fixes f g h | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1837 | assumes "f \<sim>[F] g" "g \<sim>[F] h" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1838 | shows "f \<sim>[F] h" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1839 | proof - | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1840 | let ?T = "\<lambda>f g x. if f x = 0 \<and> g x = 0 then 1 else f x / g x" | 
| 74324 | 1841 | from tendsto_mult[OF assms[THEN asymp_equivD]] | 
| 70532 
fcf3b891ccb1
new material; rotated premises of Lim_transform_eventually
 paulson <lp15@cam.ac.uk> parents: 
70365diff
changeset | 1842 | have "((\<lambda>x. ?T f g x * ?T g h x) \<longlongrightarrow> 1) F" by simp | 
| 
fcf3b891ccb1
new material; rotated premises of Lim_transform_eventually
 paulson <lp15@cam.ac.uk> parents: 
70365diff
changeset | 1843 | moreover from assms[THEN asymp_equiv_eventually_zeros] | 
| 
fcf3b891ccb1
new material; rotated premises of Lim_transform_eventually
 paulson <lp15@cam.ac.uk> parents: 
70365diff
changeset | 1844 | have "eventually (\<lambda>x. ?T f g x * ?T g h x = ?T f h x) F" by eventually_elim simp | 
| 68246 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1845 | ultimately show ?thesis unfolding asymp_equiv_def by (rule Lim_transform_eventually) | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1846 | qed | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1847 | |
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1848 | lemma asymp_equiv_trans_lift1 [trans]: | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1849 | assumes "a \<sim>[F] f b" "b \<sim>[F] c" "\<And>c d. c \<sim>[F] d \<Longrightarrow> f c \<sim>[F] f d" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1850 | shows "a \<sim>[F] f c" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1851 | using assms by (blast intro: asymp_equiv_trans) | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1852 | |
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1853 | lemma asymp_equiv_trans_lift2 [trans]: | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1854 | assumes "f a \<sim>[F] b" "a \<sim>[F] c" "\<And>c d. c \<sim>[F] d \<Longrightarrow> f c \<sim>[F] f d" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1855 | shows "f c \<sim>[F] b" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1856 | using asymp_equiv_symI[OF assms(3)[OF assms(2)]] assms(1) | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1857 | by (blast intro: asymp_equiv_trans) | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1858 | |
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1859 | lemma asymp_equivD_const: | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1860 | assumes "f \<sim>[F] (\<lambda>_. c)" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1861 | shows "(f \<longlongrightarrow> c) F" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1862 | proof (cases "c = 0") | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1863 | case False | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1864 | with tendsto_mult_right[OF asymp_equivD[OF assms], of c] show ?thesis by simp | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1865 | next | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1866 | case True | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1867 | with asymp_equiv_eventually_zeros[OF assms] show ?thesis | 
| 70365 
4df0628e8545
a few new lemmas and a bit of tidying
 paulson <lp15@cam.ac.uk> parents: 
69597diff
changeset | 1868 | by (simp add: tendsto_eventually) | 
| 68246 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1869 | qed | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1870 | |
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1871 | lemma asymp_equiv_refl_ev: | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1872 | assumes "eventually (\<lambda>x. f x = g x) F" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1873 | shows "f \<sim>[F] g" | 
| 70365 
4df0628e8545
a few new lemmas and a bit of tidying
 paulson <lp15@cam.ac.uk> parents: 
69597diff
changeset | 1874 | by (intro asymp_equivI tendsto_eventually) | 
| 68246 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1875 | (insert assms, auto elim!: eventually_mono) | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1876 | |
| 77200 
8f2e6186408f
Some more new material and some tidying of existing proofs
 paulson <lp15@cam.ac.uk> parents: 
75462diff
changeset | 1877 | lemma asymp_equiv_nhds_iff: "f \<sim>[nhds (z :: 'a :: t1_space)] g \<longleftrightarrow> f \<sim>[at z] g \<and> f z = g z" | 
| 
8f2e6186408f
Some more new material and some tidying of existing proofs
 paulson <lp15@cam.ac.uk> parents: 
75462diff
changeset | 1878 | by (auto simp: asymp_equiv_def tendsto_nhds_iff) | 
| 
8f2e6186408f
Some more new material and some tidying of existing proofs
 paulson <lp15@cam.ac.uk> parents: 
75462diff
changeset | 1879 | |
| 68246 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1880 | lemma asymp_equiv_sandwich: | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1881 |   fixes f g h :: "'a \<Rightarrow> 'b :: {real_normed_field, order_topology, linordered_field}"
 | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1882 | assumes "eventually (\<lambda>x. f x \<ge> 0) F" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1883 | assumes "eventually (\<lambda>x. f x \<le> g x) F" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1884 | assumes "eventually (\<lambda>x. g x \<le> h x) F" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1885 | assumes "f \<sim>[F] h" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1886 | shows "g \<sim>[F] f" "g \<sim>[F] h" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1887 | proof - | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1888 | show "g \<sim>[F] f" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1889 | proof (rule asymp_equivI, rule tendsto_sandwich) | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1890 | from assms(1-3) asymp_equiv_eventually_zeros[OF assms(4)] | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1891 | show "eventually (\<lambda>n. (if h n = 0 \<and> f n = 0 then 1 else h n / f n) \<ge> | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1892 | (if g n = 0 \<and> f n = 0 then 1 else g n / f n)) F" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1893 | by eventually_elim (auto intro!: divide_right_mono) | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1894 | from assms(1-3) asymp_equiv_eventually_zeros[OF assms(4)] | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1895 | show "eventually (\<lambda>n. 1 \<le> | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1896 | (if g n = 0 \<and> f n = 0 then 1 else g n / f n)) F" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1897 | by eventually_elim (auto intro!: divide_right_mono) | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1898 | qed (insert asymp_equiv_symI[OF assms(4)], simp_all add: asymp_equiv_def) | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1899 | also note \<open>f \<sim>[F] h\<close> | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1900 | finally show "g \<sim>[F] h" . | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1901 | qed | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1902 | |
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1903 | lemma asymp_equiv_imp_eventually_same_sign: | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1904 | fixes f g :: "real \<Rightarrow> real" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1905 | assumes "f \<sim>[F] g" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1906 | shows "eventually (\<lambda>x. sgn (f x) = sgn (g x)) F" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1907 | proof - | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1908 | from assms have "((\<lambda>x. sgn (if f x = 0 \<and> g x = 0 then 1 else f x / g x)) \<longlongrightarrow> sgn 1) F" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1909 | unfolding asymp_equiv_def by (rule tendsto_sgn) simp_all | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1910 | from order_tendstoD(1)[OF this, of "1/2"] | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1911 | have "eventually (\<lambda>x. sgn (if f x = 0 \<and> g x = 0 then 1 else f x / g x) > 1/2) F" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1912 | by simp | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1913 | thus "eventually (\<lambda>x. sgn (f x) = sgn (g x)) F" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1914 | proof eventually_elim | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1915 | case (elim x) | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1916 | thus ?case | 
| 74324 | 1917 | by (cases "f x" "0 :: real" rule: linorder_cases; | 
| 68246 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1918 | cases "g x" "0 :: real" rule: linorder_cases) simp_all | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1919 | qed | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1920 | qed | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1921 | |
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1922 | lemma | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1923 | fixes f g :: "_ \<Rightarrow> real" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1924 | assumes "f \<sim>[F] g" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1925 | shows asymp_equiv_eventually_same_sign: "eventually (\<lambda>x. sgn (f x) = sgn (g x)) F" (is ?th1) | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1926 | and asymp_equiv_eventually_neg_iff: "eventually (\<lambda>x. f x < 0 \<longleftrightarrow> g x < 0) F" (is ?th2) | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1927 | and asymp_equiv_eventually_pos_iff: "eventually (\<lambda>x. f x > 0 \<longleftrightarrow> g x > 0) F" (is ?th3) | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1928 | proof - | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1929 | from assms have "filterlim (\<lambda>x. if f x = 0 \<and> g x = 0 then 1 else f x / g x) (nhds 1) F" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1930 | by (rule asymp_equivD) | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1931 | from order_tendstoD(1)[OF this zero_less_one] | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1932 | show ?th1 ?th2 ?th3 | 
| 70817 
dd675800469d
dedicated fact collections for algebraic simplification rules potentially splitting goals
 haftmann parents: 
70688diff
changeset | 1933 | by (eventually_elim; force simp: sgn_if field_split_simps split: if_splits)+ | 
| 68246 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1934 | qed | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1935 | |
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1936 | lemma asymp_equiv_tendsto_transfer: | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1937 | assumes "f \<sim>[F] g" and "(f \<longlongrightarrow> c) F" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1938 | shows "(g \<longlongrightarrow> c) F" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1939 | proof - | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1940 | let ?h = "\<lambda>x. (if g x = 0 \<and> f x = 0 then 1 else g x / f x) * f x" | 
| 70532 
fcf3b891ccb1
new material; rotated premises of Lim_transform_eventually
 paulson <lp15@cam.ac.uk> parents: 
70365diff
changeset | 1941 | from assms(1) have "g \<sim>[F] f" by (rule asymp_equiv_symI) | 
| 68246 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1942 | hence "filterlim (\<lambda>x. if g x = 0 \<and> f x = 0 then 1 else g x / f x) (nhds 1) F" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1943 | by (rule asymp_equivD) | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1944 | from tendsto_mult[OF this assms(2)] have "(?h \<longlongrightarrow> c) F" by simp | 
| 74324 | 1945 | moreover | 
| 70532 
fcf3b891ccb1
new material; rotated premises of Lim_transform_eventually
 paulson <lp15@cam.ac.uk> parents: 
70365diff
changeset | 1946 | have "eventually (\<lambda>x. ?h x = g x) F" | 
| 
fcf3b891ccb1
new material; rotated premises of Lim_transform_eventually
 paulson <lp15@cam.ac.uk> parents: 
70365diff
changeset | 1947 | using asymp_equiv_eventually_zeros[OF assms(1)] by eventually_elim simp | 
| 
fcf3b891ccb1
new material; rotated premises of Lim_transform_eventually
 paulson <lp15@cam.ac.uk> parents: 
70365diff
changeset | 1948 | ultimately show ?thesis | 
| 
fcf3b891ccb1
new material; rotated premises of Lim_transform_eventually
 paulson <lp15@cam.ac.uk> parents: 
70365diff
changeset | 1949 | by (rule Lim_transform_eventually) | 
| 68246 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1950 | qed | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1951 | |
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1952 | lemma tendsto_asymp_equiv_cong: | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1953 | assumes "f \<sim>[F] g" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1954 | shows "(f \<longlongrightarrow> c) F \<longleftrightarrow> (g \<longlongrightarrow> c) F" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1955 | proof - | 
| 74324 | 1956 | have "(f \<longlongrightarrow> c * 1) F" if fg: "f \<sim>[F] g" and "(g \<longlongrightarrow> c) F" for f g :: "'a \<Rightarrow> 'b" | 
| 1957 | proof - | |
| 1958 | from that have *: "((\<lambda>x. g x * (if f x = 0 \<and> g x = 0 then 1 else f x / g x)) \<longlongrightarrow> c * 1) F" | |
| 1959 | by (intro tendsto_intros asymp_equivD) | |
| 68246 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1960 | have "eventually (\<lambda>x. g x * (if f x = 0 \<and> g x = 0 then 1 else f x / g x) = f x) F" | 
| 74324 | 1961 | using asymp_equiv_eventually_zeros[OF fg] by eventually_elim simp | 
| 1962 | with * show ?thesis by (rule Lim_transform_eventually) | |
| 1963 | qed | |
| 68246 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1964 | from this[of f g] this[of g f] assms show ?thesis by (auto simp: asymp_equiv_sym) | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1965 | qed | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1966 | |
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1967 | |
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1968 | lemma smallo_imp_eventually_sgn: | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1969 | fixes f g :: "real \<Rightarrow> real" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1970 | assumes "g \<in> o(f)" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1971 | shows "eventually (\<lambda>x. sgn (f x + g x) = sgn (f x)) at_top" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1972 | proof - | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1973 | have "0 < (1/2 :: real)" by simp | 
| 74324 | 1974 | from landau_o.smallD[OF assms, OF this] | 
| 68246 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1975 | have "eventually (\<lambda>x. \<bar>g x\<bar> \<le> 1/2 * \<bar>f x\<bar>) at_top" by simp | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1976 | thus ?thesis | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1977 | proof eventually_elim | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1978 | case (elim x) | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1979 | thus ?case | 
| 74324 | 1980 | by (cases "f x" "0::real" rule: linorder_cases; | 
| 68246 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1981 | cases "f x + g x" "0::real" rule: linorder_cases) simp_all | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1982 | qed | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1983 | qed | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1984 | |
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1985 | context | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1986 | begin | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1987 | |
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1988 | private lemma asymp_equiv_add_rightI: | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1989 | assumes "f \<sim>[F] g" "h \<in> o[F](g)" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1990 | shows "(\<lambda>x. f x + h x) \<sim>[F] g" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1991 | proof - | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1992 | let ?T = "\<lambda>f g x. if f x = 0 \<and> g x = 0 then 1 else f x / g x" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1993 | from landau_o.smallD[OF assms(2) zero_less_one] | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1994 | have ev: "eventually (\<lambda>x. g x = 0 \<longrightarrow> h x = 0) F" by eventually_elim auto | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1995 | have "(\<lambda>x. f x + h x) \<sim>[F] g \<longleftrightarrow> ((\<lambda>x. ?T f g x + h x / g x) \<longlongrightarrow> 1) F" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1996 | unfolding asymp_equiv_def using ev | 
| 70817 
dd675800469d
dedicated fact collections for algebraic simplification rules potentially splitting goals
 haftmann parents: 
70688diff
changeset | 1997 | by (intro tendsto_cong) (auto elim!: eventually_mono simp: field_split_simps) | 
| 68246 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1998 | also have "\<dots> \<longleftrightarrow> ((\<lambda>x. ?T f g x + h x / g x) \<longlongrightarrow> 1 + 0) F" by simp | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1999 | also have \<dots> by (intro tendsto_intros asymp_equivD assms smalloD_tendsto) | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2000 | finally show "(\<lambda>x. f x + h x) \<sim>[F] g" . | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2001 | qed | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2002 | |
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2003 | lemma asymp_equiv_add_right [asymp_equiv_simps]: | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2004 | assumes "h \<in> o[F](g)" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2005 | shows "(\<lambda>x. f x + h x) \<sim>[F] g \<longleftrightarrow> f \<sim>[F] g" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2006 | proof | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2007 | assume "(\<lambda>x. f x + h x) \<sim>[F] g" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2008 | from asymp_equiv_add_rightI[OF this, of "\<lambda>x. -h x"] assms show "f \<sim>[F] g" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2009 | by simp | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2010 | qed (simp_all add: asymp_equiv_add_rightI assms) | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2011 | |
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2012 | end | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2013 | |
| 74324 | 2014 | lemma asymp_equiv_add_left [asymp_equiv_simps]: | 
| 68246 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2015 | assumes "h \<in> o[F](g)" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2016 | shows "(\<lambda>x. h x + f x) \<sim>[F] g \<longleftrightarrow> f \<sim>[F] g" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2017 | using asymp_equiv_add_right[OF assms] by (simp add: add.commute) | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2018 | |
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2019 | lemma asymp_equiv_add_right' [asymp_equiv_simps]: | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2020 | assumes "h \<in> o[F](g)" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2021 | shows "g \<sim>[F] (\<lambda>x. f x + h x) \<longleftrightarrow> g \<sim>[F] f" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2022 | using asymp_equiv_add_right[OF assms] by (simp add: asymp_equiv_sym) | 
| 74324 | 2023 | |
| 68246 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2024 | lemma asymp_equiv_add_left' [asymp_equiv_simps]: | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2025 | assumes "h \<in> o[F](g)" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2026 | shows "g \<sim>[F] (\<lambda>x. h x + f x) \<longleftrightarrow> g \<sim>[F] f" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2027 | using asymp_equiv_add_left[OF assms] by (simp add: asymp_equiv_sym) | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2028 | |
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2029 | lemma smallo_imp_asymp_equiv: | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2030 | assumes "(\<lambda>x. f x - g x) \<in> o[F](g)" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2031 | shows "f \<sim>[F] g" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2032 | proof - | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2033 | from assms have "(\<lambda>x. f x - g x + g x) \<sim>[F] g" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2034 | by (subst asymp_equiv_add_left) simp_all | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2035 | thus ?thesis by simp | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2036 | qed | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2037 | |
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2038 | lemma asymp_equiv_uminus [asymp_equiv_intros]: | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2039 | "f \<sim>[F] g \<Longrightarrow> (\<lambda>x. -f x) \<sim>[F] (\<lambda>x. -g x)" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2040 | by (simp add: asymp_equiv_def cong: if_cong) | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2041 | |
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2042 | lemma asymp_equiv_uminus_iff [asymp_equiv_simps]: | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2043 | "(\<lambda>x. -f x) \<sim>[F] g \<longleftrightarrow> f \<sim>[F] (\<lambda>x. -g x)" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2044 | by (simp add: asymp_equiv_def cong: if_cong) | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2045 | |
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2046 | lemma asymp_equiv_mult [asymp_equiv_intros]: | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2047 | fixes f1 f2 g1 g2 :: "'a \<Rightarrow> 'b :: real_normed_field" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2048 | assumes "f1 \<sim>[F] g1" "f2 \<sim>[F] g2" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2049 | shows "(\<lambda>x. f1 x * f2 x) \<sim>[F] (\<lambda>x. g1 x * g2 x)" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2050 | proof - | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2051 | let ?T = "\<lambda>f g x. if f x = 0 \<and> g x = 0 then 1 else f x / g x" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2052 | let ?S = "\<lambda>x. (if f1 x = 0 \<and> g1 x = 0 then 1 - ?T f2 g2 x | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2053 | else if f2 x = 0 \<and> g2 x = 0 then 1 - ?T f1 g1 x else 0)" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2054 | let ?S' = "\<lambda>x. ?T (\<lambda>x. f1 x * f2 x) (\<lambda>x. g1 x * g2 x) x - ?T f1 g1 x * ?T f2 g2 x" | 
| 74324 | 2055 | have A: "((\<lambda>x. 1 - ?T f g x) \<longlongrightarrow> 0) F" if "f \<sim>[F] g" for f g :: "'a \<Rightarrow> 'b" | 
| 2056 | by (rule tendsto_eq_intros refl asymp_equivD[OF that])+ simp_all | |
| 2057 | ||
| 2058 | from assms have *: "((\<lambda>x. ?T f1 g1 x * ?T f2 g2 x) \<longlongrightarrow> 1 * 1) F" | |
| 2059 | by (intro tendsto_mult asymp_equivD) | |
| 68246 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2060 |   {
 | 
| 70532 
fcf3b891ccb1
new material; rotated premises of Lim_transform_eventually
 paulson <lp15@cam.ac.uk> parents: 
70365diff
changeset | 2061 | have "(?S \<longlongrightarrow> 0) F" | 
| 68246 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2062 | by (intro filterlim_If assms[THEN A, THEN tendsto_mono[rotated]]) | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2063 | (auto intro: le_infI1 le_infI2) | 
| 70532 
fcf3b891ccb1
new material; rotated premises of Lim_transform_eventually
 paulson <lp15@cam.ac.uk> parents: 
70365diff
changeset | 2064 | moreover have "eventually (\<lambda>x. ?S x = ?S' x) F" | 
| 
fcf3b891ccb1
new material; rotated premises of Lim_transform_eventually
 paulson <lp15@cam.ac.uk> parents: 
70365diff
changeset | 2065 | using assms[THEN asymp_equiv_eventually_zeros] by eventually_elim auto | 
| 68246 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2066 | ultimately have "(?S' \<longlongrightarrow> 0) F" by (rule Lim_transform_eventually) | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2067 | } | 
| 74324 | 2068 | with * have "(?T (\<lambda>x. f1 x * f2 x) (\<lambda>x. g1 x * g2 x) \<longlongrightarrow> 1 * 1) F" | 
| 68246 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2069 | by (rule Lim_transform) | 
| 74324 | 2070 | then show ?thesis by (simp add: asymp_equiv_def) | 
| 68246 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2071 | qed | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2072 | |
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2073 | lemma asymp_equiv_power [asymp_equiv_intros]: | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2074 | "f \<sim>[F] g \<Longrightarrow> (\<lambda>x. f x ^ n) \<sim>[F] (\<lambda>x. g x ^ n)" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2075 | by (induction n) (simp_all add: asymp_equiv_mult) | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2076 | |
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2077 | lemma asymp_equiv_inverse [asymp_equiv_intros]: | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2078 | assumes "f \<sim>[F] g" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2079 | shows "(\<lambda>x. inverse (f x)) \<sim>[F] (\<lambda>x. inverse (g x))" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2080 | proof - | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2081 | from tendsto_inverse[OF asymp_equivD[OF assms]] | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2082 | have "((\<lambda>x. if f x = 0 \<and> g x = 0 then 1 else g x / f x) \<longlongrightarrow> 1) F" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2083 | by (simp add: if_distrib cong: if_cong) | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2084 | also have "(\<lambda>x. if f x = 0 \<and> g x = 0 then 1 else g x / f x) = | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2085 | (\<lambda>x. if f x = 0 \<and> g x = 0 then 1 else inverse (f x) / inverse (g x))" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2086 | by (intro ext) (simp add: field_simps) | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2087 | finally show ?thesis by (simp add: asymp_equiv_def) | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2088 | qed | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2089 | |
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2090 | lemma asymp_equiv_inverse_iff [asymp_equiv_simps]: | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2091 | "(\<lambda>x. inverse (f x)) \<sim>[F] (\<lambda>x. inverse (g x)) \<longleftrightarrow> f \<sim>[F] g" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2092 | proof | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2093 | assume "(\<lambda>x. inverse (f x)) \<sim>[F] (\<lambda>x. inverse (g x))" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2094 | hence "(\<lambda>x. inverse (inverse (f x))) \<sim>[F] (\<lambda>x. inverse (inverse (g x)))" (is ?P) | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2095 | by (rule asymp_equiv_inverse) | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2096 | also have "?P \<longleftrightarrow> f \<sim>[F] g" by (intro asymp_equiv_cong) simp_all | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2097 | finally show "f \<sim>[F] g" . | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2098 | qed (simp_all add: asymp_equiv_inverse) | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2099 | |
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2100 | lemma asymp_equiv_divide [asymp_equiv_intros]: | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2101 | assumes "f1 \<sim>[F] g1" "f2 \<sim>[F] g2" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2102 | shows "(\<lambda>x. f1 x / f2 x) \<sim>[F] (\<lambda>x. g1 x / g2 x)" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2103 | using asymp_equiv_mult[OF assms(1) asymp_equiv_inverse[OF assms(2)]] by (simp add: field_simps) | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2104 | |
| 77490 
2c86ea8961b5
Some new lemmas. Some tidying up
 paulson <lp15@cam.ac.uk> parents: 
77277diff
changeset | 2105 | lemma asymp_equivD_strong: | 
| 
2c86ea8961b5
Some new lemmas. Some tidying up
 paulson <lp15@cam.ac.uk> parents: 
77277diff
changeset | 2106 | assumes "f \<sim>[F] g" "eventually (\<lambda>x. f x \<noteq> 0 \<or> g x \<noteq> 0) F" | 
| 
2c86ea8961b5
Some new lemmas. Some tidying up
 paulson <lp15@cam.ac.uk> parents: 
77277diff
changeset | 2107 | shows "((\<lambda>x. f x / g x) \<longlongrightarrow> 1) F" | 
| 
2c86ea8961b5
Some new lemmas. Some tidying up
 paulson <lp15@cam.ac.uk> parents: 
77277diff
changeset | 2108 | proof - | 
| 
2c86ea8961b5
Some new lemmas. Some tidying up
 paulson <lp15@cam.ac.uk> parents: 
77277diff
changeset | 2109 | from assms(1) have "((\<lambda>x. if f x = 0 \<and> g x = 0 then 1 else f x / g x) \<longlongrightarrow> 1) F" | 
| 
2c86ea8961b5
Some new lemmas. Some tidying up
 paulson <lp15@cam.ac.uk> parents: 
77277diff
changeset | 2110 | by (rule asymp_equivD) | 
| 
2c86ea8961b5
Some new lemmas. Some tidying up
 paulson <lp15@cam.ac.uk> parents: 
77277diff
changeset | 2111 | also have "?this \<longleftrightarrow> ?thesis" | 
| 
2c86ea8961b5
Some new lemmas. Some tidying up
 paulson <lp15@cam.ac.uk> parents: 
77277diff
changeset | 2112 | by (intro filterlim_cong eventually_mono[OF assms(2)]) auto | 
| 
2c86ea8961b5
Some new lemmas. Some tidying up
 paulson <lp15@cam.ac.uk> parents: 
77277diff
changeset | 2113 | finally show ?thesis . | 
| 
2c86ea8961b5
Some new lemmas. Some tidying up
 paulson <lp15@cam.ac.uk> parents: 
77277diff
changeset | 2114 | qed | 
| 
2c86ea8961b5
Some new lemmas. Some tidying up
 paulson <lp15@cam.ac.uk> parents: 
77277diff
changeset | 2115 | |
| 68246 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2116 | lemma asymp_equiv_compose [asymp_equiv_intros]: | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2117 | assumes "f \<sim>[G] g" "filterlim h G F" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2118 | shows "f \<circ> h \<sim>[F] g \<circ> h" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2119 | proof - | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2120 | let ?T = "\<lambda>f g x. if f x = 0 \<and> g x = 0 then 1 else f x / g x" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2121 | have "f \<circ> h \<sim>[F] g \<circ> h \<longleftrightarrow> ((?T f g \<circ> h) \<longlongrightarrow> 1) F" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2122 | by (simp add: asymp_equiv_def o_def) | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2123 | also have "\<dots> \<longleftrightarrow> (?T f g \<longlongrightarrow> 1) (filtermap h F)" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2124 | by (rule tendsto_compose_filtermap) | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2125 | also have "\<dots>" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2126 | by (rule tendsto_mono[of _ G]) (insert assms, simp_all add: asymp_equiv_def filterlim_def) | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2127 | finally show ?thesis . | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2128 | qed | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2129 | |
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2130 | lemma asymp_equiv_compose': | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2131 | assumes "f \<sim>[G] g" "filterlim h G F" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2132 | shows "(\<lambda>x. f (h x)) \<sim>[F] (\<lambda>x. g (h x))" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2133 | using asymp_equiv_compose[OF assms] by (simp add: o_def) | 
| 74324 | 2134 | |
| 68246 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2135 | lemma asymp_equiv_powr_real [asymp_equiv_intros]: | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2136 | fixes f g :: "'a \<Rightarrow> real" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2137 | assumes "f \<sim>[F] g" "eventually (\<lambda>x. f x \<ge> 0) F" "eventually (\<lambda>x. g x \<ge> 0) F" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2138 | shows "(\<lambda>x. f x powr y) \<sim>[F] (\<lambda>x. g x powr y)" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2139 | proof - | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2140 | let ?T = "\<lambda>f g x. if f x = 0 \<and> g x = 0 then 1 else f x / g x" | 
| 70532 
fcf3b891ccb1
new material; rotated premises of Lim_transform_eventually
 paulson <lp15@cam.ac.uk> parents: 
70365diff
changeset | 2141 | have "((\<lambda>x. ?T f g x powr y) \<longlongrightarrow> 1 powr y) F" | 
| 
fcf3b891ccb1
new material; rotated premises of Lim_transform_eventually
 paulson <lp15@cam.ac.uk> parents: 
70365diff
changeset | 2142 | by (intro tendsto_intros asymp_equivD[OF assms(1)]) simp_all | 
| 
fcf3b891ccb1
new material; rotated premises of Lim_transform_eventually
 paulson <lp15@cam.ac.uk> parents: 
70365diff
changeset | 2143 | hence "((\<lambda>x. ?T f g x powr y) \<longlongrightarrow> 1) F" by simp | 
| 
fcf3b891ccb1
new material; rotated premises of Lim_transform_eventually
 paulson <lp15@cam.ac.uk> parents: 
70365diff
changeset | 2144 | moreover have "eventually (\<lambda>x. ?T f g x powr y = ?T (\<lambda>x. f x powr y) (\<lambda>x. g x powr y) x) F" | 
| 68246 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2145 | using asymp_equiv_eventually_zeros[OF assms(1)] assms(2,3) | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2146 | by eventually_elim (auto simp: powr_divide) | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2147 | ultimately show ?thesis unfolding asymp_equiv_def by (rule Lim_transform_eventually) | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2148 | qed | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2149 | |
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2150 | lemma asymp_equiv_norm [asymp_equiv_intros]: | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2151 | fixes f g :: "'a \<Rightarrow> 'b :: real_normed_field" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2152 | assumes "f \<sim>[F] g" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2153 | shows "(\<lambda>x. norm (f x)) \<sim>[F] (\<lambda>x. norm (g x))" | 
| 74324 | 2154 | using tendsto_norm[OF asymp_equivD[OF assms]] | 
| 68246 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2155 | by (simp add: if_distrib asymp_equiv_def norm_divide cong: if_cong) | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2156 | |
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2157 | lemma asymp_equiv_abs_real [asymp_equiv_intros]: | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2158 | fixes f g :: "'a \<Rightarrow> real" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2159 | assumes "f \<sim>[F] g" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2160 | shows "(\<lambda>x. \<bar>f x\<bar>) \<sim>[F] (\<lambda>x. \<bar>g x\<bar>)" | 
| 74324 | 2161 | using tendsto_rabs[OF asymp_equivD[OF assms]] | 
| 68246 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2162 | by (simp add: if_distrib asymp_equiv_def cong: if_cong) | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2163 | |
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2164 | lemma asymp_equiv_imp_eventually_le: | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2165 | assumes "f \<sim>[F] g" "c > 1" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2166 | shows "eventually (\<lambda>x. norm (f x) \<le> c * norm (g x)) F" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2167 | proof - | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2168 | from order_tendstoD(2)[OF asymp_equivD[OF asymp_equiv_norm[OF assms(1)]] assms(2)] | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2169 | asymp_equiv_eventually_zeros[OF assms(1)] | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2170 | show ?thesis by eventually_elim (auto split: if_splits simp: field_simps) | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2171 | qed | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2172 | |
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2173 | lemma asymp_equiv_imp_eventually_ge: | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2174 | assumes "f \<sim>[F] g" "c < 1" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2175 | shows "eventually (\<lambda>x. norm (f x) \<ge> c * norm (g x)) F" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2176 | proof - | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2177 | from order_tendstoD(1)[OF asymp_equivD[OF asymp_equiv_norm[OF assms(1)]] assms(2)] | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2178 | asymp_equiv_eventually_zeros[OF assms(1)] | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2179 | show ?thesis by eventually_elim (auto split: if_splits simp: field_simps) | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2180 | qed | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2181 | |
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2182 | lemma asymp_equiv_imp_bigo: | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2183 | assumes "f \<sim>[F] g" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2184 | shows "f \<in> O[F](g)" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2185 | proof (rule bigoI) | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2186 | have "(3/2::real) > 1" by simp | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2187 | from asymp_equiv_imp_eventually_le[OF assms this] | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2188 | show "eventually (\<lambda>x. norm (f x) \<le> 3/2 * norm (g x)) F" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2189 | by eventually_elim simp | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2190 | qed | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2191 | |
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2192 | lemma asymp_equiv_imp_bigomega: | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2193 | "f \<sim>[F] g \<Longrightarrow> f \<in> \<Omega>[F](g)" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2194 | using asymp_equiv_imp_bigo[of g F f] by (simp add: asymp_equiv_sym bigomega_iff_bigo) | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2195 | |
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2196 | lemma asymp_equiv_imp_bigtheta: | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2197 | "f \<sim>[F] g \<Longrightarrow> f \<in> \<Theta>[F](g)" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2198 | by (intro bigthetaI asymp_equiv_imp_bigo asymp_equiv_imp_bigomega) | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2199 | |
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2200 | lemma asymp_equiv_at_infinity_transfer: | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2201 | assumes "f \<sim>[F] g" "filterlim f at_infinity F" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2202 | shows "filterlim g at_infinity F" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2203 | proof - | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2204 | from assms(1) have "g \<in> \<Theta>[F](f)" by (rule asymp_equiv_imp_bigtheta[OF asymp_equiv_symI]) | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2205 | also from assms have "f \<in> \<omega>[F](\<lambda>_. 1)" by (simp add: smallomega_1_conv_filterlim) | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2206 | finally show ?thesis by (simp add: smallomega_1_conv_filterlim) | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2207 | qed | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2208 | |
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2209 | lemma asymp_equiv_at_top_transfer: | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2210 | fixes f g :: "_ \<Rightarrow> real" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2211 | assumes "f \<sim>[F] g" "filterlim f at_top F" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2212 | shows "filterlim g at_top F" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2213 | proof (rule filterlim_at_infinity_imp_filterlim_at_top) | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2214 | show "filterlim g at_infinity F" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2215 | by (rule asymp_equiv_at_infinity_transfer[OF assms(1) filterlim_mono[OF assms(2)]]) | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2216 | (auto simp: at_top_le_at_infinity) | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2217 | from assms(2) have "eventually (\<lambda>x. f x > 0) F" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2218 | using filterlim_at_top_dense by blast | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2219 | with asymp_equiv_eventually_pos_iff[OF assms(1)] show "eventually (\<lambda>x. g x > 0) F" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2220 | by eventually_elim blast | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2221 | qed | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2222 | |
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2223 | lemma asymp_equiv_at_bot_transfer: | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2224 | fixes f g :: "_ \<Rightarrow> real" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2225 | assumes "f \<sim>[F] g" "filterlim f at_bot F" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2226 | shows "filterlim g at_bot F" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2227 | unfolding filterlim_uminus_at_bot | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2228 | by (rule asymp_equiv_at_top_transfer[of "\<lambda>x. -f x" F "\<lambda>x. -g x"]) | 
| 74324 | 2229 | (insert assms, auto simp: filterlim_uminus_at_bot asymp_equiv_uminus) | 
| 68246 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2230 | |
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2231 | lemma asymp_equivI'_const: | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2232 | assumes "((\<lambda>x. f x / g x) \<longlongrightarrow> c) F" "c \<noteq> 0" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2233 | shows "f \<sim>[F] (\<lambda>x. c * g x)" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2234 | using tendsto_mult[OF assms(1) tendsto_const[of "inverse c"]] assms(2) | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2235 | by (intro asymp_equivI') (simp add: field_simps) | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2236 | |
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2237 | lemma asymp_equivI'_inverse_const: | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2238 | assumes "((\<lambda>x. f x / g x) \<longlongrightarrow> inverse c) F" "c \<noteq> 0" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2239 | shows "(\<lambda>x. c * f x) \<sim>[F] g" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2240 | using tendsto_mult[OF assms(1) tendsto_const[of "c"]] assms(2) | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2241 | by (intro asymp_equivI') (simp add: field_simps) | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2242 | |
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2243 | lemma filterlim_at_bot_imp_at_infinity: "filterlim f at_bot F \<Longrightarrow> filterlim f at_infinity F" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2244 | for f :: "_ \<Rightarrow> real" using at_bot_le_at_infinity filterlim_mono by blast | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2245 | |
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2246 | lemma asymp_equiv_imp_diff_smallo: | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2247 | assumes "f \<sim>[F] g" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2248 | shows "(\<lambda>x. f x - g x) \<in> o[F](g)" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2249 | proof (rule landau_o.smallI) | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2250 | fix c :: real assume "c > 0" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2251 | hence c: "min c 1 > 0" by simp | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2252 | let ?h = "\<lambda>x. if f x = 0 \<and> g x = 0 then 1 else f x / g x" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2253 | from assms have "((\<lambda>x. ?h x - 1) \<longlongrightarrow> 1 - 1) F" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2254 | by (intro tendsto_diff asymp_equivD tendsto_const) | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2255 | from tendstoD[OF this c] show "eventually (\<lambda>x. norm (f x - g x) \<le> c * norm (g x)) F" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2256 | proof eventually_elim | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2257 | case (elim x) | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2258 | from elim have "norm (f x - g x) \<le> norm (f x / g x - 1) * norm (g x)" | 
| 70817 
dd675800469d
dedicated fact collections for algebraic simplification rules potentially splitting goals
 haftmann parents: 
70688diff
changeset | 2259 | by (subst norm_mult [symmetric]) (auto split: if_splits simp add: algebra_simps) | 
| 68246 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2260 | also have "norm (f x / g x - 1) * norm (g x) \<le> c * norm (g x)" using elim | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2261 | by (auto split: if_splits simp: mult_right_mono) | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2262 | finally show ?case . | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2263 | qed | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2264 | qed | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2265 | |
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2266 | lemma asymp_equiv_altdef: | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2267 | "f \<sim>[F] g \<longleftrightarrow> (\<lambda>x. f x - g x) \<in> o[F](g)" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2268 | by (rule iffI[OF asymp_equiv_imp_diff_smallo smallo_imp_asymp_equiv]) | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2269 | |
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2270 | lemma asymp_equiv_0_left_iff [simp]: "(\<lambda>_. 0) \<sim>[F] f \<longleftrightarrow> eventually (\<lambda>x. f x = 0) F" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2271 | and asymp_equiv_0_right_iff [simp]: "f \<sim>[F] (\<lambda>_. 0) \<longleftrightarrow> eventually (\<lambda>x. f x = 0) F" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2272 | by (simp_all add: asymp_equiv_altdef landau_o.small_refl_iff) | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2273 | |
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2274 | lemma asymp_equiv_sandwich_real: | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2275 | fixes f g l u :: "'a \<Rightarrow> real" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2276 |   assumes "l \<sim>[F] g" "u \<sim>[F] g" "eventually (\<lambda>x. f x \<in> {l x..u x}) F"
 | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2277 | shows "f \<sim>[F] g" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2278 | unfolding asymp_equiv_altdef | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2279 | proof (rule landau_o.smallI) | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2280 | fix c :: real assume c: "c > 0" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2281 | have "eventually (\<lambda>x. norm (f x - g x) \<le> max (norm (l x - g x)) (norm (u x - g x))) F" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2282 | using assms(3) by eventually_elim auto | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2283 | moreover have "eventually (\<lambda>x. norm (l x - g x) \<le> c * norm (g x)) F" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2284 | "eventually (\<lambda>x. norm (u x - g x) \<le> c * norm (g x)) F" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2285 | using assms(1,2) by (auto simp: asymp_equiv_altdef dest: landau_o.smallD[OF _ c]) | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2286 | hence "eventually (\<lambda>x. max (norm (l x - g x)) (norm (u x - g x)) \<le> c * norm (g x)) F" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2287 | by eventually_elim simp | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2288 | ultimately show "eventually (\<lambda>x. norm (f x - g x) \<le> c * norm (g x)) F" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2289 | by eventually_elim (rule order.trans) | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2290 | qed | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2291 | |
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2292 | lemma asymp_equiv_sandwich_real': | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2293 | fixes f g l u :: "'a \<Rightarrow> real" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2294 |   assumes "f \<sim>[F] l" "f \<sim>[F] u" "eventually (\<lambda>x. g x \<in> {l x..u x}) F"
 | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2295 | shows "f \<sim>[F] g" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2296 | using asymp_equiv_sandwich_real[of l F f u g] assms by (simp add: asymp_equiv_sym) | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2297 | |
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2298 | lemma asymp_equiv_sandwich_real'': | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2299 | fixes f g l u :: "'a \<Rightarrow> real" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2300 | assumes "l1 \<sim>[F] u1" "u1 \<sim>[F] l2" "l2 \<sim>[F] u2" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2301 |           "eventually (\<lambda>x. f x \<in> {l1 x..u1 x}) F" "eventually (\<lambda>x. g x \<in> {l2 x..u2 x}) F"
 | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2302 | shows "f \<sim>[F] g" | 
| 77200 
8f2e6186408f
Some more new material and some tidying of existing proofs
 paulson <lp15@cam.ac.uk> parents: 
75462diff
changeset | 2303 | by (meson assms asymp_equiv_sandwich_real asymp_equiv_sandwich_real' asymp_equiv_trans) | 
| 68246 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2304 | |
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2305 | end |