| author | desharna | 
| Tue, 08 Sep 2020 11:32:57 +0200 | |
| changeset 72342 | 4195e75a92ef | 
| parent 70817 | dd675800469d | 
| child 74324 | 308e74afab83 | 
| 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 | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 3 | Author: Manuel Eberl <eberlm@in.tum.de> | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 4 | |
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 5 | Landau symbols for reasoning about the asymptotic growth of functions. | 
| 
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 | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 10 | imports | 
| 
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> | 
| 68246 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 22 | Our Landau symbols are sign-oblivious, i.e. any function always has the same growth | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 23 | as its absolute. This has the advantage of making some cancelling rules for sums nicer, but | 
| 
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 | |
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 28 | definition bigo :: "'a filter \<Rightarrow> ('a \<Rightarrow> ('b :: real_normed_field)) \<Rightarrow> ('a \<Rightarrow> 'b) set" 
 | 
| 69597 | 29 | (\<open>(1O[_]'(_'))\<close>) | 
| 68246 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 30 |   where "bigo F g = {f. (\<exists>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 | 31 | |
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 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 | |
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 36 | definition bigomega :: "'a filter \<Rightarrow> ('a \<Rightarrow> ('b :: real_normed_field)) \<Rightarrow> ('a \<Rightarrow> 'b) set" 
 | 
| 69597 | 37 | (\<open>(1\<Omega>[_]'(_'))\<close>) | 
| 68246 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 38 |   where "bigomega F g = {f. (\<exists>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 | 39 | |
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 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 | |
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 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 | 
| 68246 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 49 | "O(g) \<equiv> bigo at_top g" | 
| 
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" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 62 | |
| 
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" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 74 | assumes in_filtermap_iff: | 
| 
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))" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 76 | assumes filtercomap: | 
| 
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)" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 86 | assumes inverse: "eventually (\<lambda>x. f x \<noteq> 0) F \<Longrightarrow> eventually (\<lambda>x. g x \<noteq> 0) F \<Longrightarrow> | 
| 
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') | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 98 | |
| 
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 | |
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 102 | lemma cong_ex: | 
| 
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> | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 104 | f1 \<in> L F (g1) \<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 | 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 | |
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 107 | lemma cong_ex_bigtheta: | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 108 | "f1 \<in> \<Theta>[F](f2) \<Longrightarrow> g1 \<in> \<Theta>[F](g2) \<Longrightarrow> f1 \<in> L F (g1) \<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 | 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 | |
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 111 | lemma bigtheta_trans1: | 
| 
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 | |
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 115 | lemma bigtheta_trans2: | 
| 
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) | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 118 | |
| 
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) | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 130 | |
| 
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) | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 210 | |
| 
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 | |
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 287 | lemmas [landau_divide_simps] = | 
| 
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> | 
| 68246 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 294 | The symbols $O$ and $o$ and $\Omega$ and $\omega$ are dual, so for many rules, replacing $O$ with | 
| 
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 | |
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 299 | locale landau_pair = | 
| 
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 | |
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 312 | interpretation landau_o: | 
| 
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 | |
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 316 | interpretation landau_omega: | 
| 
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 | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 342 | |
| 
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 | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 361 | |
| 
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- | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 383 | from assms(1) guess c by (elim bigE) note c = this | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 384 | from assms(2) guess d by (elim bigE) note d = this | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 385 | from c(2) d(2) have "eventually (\<lambda>x. R (norm (f x)) (c * d * (norm (h x)))) F" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 386 | proof eventually_elim | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 387 | 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 | 388 | also assume "R (norm (g x)) (d * (norm (h x)))" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 389 | with c(1) have "R (c * (norm (g x))) (c * (d * (norm (h x))))" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 390 | by (intro R_mult_left_mono) simp_all | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 391 | finally show "R (norm (f x)) (c * d * (norm (h x)))" by (simp add: algebra_simps) | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 392 | qed | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 393 | with c(1) d(1) show ?thesis by (intro bigI[of "c*d"]) simp_all | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 394 | qed | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 395 | |
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 396 | lemma big_small_trans: | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 397 | 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 | 398 | 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 | 399 | proof (rule smallI) | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 400 | 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 | 401 | from assms(1) guess d by (elim bigE) note d = this | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 402 | note d(2) | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 403 | moreover from c d assms(2) | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 404 | have "eventually (\<lambda>x. R (norm (g x)) (c * inverse d * norm (h x))) F" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 405 | by (intro smallD) simp_all | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 406 | ultimately show "eventually (\<lambda>x. R (norm (f x)) (c * (norm (h x)))) F" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 407 | by eventually_elim (erule R_trans, insert R d(1), auto simp: field_simps) | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 408 | qed | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 409 | |
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 410 | lemma small_big_trans: | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 411 | 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 | 412 | 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 | 413 | proof (rule smallI) | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 414 | 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 | 415 | from assms(2) guess d by (elim bigE) note d = this | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 416 | note d(2) | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 417 | moreover from c d assms(1) | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 418 | have "eventually (\<lambda>x. R (norm (f x)) (c * inverse d * norm (g x))) F" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 419 | by (intro smallD) simp_all | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 420 | ultimately show "eventually (\<lambda>x. R (norm (f x)) (c * norm (h x))) F" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 421 | by eventually_elim (rotate_tac 2, erule R_trans, insert R c d(1), auto simp: field_simps) | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 422 | qed | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 423 | |
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 424 | lemma small_trans: | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 425 | "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 | 426 | 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 | 427 | |
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 428 | lemma small_big_trans': | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 429 | "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 | 430 | 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 | 431 | |
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 432 | lemma big_small_trans': | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 433 | "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 | 434 | 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 | 435 | |
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 436 | 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 | 437 | 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 | 438 | |
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 439 | 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 | 440 | 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 | 441 | |
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 442 | 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 | 443 | 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 | 444 | |
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 445 | 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 | 446 | proof (rule iffI[OF _ smallI]) | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 447 | 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 | 448 | 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 | 449 | 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 | 450 | 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 | 451 | next | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 452 | 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 | 453 | 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 | 454 | by eventually_elim simp_all | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 455 | qed | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 456 | |
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 457 | 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 | 458 | 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 | 459 | |
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 460 | 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 | 461 | 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 | 462 | |
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 463 | 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 | 464 | 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 | 465 | |
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 466 | |
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 467 | lemma plus_aux: | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 468 | 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 | 469 | 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 | 470 | proof (rule R_E) | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 471 | assume [simp]: "R = (\<le>)" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 472 | have A: "1/2 > (0::real)" by simp | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 473 |   {
 | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 474 | fix x assume "norm (f x) \<le> 1/2 * norm (g x)" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 475 | hence "1/2 * (norm (g x)) \<le> (norm (g x)) - (norm (f x))" by simp | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 476 | 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 | 477 | by (subst add.commute) (rule norm_diff_ineq) | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 478 | finally have "1/2 * (norm (g x)) \<le> norm (f x + g x)" by simp | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 479 | } note B = this | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 480 | |
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 481 | 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 | 482 | apply (rule bigI[of "2"], simp) | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 483 | using landau_o.smallD[OF assms A] apply eventually_elim | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 484 | using B apply (simp add: algebra_simps) | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 485 | done | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 486 | next | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 487 | assume [simp]: "R = (\<lambda>x y. x \<ge> y)" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 488 | 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 | 489 | 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 | 490 | 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 | 491 | 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 | 492 | proof eventually_elim | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 493 | case (elim x) | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 494 | have "norm (f x + g x) \<le> norm (f x) + norm (g x)" by (rule norm_triangle_ineq) | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 495 | also note elim | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 496 | finally show ?case by simp | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 497 | qed | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 498 | qed simp_all | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 499 | qed | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 500 | |
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 501 | end | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 502 | |
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 503 | |
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 504 | |
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 505 | 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 | 506 | proof | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 507 | 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 | 508 | then guess c by (elim landau_o.bigE) | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 509 | thus "g \<in> \<Omega>[F](f)" by (intro landau_omega.bigI[of "inverse c"]) (simp_all add: field_simps) | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 510 | next | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 511 | 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 | 512 | then guess c by (elim landau_omega.bigE) | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 513 | thus "f \<in> O[F](g)" by (intro landau_o.bigI[of "inverse c"]) (simp_all add: field_simps) | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 514 | qed | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 515 | |
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 516 | 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 | 517 | proof | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 518 | 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 | 519 | 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 | 520 | 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 | 521 | next | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 522 | 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 | 523 | 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 | 524 | 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 | 525 | qed | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 526 | |
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 527 | |
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 528 | context landau_pair | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 529 | begin | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 530 | |
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 531 | lemma big_mono: | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 532 | "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 | 533 | 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 | 534 | |
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 535 | lemma big_mult: | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 536 | 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 | 537 | 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 | 538 | proof- | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 539 | from assms(1) guess c1 by (elim bigE) note c1 = this | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 540 | from assms(2) guess c2 by (elim bigE) note c2 = this | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 541 | |
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 542 | from c1(1) and c2(1) have "c1 * c2 > 0" by simp | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 543 | moreover have "eventually (\<lambda>x. R (norm (f1 x * f2 x)) (c1 * c2 * norm (g1 x * g2 x))) F" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 544 | using c1(2) c2(2) | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 545 | proof eventually_elim | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 546 | case (elim x) | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 547 | show ?case | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 548 | proof (cases rule: R_E) | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 549 | case le | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 550 | have "norm (f1 x) * norm (f2 x) \<le> (c1 * norm (g1 x)) * (c2 * norm (g2 x))" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 551 | using elim le c1(1) c2(1) by (intro mult_mono mult_nonneg_nonneg) auto | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 552 | 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 | 553 | next | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 554 | case ge | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 555 | have "(c1 * norm (g1 x)) * (c2 * norm (g2 x)) \<le> norm (f1 x) * norm (f2 x)" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 556 | using elim ge c1(1) c2(1) by (intro mult_mono mult_nonneg_nonneg) auto | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 557 | 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 | 558 | qed | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 559 | qed | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 560 | 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 | 561 | qed | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 562 | |
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 563 | lemma small_big_mult: | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 564 | 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 | 565 | 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 | 566 | proof (rule smallI) | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 567 | fix c1 :: real assume c1: "c1 > 0" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 568 | from assms(2) guess c2 by (elim bigE) note c2 = this | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 569 | with c1 assms(1) have "eventually (\<lambda>x. R (norm (f1 x)) (c1 * inverse c2 * norm (g1 x))) F" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 570 | by (auto intro!: smallD) | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 571 | thus "eventually (\<lambda>x. R (norm (f1 x * f2 x)) (c1 * norm (g1 x * g2 x))) F" using c2(2) | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 572 | proof eventually_elim | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 573 | case (elim x) | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 574 | show ?case | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 575 | proof (cases rule: R_E) | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 576 | case le | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 577 | have "norm (f1 x) * norm (f2 x) \<le> (c1 * inverse c2 * norm (g1 x)) * (c2 * norm (g2 x))" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 578 | using elim le c1(1) c2(1) by (intro mult_mono mult_nonneg_nonneg) auto | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 579 | with le c2(1) show ?thesis by (simp add: le norm_mult field_simps) | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 580 | next | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 581 | case ge | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 582 | have "norm (f1 x) * norm (f2 x) \<ge> (c1 * inverse c2 * norm (g1 x)) * (c2 * norm (g2 x))" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 583 | using elim ge c1(1) c2(1) by (intro mult_mono mult_nonneg_nonneg) auto | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 584 | with ge c2(1) show ?thesis by (simp add: ge norm_mult field_simps) | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 585 | qed | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 586 | qed | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 587 | qed | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 588 | |
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 589 | lemma big_small_mult: | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 590 | "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 | 591 | 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 | 592 | |
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 593 | 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 | 594 | 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 | 595 | |
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 596 | 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 | 597 | |
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 598 | |
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 599 | 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 | 600 | proof | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 601 | 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 | 602 | by (rule R_E) (auto simp: bigo_def L_def bigomega_def fun_eq_iff) | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 603 |   {
 | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 604 | fix c :: 'b and F and f :: "'a \<Rightarrow> 'b" assume "c \<noteq> 0" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 605 | hence "(\<lambda>x. c * f x) \<in> L F f" by (intro bigI[of "norm c"]) (simp_all add: norm_mult) | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 606 | } note A = this | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 607 |   {
 | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 608 | fix c :: 'b and F and f :: "'a \<Rightarrow> 'b" assume "c \<noteq> 0" | 
| 69272 | 609 | from \<open>c \<noteq> 0\<close> and A[of c f] and A[of "inverse c" "\<lambda>x. c * f x"] | 
| 68246 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 610 | show "L F (\<lambda>x. c * f x) = L F f" by (intro equalityI big_subsetI) (simp_all add: field_simps) | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 611 | } | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 612 |   {
 | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 613 | fix c :: 'b and F and f g :: "'a \<Rightarrow> 'b" assume "c \<noteq> 0" | 
| 69272 | 614 | from \<open>c \<noteq> 0\<close> and A[of c f] and A[of "inverse c" "\<lambda>x. c * f x"] | 
| 68246 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 615 | have "(\<lambda>x. c * f x) \<in> L F f" "f \<in> L F (\<lambda>x. c * f x)" by (simp_all add: field_simps) | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 616 | thus "((\<lambda>x. c * f x) \<in> L F g) = (f \<in> L F g)" by (intro iffI) (erule (1) big_trans)+ | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 617 | } | 
| 
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 | fix f g :: "'a \<Rightarrow> 'b" and F assume A: "f \<in> L F (g)" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 620 | assume B: "eventually (\<lambda>x. f x \<noteq> 0) F" "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 | 621 | from A guess c by (elim bigE) note c = this | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 622 | from c(2) B have "eventually (\<lambda>x. R (norm (inverse (g x))) (c * norm (inverse (f x)))) F" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 623 | by eventually_elim (rule R_E, insert c(1), simp_all add: 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 | 624 | with c(1) show "(\<lambda>x. inverse (g x)) \<in> L F (\<lambda>x. inverse (f x))" by (rule bigI) | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 625 | } | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 626 |   {
 | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 627 | fix f g :: "'a \<Rightarrow> 'b" and F 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 | 628 | with plus_aux show "L F g \<subseteq> L F (\<lambda>x. f x + g x)" by (blast intro!: big_subsetI) | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 629 | } | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 630 |   {
 | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 631 | fix f g :: "'a \<Rightarrow> 'b" and F assume A: "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 | 632 | show "L F (f) = L F (g)" unfolding L_def | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 633 | by (subst eventually_subst'[OF A]) (rule refl) | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 634 | } | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 635 |   {
 | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 636 | fix f g h :: "'a \<Rightarrow> 'b" and F assume A: "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 | 637 | show "f \<in> L F (h) \<longleftrightarrow> g \<in> L F (h)" unfolding L_def mem_Collect_eq | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 638 | by (subst (1) eventually_subst'[OF A]) (rule refl) | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 639 | } | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 640 |   {
 | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 641 | fix f g :: "'a \<Rightarrow> 'b" and F assume "f \<in> L F g" thus "L F f \<subseteq> L F g" by (rule big_subsetI) | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 642 | } | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 643 |   {
 | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 644 | fix f g :: "'a \<Rightarrow> 'b" and F assume A: "f \<in> \<Theta>[F](g)" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 645 | with A L show "L F (f) = L F (g)" unfolding bigtheta_def | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 646 | by (intro equalityI big_subsetI) (auto simp: bigomega_iff_bigo) | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 647 | fix h:: "'a \<Rightarrow> 'b" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 648 | show "f \<in> L F (h) \<longleftrightarrow> g \<in> L F (h)" by (rule disjE[OF L]) | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 649 | (insert A, auto simp: bigtheta_def bigomega_iff_bigo intro: landau_o.big_trans) | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 650 | } | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 651 |   {
 | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 652 | fix f g h :: "'a \<Rightarrow> 'b" and F assume "f \<in> L F g" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 653 | thus "(\<lambda>x. h x * f x) \<in> L F (\<lambda>x. h x * g x)" by (intro big_mult) simp | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 654 | } | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 655 |   {
 | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 656 | fix f g h :: "'a \<Rightarrow> 'b" and F assume "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 | 657 | thus "f \<in> L F (h)" by (rule big_trans) | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 658 | } | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 659 |   {
 | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 660 | fix f g :: "'a \<Rightarrow> 'b" and h :: "'c \<Rightarrow> 'a" and F G | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 661 | assume "f \<in> L F g" and "filterlim h F G" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 662 | thus "(\<lambda>x. f (h x)) \<in> L' G (\<lambda>x. g (h x))" by (auto simp: L_def L'_def filterlim_iff) | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 663 | } | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 664 |   {
 | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 665 | fix f g :: "'a \<Rightarrow> 'b" and F G :: "'a filter" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 666 | assume "f \<in> L F g" "f \<in> L G g" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 667 | from this [THEN bigE] guess c1 c2 . note c12 = this | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 668 | define c where "c = (if R c1 c2 then c2 else c1)" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 669 | from c12 have c: "R c1 c" "R c2 c" "c > 0" by (auto simp: c_def dest: R_linear) | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 670 | with c12(2,4) have "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 | 671 | "eventually (\<lambda>x. R (norm (f x)) (c * norm (g x))) G" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 672 | by (force elim: eventually_mono intro: R_trans[OF _ R_mult_right_mono])+ | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 673 | with c show "f \<in> L (sup F G) g" by (auto simp: L_def eventually_sup) | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 674 | } | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 675 |   {
 | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 676 | fix f g :: "'a \<Rightarrow> 'b" and h :: "'c \<Rightarrow> 'a" and F G :: "'a filter" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 677 | assume "(f \<in> L F g)" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 678 | thus "((\<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 | 679 | unfolding L_def L'_def by auto | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 680 | } | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 681 | 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 | 682 | 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 | 683 | |
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 684 | 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 | 685 | proof | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 686 |   {
 | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 687 | fix c :: 'b and f :: "'a \<Rightarrow> 'b" and F assume "c \<noteq> 0" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 688 | hence "(\<lambda>x. c * f x) \<in> L F f" by (intro bigI[of "norm c"]) (simp_all add: norm_mult) | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 689 | } note A = this | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 690 |   {
 | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 691 | fix c :: 'b and f :: "'a \<Rightarrow> 'b" and F assume "c \<noteq> 0" | 
| 69272 | 692 | from \<open>c \<noteq> 0\<close> and A[of c f] and A[of "inverse c" "\<lambda>x. c * f x"] | 
| 68246 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 693 | show "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 | 694 | by (intro equalityI small_subsetI) (simp_all add: field_simps) | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 695 | } | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 696 |   {
 | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 697 | fix c :: 'b and f g :: "'a \<Rightarrow> 'b" and F assume "c \<noteq> 0" | 
| 69272 | 698 | from \<open>c \<noteq> 0\<close> and A[of c f] and A[of "inverse c" "\<lambda>x. c * f x"] | 
| 68246 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 699 | have "(\<lambda>x. c * f x) \<in> L F f" "f \<in> L F (\<lambda>x. c * f x)" by (simp_all add: field_simps) | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 700 | thus "((\<lambda>x. c * f x) \<in> l F g) = (f \<in> l F g)" by (intro iffI) (erule (1) big_small_trans)+ | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 701 | } | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 702 |   {
 | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 703 | fix f g :: "'a \<Rightarrow> 'b" and F 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 | 704 | with plus_aux show "l F g \<subseteq> l F (\<lambda>x. f x + g x)" by (blast intro!: small_subsetI) | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 705 | } | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 706 |   {
 | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 707 | fix f g :: "'a \<Rightarrow> 'b" and F assume A: "f \<in> l F (g)" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 708 | assume B: "eventually (\<lambda>x. f x \<noteq> 0) F" "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 | 709 | show "(\<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 | 710 | proof (rule smallI) | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 711 | 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 | 712 | from B smallD[OF A c] | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 713 | show "eventually (\<lambda>x. R (norm (inverse (g x))) (c * norm (inverse (f x)))) F" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 714 | by eventually_elim (rule R_E, simp_all add: 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 | 715 | qed | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 716 | } | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 717 |   {
 | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 718 | fix f g :: "'a \<Rightarrow> 'b" and F assume A: "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 | 719 | show "l F (f) = l F (g)" unfolding l_def by (subst eventually_subst'[OF A]) (rule refl) | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 720 | } | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 721 |   {
 | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 722 | fix f g h :: "'a \<Rightarrow> 'b" and F assume A: "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 | 723 | show "f \<in> l F (h) \<longleftrightarrow> g \<in> l F (h)" unfolding l_def mem_Collect_eq | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 724 | by (subst (1) eventually_subst'[OF A]) (rule refl) | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 725 | } | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 726 |   {
 | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 727 | fix f g :: "'a \<Rightarrow> 'b" and F assume "f \<in> l F g" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 728 | thus "l F f \<subseteq> l F g" by (intro small_subsetI small_imp_big) | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 729 | } | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 730 |   {
 | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 731 | fix f g :: "'a \<Rightarrow> 'b" and F assume A: "f \<in> \<Theta>[F](g)" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 732 | 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 | 733 | by (rule R_E) (auto simp: bigo_def L_def bigomega_def fun_eq_iff) | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 734 | with A show "l F (f) = l F (g)" unfolding bigtheta_def | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 735 | by (intro equalityI small_subsetI) (auto simp: bigomega_iff_bigo) | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 736 | 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 | 737 | by (rule R_E) (auto simp: smallo_def l_def smallomega_def fun_eq_iff) | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 738 | fix h:: "'a \<Rightarrow> 'b" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 739 | show "f \<in> l F (h) \<longleftrightarrow> g \<in> l F (h)" by (rule disjE[OF l]) | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 740 | (insert A, auto simp: bigtheta_def bigomega_iff_bigo smallomega_iff_smallo | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 741 | intro: landau_o.big_small_trans landau_o.small_big_trans) | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 742 | } | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 743 |   {
 | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 744 | fix f g h :: "'a \<Rightarrow> 'b" and F assume "f \<in> l F g" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 745 | thus "(\<lambda>x. h x * f x) \<in> l F (\<lambda>x. h x * g x)" by (intro big_small_mult) simp | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 746 | } | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 747 |   {
 | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 748 | fix f g h :: "'a \<Rightarrow> 'b" and F assume "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 | 749 | thus "f \<in> l F (h)" by (rule small_trans) | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 750 | } | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 751 |   {
 | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 752 | fix f g :: "'a \<Rightarrow> 'b" and h :: "'c \<Rightarrow> 'a" and F G | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 753 | assume "f \<in> l F g" and "filterlim h F G" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 754 | thus "(\<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 | 755 | by (auto simp: l_def l'_def filterlim_iff) | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 756 | } | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 757 |   {
 | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 758 | fix f g :: "'a \<Rightarrow> 'b" and h :: "'c \<Rightarrow> 'a" and F G :: "'a filter" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 759 | assume "(f \<in> l F g)" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 760 | thus "((\<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 | 761 | unfolding l_def l'_def by auto | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 762 | } | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 763 | 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 | 764 | |
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 765 | |
| 69272 | 766 | 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 | 767 | |
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 768 | 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 | 769 | 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 | 770 | 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 | 771 | 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 | 772 | 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 | 773 | 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 | 774 | 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 | 775 | |
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 776 | 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 | 777 | 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 | 778 | 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 | 779 | 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 | 780 | 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 | 781 | 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 | 782 | 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 | 783 | |
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 784 | lemmas mult_1_trans = | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 785 | 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 | 786 | 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 | 787 | |
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 788 | 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 | 789 | proof | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 790 | 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 | 791 | 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 | 792 | 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 | 793 | 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 | 794 | 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 | 795 | qed (rule big.cong_bigtheta) | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 796 | |
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 797 | lemma big_prod: | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 798 | 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 | 799 | 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 | 800 | 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 | 801 | |
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 802 | lemma big_prod_in_1: | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 803 | 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 | 804 | 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 | 805 | 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 | 806 | |
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 807 | end | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 808 | |
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 809 | |
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 810 | context landau_symbol | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 811 | begin | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 812 | |
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 813 | lemma plus_absorb1: | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 814 | 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 | 815 | 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 | 816 | proof (intro equalityI) | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 817 | 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 | 818 | 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 | 819 | 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 | 820 | 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 | 821 | qed | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 822 | |
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 823 | 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 | 824 | 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 | 825 | |
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 826 | 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 | 827 | 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 | 828 | |
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 829 | 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 | 830 | 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 | 831 | |
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 832 | 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 | 833 | |
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 834 | end | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 835 | |
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 836 | |
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 837 | 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 | 838 | 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 | 839 | |
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 840 | lemma bigthetaD1 [dest]: "f \<in> \<Theta>[F](g) \<Longrightarrow> f \<in> O[F](g)" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 841 | 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 | 842 | 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 | 843 | |
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 844 | 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 | 845 | unfolding bigtheta_def by simp | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 846 | |
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 847 | 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 | 848 | 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 | 849 | |
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 850 | lemmas landau_flip = | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 851 | 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 | 852 | 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 | 853 | |
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 854 | |
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 855 | 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 | 856 | proof | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 857 | 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 | 858 | 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 | 859 | 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 | 860 | 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 | 861 | 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 | 862 | next | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 863 | 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 | 864 | assume "f \<in> \<Theta>[F](g)" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 865 | thus A: "\<Theta>[F](f) = \<Theta>[F](g)" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 866 | 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 | 867 | 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 | 868 | apply (rule refl) | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 869 | done | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 870 | 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 | 871 | fix h :: "'a \<Rightarrow> 'b" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 872 | 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 | 873 | next | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 874 | 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 | 875 | 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 | 876 | 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 | 877 | 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 | 878 | next | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 879 | 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 | 880 | assume "F1 \<le> F2" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 881 | 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 | 882 | by (auto simp: bigtheta_def intro: landau_o.big.filter_mono landau_omega.big.filter_mono) | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 883 | qed (auto simp: bigtheta_def landau_o.big.norm_iff | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 884 | landau_o.big.cmult landau_omega.big.cmult | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 885 | landau_o.big.cmult_in_iff landau_omega.big.cmult_in_iff | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 886 | 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 | 887 | landau_o.big.mult landau_omega.big.mult | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 888 | landau_o.big.inverse landau_omega.big.inverse | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 889 | 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 | 890 | 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 | 891 | 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 | 892 | 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 | 893 | 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 | 894 | 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 | 895 | |
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 896 | lemmas landau_symbols = | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 897 | landau_o.big.landau_symbol_axioms landau_o.small.landau_symbol_axioms | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 898 | landau_omega.big.landau_symbol_axioms landau_omega.small.landau_symbol_axioms | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 899 | landau_theta.landau_symbol_axioms | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 900 | |
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 901 | lemma bigoI [intro]: | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 902 | 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 | 903 | 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 | 904 | proof (rule landau_o.bigI) | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 905 | show "max 1 c > 0" by simp | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 906 | note assms | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 907 | moreover have "\<And>x. c * (norm (g x)) \<le> max 1 c * (norm (g x))" by (simp add: mult_right_mono) | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 908 | ultimately show "eventually (\<lambda>x. (norm (f x)) \<le> max 1 c * (norm (g x))) F" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 909 | 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 | 910 | qed | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 911 | |
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 912 | lemma smallomegaD [dest]: | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 913 | 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 | 914 | 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 | 915 | proof (cases "c > 0") | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 916 | case False | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 917 | show ?thesis | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 918 | 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 | 919 | (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 | 920 | 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 | 921 | |
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 922 | |
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 923 | lemma bigthetaI': | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 924 | assumes "c1 > 0" "c2 > 0" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 925 | 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 | 926 | 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 | 927 | apply (rule bigthetaI) | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 928 | 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 | 929 | 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 | 930 | done | 
| 
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 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 | 933 | 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 | 934 | |
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 935 | lemma (in landau_symbol) ev_eq_trans1: | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 936 | "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 | 937 | 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 | 938 | |
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 939 | lemma (in landau_symbol) ev_eq_trans2: | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 940 | "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 | 941 | 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 | 942 | |
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 943 | 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 | 944 | 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 | 945 | declare landau_o.smallD | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 946 | |
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 947 | lemma (in landau_symbol) bigtheta_trans1': | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 948 | "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 | 949 | 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 | 950 | |
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 951 | lemma (in landau_symbol) bigtheta_trans2': | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 952 | "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 | 953 | 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 | 954 | |
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 955 | 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 | 956 | 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 | 957 | 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 | 958 | 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 | 959 | 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 | 960 | 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 | 961 | 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 | 962 | 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 | 963 | by (unfold bigomega_iff_bigo smallomega_iff_smallo) | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 964 | (erule (1) landau_o.big_trans landau_o.big_small_trans landau_o.small_big_trans | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 965 | 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 | 966 | |
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 967 | lemmas landau_trans_lift [trans] = | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 968 | 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 | 969 | 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 | 970 | 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 | 971 | 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 | 972 | |
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 973 | 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 | 974 | 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 | 975 | |
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 976 | lemmas landau_trans [trans] = | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 977 | 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 | 978 | 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 | 979 | 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 | 980 | 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 | 981 | 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 | 982 | 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 | 983 | |
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 984 | landau_o.big_trans landau_o.small_trans landau_o.small_big_trans landau_o.big_small_trans | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 985 | landau_omega.big_trans landau_omega.small_trans | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 986 | 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 | 987 | |
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 988 | bigo_bigomega_trans bigo_smallomega_trans smallo_bigomega_trans smallo_smallomega_trans | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 989 | 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 | 990 | |
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 991 | lemma bigtheta_inverse [simp]: | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 992 | shows "(\<lambda>x. inverse (f x)) \<in> \<Theta>[F](\<lambda>x. inverse (g x)) \<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 | 993 | proof- | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 994 |   {
 | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 995 | fix f g :: "'a \<Rightarrow> 'b" and F assume A: "f \<in> \<Theta>[F](g)" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 996 | then guess c1 c2 :: real unfolding bigtheta_def by (elim landau_o.bigE landau_omega.bigE IntE) | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 997 | note c = this | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 998 | from c(3) have "inverse c2 > 0" by simp | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 999 | moreover from c(2,4) | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1000 | have "eventually (\<lambda>x. norm (inverse (f x)) \<le> inverse c2 * norm (inverse (g x))) F" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1001 | proof eventually_elim | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1002 | fix x assume A: "(norm (f x)) \<le> c1 * (norm (g x))" "c2 * (norm (g x)) \<le> (norm (f x))" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1003 | from A c(1,3) have "f x = 0 \<longleftrightarrow> g x = 0" by (auto simp: field_simps mult_le_0_iff) | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1004 | with A c(1,3) show "norm (inverse (f x)) \<le> inverse c2 * norm (inverse (g x))" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1005 | 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 | 1006 | qed | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1007 | ultimately have "(\<lambda>x. inverse (f x)) \<in> O[F](\<lambda>x. inverse (g x))" by (rule landau_o.bigI) | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1008 | } | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1009 | thus ?thesis unfolding bigtheta_def | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1010 | 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 | 1011 | qed | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1012 | |
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1013 | lemma bigtheta_divide: | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1014 | 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 | 1015 | 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 | 1016 | 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 | 1017 | |
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1018 | lemma eventually_nonzero_bigtheta: | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1019 | 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 | 1020 | shows "eventually (\<lambda>x. f x \<noteq> 0) F \<longleftrightarrow> 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 | 1021 | proof- | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1022 |   {
 | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1023 | fix f g :: "'a \<Rightarrow> 'b" and F assume A: "f \<in> \<Theta>[F](g)" and B: "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 | 1024 | from A guess c1 c2 unfolding bigtheta_def by (elim landau_o.bigE landau_omega.bigE IntE) | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1025 | from B this(2,4) have "eventually (\<lambda>x. g x \<noteq> 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 | 1026 | } | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1027 | 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 | 1028 | qed | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1029 | |
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1030 | |
| 69272 | 1031 | 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 | 1032 | |
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1033 | lemma bigoI_tendsto_norm: | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1034 | fixes f g | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1035 | 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 | 1036 | 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 | 1037 | 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 | 1038 | proof (rule bigoI) | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1039 | from assms have "eventually (\<lambda>x. dist (norm (f x / g x)) c < 1) F" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1040 | using tendstoD by force | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1041 | 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 | 1042 | 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 | 1043 | proof eventually_elim | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1044 | case (elim x) | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1045 | 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 | 1046 | 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 | 1047 | 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 | 1048 | 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 | 1049 | 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 | 1050 | also from elim have "norm (norm (f x / g x) - c) \<le> 1" by simp | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1051 | hence "norm (norm (g x)) * norm (norm (f x / g x) - c) \<le> norm (norm (g x)) * 1" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1052 | 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 | 1053 | 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 | 1054 | qed | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1055 | qed | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1056 | |
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1057 | lemma bigoI_tendsto: | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1058 | 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 | 1059 | 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 | 1060 | 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 | 1061 | 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 | 1062 | |
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1063 | lemma bigomegaI_tendsto_norm: | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1064 | 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 | 1065 | 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 | 1066 | 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 | 1067 | proof (cases "F = bot") | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1068 | case False | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1069 | show ?thesis | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1070 | proof (rule landau_omega.bigI) | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1071 | 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 | 1072 | 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 | 1073 | 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 | 1074 | 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 | 1075 | by (subst (asm) tendsto_iff) (simp add: dist_real_def) | 
| 69272 | 1076 | 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 | 1077 | proof (eventually_elim) | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1078 | 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 | 1079 | 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 | 1080 | 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 | 1081 | also have "... \<le> 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 | 1082 | finally show "(norm (f x)) \<ge> c/2 * (norm (g x))" using g | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1083 | 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 | 1084 | qed | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1085 | qed | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1086 | qed simp | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1087 | |
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1088 | lemma bigomegaI_tendsto: | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1089 | 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 | 1090 | 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 | 1091 | 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 | 1092 | 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 | 1093 | |
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1094 | 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 | 1095 | 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 | 1096 | 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 | 1097 | proof (rule landau_omega.smallI) | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1098 | 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 | 1099 | 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 | 1100 | 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 | 1101 | 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 | 1102 | proof eventually_elim | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1103 | 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 | 1104 | 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 | 1105 | 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 | 1106 | qed | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1107 | qed | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1108 | |
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1109 | lemma smallomegaI_filterlim_at_infinity: | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1110 | 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 | 1111 | 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 | 1112 | 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 | 1113 | 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 | 1114 | 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 | 1115 | qed | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1116 | |
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1117 | 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 | 1118 | 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 | 1119 | 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 | 1120 | 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 | 1121 | 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 | 1122 | 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 | 1123 | from landau_omega.smallD[OF assms(1) this] assms(2) | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1124 | show "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 | 1125 | 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 | 1126 | qed | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1127 | |
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1128 | lemma smallomegaD_filterlim_at_infinity: | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1129 | 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 | 1130 | 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 | 1131 | 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 | 1132 | 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 | 1133 | |
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1134 | 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 | 1135 | 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 | 1136 | |
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1137 | lemma smalloI_tendsto: | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1138 | 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 | 1139 | 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 | 1140 | 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 | 1141 | proof (rule landau_o.smallI) | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1142 | 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 | 1143 | 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 | 1144 | 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 | 1145 | 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 | 1146 | 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 | 1147 | qed | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1148 | |
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1149 | lemma smalloD_tendsto: | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1150 | 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 | 1151 | 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 | 1152 | unfolding tendsto_iff | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1153 | proof clarify | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1154 | 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 | 1155 | 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 | 1156 | 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 | 1157 | proof eventually_elim | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1158 | 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 | 1159 | 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 | 1160 | 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 | 1161 | 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 | 1162 | 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 | 1163 | qed | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1164 | qed | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1165 | |
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1166 | lemma bigthetaI_tendsto_norm: | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1167 | 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 | 1168 | 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 | 1169 | 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 | 1170 | proof (rule bigthetaI) | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1171 | 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 | 1172 | 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 | 1173 | 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 | 1174 | 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 | 1175 | |
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1176 | 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 | 1177 | 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 | 1178 | qed | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1179 | |
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1180 | lemma bigthetaI_tendsto: | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1181 | 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 | 1182 | 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 | 1183 | 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 | 1184 | 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 | 1185 | |
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1186 | lemma tendsto_add_smallo: | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1187 | assumes "(f1 \<longlongrightarrow> a) F" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1188 | 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 | 1189 | 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 | 1190 | proof (subst filterlim_cong[OF refl refl]) | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1191 | 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 | 1192 | 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 | 1193 | 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 | 1194 | 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 | 1195 | next | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1196 | 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 | 1197 | 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 | 1198 | qed | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1199 | |
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1200 | lemma tendsto_diff_smallo: | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1201 | 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 | 1202 | 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 | 1203 | |
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1204 | lemma tendsto_add_smallo_iff: | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1205 | 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 | 1206 | 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 | 1207 | proof | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1208 | 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 | 1209 | 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 | 1210 | 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 | 1211 | 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 | 1212 | 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 | 1213 | |
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1214 | lemma tendsto_diff_smallo_iff: | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1215 | 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 | 1216 | 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 | 1217 | |
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1218 | lemma tendsto_divide_smallo: | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1219 | 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 | 1220 | 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 | 1221 | 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 | 1222 | 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 | 1223 | proof (subst tendsto_cong) | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1224 | 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 | 1225 | |
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1226 | have "(?f' \<longlongrightarrow> a * (1 + 0) / (1 + 0)) F" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1227 | by (rule tendsto_mult tendsto_divide tendsto_add assms tendsto_const | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1228 | 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 | 1229 | 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 | 1230 | |
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1231 | 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 | 1232 | 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 | 1233 | 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 | 1234 | "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 | 1235 | 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 | 1236 | proof eventually_elim | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1237 | fix x assume A: "norm (f2 x) \<le> norm (f1 x)/2" and | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1238 | 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 | 1239 | show "?f x = ?f' x" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1240 | proof (cases "f1 x = 0") | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1241 | 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 | 1242 | 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 | 1243 | 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 | 1244 | 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 | 1245 | 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 | 1246 | finally show ?thesis . | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1247 | qed (insert A, simp) | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1248 | qed | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1249 | qed | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1250 | |
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1251 | |
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1252 | lemma bigo_powr: | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1253 | fixes f :: "'a \<Rightarrow> real" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1254 | 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 | 1255 | 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 | 1256 | proof- | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1257 | from assms(1) guess c by (elim landau_o.bigE landau_omega.bigE IntE) | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1258 | note c = this | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1259 | from c(2) assms(2) have "eventually (\<lambda>x. (norm (f x)) powr p \<le> (c * (norm (g x))) powr p) F" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1260 | by (auto elim!: eventually_mono intro!: powr_mono2) | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1261 | thus "(\<lambda>x. \<bar>f x\<bar> powr p) \<in> O[F](\<lambda>x. \<bar>g x\<bar> powr p)" using c(1) | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1262 | 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 | 1263 | qed | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1264 | |
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1265 | lemma smallo_powr: | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1266 | fixes f :: "'a \<Rightarrow> real" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1267 | 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 | 1268 | 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 | 1269 | proof (rule landau_o.smallI) | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1270 | 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 | 1271 | hence "c powr (1/p) > 0" by simp | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1272 | from landau_o.smallD[OF assms(1) this] | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1273 | 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 | 1274 | proof eventually_elim | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1275 | 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 | 1276 | 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 | 1277 | 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 | 1278 | 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 | 1279 | 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 | 1280 | 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 | 1281 | qed | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1282 | qed | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1283 | |
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1284 | lemma smallo_powr_nonneg: | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1285 | fixes f :: "'a \<Rightarrow> real" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1286 | 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 | 1287 | 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 | 1288 | proof - | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1289 | from assms(3) have "(\<lambda>x. f x powr p) \<in> \<Theta>[F](\<lambda>x. \<bar>f x\<bar> powr p)" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1290 | 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 | 1291 | 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 | 1292 | 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 | 1293 | 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 | 1294 | finally show ?thesis . | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1295 | qed | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1296 | |
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1297 | lemma bigtheta_powr: | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1298 | fixes f :: "'a \<Rightarrow> real" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1299 | 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 | 1300 | apply (cases "p < 0") | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1301 | 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 | 1302 | 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 | 1303 | done | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1304 | |
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1305 | lemma bigo_powr_nonneg: | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1306 | fixes f :: "'a \<Rightarrow> real" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1307 | 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 | 1308 | 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 | 1309 | proof - | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1310 | from assms(3) have "(\<lambda>x. f x powr p) \<in> \<Theta>[F](\<lambda>x. \<bar>f x\<bar> powr p)" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1311 | 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 | 1312 | 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 | 1313 | 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 | 1314 | 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 | 1315 | finally show ?thesis . | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1316 | qed | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1317 | |
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1318 | 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 | 1319 | 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 | 1320 | |
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1321 | 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 | 1322 | 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 | 1323 | |
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1324 | 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 | 1325 | 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 | 1326 | |
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1327 | 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 | 1328 | 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 | 1329 | |
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1330 | |
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1331 | 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 | 1332 | proof | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1333 | 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 | 1334 | 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 | 1335 | next | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1336 | 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 | 1337 | 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 | 1338 | 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 | 1339 | qed | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1340 | |
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1341 | 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 | 1342 | proof | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1343 | 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 | 1344 | 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 | 1345 | next | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1346 | 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 | 1347 | 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 | 1348 | 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 | 1349 | qed | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1350 | |
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1351 | 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 | 1352 | 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 | 1353 | |
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1354 | 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 | 1355 | 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 | 1356 | |
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1357 | 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 | 1358 | unfolding bigtheta_def by simp | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1359 | |
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1360 | 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 | 1361 | unfolding bigtheta_def by simp | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1362 | |
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1363 | |
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1364 | 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 | 1365 | 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 | 1366 | 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 | 1367 | 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 | 1368 | 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 | 1369 | |
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1370 | 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 | 1371 | |
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1372 | 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 | 1373 | 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 | 1374 | (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 | 1375 | |
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1376 | 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 | 1377 | 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 | 1378 | (auto simp: bigomega_def eventually_False mult_le_0_iff | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1379 | 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 | 1380 | |
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1381 | lemma smallo_real_nat_transfer: | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1382 | "(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 | 1383 | 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 | 1384 | |
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1385 | lemma bigo_real_nat_transfer: | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1386 | "(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 | 1387 | 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 | 1388 | |
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1389 | lemma smallomega_real_nat_transfer: | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1390 | "(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 | 1391 | 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 | 1392 | |
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1393 | lemma bigomega_real_nat_transfer: | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1394 | "(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 | 1395 | 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 | 1396 | |
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1397 | lemma bigtheta_real_nat_transfer: | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1398 | "(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 | 1399 | 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 | 1400 | |
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1401 | lemmas landau_real_nat_transfer [intro] = | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1402 | bigo_real_nat_transfer smallo_real_nat_transfer bigomega_real_nat_transfer | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1403 | 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 | 1404 | |
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1405 | |
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1406 | 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 | 1407 | 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 | 1408 | shows "L at_top (\<lambda>x::'a::linordered_semidom. if x = a then f x else g x) = L at_top (g)" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1409 | apply (rule landau_symbol.cong[OF assms]) | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1410 | using less_add_one[of a] apply (auto intro: eventually_mono eventually_ge_at_top[of "a + 1"]) | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1411 | done | 
| 
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 | 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 | 1414 | |
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1415 | |
| 
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 sum_in_smallo: | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1418 | 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 | 1419 | shows "(\<lambda>x. f x + g x) \<in> o[F](h)" "(\<lambda>x. f x - g x) \<in> o[F](h)" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1420 | proof- | 
| 
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 | fix f g assume fg: "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 | 1423 | have "(\<lambda>x. f x + g x) \<in> o[F](h)" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1424 | proof (rule landau_o.smallI) | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1425 | 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 | 1426 | hence "c/2 > 0" by simp | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1427 | from fg[THEN landau_o.smallD[OF _ this]] | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1428 | show "eventually (\<lambda>x. norm (f x + g x) \<le> c * (norm (h x))) F" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1429 | by eventually_elim (auto intro: order.trans[OF norm_triangle_ineq]) | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1430 | qed | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1431 | } | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1432 | 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 | 1433 | 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 | 1434 | qed | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1435 | |
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1436 | lemma big_sum_in_smallo: | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1437 | 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 | 1438 | 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 | 1439 | 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 | 1440 | |
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1441 | lemma sum_in_bigo: | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1442 | 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 | 1443 | shows "(\<lambda>x. f x + g x) \<in> O[F](h)" "(\<lambda>x. f x - g x) \<in> O[F](h)" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1444 | proof- | 
| 
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 | fix f g assume fg: "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 | 1447 | from fg(1) guess c1 by (elim landau_o.bigE) note c1 = this | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1448 | from fg(2) guess c2 by (elim landau_o.bigE) note c2 = this | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1449 | from c1(2) c2(2) have "eventually (\<lambda>x. norm (f x + g x) \<le> (c1 + c2) * (norm (h x))) F" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1450 | by eventually_elim (auto simp: algebra_simps intro: order.trans[OF norm_triangle_ineq]) | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1451 | hence "(\<lambda>x. f x + g x) \<in> O[F](h)" by (rule bigoI) | 
| 
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 | 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 | 1454 | 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 | 1455 | qed | 
| 
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 big_sum_in_bigo: | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1458 | 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 | 1459 | 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 | 1460 | 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 | 1461 | |
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1462 | context landau_symbol | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1463 | begin | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1464 | |
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1465 | lemma mult_cancel_left: | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1466 | 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 | 1467 | 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 | 1468 | 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 | 1469 | proof | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1470 | 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 | 1471 | 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 | 1472 | 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 | 1473 | 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 | 1474 | 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)" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1475 | 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 | 1476 | 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 | 1477 | 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 | 1478 | 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 | 1479 | 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 | 1480 | 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 | 1481 | next | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1482 | 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 | 1483 | 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 | 1484 | 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 | 1485 | 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 | 1486 | 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 | 1487 | qed | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1488 | |
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1489 | lemma mult_cancel_right: | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1490 | 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 | 1491 | 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 | 1492 | 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 | 1493 | |
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1494 | lemma divide_cancel_right: | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1495 | 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 | 1496 | 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 | 1497 | 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 | 1498 | |
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1499 | lemma divide_cancel_left: | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1500 | 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 | 1501 | shows "(\<lambda>x. f1 x / f2 x) \<in> L F (\<lambda>x. g1 x / g2 x) \<longleftrightarrow> | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1502 | (\<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 | 1503 | 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 | 1504 | |
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1505 | end | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1506 | |
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1507 | |
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1508 | lemma powr_smallo_iff: | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1509 | 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 | 1510 | 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 | 1511 | proof- | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1512 | 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 | 1513 | 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 | 1514 | 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 | 1515 | proof | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1516 | 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 | 1517 | 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 | 1518 | 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 | 1519 | 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 | 1520 | qed | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1521 | show ?thesis | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1522 | 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 | 1523 | assume "p < q" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1524 | hence "(\<lambda>x. g x powr p) \<in> o[F](\<lambda>x. g x powr q)" using assms A | 
| 68406 | 1525 | by (auto intro!: smalloI_tendsto tendsto_neg_powr simp flip: powr_diff) | 
| 69272 | 1526 | 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 | 1527 | next | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1528 | assume "p = q" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1529 | hence "(\<lambda>x. g x powr q) \<in> O[F](\<lambda>x. g x powr p)" by (auto intro!: bigthetaD1) | 
| 69272 | 1530 | 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 | 1531 | next | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1532 | assume "p > q" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1533 | hence "(\<lambda>x. g x powr q) \<in> O[F](\<lambda>x. g x powr p)" using assms A | 
| 68406 | 1534 | by (auto intro!: smalloI_tendsto tendsto_neg_powr landau_o.small_imp_big simp flip: powr_diff) | 
| 69272 | 1535 | 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 | 1536 | qed | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1537 | qed | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1538 | |
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1539 | lemma powr_bigo_iff: | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1540 | 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 | 1541 | 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 | 1542 | proof- | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1543 | 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 | 1544 | 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 | 1545 | 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 | 1546 | proof | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1547 | 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 | 1548 | 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 | 1549 | 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 | 1550 | 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 | 1551 | qed | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1552 | show ?thesis | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1553 | 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 | 1554 | assume "p < q" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1555 | hence "(\<lambda>x. g x powr p) \<in> o[F](\<lambda>x. g x powr q)" using assms A | 
| 68406 | 1556 | by (auto intro!: smalloI_tendsto tendsto_neg_powr simp flip: powr_diff) | 
| 69272 | 1557 | 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 | 1558 | next | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1559 | assume "p = q" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1560 | hence "(\<lambda>x. g x powr q) \<in> O[F](\<lambda>x. g x powr p)" by (auto intro!: bigthetaD1) | 
| 69272 | 1561 | 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 | 1562 | next | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1563 | assume "p > q" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1564 | hence "(\<lambda>x. g x powr q) \<in> o[F](\<lambda>x. g x powr p)" using assms A | 
| 68406 | 1565 | by (auto intro!: smalloI_tendsto tendsto_neg_powr simp flip: powr_diff) | 
| 69272 | 1566 | 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 | 1567 | qed | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1568 | qed | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1569 | |
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1570 | lemma powr_bigtheta_iff: | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1571 | 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 | 1572 | 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 | 1573 | 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 | 1574 | |
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1575 | |
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1576 | 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 | 1577 | |
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1578 | text \<open> | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1579 | 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 | 1580 | 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 | 1581 | 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 | 1582 | 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 | 1583 | |
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1584 | 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 | 1585 | now. | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1586 | \<close> | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1587 | lemma ln_smallo_imp_flat: | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1588 | 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 | 1589 | 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 | 1590 | 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 | 1591 | 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 | 1592 | assumes q: "q > 0" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1593 | 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 | 1594 | proof (rule smalloI_tendsto) | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1595 | from lim_f have "eventually (\<lambda>x. f x > 0) at_top" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1596 | 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 | 1597 | hence f_nz: "eventually (\<lambda>x. f 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 | 1598 | |
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1599 | 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 | 1600 | 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 | 1601 | 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 | 1602 | 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 | 1603 | by eventually_elim simp | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1604 | |
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1605 | have eq: "eventually (\<lambda>x. q * (p/q * (ln (f x) / ln (g x)) - 1) * ln (g x) = | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1606 | 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 | 1607 | 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 | 1608 | 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 | 1609 | by (insert q) | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1610 | (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 | 1611 | 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 | 1612 | 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 | 1613 | 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 | 1614 | 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 | 1615 | 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 | 1616 | 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 | 1617 | 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 | 1618 | 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 | 1619 | 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 | 1620 | 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 | 1621 | qed | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1622 | |
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1623 | lemma ln_smallo_imp_flat': | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1624 | 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 | 1625 | 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 | 1626 | 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 | 1627 | 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 | 1628 | assumes q: "q < 0" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1629 | 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 | 1630 | proof - | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1631 | 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 | 1632 | 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 | 1633 | 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 | 1634 | by (auto elim: eventually_mono) | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1635 | 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 | 1636 | 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 | 1637 | 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 | 1638 | 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 | 1639 | qed | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1640 | |
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1641 | |
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1642 | subsection \<open>Asymptotic Equivalence\<close> | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1643 | |
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1644 | named_theorems asymp_equiv_intros | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1645 | named_theorems asymp_equiv_simps | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1646 | |
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1647 | definition asymp_equiv :: "('a \<Rightarrow> ('b :: real_normed_field)) \<Rightarrow> 'a filter \<Rightarrow> ('a \<Rightarrow> 'b) \<Rightarrow> bool"
 | 
| 69597 | 1648 | (\<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 | 1649 | 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 | 1650 | |
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1651 | 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 | 1652 | "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 | 1653 | |
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1654 | bundle asymp_equiv_notation | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1655 | begin | 
| 69597 | 1656 | 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 | 1657 | end | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1658 | |
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1659 | 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 | 1660 | 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 | 1661 | |
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1662 | 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 | 1663 | 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 | 1664 | |
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1665 | lemma asymp_equiv_filtermap_iff: | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1666 | "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 | 1667 | 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 | 1668 | |
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1669 | 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 | 1670 | proof (intro asymp_equivI) | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1671 | 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 | 1672 | by (intro always_eventually) simp | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1673 | 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 | 1674 | 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 | 1675 | 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 | 1676 | qed | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1677 | |
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1678 | lemma asymp_equiv_symI: | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1679 | assumes "f \<sim>[F] g" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1680 | shows "g \<sim>[F] f" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1681 | 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 | 1682 | 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 | 1683 | |
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1684 | 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 | 1685 | 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 | 1686 | |
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1687 | lemma asymp_equivI': | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1688 | 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 | 1689 | shows "f \<sim>[F] g" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1690 | proof (cases "F = bot") | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1691 | case False | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1692 | 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 | 1693 | proof (rule ccontr) | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1694 | 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 | 1695 | 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 | 1696 | 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 | 1697 | 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 | 1698 | qed | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1699 | 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 | 1700 | by eventually_elim simp | 
| 70532 
fcf3b891ccb1
new material; rotated premises of Lim_transform_eventually
 paulson <lp15@cam.ac.uk> parents: 
70365diff
changeset | 1701 | 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 | 1702 | by (rule Lim_transform_eventually) | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1703 | 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 | 1704 | |
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1705 | |
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1706 | lemma asymp_equiv_cong: | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1707 | 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 | 1708 | 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 | 1709 | unfolding asymp_equiv_def | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1710 | 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 | 1711 | case 1 | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1712 | 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 | 1713 | qed | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1714 | |
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1715 | lemma asymp_equiv_eventually_zeros: | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1716 | 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 | 1717 | assumes "f \<sim>[F] g" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1718 | 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 | 1719 | proof - | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1720 | 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 | 1721 | 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 | 1722 | 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 | 1723 | 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 | 1724 | 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 | 1725 | by (rule filter_leD [rotated]) | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1726 | 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 | 1727 | 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 | 1728 | qed | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1729 | |
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1730 | lemma asymp_equiv_transfer: | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1731 | 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 | 1732 | shows "f2 \<sim>[F] g2" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1733 | 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 | 1734 | |
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1735 | 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 | 1736 | 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 | 1737 | 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 | 1738 | 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 | 1739 | 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 | 1740 | |
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1741 | lemma asymp_equiv_trans [trans]: | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1742 | fixes f g h | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1743 | 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 | 1744 | shows "f \<sim>[F] h" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1745 | proof - | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1746 | 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 | 1747 | from tendsto_mult[OF assms[THEN asymp_equivD]] | 
| 
fcf3b891ccb1
new material; rotated premises of Lim_transform_eventually
 paulson <lp15@cam.ac.uk> parents: 
70365diff
changeset | 1748 | 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 | 1749 | 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 | 1750 | 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 | 1751 | 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 | 1752 | qed | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1753 | |
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1754 | 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 | 1755 | 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 | 1756 | 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 | 1757 | 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 | 1758 | |
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1759 | 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 | 1760 | 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 | 1761 | 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 | 1762 | 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 | 1763 | 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 | 1764 | |
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1765 | lemma asymp_equivD_const: | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1766 | 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 | 1767 | shows "(f \<longlongrightarrow> c) F" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1768 | proof (cases "c = 0") | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1769 | case False | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1770 | 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 | 1771 | next | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1772 | case True | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1773 | 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 | 1774 | 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 | 1775 | qed | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1776 | |
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1777 | lemma asymp_equiv_refl_ev: | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1778 | 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 | 1779 | shows "f \<sim>[F] g" | 
| 70365 
4df0628e8545
a few new lemmas and a bit of tidying
 paulson <lp15@cam.ac.uk> parents: 
69597diff
changeset | 1780 | 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 | 1781 | (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 | 1782 | |
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1783 | lemma asymp_equiv_sandwich: | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1784 |   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 | 1785 | 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 | 1786 | 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 | 1787 | 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 | 1788 | assumes "f \<sim>[F] h" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1789 | 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 | 1790 | proof - | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1791 | show "g \<sim>[F] f" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1792 | 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 | 1793 | 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 | 1794 | 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 | 1795 | (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 | 1796 | 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 | 1797 | 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 | 1798 | 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 | 1799 | (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 | 1800 | 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 | 1801 | 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 | 1802 | 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 | 1803 | 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 | 1804 | qed | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1805 | |
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1806 | 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 | 1807 | 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 | 1808 | assumes "f \<sim>[F] g" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1809 | 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 | 1810 | proof - | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1811 | 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 | 1812 | 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 | 1813 | 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 | 1814 | 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 | 1815 | by simp | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1816 | 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 | 1817 | proof eventually_elim | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1818 | case (elim x) | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1819 | thus ?case | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1820 | by (cases "f x" "0 :: real" rule: linorder_cases; | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1821 | 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 | 1822 | qed | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1823 | qed | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1824 | |
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1825 | lemma | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1826 | fixes f g :: "_ \<Rightarrow> real" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1827 | assumes "f \<sim>[F] g" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1828 | 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 | 1829 | 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 | 1830 | 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 | 1831 | proof - | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1832 | 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 | 1833 | by (rule asymp_equivD) | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1834 | 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 | 1835 | show ?th1 ?th2 ?th3 | 
| 70817 
dd675800469d
dedicated fact collections for algebraic simplification rules potentially splitting goals
 haftmann parents: 
70688diff
changeset | 1836 | 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 | 1837 | qed | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1838 | |
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1839 | lemma asymp_equiv_tendsto_transfer: | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1840 | 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 | 1841 | shows "(g \<longlongrightarrow> c) F" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1842 | proof - | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1843 | 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 | 1844 | 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 | 1845 | 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 | 1846 | by (rule asymp_equivD) | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1847 | from tendsto_mult[OF this assms(2)] have "(?h \<longlongrightarrow> c) F" by simp | 
| 70532 
fcf3b891ccb1
new material; rotated premises of Lim_transform_eventually
 paulson <lp15@cam.ac.uk> parents: 
70365diff
changeset | 1848 | moreover | 
| 
fcf3b891ccb1
new material; rotated premises of Lim_transform_eventually
 paulson <lp15@cam.ac.uk> parents: 
70365diff
changeset | 1849 | 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 | 1850 | 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 | 1851 | ultimately show ?thesis | 
| 
fcf3b891ccb1
new material; rotated premises of Lim_transform_eventually
 paulson <lp15@cam.ac.uk> parents: 
70365diff
changeset | 1852 | 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 | 1853 | qed | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1854 | |
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1855 | lemma tendsto_asymp_equiv_cong: | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1856 | assumes "f \<sim>[F] g" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1857 | 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 | 1858 | proof - | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1859 |   {
 | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1860 | fix f g :: "'a \<Rightarrow> 'b" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1861 | assume *: "f \<sim>[F] g" "(g \<longlongrightarrow> c) F" | 
| 70532 
fcf3b891ccb1
new material; rotated premises of Lim_transform_eventually
 paulson <lp15@cam.ac.uk> parents: 
70365diff
changeset | 1862 | have "((\<lambda>x. g x * (if f x = 0 \<and> g x = 0 then 1 else f x / g x)) \<longlongrightarrow> c * 1) F" | 
| 
fcf3b891ccb1
new material; rotated premises of Lim_transform_eventually
 paulson <lp15@cam.ac.uk> parents: 
70365diff
changeset | 1863 | by (intro tendsto_intros asymp_equivD *) | 
| 
fcf3b891ccb1
new material; rotated premises of Lim_transform_eventually
 paulson <lp15@cam.ac.uk> parents: 
70365diff
changeset | 1864 | moreover | 
| 68246 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1865 | have "eventually (\<lambda>x. g x * (if f x = 0 \<and> g x = 0 then 1 else f x / g x) = f x) F" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1866 | using asymp_equiv_eventually_zeros[OF *(1)] by eventually_elim simp | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1867 | ultimately have "(f \<longlongrightarrow> c * 1) F" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1868 | by (rule Lim_transform_eventually) | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1869 | } | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1870 | 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 | 1871 | qed | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1872 | |
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1873 | |
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1874 | lemma smallo_imp_eventually_sgn: | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1875 | 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 | 1876 | assumes "g \<in> o(f)" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1877 | 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 | 1878 | proof - | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1879 | have "0 < (1/2 :: real)" by simp | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1880 | from landau_o.smallD[OF assms, OF this] | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1881 | 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 | 1882 | thus ?thesis | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1883 | proof eventually_elim | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1884 | case (elim x) | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1885 | thus ?case | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1886 | by (cases "f x" "0::real" rule: linorder_cases; | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1887 | 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 | 1888 | qed | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1889 | qed | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1890 | |
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1891 | context | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1892 | begin | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1893 | |
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1894 | 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 | 1895 | 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 | 1896 | 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 | 1897 | proof - | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1898 | 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 | 1899 | 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 | 1900 | 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 | 1901 | 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 | 1902 | unfolding asymp_equiv_def using ev | 
| 70817 
dd675800469d
dedicated fact collections for algebraic simplification rules potentially splitting goals
 haftmann parents: 
70688diff
changeset | 1903 | 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 | 1904 | 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 | 1905 | 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 | 1906 | 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 | 1907 | qed | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1908 | |
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1909 | 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 | 1910 | 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 | 1911 | 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 | 1912 | proof | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1913 | 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 | 1914 | 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 | 1915 | by simp | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1916 | 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 | 1917 | |
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1918 | end | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1919 | |
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1920 | 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 | 1921 | 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 | 1922 | 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 | 1923 | 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 | 1924 | |
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1925 | 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 | 1926 | 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 | 1927 | 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 | 1928 | using asymp_equiv_add_right[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 | 1929 | |
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1930 | 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 | 1931 | 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 | 1932 | 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 | 1933 | 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 | 1934 | |
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1935 | lemma smallo_imp_asymp_equiv: | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1936 | 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 | 1937 | shows "f \<sim>[F] g" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1938 | proof - | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1939 | 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 | 1940 | 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 | 1941 | thus ?thesis by simp | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1942 | qed | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1943 | |
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1944 | 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 | 1945 | "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 | 1946 | 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 | 1947 | |
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1948 | 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 | 1949 | "(\<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 | 1950 | 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 | 1951 | |
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1952 | 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 | 1953 | 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 | 1954 | 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 | 1955 | 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 | 1956 | proof - | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1957 | 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 | 1958 | 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 | 1959 | 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 | 1960 | 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" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1961 |   {
 | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1962 | fix f g :: "'a \<Rightarrow> 'b" assume "f \<sim>[F] g" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1963 | have "((\<lambda>x. 1 - ?T f g x) \<longlongrightarrow> 0) F" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1964 | by (rule tendsto_eq_intros refl asymp_equivD[OF \<open>f \<sim>[F] g\<close>])+ simp_all | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1965 | } note A = this | 
| 
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 | from assms have "((\<lambda>x. ?T f1 g1 x * ?T f2 g2 x) \<longlongrightarrow> 1 * 1) F" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1968 | by (intro tendsto_mult asymp_equivD) | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1969 |   moreover {
 | 
| 70532 
fcf3b891ccb1
new material; rotated premises of Lim_transform_eventually
 paulson <lp15@cam.ac.uk> parents: 
70365diff
changeset | 1970 | 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 | 1971 | 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 | 1972 | (auto intro: le_infI1 le_infI2) | 
| 70532 
fcf3b891ccb1
new material; rotated premises of Lim_transform_eventually
 paulson <lp15@cam.ac.uk> parents: 
70365diff
changeset | 1973 | 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 | 1974 | 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 | 1975 | 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 | 1976 | } | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1977 | ultimately have "(?T (\<lambda>x. f1 x * f2 x) (\<lambda>x. g1 x * g2 x) \<longlongrightarrow> 1 * 1) F" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1978 | by (rule Lim_transform) | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1979 | thus ?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 | 1980 | qed | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1981 | |
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1982 | 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 | 1983 | "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 | 1984 | 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 | 1985 | |
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1986 | 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 | 1987 | assumes "f \<sim>[F] g" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1988 | 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 | 1989 | proof - | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1990 | 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 | 1991 | 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 | 1992 | 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 | 1993 | 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 | 1994 | (\<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 | 1995 | 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 | 1996 | 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 | 1997 | qed | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1998 | |
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 1999 | 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 | 2000 | "(\<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 | 2001 | proof | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2002 | 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 | 2003 | 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 | 2004 | by (rule asymp_equiv_inverse) | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2005 | 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 | 2006 | 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 | 2007 | 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 | 2008 | |
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2009 | 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 | 2010 | 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 | 2011 | 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 | 2012 | 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 | 2013 | |
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2014 | 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 | 2015 | 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 | 2016 | 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 | 2017 | proof - | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2018 | 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 | 2019 | 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 | 2020 | 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 | 2021 | 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 | 2022 | by (rule tendsto_compose_filtermap) | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2023 | also have "\<dots>" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2024 | 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 | 2025 | finally show ?thesis . | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2026 | qed | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2027 | |
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2028 | lemma asymp_equiv_compose': | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2029 | 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 | 2030 | 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 | 2031 | using asymp_equiv_compose[OF assms] by (simp add: o_def) | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2032 | |
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2033 | 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 | 2034 | 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 | 2035 | 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 | 2036 | 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 | 2037 | proof - | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2038 | 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 | 2039 | 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 | 2040 | 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 | 2041 | 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 | 2042 | 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 | 2043 | 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 | 2044 | 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 | 2045 | 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 | 2046 | qed | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2047 | |
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2048 | 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 | 2049 | 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 | 2050 | assumes "f \<sim>[F] g" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2051 | shows "(\<lambda>x. norm (f x)) \<sim>[F] (\<lambda>x. norm (g x))" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2052 | using tendsto_norm[OF asymp_equivD[OF assms]] | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2053 | 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 | 2054 | |
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2055 | 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 | 2056 | 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 | 2057 | assumes "f \<sim>[F] g" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2058 | shows "(\<lambda>x. \<bar>f x\<bar>) \<sim>[F] (\<lambda>x. \<bar>g x\<bar>)" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2059 | using tendsto_rabs[OF asymp_equivD[OF assms]] | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2060 | 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 | 2061 | |
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2062 | 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 | 2063 | 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 | 2064 | 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 | 2065 | proof - | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2066 | 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 | 2067 | 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 | 2068 | 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 | 2069 | qed | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2070 | |
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2071 | 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 | 2072 | 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 | 2073 | 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 | 2074 | proof - | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2075 | 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 | 2076 | 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 | 2077 | 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 | 2078 | qed | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2079 | |
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2080 | lemma asymp_equiv_imp_bigo: | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2081 | assumes "f \<sim>[F] g" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2082 | 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 | 2083 | proof (rule bigoI) | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2084 | 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 | 2085 | 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 | 2086 | 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 | 2087 | by eventually_elim simp | 
| 
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_imp_bigomega: | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2091 | "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 | 2092 | 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 | 2093 | |
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2094 | lemma asymp_equiv_imp_bigtheta: | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2095 | "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 | 2096 | 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 | 2097 | |
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2098 | 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 | 2099 | 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 | 2100 | 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 | 2101 | proof - | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2102 | 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 | 2103 | 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 | 2104 | 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 | 2105 | qed | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2106 | |
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2107 | 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 | 2108 | fixes f g :: "_ \<Rightarrow> real" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2109 | 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 | 2110 | 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 | 2111 | 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 | 2112 | 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 | 2113 | 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 | 2114 | (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 | 2115 | 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 | 2116 | 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 | 2117 | 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 | 2118 | by eventually_elim blast | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2119 | qed | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2120 | |
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2121 | 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 | 2122 | fixes f g :: "_ \<Rightarrow> real" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2123 | 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 | 2124 | 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 | 2125 | unfolding filterlim_uminus_at_bot | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2126 | by (rule asymp_equiv_at_top_transfer[of "\<lambda>x. -f x" F "\<lambda>x. -g x"]) | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2127 | (insert assms, auto simp: filterlim_uminus_at_bot asymp_equiv_uminus) | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2128 | |
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2129 | lemma asymp_equivI'_const: | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2130 | 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 | 2131 | 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 | 2132 | 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 | 2133 | 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 | 2134 | |
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2135 | lemma asymp_equivI'_inverse_const: | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2136 | 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 | 2137 | 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 | 2138 | 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 | 2139 | 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 | 2140 | |
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2141 | 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 | 2142 | 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 | 2143 | |
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2144 | 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 | 2145 | assumes "f \<sim>[F] g" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2146 | 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 | 2147 | proof (rule landau_o.smallI) | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2148 | 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 | 2149 | 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 | 2150 | 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 | 2151 | 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 | 2152 | 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 | 2153 | 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 | 2154 | proof eventually_elim | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2155 | case (elim x) | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2156 | 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 | 2157 | 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 | 2158 | 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 | 2159 | 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 | 2160 | finally show ?case . | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2161 | qed | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2162 | qed | 
| 
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_altdef: | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2165 | "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 | 2166 | 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 | 2167 | |
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2168 | 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 | 2169 | 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 | 2170 | 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 | 2171 | |
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2172 | lemma asymp_equiv_sandwich_real: | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2173 | 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 | 2174 |   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 | 2175 | shows "f \<sim>[F] g" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2176 | unfolding asymp_equiv_altdef | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2177 | proof (rule landau_o.smallI) | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2178 | 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 | 2179 | 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 | 2180 | 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 | 2181 | 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 | 2182 | "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 | 2183 | 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 | 2184 | 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 | 2185 | by eventually_elim simp | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2186 | 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 | 2187 | 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 | 2188 | qed | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2189 | |
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2190 | lemma asymp_equiv_sandwich_real': | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2191 | 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 | 2192 |   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 | 2193 | shows "f \<sim>[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_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 | 2195 | |
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2196 | lemma asymp_equiv_sandwich_real'': | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2197 | 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 | 2198 | 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 | 2199 |           "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 | 2200 | shows "f \<sim>[F] g" | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2201 | by (rule asymp_equiv_sandwich_real[OF asymp_equiv_sandwich_real'[OF _ _ assms(5)] | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2202 | asymp_equiv_sandwich_real'[OF _ _ assms(5)] assms(4)]; | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2203 | blast intro: asymp_equiv_trans assms(1,2,3))+ | 
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2204 | |
| 
b48bab511939
Moved Landau_Symbols from the AFP to HOL-Library
 Manuel Eberl <eberlm@in.tum.de> parents: diff
changeset | 2205 | end |