| author | haftmann | 
| Sat, 19 Jun 2010 09:14:06 +0200 | |
| changeset 37469 | 1436d6f28f17 | 
| parent 36822 | 38a480e0346f | 
| child 37767 | a2b7a20d6ea3 | 
| permissions | -rw-r--r-- | 
| 31349 
2261c8781f73
new theory of filters and limits; prove LIMSEQ and LIM lemmas using filters
 huffman parents: diff
changeset | 1 | (* Title : Limits.thy | 
| 
2261c8781f73
new theory of filters and limits; prove LIMSEQ and LIM lemmas using filters
 huffman parents: diff
changeset | 2 | Author : Brian Huffman | 
| 
2261c8781f73
new theory of filters and limits; prove LIMSEQ and LIM lemmas using filters
 huffman parents: diff
changeset | 3 | *) | 
| 
2261c8781f73
new theory of filters and limits; prove LIMSEQ and LIM lemmas using filters
 huffman parents: diff
changeset | 4 | |
| 
2261c8781f73
new theory of filters and limits; prove LIMSEQ and LIM lemmas using filters
 huffman parents: diff
changeset | 5 | header {* Filters and Limits *}
 | 
| 
2261c8781f73
new theory of filters and limits; prove LIMSEQ and LIM lemmas using filters
 huffman parents: diff
changeset | 6 | |
| 
2261c8781f73
new theory of filters and limits; prove LIMSEQ and LIM lemmas using filters
 huffman parents: diff
changeset | 7 | theory Limits | 
| 36822 | 8 | imports RealVector | 
| 31349 
2261c8781f73
new theory of filters and limits; prove LIMSEQ and LIM lemmas using filters
 huffman parents: diff
changeset | 9 | begin | 
| 
2261c8781f73
new theory of filters and limits; prove LIMSEQ and LIM lemmas using filters
 huffman parents: diff
changeset | 10 | |
| 31392 | 11 | subsection {* Nets *}
 | 
| 12 | ||
| 13 | text {*
 | |
| 36630 | 14 | A net is now defined simply as a filter on a set. | 
| 36358 
246493d61204
define nets directly as filters, instead of as filter bases
 huffman parents: 
31902diff
changeset | 15 | The definition also allows non-proper filters. | 
| 31392 | 16 | *} | 
| 17 | ||
| 36358 
246493d61204
define nets directly as filters, instead of as filter bases
 huffman parents: 
31902diff
changeset | 18 | locale is_filter = | 
| 
246493d61204
define nets directly as filters, instead of as filter bases
 huffman parents: 
31902diff
changeset | 19 |   fixes net :: "('a \<Rightarrow> bool) \<Rightarrow> bool"
 | 
| 
246493d61204
define nets directly as filters, instead of as filter bases
 huffman parents: 
31902diff
changeset | 20 | assumes True: "net (\<lambda>x. True)" | 
| 
246493d61204
define nets directly as filters, instead of as filter bases
 huffman parents: 
31902diff
changeset | 21 | assumes conj: "net (\<lambda>x. P x) \<Longrightarrow> net (\<lambda>x. Q x) \<Longrightarrow> net (\<lambda>x. P x \<and> Q x)" | 
| 
246493d61204
define nets directly as filters, instead of as filter bases
 huffman parents: 
31902diff
changeset | 22 | assumes mono: "\<forall>x. P x \<longrightarrow> Q x \<Longrightarrow> net (\<lambda>x. P x) \<Longrightarrow> net (\<lambda>x. Q x)" | 
| 
246493d61204
define nets directly as filters, instead of as filter bases
 huffman parents: 
31902diff
changeset | 23 | |
| 31392 | 24 | typedef (open) 'a net = | 
| 36358 
246493d61204
define nets directly as filters, instead of as filter bases
 huffman parents: 
31902diff
changeset | 25 |   "{net :: ('a \<Rightarrow> bool) \<Rightarrow> bool. is_filter net}"
 | 
| 31392 | 26 | proof | 
| 36358 
246493d61204
define nets directly as filters, instead of as filter bases
 huffman parents: 
31902diff
changeset | 27 | show "(\<lambda>x. True) \<in> ?net" by (auto intro: is_filter.intro) | 
| 31392 | 28 | qed | 
| 31349 
2261c8781f73
new theory of filters and limits; prove LIMSEQ and LIM lemmas using filters
 huffman parents: diff
changeset | 29 | |
| 36358 
246493d61204
define nets directly as filters, instead of as filter bases
 huffman parents: 
31902diff
changeset | 30 | lemma is_filter_Rep_net: "is_filter (Rep_net net)" | 
| 31392 | 31 | using Rep_net [of net] by simp | 
| 32 | ||
| 33 | lemma Abs_net_inverse': | |
| 36358 
246493d61204
define nets directly as filters, instead of as filter bases
 huffman parents: 
31902diff
changeset | 34 | assumes "is_filter net" shows "Rep_net (Abs_net net) = net" | 
| 31392 | 35 | using assms by (simp add: Abs_net_inverse) | 
| 36 | ||
| 37 | ||
| 38 | subsection {* Eventually *}
 | |
| 31349 
2261c8781f73
new theory of filters and limits; prove LIMSEQ and LIM lemmas using filters
 huffman parents: diff
changeset | 39 | |
| 
2261c8781f73
new theory of filters and limits; prove LIMSEQ and LIM lemmas using filters
 huffman parents: diff
changeset | 40 | definition | 
| 31392 | 41 |   eventually :: "('a \<Rightarrow> bool) \<Rightarrow> 'a net \<Rightarrow> bool" where
 | 
| 36358 
246493d61204
define nets directly as filters, instead of as filter bases
 huffman parents: 
31902diff
changeset | 42 | [code del]: "eventually P net \<longleftrightarrow> Rep_net net P" | 
| 
246493d61204
define nets directly as filters, instead of as filter bases
 huffman parents: 
31902diff
changeset | 43 | |
| 
246493d61204
define nets directly as filters, instead of as filter bases
 huffman parents: 
31902diff
changeset | 44 | lemma eventually_Abs_net: | 
| 
246493d61204
define nets directly as filters, instead of as filter bases
 huffman parents: 
31902diff
changeset | 45 | assumes "is_filter net" shows "eventually P (Abs_net net) = net P" | 
| 
246493d61204
define nets directly as filters, instead of as filter bases
 huffman parents: 
31902diff
changeset | 46 | unfolding eventually_def using assms by (simp add: Abs_net_inverse) | 
| 31349 
2261c8781f73
new theory of filters and limits; prove LIMSEQ and LIM lemmas using filters
 huffman parents: diff
changeset | 47 | |
| 36360 
9d8f7efd9289
define finer-than ordering on net type; move some theorems into Limits.thy
 huffman parents: 
36358diff
changeset | 48 | lemma expand_net_eq: | 
| 
9d8f7efd9289
define finer-than ordering on net type; move some theorems into Limits.thy
 huffman parents: 
36358diff
changeset | 49 | shows "net = net' \<longleftrightarrow> (\<forall>P. eventually P net = eventually P net')" | 
| 
9d8f7efd9289
define finer-than ordering on net type; move some theorems into Limits.thy
 huffman parents: 
36358diff
changeset | 50 | unfolding Rep_net_inject [symmetric] expand_fun_eq eventually_def .. | 
| 
9d8f7efd9289
define finer-than ordering on net type; move some theorems into Limits.thy
 huffman parents: 
36358diff
changeset | 51 | |
| 31392 | 52 | lemma eventually_True [simp]: "eventually (\<lambda>x. True) net" | 
| 36358 
246493d61204
define nets directly as filters, instead of as filter bases
 huffman parents: 
31902diff
changeset | 53 | unfolding eventually_def | 
| 
246493d61204
define nets directly as filters, instead of as filter bases
 huffman parents: 
31902diff
changeset | 54 | by (rule is_filter.True [OF is_filter_Rep_net]) | 
| 31349 
2261c8781f73
new theory of filters and limits; prove LIMSEQ and LIM lemmas using filters
 huffman parents: diff
changeset | 55 | |
| 36630 | 56 | lemma always_eventually: "\<forall>x. P x \<Longrightarrow> eventually P net" | 
| 57 | proof - | |
| 58 | assume "\<forall>x. P x" hence "P = (\<lambda>x. True)" by (simp add: ext) | |
| 59 | thus "eventually P net" by simp | |
| 60 | qed | |
| 61 | ||
| 31349 
2261c8781f73
new theory of filters and limits; prove LIMSEQ and LIM lemmas using filters
 huffman parents: diff
changeset | 62 | lemma eventually_mono: | 
| 31392 | 63 | "(\<forall>x. P x \<longrightarrow> Q x) \<Longrightarrow> eventually P net \<Longrightarrow> eventually Q net" | 
| 36358 
246493d61204
define nets directly as filters, instead of as filter bases
 huffman parents: 
31902diff
changeset | 64 | unfolding eventually_def | 
| 
246493d61204
define nets directly as filters, instead of as filter bases
 huffman parents: 
31902diff
changeset | 65 | by (rule is_filter.mono [OF is_filter_Rep_net]) | 
| 31349 
2261c8781f73
new theory of filters and limits; prove LIMSEQ and LIM lemmas using filters
 huffman parents: diff
changeset | 66 | |
| 
2261c8781f73
new theory of filters and limits; prove LIMSEQ and LIM lemmas using filters
 huffman parents: diff
changeset | 67 | lemma eventually_conj: | 
| 31392 | 68 | assumes P: "eventually (\<lambda>x. P x) net" | 
| 69 | assumes Q: "eventually (\<lambda>x. Q x) net" | |
| 70 | shows "eventually (\<lambda>x. P x \<and> Q x) net" | |
| 36358 
246493d61204
define nets directly as filters, instead of as filter bases
 huffman parents: 
31902diff
changeset | 71 | using assms unfolding eventually_def | 
| 
246493d61204
define nets directly as filters, instead of as filter bases
 huffman parents: 
31902diff
changeset | 72 | by (rule is_filter.conj [OF is_filter_Rep_net]) | 
| 31349 
2261c8781f73
new theory of filters and limits; prove LIMSEQ and LIM lemmas using filters
 huffman parents: diff
changeset | 73 | |
| 
2261c8781f73
new theory of filters and limits; prove LIMSEQ and LIM lemmas using filters
 huffman parents: diff
changeset | 74 | lemma eventually_mp: | 
| 31392 | 75 | assumes "eventually (\<lambda>x. P x \<longrightarrow> Q x) net" | 
| 76 | assumes "eventually (\<lambda>x. P x) net" | |
| 77 | shows "eventually (\<lambda>x. Q x) net" | |
| 31349 
2261c8781f73
new theory of filters and limits; prove LIMSEQ and LIM lemmas using filters
 huffman parents: diff
changeset | 78 | proof (rule eventually_mono) | 
| 
2261c8781f73
new theory of filters and limits; prove LIMSEQ and LIM lemmas using filters
 huffman parents: diff
changeset | 79 | show "\<forall>x. (P x \<longrightarrow> Q x) \<and> P x \<longrightarrow> Q x" by simp | 
| 31392 | 80 | show "eventually (\<lambda>x. (P x \<longrightarrow> Q x) \<and> P x) net" | 
| 31349 
2261c8781f73
new theory of filters and limits; prove LIMSEQ and LIM lemmas using filters
 huffman parents: diff
changeset | 81 | using assms by (rule eventually_conj) | 
| 
2261c8781f73
new theory of filters and limits; prove LIMSEQ and LIM lemmas using filters
 huffman parents: diff
changeset | 82 | qed | 
| 
2261c8781f73
new theory of filters and limits; prove LIMSEQ and LIM lemmas using filters
 huffman parents: diff
changeset | 83 | |
| 
2261c8781f73
new theory of filters and limits; prove LIMSEQ and LIM lemmas using filters
 huffman parents: diff
changeset | 84 | lemma eventually_rev_mp: | 
| 31392 | 85 | assumes "eventually (\<lambda>x. P x) net" | 
| 86 | assumes "eventually (\<lambda>x. P x \<longrightarrow> Q x) net" | |
| 87 | shows "eventually (\<lambda>x. Q x) net" | |
| 31349 
2261c8781f73
new theory of filters and limits; prove LIMSEQ and LIM lemmas using filters
 huffman parents: diff
changeset | 88 | using assms(2) assms(1) by (rule eventually_mp) | 
| 
2261c8781f73
new theory of filters and limits; prove LIMSEQ and LIM lemmas using filters
 huffman parents: diff
changeset | 89 | |
| 
2261c8781f73
new theory of filters and limits; prove LIMSEQ and LIM lemmas using filters
 huffman parents: diff
changeset | 90 | lemma eventually_conj_iff: | 
| 
2261c8781f73
new theory of filters and limits; prove LIMSEQ and LIM lemmas using filters
 huffman parents: diff
changeset | 91 | "eventually (\<lambda>x. P x \<and> Q x) net \<longleftrightarrow> eventually P net \<and> eventually Q net" | 
| 
2261c8781f73
new theory of filters and limits; prove LIMSEQ and LIM lemmas using filters
 huffman parents: diff
changeset | 92 | by (auto intro: eventually_conj elim: eventually_rev_mp) | 
| 
2261c8781f73
new theory of filters and limits; prove LIMSEQ and LIM lemmas using filters
 huffman parents: diff
changeset | 93 | |
| 
2261c8781f73
new theory of filters and limits; prove LIMSEQ and LIM lemmas using filters
 huffman parents: diff
changeset | 94 | lemma eventually_elim1: | 
| 31392 | 95 | assumes "eventually (\<lambda>i. P i) net" | 
| 31349 
2261c8781f73
new theory of filters and limits; prove LIMSEQ and LIM lemmas using filters
 huffman parents: diff
changeset | 96 | assumes "\<And>i. P i \<Longrightarrow> Q i" | 
| 31392 | 97 | shows "eventually (\<lambda>i. Q i) net" | 
| 31349 
2261c8781f73
new theory of filters and limits; prove LIMSEQ and LIM lemmas using filters
 huffman parents: diff
changeset | 98 | using assms by (auto elim!: eventually_rev_mp) | 
| 
2261c8781f73
new theory of filters and limits; prove LIMSEQ and LIM lemmas using filters
 huffman parents: diff
changeset | 99 | |
| 
2261c8781f73
new theory of filters and limits; prove LIMSEQ and LIM lemmas using filters
 huffman parents: diff
changeset | 100 | lemma eventually_elim2: | 
| 31392 | 101 | assumes "eventually (\<lambda>i. P i) net" | 
| 102 | assumes "eventually (\<lambda>i. Q i) net" | |
| 31349 
2261c8781f73
new theory of filters and limits; prove LIMSEQ and LIM lemmas using filters
 huffman parents: diff
changeset | 103 | assumes "\<And>i. P i \<Longrightarrow> Q i \<Longrightarrow> R i" | 
| 31392 | 104 | shows "eventually (\<lambda>i. R i) net" | 
| 31349 
2261c8781f73
new theory of filters and limits; prove LIMSEQ and LIM lemmas using filters
 huffman parents: diff
changeset | 105 | using assms by (auto elim!: eventually_rev_mp) | 
| 
2261c8781f73
new theory of filters and limits; prove LIMSEQ and LIM lemmas using filters
 huffman parents: diff
changeset | 106 | |
| 
2261c8781f73
new theory of filters and limits; prove LIMSEQ and LIM lemmas using filters
 huffman parents: diff
changeset | 107 | |
| 36360 
9d8f7efd9289
define finer-than ordering on net type; move some theorems into Limits.thy
 huffman parents: 
36358diff
changeset | 108 | subsection {* Finer-than relation *}
 | 
| 
9d8f7efd9289
define finer-than ordering on net type; move some theorems into Limits.thy
 huffman parents: 
36358diff
changeset | 109 | |
| 36629 
de62713aec6e
swap ordering on nets, so x <= y means 'x is finer than y'
 huffman parents: 
36360diff
changeset | 110 | text {* @{term "net \<le> net'"} means that @{term net} is finer than
 | 
| 
de62713aec6e
swap ordering on nets, so x <= y means 'x is finer than y'
 huffman parents: 
36360diff
changeset | 111 | @{term net'}. *}
 | 
| 36360 
9d8f7efd9289
define finer-than ordering on net type; move some theorems into Limits.thy
 huffman parents: 
36358diff
changeset | 112 | |
| 36630 | 113 | instantiation net :: (type) complete_lattice | 
| 36360 
9d8f7efd9289
define finer-than ordering on net type; move some theorems into Limits.thy
 huffman parents: 
36358diff
changeset | 114 | begin | 
| 
9d8f7efd9289
define finer-than ordering on net type; move some theorems into Limits.thy
 huffman parents: 
36358diff
changeset | 115 | |
| 
9d8f7efd9289
define finer-than ordering on net type; move some theorems into Limits.thy
 huffman parents: 
36358diff
changeset | 116 | definition | 
| 
9d8f7efd9289
define finer-than ordering on net type; move some theorems into Limits.thy
 huffman parents: 
36358diff
changeset | 117 | le_net_def [code del]: | 
| 36629 
de62713aec6e
swap ordering on nets, so x <= y means 'x is finer than y'
 huffman parents: 
36360diff
changeset | 118 | "net \<le> net' \<longleftrightarrow> (\<forall>P. eventually P net' \<longrightarrow> eventually P net)" | 
| 36360 
9d8f7efd9289
define finer-than ordering on net type; move some theorems into Limits.thy
 huffman parents: 
36358diff
changeset | 119 | |
| 
9d8f7efd9289
define finer-than ordering on net type; move some theorems into Limits.thy
 huffman parents: 
36358diff
changeset | 120 | definition | 
| 
9d8f7efd9289
define finer-than ordering on net type; move some theorems into Limits.thy
 huffman parents: 
36358diff
changeset | 121 | less_net_def [code del]: | 
| 
9d8f7efd9289
define finer-than ordering on net type; move some theorems into Limits.thy
 huffman parents: 
36358diff
changeset | 122 | "(net :: 'a net) < net' \<longleftrightarrow> net \<le> net' \<and> \<not> net' \<le> net" | 
| 
9d8f7efd9289
define finer-than ordering on net type; move some theorems into Limits.thy
 huffman parents: 
36358diff
changeset | 123 | |
| 
9d8f7efd9289
define finer-than ordering on net type; move some theorems into Limits.thy
 huffman parents: 
36358diff
changeset | 124 | definition | 
| 36630 | 125 | top_net_def [code del]: | 
| 126 | "top = Abs_net (\<lambda>P. \<forall>x. P x)" | |
| 127 | ||
| 128 | definition | |
| 36629 
de62713aec6e
swap ordering on nets, so x <= y means 'x is finer than y'
 huffman parents: 
36360diff
changeset | 129 | bot_net_def [code del]: | 
| 
de62713aec6e
swap ordering on nets, so x <= y means 'x is finer than y'
 huffman parents: 
36360diff
changeset | 130 | "bot = Abs_net (\<lambda>P. True)" | 
| 36360 
9d8f7efd9289
define finer-than ordering on net type; move some theorems into Limits.thy
 huffman parents: 
36358diff
changeset | 131 | |
| 36630 | 132 | definition | 
| 133 | sup_net_def [code del]: | |
| 134 | "sup net net' = Abs_net (\<lambda>P. eventually P net \<and> eventually P net')" | |
| 135 | ||
| 136 | definition | |
| 137 | inf_net_def [code del]: | |
| 138 | "inf a b = Abs_net | |
| 139 | (\<lambda>P. \<exists>Q R. eventually Q a \<and> eventually R b \<and> (\<forall>x. Q x \<and> R x \<longrightarrow> P x))" | |
| 140 | ||
| 141 | definition | |
| 142 | Sup_net_def [code del]: | |
| 143 | "Sup A = Abs_net (\<lambda>P. \<forall>net\<in>A. eventually P net)" | |
| 144 | ||
| 145 | definition | |
| 146 | Inf_net_def [code del]: | |
| 147 |     "Inf A = Sup {x::'a net. \<forall>y\<in>A. x \<le> y}"
 | |
| 148 | ||
| 149 | lemma eventually_top [simp]: "eventually P top \<longleftrightarrow> (\<forall>x. P x)" | |
| 150 | unfolding top_net_def | |
| 151 | by (rule eventually_Abs_net, rule is_filter.intro, auto) | |
| 152 | ||
| 36629 
de62713aec6e
swap ordering on nets, so x <= y means 'x is finer than y'
 huffman parents: 
36360diff
changeset | 153 | lemma eventually_bot [simp]: "eventually P bot" | 
| 
de62713aec6e
swap ordering on nets, so x <= y means 'x is finer than y'
 huffman parents: 
36360diff
changeset | 154 | unfolding bot_net_def | 
| 36360 
9d8f7efd9289
define finer-than ordering on net type; move some theorems into Limits.thy
 huffman parents: 
36358diff
changeset | 155 | by (subst eventually_Abs_net, rule is_filter.intro, auto) | 
| 
9d8f7efd9289
define finer-than ordering on net type; move some theorems into Limits.thy
 huffman parents: 
36358diff
changeset | 156 | |
| 36630 | 157 | lemma eventually_sup: | 
| 158 | "eventually P (sup net net') \<longleftrightarrow> eventually P net \<and> eventually P net'" | |
| 159 | unfolding sup_net_def | |
| 160 | by (rule eventually_Abs_net, rule is_filter.intro) | |
| 161 | (auto elim!: eventually_rev_mp) | |
| 162 | ||
| 163 | lemma eventually_inf: | |
| 164 | "eventually P (inf a b) \<longleftrightarrow> | |
| 165 | (\<exists>Q R. eventually Q a \<and> eventually R b \<and> (\<forall>x. Q x \<and> R x \<longrightarrow> P x))" | |
| 166 | unfolding inf_net_def | |
| 167 | apply (rule eventually_Abs_net, rule is_filter.intro) | |
| 168 | apply (fast intro: eventually_True) | |
| 169 | apply clarify | |
| 170 | apply (intro exI conjI) | |
| 171 | apply (erule (1) eventually_conj) | |
| 172 | apply (erule (1) eventually_conj) | |
| 173 | apply simp | |
| 174 | apply auto | |
| 175 | done | |
| 176 | ||
| 177 | lemma eventually_Sup: | |
| 178 | "eventually P (Sup A) \<longleftrightarrow> (\<forall>net\<in>A. eventually P net)" | |
| 179 | unfolding Sup_net_def | |
| 180 | apply (rule eventually_Abs_net, rule is_filter.intro) | |
| 181 | apply (auto intro: eventually_conj elim!: eventually_rev_mp) | |
| 182 | done | |
| 183 | ||
| 36360 
9d8f7efd9289
define finer-than ordering on net type; move some theorems into Limits.thy
 huffman parents: 
36358diff
changeset | 184 | instance proof | 
| 
9d8f7efd9289
define finer-than ordering on net type; move some theorems into Limits.thy
 huffman parents: 
36358diff
changeset | 185 | fix x y :: "'a net" show "x < y \<longleftrightarrow> x \<le> y \<and> \<not> y \<le> x" | 
| 
9d8f7efd9289
define finer-than ordering on net type; move some theorems into Limits.thy
 huffman parents: 
36358diff
changeset | 186 | by (rule less_net_def) | 
| 
9d8f7efd9289
define finer-than ordering on net type; move some theorems into Limits.thy
 huffman parents: 
36358diff
changeset | 187 | next | 
| 
9d8f7efd9289
define finer-than ordering on net type; move some theorems into Limits.thy
 huffman parents: 
36358diff
changeset | 188 | fix x :: "'a net" show "x \<le> x" | 
| 
9d8f7efd9289
define finer-than ordering on net type; move some theorems into Limits.thy
 huffman parents: 
36358diff
changeset | 189 | unfolding le_net_def by simp | 
| 
9d8f7efd9289
define finer-than ordering on net type; move some theorems into Limits.thy
 huffman parents: 
36358diff
changeset | 190 | next | 
| 
9d8f7efd9289
define finer-than ordering on net type; move some theorems into Limits.thy
 huffman parents: 
36358diff
changeset | 191 | fix x y z :: "'a net" assume "x \<le> y" and "y \<le> z" thus "x \<le> z" | 
| 
9d8f7efd9289
define finer-than ordering on net type; move some theorems into Limits.thy
 huffman parents: 
36358diff
changeset | 192 | unfolding le_net_def by simp | 
| 
9d8f7efd9289
define finer-than ordering on net type; move some theorems into Limits.thy
 huffman parents: 
36358diff
changeset | 193 | next | 
| 
9d8f7efd9289
define finer-than ordering on net type; move some theorems into Limits.thy
 huffman parents: 
36358diff
changeset | 194 | fix x y :: "'a net" assume "x \<le> y" and "y \<le> x" thus "x = y" | 
| 
9d8f7efd9289
define finer-than ordering on net type; move some theorems into Limits.thy
 huffman parents: 
36358diff
changeset | 195 | unfolding le_net_def expand_net_eq by fast | 
| 
9d8f7efd9289
define finer-than ordering on net type; move some theorems into Limits.thy
 huffman parents: 
36358diff
changeset | 196 | next | 
| 36630 | 197 | fix x :: "'a net" show "x \<le> top" | 
| 198 | unfolding le_net_def eventually_top by (simp add: always_eventually) | |
| 199 | next | |
| 36629 
de62713aec6e
swap ordering on nets, so x <= y means 'x is finer than y'
 huffman parents: 
36360diff
changeset | 200 | fix x :: "'a net" show "bot \<le> x" | 
| 36360 
9d8f7efd9289
define finer-than ordering on net type; move some theorems into Limits.thy
 huffman parents: 
36358diff
changeset | 201 | unfolding le_net_def by simp | 
| 36630 | 202 | next | 
| 203 | fix x y :: "'a net" show "x \<le> sup x y" and "y \<le> sup x y" | |
| 204 | unfolding le_net_def eventually_sup by simp_all | |
| 205 | next | |
| 206 | fix x y z :: "'a net" assume "x \<le> z" and "y \<le> z" thus "sup x y \<le> z" | |
| 207 | unfolding le_net_def eventually_sup by simp | |
| 208 | next | |
| 209 | fix x y :: "'a net" show "inf x y \<le> x" and "inf x y \<le> y" | |
| 210 | unfolding le_net_def eventually_inf by (auto intro: eventually_True) | |
| 211 | next | |
| 212 | fix x y z :: "'a net" assume "x \<le> y" and "x \<le> z" thus "x \<le> inf y z" | |
| 213 | unfolding le_net_def eventually_inf | |
| 214 | by (auto elim!: eventually_mono intro: eventually_conj) | |
| 215 | next | |
| 216 | fix x :: "'a net" and A assume "x \<in> A" thus "x \<le> Sup A" | |
| 217 | unfolding le_net_def eventually_Sup by simp | |
| 218 | next | |
| 219 | fix A and y :: "'a net" assume "\<And>x. x \<in> A \<Longrightarrow> x \<le> y" thus "Sup A \<le> y" | |
| 220 | unfolding le_net_def eventually_Sup by simp | |
| 221 | next | |
| 222 | fix z :: "'a net" and A assume "z \<in> A" thus "Inf A \<le> z" | |
| 223 | unfolding le_net_def Inf_net_def eventually_Sup Ball_def by simp | |
| 224 | next | |
| 225 | fix A and x :: "'a net" assume "\<And>y. y \<in> A \<Longrightarrow> x \<le> y" thus "x \<le> Inf A" | |
| 226 | unfolding le_net_def Inf_net_def eventually_Sup Ball_def by simp | |
| 36360 
9d8f7efd9289
define finer-than ordering on net type; move some theorems into Limits.thy
 huffman parents: 
36358diff
changeset | 227 | qed | 
| 
9d8f7efd9289
define finer-than ordering on net type; move some theorems into Limits.thy
 huffman parents: 
36358diff
changeset | 228 | |
| 
9d8f7efd9289
define finer-than ordering on net type; move some theorems into Limits.thy
 huffman parents: 
36358diff
changeset | 229 | end | 
| 
9d8f7efd9289
define finer-than ordering on net type; move some theorems into Limits.thy
 huffman parents: 
36358diff
changeset | 230 | |
| 
9d8f7efd9289
define finer-than ordering on net type; move some theorems into Limits.thy
 huffman parents: 
36358diff
changeset | 231 | lemma net_leD: | 
| 36629 
de62713aec6e
swap ordering on nets, so x <= y means 'x is finer than y'
 huffman parents: 
36360diff
changeset | 232 | "net \<le> net' \<Longrightarrow> eventually P net' \<Longrightarrow> eventually P net" | 
| 36360 
9d8f7efd9289
define finer-than ordering on net type; move some theorems into Limits.thy
 huffman parents: 
36358diff
changeset | 233 | unfolding le_net_def by simp | 
| 
9d8f7efd9289
define finer-than ordering on net type; move some theorems into Limits.thy
 huffman parents: 
36358diff
changeset | 234 | |
| 
9d8f7efd9289
define finer-than ordering on net type; move some theorems into Limits.thy
 huffman parents: 
36358diff
changeset | 235 | lemma net_leI: | 
| 36629 
de62713aec6e
swap ordering on nets, so x <= y means 'x is finer than y'
 huffman parents: 
36360diff
changeset | 236 | "(\<And>P. eventually P net' \<Longrightarrow> eventually P net) \<Longrightarrow> net \<le> net'" | 
| 36360 
9d8f7efd9289
define finer-than ordering on net type; move some theorems into Limits.thy
 huffman parents: 
36358diff
changeset | 237 | unfolding le_net_def by simp | 
| 
9d8f7efd9289
define finer-than ordering on net type; move some theorems into Limits.thy
 huffman parents: 
36358diff
changeset | 238 | |
| 
9d8f7efd9289
define finer-than ordering on net type; move some theorems into Limits.thy
 huffman parents: 
36358diff
changeset | 239 | lemma eventually_False: | 
| 36629 
de62713aec6e
swap ordering on nets, so x <= y means 'x is finer than y'
 huffman parents: 
36360diff
changeset | 240 | "eventually (\<lambda>x. False) net \<longleftrightarrow> net = bot" | 
| 36360 
9d8f7efd9289
define finer-than ordering on net type; move some theorems into Limits.thy
 huffman parents: 
36358diff
changeset | 241 | unfolding expand_net_eq by (auto elim: eventually_rev_mp) | 
| 
9d8f7efd9289
define finer-than ordering on net type; move some theorems into Limits.thy
 huffman parents: 
36358diff
changeset | 242 | |
| 
9d8f7efd9289
define finer-than ordering on net type; move some theorems into Limits.thy
 huffman parents: 
36358diff
changeset | 243 | |
| 36654 | 244 | subsection {* Map function for nets *}
 | 
| 245 | ||
| 246 | definition | |
| 247 |   netmap :: "('a \<Rightarrow> 'b) \<Rightarrow> 'a net \<Rightarrow> 'b net"
 | |
| 248 | where [code del]: | |
| 249 | "netmap f net = Abs_net (\<lambda>P. eventually (\<lambda>x. P (f x)) net)" | |
| 250 | ||
| 251 | lemma eventually_netmap: | |
| 252 | "eventually P (netmap f net) = eventually (\<lambda>x. P (f x)) net" | |
| 253 | unfolding netmap_def | |
| 254 | apply (rule eventually_Abs_net) | |
| 255 | apply (rule is_filter.intro) | |
| 256 | apply (auto elim!: eventually_rev_mp) | |
| 257 | done | |
| 258 | ||
| 259 | lemma netmap_ident: "netmap (\<lambda>x. x) net = net" | |
| 260 | by (simp add: expand_net_eq eventually_netmap) | |
| 261 | ||
| 262 | lemma netmap_netmap: "netmap f (netmap g net) = netmap (\<lambda>x. f (g x)) net" | |
| 263 | by (simp add: expand_net_eq eventually_netmap) | |
| 264 | ||
| 265 | lemma netmap_mono: "net \<le> net' \<Longrightarrow> netmap f net \<le> netmap f net'" | |
| 266 | unfolding le_net_def eventually_netmap by simp | |
| 267 | ||
| 268 | lemma netmap_bot [simp]: "netmap f bot = bot" | |
| 269 | by (simp add: expand_net_eq eventually_netmap) | |
| 270 | ||
| 271 | ||
| 36662 
621122eeb138
generalize types of LIMSEQ and LIM; generalize many lemmas
 huffman parents: 
36656diff
changeset | 272 | subsection {* Sequentially *}
 | 
| 31392 | 273 | |
| 274 | definition | |
| 36358 
246493d61204
define nets directly as filters, instead of as filter bases
 huffman parents: 
31902diff
changeset | 275 | sequentially :: "nat net" | 
| 
246493d61204
define nets directly as filters, instead of as filter bases
 huffman parents: 
31902diff
changeset | 276 | where [code del]: | 
| 
246493d61204
define nets directly as filters, instead of as filter bases
 huffman parents: 
31902diff
changeset | 277 | "sequentially = Abs_net (\<lambda>P. \<exists>k. \<forall>n\<ge>k. P n)" | 
| 31392 | 278 | |
| 36662 
621122eeb138
generalize types of LIMSEQ and LIM; generalize many lemmas
 huffman parents: 
36656diff
changeset | 279 | lemma eventually_sequentially: | 
| 
621122eeb138
generalize types of LIMSEQ and LIM; generalize many lemmas
 huffman parents: 
36656diff
changeset | 280 | "eventually P sequentially \<longleftrightarrow> (\<exists>N. \<forall>n\<ge>N. P n)" | 
| 
621122eeb138
generalize types of LIMSEQ and LIM; generalize many lemmas
 huffman parents: 
36656diff
changeset | 281 | unfolding sequentially_def | 
| 
621122eeb138
generalize types of LIMSEQ and LIM; generalize many lemmas
 huffman parents: 
36656diff
changeset | 282 | proof (rule eventually_Abs_net, rule is_filter.intro) | 
| 
621122eeb138
generalize types of LIMSEQ and LIM; generalize many lemmas
 huffman parents: 
36656diff
changeset | 283 | fix P Q :: "nat \<Rightarrow> bool" | 
| 
621122eeb138
generalize types of LIMSEQ and LIM; generalize many lemmas
 huffman parents: 
36656diff
changeset | 284 | assume "\<exists>i. \<forall>n\<ge>i. P n" and "\<exists>j. \<forall>n\<ge>j. Q n" | 
| 
621122eeb138
generalize types of LIMSEQ and LIM; generalize many lemmas
 huffman parents: 
36656diff
changeset | 285 | then obtain i j where "\<forall>n\<ge>i. P n" and "\<forall>n\<ge>j. Q n" by auto | 
| 
621122eeb138
generalize types of LIMSEQ and LIM; generalize many lemmas
 huffman parents: 
36656diff
changeset | 286 | then have "\<forall>n\<ge>max i j. P n \<and> Q n" by simp | 
| 
621122eeb138
generalize types of LIMSEQ and LIM; generalize many lemmas
 huffman parents: 
36656diff
changeset | 287 | then show "\<exists>k. \<forall>n\<ge>k. P n \<and> Q n" .. | 
| 
621122eeb138
generalize types of LIMSEQ and LIM; generalize many lemmas
 huffman parents: 
36656diff
changeset | 288 | qed auto | 
| 
621122eeb138
generalize types of LIMSEQ and LIM; generalize many lemmas
 huffman parents: 
36656diff
changeset | 289 | |
| 
621122eeb138
generalize types of LIMSEQ and LIM; generalize many lemmas
 huffman parents: 
36656diff
changeset | 290 | lemma sequentially_bot [simp]: "sequentially \<noteq> bot" | 
| 
621122eeb138
generalize types of LIMSEQ and LIM; generalize many lemmas
 huffman parents: 
36656diff
changeset | 291 | unfolding expand_net_eq eventually_sequentially by auto | 
| 
621122eeb138
generalize types of LIMSEQ and LIM; generalize many lemmas
 huffman parents: 
36656diff
changeset | 292 | |
| 
621122eeb138
generalize types of LIMSEQ and LIM; generalize many lemmas
 huffman parents: 
36656diff
changeset | 293 | lemma eventually_False_sequentially [simp]: | 
| 
621122eeb138
generalize types of LIMSEQ and LIM; generalize many lemmas
 huffman parents: 
36656diff
changeset | 294 | "\<not> eventually (\<lambda>n. False) sequentially" | 
| 
621122eeb138
generalize types of LIMSEQ and LIM; generalize many lemmas
 huffman parents: 
36656diff
changeset | 295 | by (simp add: eventually_False) | 
| 
621122eeb138
generalize types of LIMSEQ and LIM; generalize many lemmas
 huffman parents: 
36656diff
changeset | 296 | |
| 
621122eeb138
generalize types of LIMSEQ and LIM; generalize many lemmas
 huffman parents: 
36656diff
changeset | 297 | lemma le_sequentially: | 
| 
621122eeb138
generalize types of LIMSEQ and LIM; generalize many lemmas
 huffman parents: 
36656diff
changeset | 298 | "net \<le> sequentially \<longleftrightarrow> (\<forall>N. eventually (\<lambda>n. N \<le> n) net)" | 
| 
621122eeb138
generalize types of LIMSEQ and LIM; generalize many lemmas
 huffman parents: 
36656diff
changeset | 299 | unfolding le_net_def eventually_sequentially | 
| 
621122eeb138
generalize types of LIMSEQ and LIM; generalize many lemmas
 huffman parents: 
36656diff
changeset | 300 | by (safe, fast, drule_tac x=N in spec, auto elim: eventually_rev_mp) | 
| 
621122eeb138
generalize types of LIMSEQ and LIM; generalize many lemmas
 huffman parents: 
36656diff
changeset | 301 | |
| 
621122eeb138
generalize types of LIMSEQ and LIM; generalize many lemmas
 huffman parents: 
36656diff
changeset | 302 | |
| 
621122eeb138
generalize types of LIMSEQ and LIM; generalize many lemmas
 huffman parents: 
36656diff
changeset | 303 | subsection {* Standard Nets *}
 | 
| 
621122eeb138
generalize types of LIMSEQ and LIM; generalize many lemmas
 huffman parents: 
36656diff
changeset | 304 | |
| 31392 | 305 | definition | 
| 36358 
246493d61204
define nets directly as filters, instead of as filter bases
 huffman parents: 
31902diff
changeset | 306 | within :: "'a net \<Rightarrow> 'a set \<Rightarrow> 'a net" (infixr "within" 70) | 
| 
246493d61204
define nets directly as filters, instead of as filter bases
 huffman parents: 
31902diff
changeset | 307 | where [code del]: | 
| 
246493d61204
define nets directly as filters, instead of as filter bases
 huffman parents: 
31902diff
changeset | 308 | "net within S = Abs_net (\<lambda>P. eventually (\<lambda>x. x \<in> S \<longrightarrow> P x) net)" | 
| 31392 | 309 | |
| 36358 
246493d61204
define nets directly as filters, instead of as filter bases
 huffman parents: 
31902diff
changeset | 310 | definition | 
| 36654 | 311 | nhds :: "'a::topological_space \<Rightarrow> 'a net" | 
| 312 | where [code del]: | |
| 313 | "nhds a = Abs_net (\<lambda>P. \<exists>S. open S \<and> a \<in> S \<and> (\<forall>x\<in>S. P x))" | |
| 314 | ||
| 315 | definition | |
| 36358 
246493d61204
define nets directly as filters, instead of as filter bases
 huffman parents: 
31902diff
changeset | 316 | at :: "'a::topological_space \<Rightarrow> 'a net" | 
| 
246493d61204
define nets directly as filters, instead of as filter bases
 huffman parents: 
31902diff
changeset | 317 | where [code del]: | 
| 36654 | 318 |   "at a = nhds a within - {a}"
 | 
| 31447 
97bab1ac463e
generalize type of 'at' to topological_space; generalize some lemmas
 huffman parents: 
31392diff
changeset | 319 | |
| 31392 | 320 | lemma eventually_within: | 
| 321 | "eventually P (net within S) = eventually (\<lambda>x. x \<in> S \<longrightarrow> P x) net" | |
| 36358 
246493d61204
define nets directly as filters, instead of as filter bases
 huffman parents: 
31902diff
changeset | 322 | unfolding within_def | 
| 
246493d61204
define nets directly as filters, instead of as filter bases
 huffman parents: 
31902diff
changeset | 323 | by (rule eventually_Abs_net, rule is_filter.intro) | 
| 
246493d61204
define nets directly as filters, instead of as filter bases
 huffman parents: 
31902diff
changeset | 324 | (auto elim!: eventually_rev_mp) | 
| 31392 | 325 | |
| 36360 
9d8f7efd9289
define finer-than ordering on net type; move some theorems into Limits.thy
 huffman parents: 
36358diff
changeset | 326 | lemma within_UNIV: "net within UNIV = net" | 
| 
9d8f7efd9289
define finer-than ordering on net type; move some theorems into Limits.thy
 huffman parents: 
36358diff
changeset | 327 | unfolding expand_net_eq eventually_within by simp | 
| 
9d8f7efd9289
define finer-than ordering on net type; move some theorems into Limits.thy
 huffman parents: 
36358diff
changeset | 328 | |
| 36654 | 329 | lemma eventually_nhds: | 
| 330 | "eventually P (nhds a) \<longleftrightarrow> (\<exists>S. open S \<and> a \<in> S \<and> (\<forall>x\<in>S. P x))" | |
| 331 | unfolding nhds_def | |
| 36358 
246493d61204
define nets directly as filters, instead of as filter bases
 huffman parents: 
31902diff
changeset | 332 | proof (rule eventually_Abs_net, rule is_filter.intro) | 
| 36654 | 333 | have "open UNIV \<and> a \<in> UNIV \<and> (\<forall>x\<in>UNIV. True)" by simp | 
| 334 | thus "\<exists>S. open S \<and> a \<in> S \<and> (\<forall>x\<in>S. True)" by - rule | |
| 36358 
246493d61204
define nets directly as filters, instead of as filter bases
 huffman parents: 
31902diff
changeset | 335 | next | 
| 
246493d61204
define nets directly as filters, instead of as filter bases
 huffman parents: 
31902diff
changeset | 336 | fix P Q | 
| 36654 | 337 | assume "\<exists>S. open S \<and> a \<in> S \<and> (\<forall>x\<in>S. P x)" | 
| 338 | and "\<exists>T. open T \<and> a \<in> T \<and> (\<forall>x\<in>T. Q x)" | |
| 36358 
246493d61204
define nets directly as filters, instead of as filter bases
 huffman parents: 
31902diff
changeset | 339 | then obtain S T where | 
| 36654 | 340 | "open S \<and> a \<in> S \<and> (\<forall>x\<in>S. P x)" | 
| 341 | "open T \<and> a \<in> T \<and> (\<forall>x\<in>T. Q x)" by auto | |
| 342 | hence "open (S \<inter> T) \<and> a \<in> S \<inter> T \<and> (\<forall>x\<in>(S \<inter> T). P x \<and> Q x)" | |
| 36358 
246493d61204
define nets directly as filters, instead of as filter bases
 huffman parents: 
31902diff
changeset | 343 | by (simp add: open_Int) | 
| 36654 | 344 | thus "\<exists>S. open S \<and> a \<in> S \<and> (\<forall>x\<in>S. P x \<and> Q x)" by - rule | 
| 36358 
246493d61204
define nets directly as filters, instead of as filter bases
 huffman parents: 
31902diff
changeset | 345 | qed auto | 
| 31447 
97bab1ac463e
generalize type of 'at' to topological_space; generalize some lemmas
 huffman parents: 
31392diff
changeset | 346 | |
| 36656 
fec55067ae9b
add lemmas eventually_nhds_metric and tendsto_mono
 huffman parents: 
36655diff
changeset | 347 | lemma eventually_nhds_metric: | 
| 
fec55067ae9b
add lemmas eventually_nhds_metric and tendsto_mono
 huffman parents: 
36655diff
changeset | 348 | "eventually P (nhds a) \<longleftrightarrow> (\<exists>d>0. \<forall>x. dist x a < d \<longrightarrow> P x)" | 
| 
fec55067ae9b
add lemmas eventually_nhds_metric and tendsto_mono
 huffman parents: 
36655diff
changeset | 349 | unfolding eventually_nhds open_dist | 
| 31447 
97bab1ac463e
generalize type of 'at' to topological_space; generalize some lemmas
 huffman parents: 
31392diff
changeset | 350 | apply safe | 
| 
97bab1ac463e
generalize type of 'at' to topological_space; generalize some lemmas
 huffman parents: 
31392diff
changeset | 351 | apply fast | 
| 31492 
5400beeddb55
replace 'topo' with 'open'; add extra type constraint for 'open'
 huffman parents: 
31488diff
changeset | 352 | apply (rule_tac x="{x. dist x a < d}" in exI, simp)
 | 
| 31447 
97bab1ac463e
generalize type of 'at' to topological_space; generalize some lemmas
 huffman parents: 
31392diff
changeset | 353 | apply clarsimp | 
| 
97bab1ac463e
generalize type of 'at' to topological_space; generalize some lemmas
 huffman parents: 
31392diff
changeset | 354 | apply (rule_tac x="d - dist x a" in exI, clarsimp) | 
| 
97bab1ac463e
generalize type of 'at' to topological_space; generalize some lemmas
 huffman parents: 
31392diff
changeset | 355 | apply (simp only: less_diff_eq) | 
| 
97bab1ac463e
generalize type of 'at' to topological_space; generalize some lemmas
 huffman parents: 
31392diff
changeset | 356 | apply (erule le_less_trans [OF dist_triangle]) | 
| 
97bab1ac463e
generalize type of 'at' to topological_space; generalize some lemmas
 huffman parents: 
31392diff
changeset | 357 | done | 
| 
97bab1ac463e
generalize type of 'at' to topological_space; generalize some lemmas
 huffman parents: 
31392diff
changeset | 358 | |
| 36656 
fec55067ae9b
add lemmas eventually_nhds_metric and tendsto_mono
 huffman parents: 
36655diff
changeset | 359 | lemma eventually_at_topological: | 
| 
fec55067ae9b
add lemmas eventually_nhds_metric and tendsto_mono
 huffman parents: 
36655diff
changeset | 360 | "eventually P (at a) \<longleftrightarrow> (\<exists>S. open S \<and> a \<in> S \<and> (\<forall>x\<in>S. x \<noteq> a \<longrightarrow> P x))" | 
| 
fec55067ae9b
add lemmas eventually_nhds_metric and tendsto_mono
 huffman parents: 
36655diff
changeset | 361 | unfolding at_def eventually_within eventually_nhds by simp | 
| 
fec55067ae9b
add lemmas eventually_nhds_metric and tendsto_mono
 huffman parents: 
36655diff
changeset | 362 | |
| 
fec55067ae9b
add lemmas eventually_nhds_metric and tendsto_mono
 huffman parents: 
36655diff
changeset | 363 | lemma eventually_at: | 
| 
fec55067ae9b
add lemmas eventually_nhds_metric and tendsto_mono
 huffman parents: 
36655diff
changeset | 364 | fixes a :: "'a::metric_space" | 
| 
fec55067ae9b
add lemmas eventually_nhds_metric and tendsto_mono
 huffman parents: 
36655diff
changeset | 365 | shows "eventually P (at a) \<longleftrightarrow> (\<exists>d>0. \<forall>x. x \<noteq> a \<and> dist x a < d \<longrightarrow> P x)" | 
| 
fec55067ae9b
add lemmas eventually_nhds_metric and tendsto_mono
 huffman parents: 
36655diff
changeset | 366 | unfolding at_def eventually_within eventually_nhds_metric by auto | 
| 
fec55067ae9b
add lemmas eventually_nhds_metric and tendsto_mono
 huffman parents: 
36655diff
changeset | 367 | |
| 31392 | 368 | |
| 31355 | 369 | subsection {* Boundedness *}
 | 
| 370 | ||
| 371 | definition | |
| 31392 | 372 |   Bfun :: "('a \<Rightarrow> 'b::real_normed_vector) \<Rightarrow> 'a net \<Rightarrow> bool" where
 | 
| 31487 
93938cafc0e6
put syntax for tendsto in Limits.thy; rename variables
 huffman parents: 
31447diff
changeset | 373 | [code del]: "Bfun f net = (\<exists>K>0. eventually (\<lambda>x. norm (f x) \<le> K) net)" | 
| 31355 | 374 | |
| 31487 
93938cafc0e6
put syntax for tendsto in Limits.thy; rename variables
 huffman parents: 
31447diff
changeset | 375 | lemma BfunI: | 
| 
93938cafc0e6
put syntax for tendsto in Limits.thy; rename variables
 huffman parents: 
31447diff
changeset | 376 | assumes K: "eventually (\<lambda>x. norm (f x) \<le> K) net" shows "Bfun f net" | 
| 31355 | 377 | unfolding Bfun_def | 
| 378 | proof (intro exI conjI allI) | |
| 379 | show "0 < max K 1" by simp | |
| 380 | next | |
| 31487 
93938cafc0e6
put syntax for tendsto in Limits.thy; rename variables
 huffman parents: 
31447diff
changeset | 381 | show "eventually (\<lambda>x. norm (f x) \<le> max K 1) net" | 
| 31355 | 382 | using K by (rule eventually_elim1, simp) | 
| 383 | qed | |
| 384 | ||
| 385 | lemma BfunE: | |
| 31487 
93938cafc0e6
put syntax for tendsto in Limits.thy; rename variables
 huffman parents: 
31447diff
changeset | 386 | assumes "Bfun f net" | 
| 
93938cafc0e6
put syntax for tendsto in Limits.thy; rename variables
 huffman parents: 
31447diff
changeset | 387 | obtains B where "0 < B" and "eventually (\<lambda>x. norm (f x) \<le> B) net" | 
| 31355 | 388 | using assms unfolding Bfun_def by fast | 
| 389 | ||
| 390 | ||
| 31349 
2261c8781f73
new theory of filters and limits; prove LIMSEQ and LIM lemmas using filters
 huffman parents: diff
changeset | 391 | subsection {* Convergence to Zero *}
 | 
| 
2261c8781f73
new theory of filters and limits; prove LIMSEQ and LIM lemmas using filters
 huffman parents: diff
changeset | 392 | |
| 
2261c8781f73
new theory of filters and limits; prove LIMSEQ and LIM lemmas using filters
 huffman parents: diff
changeset | 393 | definition | 
| 31392 | 394 |   Zfun :: "('a \<Rightarrow> 'b::real_normed_vector) \<Rightarrow> 'a net \<Rightarrow> bool" where
 | 
| 31487 
93938cafc0e6
put syntax for tendsto in Limits.thy; rename variables
 huffman parents: 
31447diff
changeset | 395 | [code del]: "Zfun f net = (\<forall>r>0. eventually (\<lambda>x. norm (f x) < r) net)" | 
| 31349 
2261c8781f73
new theory of filters and limits; prove LIMSEQ and LIM lemmas using filters
 huffman parents: diff
changeset | 396 | |
| 
2261c8781f73
new theory of filters and limits; prove LIMSEQ and LIM lemmas using filters
 huffman parents: diff
changeset | 397 | lemma ZfunI: | 
| 31487 
93938cafc0e6
put syntax for tendsto in Limits.thy; rename variables
 huffman parents: 
31447diff
changeset | 398 | "(\<And>r. 0 < r \<Longrightarrow> eventually (\<lambda>x. norm (f x) < r) net) \<Longrightarrow> Zfun f net" | 
| 31349 
2261c8781f73
new theory of filters and limits; prove LIMSEQ and LIM lemmas using filters
 huffman parents: diff
changeset | 399 | unfolding Zfun_def by simp | 
| 
2261c8781f73
new theory of filters and limits; prove LIMSEQ and LIM lemmas using filters
 huffman parents: diff
changeset | 400 | |
| 
2261c8781f73
new theory of filters and limits; prove LIMSEQ and LIM lemmas using filters
 huffman parents: diff
changeset | 401 | lemma ZfunD: | 
| 31487 
93938cafc0e6
put syntax for tendsto in Limits.thy; rename variables
 huffman parents: 
31447diff
changeset | 402 | "\<lbrakk>Zfun f net; 0 < r\<rbrakk> \<Longrightarrow> eventually (\<lambda>x. norm (f x) < r) net" | 
| 31349 
2261c8781f73
new theory of filters and limits; prove LIMSEQ and LIM lemmas using filters
 huffman parents: diff
changeset | 403 | unfolding Zfun_def by simp | 
| 
2261c8781f73
new theory of filters and limits; prove LIMSEQ and LIM lemmas using filters
 huffman parents: diff
changeset | 404 | |
| 31355 | 405 | lemma Zfun_ssubst: | 
| 31487 
93938cafc0e6
put syntax for tendsto in Limits.thy; rename variables
 huffman parents: 
31447diff
changeset | 406 | "eventually (\<lambda>x. f x = g x) net \<Longrightarrow> Zfun g net \<Longrightarrow> Zfun f net" | 
| 31355 | 407 | unfolding Zfun_def by (auto elim!: eventually_rev_mp) | 
| 408 | ||
| 31487 
93938cafc0e6
put syntax for tendsto in Limits.thy; rename variables
 huffman parents: 
31447diff
changeset | 409 | lemma Zfun_zero: "Zfun (\<lambda>x. 0) net" | 
| 31349 
2261c8781f73
new theory of filters and limits; prove LIMSEQ and LIM lemmas using filters
 huffman parents: diff
changeset | 410 | unfolding Zfun_def by simp | 
| 
2261c8781f73
new theory of filters and limits; prove LIMSEQ and LIM lemmas using filters
 huffman parents: diff
changeset | 411 | |
| 31487 
93938cafc0e6
put syntax for tendsto in Limits.thy; rename variables
 huffman parents: 
31447diff
changeset | 412 | lemma Zfun_norm_iff: "Zfun (\<lambda>x. norm (f x)) net = Zfun (\<lambda>x. f x) net" | 
| 31349 
2261c8781f73
new theory of filters and limits; prove LIMSEQ and LIM lemmas using filters
 huffman parents: diff
changeset | 413 | unfolding Zfun_def by simp | 
| 
2261c8781f73
new theory of filters and limits; prove LIMSEQ and LIM lemmas using filters
 huffman parents: diff
changeset | 414 | |
| 
2261c8781f73
new theory of filters and limits; prove LIMSEQ and LIM lemmas using filters
 huffman parents: diff
changeset | 415 | lemma Zfun_imp_Zfun: | 
| 31487 
93938cafc0e6
put syntax for tendsto in Limits.thy; rename variables
 huffman parents: 
31447diff
changeset | 416 | assumes f: "Zfun f net" | 
| 
93938cafc0e6
put syntax for tendsto in Limits.thy; rename variables
 huffman parents: 
31447diff
changeset | 417 | assumes g: "eventually (\<lambda>x. norm (g x) \<le> norm (f x) * K) net" | 
| 
93938cafc0e6
put syntax for tendsto in Limits.thy; rename variables
 huffman parents: 
31447diff
changeset | 418 | shows "Zfun (\<lambda>x. g x) net" | 
| 31349 
2261c8781f73
new theory of filters and limits; prove LIMSEQ and LIM lemmas using filters
 huffman parents: diff
changeset | 419 | proof (cases) | 
| 
2261c8781f73
new theory of filters and limits; prove LIMSEQ and LIM lemmas using filters
 huffman parents: diff
changeset | 420 | assume K: "0 < K" | 
| 
2261c8781f73
new theory of filters and limits; prove LIMSEQ and LIM lemmas using filters
 huffman parents: diff
changeset | 421 | show ?thesis | 
| 
2261c8781f73
new theory of filters and limits; prove LIMSEQ and LIM lemmas using filters
 huffman parents: diff
changeset | 422 | proof (rule ZfunI) | 
| 
2261c8781f73
new theory of filters and limits; prove LIMSEQ and LIM lemmas using filters
 huffman parents: diff
changeset | 423 | fix r::real assume "0 < r" | 
| 
2261c8781f73
new theory of filters and limits; prove LIMSEQ and LIM lemmas using filters
 huffman parents: diff
changeset | 424 | hence "0 < r / K" | 
| 
2261c8781f73
new theory of filters and limits; prove LIMSEQ and LIM lemmas using filters
 huffman parents: diff
changeset | 425 | using K by (rule divide_pos_pos) | 
| 31487 
93938cafc0e6
put syntax for tendsto in Limits.thy; rename variables
 huffman parents: 
31447diff
changeset | 426 | then have "eventually (\<lambda>x. norm (f x) < r / K) net" | 
| 
93938cafc0e6
put syntax for tendsto in Limits.thy; rename variables
 huffman parents: 
31447diff
changeset | 427 | using ZfunD [OF f] by fast | 
| 
93938cafc0e6
put syntax for tendsto in Limits.thy; rename variables
 huffman parents: 
31447diff
changeset | 428 | with g show "eventually (\<lambda>x. norm (g x) < r) net" | 
| 31355 | 429 | proof (rule eventually_elim2) | 
| 31487 
93938cafc0e6
put syntax for tendsto in Limits.thy; rename variables
 huffman parents: 
31447diff
changeset | 430 | fix x | 
| 
93938cafc0e6
put syntax for tendsto in Limits.thy; rename variables
 huffman parents: 
31447diff
changeset | 431 | assume *: "norm (g x) \<le> norm (f x) * K" | 
| 
93938cafc0e6
put syntax for tendsto in Limits.thy; rename variables
 huffman parents: 
31447diff
changeset | 432 | assume "norm (f x) < r / K" | 
| 
93938cafc0e6
put syntax for tendsto in Limits.thy; rename variables
 huffman parents: 
31447diff
changeset | 433 | hence "norm (f x) * K < r" | 
| 31349 
2261c8781f73
new theory of filters and limits; prove LIMSEQ and LIM lemmas using filters
 huffman parents: diff
changeset | 434 | by (simp add: pos_less_divide_eq K) | 
| 31487 
93938cafc0e6
put syntax for tendsto in Limits.thy; rename variables
 huffman parents: 
31447diff
changeset | 435 | thus "norm (g x) < r" | 
| 31355 | 436 | by (simp add: order_le_less_trans [OF *]) | 
| 31349 
2261c8781f73
new theory of filters and limits; prove LIMSEQ and LIM lemmas using filters
 huffman parents: diff
changeset | 437 | qed | 
| 
2261c8781f73
new theory of filters and limits; prove LIMSEQ and LIM lemmas using filters
 huffman parents: diff
changeset | 438 | qed | 
| 
2261c8781f73
new theory of filters and limits; prove LIMSEQ and LIM lemmas using filters
 huffman parents: diff
changeset | 439 | next | 
| 
2261c8781f73
new theory of filters and limits; prove LIMSEQ and LIM lemmas using filters
 huffman parents: diff
changeset | 440 | assume "\<not> 0 < K" | 
| 
2261c8781f73
new theory of filters and limits; prove LIMSEQ and LIM lemmas using filters
 huffman parents: diff
changeset | 441 | hence K: "K \<le> 0" by (simp only: not_less) | 
| 31355 | 442 | show ?thesis | 
| 443 | proof (rule ZfunI) | |
| 444 | fix r :: real | |
| 445 | assume "0 < r" | |
| 31487 
93938cafc0e6
put syntax for tendsto in Limits.thy; rename variables
 huffman parents: 
31447diff
changeset | 446 | from g show "eventually (\<lambda>x. norm (g x) < r) net" | 
| 31355 | 447 | proof (rule eventually_elim1) | 
| 31487 
93938cafc0e6
put syntax for tendsto in Limits.thy; rename variables
 huffman parents: 
31447diff
changeset | 448 | fix x | 
| 
93938cafc0e6
put syntax for tendsto in Limits.thy; rename variables
 huffman parents: 
31447diff
changeset | 449 | assume "norm (g x) \<le> norm (f x) * K" | 
| 
93938cafc0e6
put syntax for tendsto in Limits.thy; rename variables
 huffman parents: 
31447diff
changeset | 450 | also have "\<dots> \<le> norm (f x) * 0" | 
| 31355 | 451 | using K norm_ge_zero by (rule mult_left_mono) | 
| 31487 
93938cafc0e6
put syntax for tendsto in Limits.thy; rename variables
 huffman parents: 
31447diff
changeset | 452 | finally show "norm (g x) < r" | 
| 31355 | 453 | using `0 < r` by simp | 
| 454 | qed | |
| 455 | qed | |
| 31349 
2261c8781f73
new theory of filters and limits; prove LIMSEQ and LIM lemmas using filters
 huffman parents: diff
changeset | 456 | qed | 
| 
2261c8781f73
new theory of filters and limits; prove LIMSEQ and LIM lemmas using filters
 huffman parents: diff
changeset | 457 | |
| 31487 
93938cafc0e6
put syntax for tendsto in Limits.thy; rename variables
 huffman parents: 
31447diff
changeset | 458 | lemma Zfun_le: "\<lbrakk>Zfun g net; \<forall>x. norm (f x) \<le> norm (g x)\<rbrakk> \<Longrightarrow> Zfun f net" | 
| 31349 
2261c8781f73
new theory of filters and limits; prove LIMSEQ and LIM lemmas using filters
 huffman parents: diff
changeset | 459 | by (erule_tac K="1" in Zfun_imp_Zfun, simp) | 
| 
2261c8781f73
new theory of filters and limits; prove LIMSEQ and LIM lemmas using filters
 huffman parents: diff
changeset | 460 | |
| 
2261c8781f73
new theory of filters and limits; prove LIMSEQ and LIM lemmas using filters
 huffman parents: diff
changeset | 461 | lemma Zfun_add: | 
| 31487 
93938cafc0e6
put syntax for tendsto in Limits.thy; rename variables
 huffman parents: 
31447diff
changeset | 462 | assumes f: "Zfun f net" and g: "Zfun g net" | 
| 
93938cafc0e6
put syntax for tendsto in Limits.thy; rename variables
 huffman parents: 
31447diff
changeset | 463 | shows "Zfun (\<lambda>x. f x + g x) net" | 
| 31349 
2261c8781f73
new theory of filters and limits; prove LIMSEQ and LIM lemmas using filters
 huffman parents: diff
changeset | 464 | proof (rule ZfunI) | 
| 
2261c8781f73
new theory of filters and limits; prove LIMSEQ and LIM lemmas using filters
 huffman parents: diff
changeset | 465 | fix r::real assume "0 < r" | 
| 
2261c8781f73
new theory of filters and limits; prove LIMSEQ and LIM lemmas using filters
 huffman parents: diff
changeset | 466 | hence r: "0 < r / 2" by simp | 
| 31487 
93938cafc0e6
put syntax for tendsto in Limits.thy; rename variables
 huffman parents: 
31447diff
changeset | 467 | have "eventually (\<lambda>x. norm (f x) < r/2) net" | 
| 
93938cafc0e6
put syntax for tendsto in Limits.thy; rename variables
 huffman parents: 
31447diff
changeset | 468 | using f r by (rule ZfunD) | 
| 31349 
2261c8781f73
new theory of filters and limits; prove LIMSEQ and LIM lemmas using filters
 huffman parents: diff
changeset | 469 | moreover | 
| 31487 
93938cafc0e6
put syntax for tendsto in Limits.thy; rename variables
 huffman parents: 
31447diff
changeset | 470 | have "eventually (\<lambda>x. norm (g x) < r/2) net" | 
| 
93938cafc0e6
put syntax for tendsto in Limits.thy; rename variables
 huffman parents: 
31447diff
changeset | 471 | using g r by (rule ZfunD) | 
| 31349 
2261c8781f73
new theory of filters and limits; prove LIMSEQ and LIM lemmas using filters
 huffman parents: diff
changeset | 472 | ultimately | 
| 31487 
93938cafc0e6
put syntax for tendsto in Limits.thy; rename variables
 huffman parents: 
31447diff
changeset | 473 | show "eventually (\<lambda>x. norm (f x + g x) < r) net" | 
| 31349 
2261c8781f73
new theory of filters and limits; prove LIMSEQ and LIM lemmas using filters
 huffman parents: diff
changeset | 474 | proof (rule eventually_elim2) | 
| 31487 
93938cafc0e6
put syntax for tendsto in Limits.thy; rename variables
 huffman parents: 
31447diff
changeset | 475 | fix x | 
| 
93938cafc0e6
put syntax for tendsto in Limits.thy; rename variables
 huffman parents: 
31447diff
changeset | 476 | assume *: "norm (f x) < r/2" "norm (g x) < r/2" | 
| 
93938cafc0e6
put syntax for tendsto in Limits.thy; rename variables
 huffman parents: 
31447diff
changeset | 477 | have "norm (f x + g x) \<le> norm (f x) + norm (g x)" | 
| 31349 
2261c8781f73
new theory of filters and limits; prove LIMSEQ and LIM lemmas using filters
 huffman parents: diff
changeset | 478 | by (rule norm_triangle_ineq) | 
| 
2261c8781f73
new theory of filters and limits; prove LIMSEQ and LIM lemmas using filters
 huffman parents: diff
changeset | 479 | also have "\<dots> < r/2 + r/2" | 
| 
2261c8781f73
new theory of filters and limits; prove LIMSEQ and LIM lemmas using filters
 huffman parents: diff
changeset | 480 | using * by (rule add_strict_mono) | 
| 31487 
93938cafc0e6
put syntax for tendsto in Limits.thy; rename variables
 huffman parents: 
31447diff
changeset | 481 | finally show "norm (f x + g x) < r" | 
| 31349 
2261c8781f73
new theory of filters and limits; prove LIMSEQ and LIM lemmas using filters
 huffman parents: diff
changeset | 482 | by simp | 
| 
2261c8781f73
new theory of filters and limits; prove LIMSEQ and LIM lemmas using filters
 huffman parents: diff
changeset | 483 | qed | 
| 
2261c8781f73
new theory of filters and limits; prove LIMSEQ and LIM lemmas using filters
 huffman parents: diff
changeset | 484 | qed | 
| 
2261c8781f73
new theory of filters and limits; prove LIMSEQ and LIM lemmas using filters
 huffman parents: diff
changeset | 485 | |
| 31487 
93938cafc0e6
put syntax for tendsto in Limits.thy; rename variables
 huffman parents: 
31447diff
changeset | 486 | lemma Zfun_minus: "Zfun f net \<Longrightarrow> Zfun (\<lambda>x. - f x) net" | 
| 31349 
2261c8781f73
new theory of filters and limits; prove LIMSEQ and LIM lemmas using filters
 huffman parents: diff
changeset | 487 | unfolding Zfun_def by simp | 
| 
2261c8781f73
new theory of filters and limits; prove LIMSEQ and LIM lemmas using filters
 huffman parents: diff
changeset | 488 | |
| 31487 
93938cafc0e6
put syntax for tendsto in Limits.thy; rename variables
 huffman parents: 
31447diff
changeset | 489 | lemma Zfun_diff: "\<lbrakk>Zfun f net; Zfun g net\<rbrakk> \<Longrightarrow> Zfun (\<lambda>x. f x - g x) net" | 
| 31349 
2261c8781f73
new theory of filters and limits; prove LIMSEQ and LIM lemmas using filters
 huffman parents: diff
changeset | 490 | by (simp only: diff_minus Zfun_add Zfun_minus) | 
| 
2261c8781f73
new theory of filters and limits; prove LIMSEQ and LIM lemmas using filters
 huffman parents: diff
changeset | 491 | |
| 
2261c8781f73
new theory of filters and limits; prove LIMSEQ and LIM lemmas using filters
 huffman parents: diff
changeset | 492 | lemma (in bounded_linear) Zfun: | 
| 31487 
93938cafc0e6
put syntax for tendsto in Limits.thy; rename variables
 huffman parents: 
31447diff
changeset | 493 | assumes g: "Zfun g net" | 
| 
93938cafc0e6
put syntax for tendsto in Limits.thy; rename variables
 huffman parents: 
31447diff
changeset | 494 | shows "Zfun (\<lambda>x. f (g x)) net" | 
| 31349 
2261c8781f73
new theory of filters and limits; prove LIMSEQ and LIM lemmas using filters
 huffman parents: diff
changeset | 495 | proof - | 
| 
2261c8781f73
new theory of filters and limits; prove LIMSEQ and LIM lemmas using filters
 huffman parents: diff
changeset | 496 | obtain K where "\<And>x. norm (f x) \<le> norm x * K" | 
| 
2261c8781f73
new theory of filters and limits; prove LIMSEQ and LIM lemmas using filters
 huffman parents: diff
changeset | 497 | using bounded by fast | 
| 31487 
93938cafc0e6
put syntax for tendsto in Limits.thy; rename variables
 huffman parents: 
31447diff
changeset | 498 | then have "eventually (\<lambda>x. norm (f (g x)) \<le> norm (g x) * K) net" | 
| 31355 | 499 | by simp | 
| 31487 
93938cafc0e6
put syntax for tendsto in Limits.thy; rename variables
 huffman parents: 
31447diff
changeset | 500 | with g show ?thesis | 
| 31349 
2261c8781f73
new theory of filters and limits; prove LIMSEQ and LIM lemmas using filters
 huffman parents: diff
changeset | 501 | by (rule Zfun_imp_Zfun) | 
| 
2261c8781f73
new theory of filters and limits; prove LIMSEQ and LIM lemmas using filters
 huffman parents: diff
changeset | 502 | qed | 
| 
2261c8781f73
new theory of filters and limits; prove LIMSEQ and LIM lemmas using filters
 huffman parents: diff
changeset | 503 | |
| 
2261c8781f73
new theory of filters and limits; prove LIMSEQ and LIM lemmas using filters
 huffman parents: diff
changeset | 504 | lemma (in bounded_bilinear) Zfun: | 
| 31487 
93938cafc0e6
put syntax for tendsto in Limits.thy; rename variables
 huffman parents: 
31447diff
changeset | 505 | assumes f: "Zfun f net" | 
| 
93938cafc0e6
put syntax for tendsto in Limits.thy; rename variables
 huffman parents: 
31447diff
changeset | 506 | assumes g: "Zfun g net" | 
| 
93938cafc0e6
put syntax for tendsto in Limits.thy; rename variables
 huffman parents: 
31447diff
changeset | 507 | shows "Zfun (\<lambda>x. f x ** g x) net" | 
| 31349 
2261c8781f73
new theory of filters and limits; prove LIMSEQ and LIM lemmas using filters
 huffman parents: diff
changeset | 508 | proof (rule ZfunI) | 
| 
2261c8781f73
new theory of filters and limits; prove LIMSEQ and LIM lemmas using filters
 huffman parents: diff
changeset | 509 | fix r::real assume r: "0 < r" | 
| 
2261c8781f73
new theory of filters and limits; prove LIMSEQ and LIM lemmas using filters
 huffman parents: diff
changeset | 510 | obtain K where K: "0 < K" | 
| 
2261c8781f73
new theory of filters and limits; prove LIMSEQ and LIM lemmas using filters
 huffman parents: diff
changeset | 511 | and norm_le: "\<And>x y. norm (x ** y) \<le> norm x * norm y * K" | 
| 
2261c8781f73
new theory of filters and limits; prove LIMSEQ and LIM lemmas using filters
 huffman parents: diff
changeset | 512 | using pos_bounded by fast | 
| 
2261c8781f73
new theory of filters and limits; prove LIMSEQ and LIM lemmas using filters
 huffman parents: diff
changeset | 513 | from K have K': "0 < inverse K" | 
| 
2261c8781f73
new theory of filters and limits; prove LIMSEQ and LIM lemmas using filters
 huffman parents: diff
changeset | 514 | by (rule positive_imp_inverse_positive) | 
| 31487 
93938cafc0e6
put syntax for tendsto in Limits.thy; rename variables
 huffman parents: 
31447diff
changeset | 515 | have "eventually (\<lambda>x. norm (f x) < r) net" | 
| 
93938cafc0e6
put syntax for tendsto in Limits.thy; rename variables
 huffman parents: 
31447diff
changeset | 516 | using f r by (rule ZfunD) | 
| 31349 
2261c8781f73
new theory of filters and limits; prove LIMSEQ and LIM lemmas using filters
 huffman parents: diff
changeset | 517 | moreover | 
| 31487 
93938cafc0e6
put syntax for tendsto in Limits.thy; rename variables
 huffman parents: 
31447diff
changeset | 518 | have "eventually (\<lambda>x. norm (g x) < inverse K) net" | 
| 
93938cafc0e6
put syntax for tendsto in Limits.thy; rename variables
 huffman parents: 
31447diff
changeset | 519 | using g K' by (rule ZfunD) | 
| 31349 
2261c8781f73
new theory of filters and limits; prove LIMSEQ and LIM lemmas using filters
 huffman parents: diff
changeset | 520 | ultimately | 
| 31487 
93938cafc0e6
put syntax for tendsto in Limits.thy; rename variables
 huffman parents: 
31447diff
changeset | 521 | show "eventually (\<lambda>x. norm (f x ** g x) < r) net" | 
| 31349 
2261c8781f73
new theory of filters and limits; prove LIMSEQ and LIM lemmas using filters
 huffman parents: diff
changeset | 522 | proof (rule eventually_elim2) | 
| 31487 
93938cafc0e6
put syntax for tendsto in Limits.thy; rename variables
 huffman parents: 
31447diff
changeset | 523 | fix x | 
| 
93938cafc0e6
put syntax for tendsto in Limits.thy; rename variables
 huffman parents: 
31447diff
changeset | 524 | assume *: "norm (f x) < r" "norm (g x) < inverse K" | 
| 
93938cafc0e6
put syntax for tendsto in Limits.thy; rename variables
 huffman parents: 
31447diff
changeset | 525 | have "norm (f x ** g x) \<le> norm (f x) * norm (g x) * K" | 
| 31349 
2261c8781f73
new theory of filters and limits; prove LIMSEQ and LIM lemmas using filters
 huffman parents: diff
changeset | 526 | by (rule norm_le) | 
| 31487 
93938cafc0e6
put syntax for tendsto in Limits.thy; rename variables
 huffman parents: 
31447diff
changeset | 527 | also have "norm (f x) * norm (g x) * K < r * inverse K * K" | 
| 31349 
2261c8781f73
new theory of filters and limits; prove LIMSEQ and LIM lemmas using filters
 huffman parents: diff
changeset | 528 | by (intro mult_strict_right_mono mult_strict_mono' norm_ge_zero * K) | 
| 
2261c8781f73
new theory of filters and limits; prove LIMSEQ and LIM lemmas using filters
 huffman parents: diff
changeset | 529 | also from K have "r * inverse K * K = r" | 
| 
2261c8781f73
new theory of filters and limits; prove LIMSEQ and LIM lemmas using filters
 huffman parents: diff
changeset | 530 | by simp | 
| 31487 
93938cafc0e6
put syntax for tendsto in Limits.thy; rename variables
 huffman parents: 
31447diff
changeset | 531 | finally show "norm (f x ** g x) < r" . | 
| 31349 
2261c8781f73
new theory of filters and limits; prove LIMSEQ and LIM lemmas using filters
 huffman parents: diff
changeset | 532 | qed | 
| 
2261c8781f73
new theory of filters and limits; prove LIMSEQ and LIM lemmas using filters
 huffman parents: diff
changeset | 533 | qed | 
| 
2261c8781f73
new theory of filters and limits; prove LIMSEQ and LIM lemmas using filters
 huffman parents: diff
changeset | 534 | |
| 
2261c8781f73
new theory of filters and limits; prove LIMSEQ and LIM lemmas using filters
 huffman parents: diff
changeset | 535 | lemma (in bounded_bilinear) Zfun_left: | 
| 31487 
93938cafc0e6
put syntax for tendsto in Limits.thy; rename variables
 huffman parents: 
31447diff
changeset | 536 | "Zfun f net \<Longrightarrow> Zfun (\<lambda>x. f x ** a) net" | 
| 31349 
2261c8781f73
new theory of filters and limits; prove LIMSEQ and LIM lemmas using filters
 huffman parents: diff
changeset | 537 | by (rule bounded_linear_left [THEN bounded_linear.Zfun]) | 
| 
2261c8781f73
new theory of filters and limits; prove LIMSEQ and LIM lemmas using filters
 huffman parents: diff
changeset | 538 | |
| 
2261c8781f73
new theory of filters and limits; prove LIMSEQ and LIM lemmas using filters
 huffman parents: diff
changeset | 539 | lemma (in bounded_bilinear) Zfun_right: | 
| 31487 
93938cafc0e6
put syntax for tendsto in Limits.thy; rename variables
 huffman parents: 
31447diff
changeset | 540 | "Zfun f net \<Longrightarrow> Zfun (\<lambda>x. a ** f x) net" | 
| 31349 
2261c8781f73
new theory of filters and limits; prove LIMSEQ and LIM lemmas using filters
 huffman parents: diff
changeset | 541 | by (rule bounded_linear_right [THEN bounded_linear.Zfun]) | 
| 
2261c8781f73
new theory of filters and limits; prove LIMSEQ and LIM lemmas using filters
 huffman parents: diff
changeset | 542 | |
| 
2261c8781f73
new theory of filters and limits; prove LIMSEQ and LIM lemmas using filters
 huffman parents: diff
changeset | 543 | lemmas Zfun_mult = mult.Zfun | 
| 
2261c8781f73
new theory of filters and limits; prove LIMSEQ and LIM lemmas using filters
 huffman parents: diff
changeset | 544 | lemmas Zfun_mult_right = mult.Zfun_right | 
| 
2261c8781f73
new theory of filters and limits; prove LIMSEQ and LIM lemmas using filters
 huffman parents: diff
changeset | 545 | lemmas Zfun_mult_left = mult.Zfun_left | 
| 
2261c8781f73
new theory of filters and limits; prove LIMSEQ and LIM lemmas using filters
 huffman parents: diff
changeset | 546 | |
| 
2261c8781f73
new theory of filters and limits; prove LIMSEQ and LIM lemmas using filters
 huffman parents: diff
changeset | 547 | |
| 31902 | 548 | subsection {* Limits *}
 | 
| 31349 
2261c8781f73
new theory of filters and limits; prove LIMSEQ and LIM lemmas using filters
 huffman parents: diff
changeset | 549 | |
| 
2261c8781f73
new theory of filters and limits; prove LIMSEQ and LIM lemmas using filters
 huffman parents: diff
changeset | 550 | definition | 
| 31488 | 551 |   tendsto :: "('a \<Rightarrow> 'b::topological_space) \<Rightarrow> 'b \<Rightarrow> 'a net \<Rightarrow> bool"
 | 
| 552 | (infixr "--->" 55) | |
| 553 | where [code del]: | |
| 31492 
5400beeddb55
replace 'topo' with 'open'; add extra type constraint for 'open'
 huffman parents: 
31488diff
changeset | 554 | "(f ---> l) net \<longleftrightarrow> (\<forall>S. open S \<longrightarrow> l \<in> S \<longrightarrow> eventually (\<lambda>x. f x \<in> S) net)" | 
| 31349 
2261c8781f73
new theory of filters and limits; prove LIMSEQ and LIM lemmas using filters
 huffman parents: diff
changeset | 555 | |
| 31902 | 556 | ML {*
 | 
| 557 | structure Tendsto_Intros = Named_Thms | |
| 558 | ( | |
| 559 | val name = "tendsto_intros" | |
| 560 | val description = "introduction rules for tendsto" | |
| 561 | ) | |
| 31565 | 562 | *} | 
| 563 | ||
| 31902 | 564 | setup Tendsto_Intros.setup | 
| 31565 | 565 | |
| 36656 
fec55067ae9b
add lemmas eventually_nhds_metric and tendsto_mono
 huffman parents: 
36655diff
changeset | 566 | lemma tendsto_mono: "net \<le> net' \<Longrightarrow> (f ---> l) net' \<Longrightarrow> (f ---> l) net" | 
| 
fec55067ae9b
add lemmas eventually_nhds_metric and tendsto_mono
 huffman parents: 
36655diff
changeset | 567 | unfolding tendsto_def le_net_def by fast | 
| 
fec55067ae9b
add lemmas eventually_nhds_metric and tendsto_mono
 huffman parents: 
36655diff
changeset | 568 | |
| 31488 | 569 | lemma topological_tendstoI: | 
| 31492 
5400beeddb55
replace 'topo' with 'open'; add extra type constraint for 'open'
 huffman parents: 
31488diff
changeset | 570 | "(\<And>S. open S \<Longrightarrow> l \<in> S \<Longrightarrow> eventually (\<lambda>x. f x \<in> S) net) | 
| 31487 
93938cafc0e6
put syntax for tendsto in Limits.thy; rename variables
 huffman parents: 
31447diff
changeset | 571 | \<Longrightarrow> (f ---> l) net" | 
| 31349 
2261c8781f73
new theory of filters and limits; prove LIMSEQ and LIM lemmas using filters
 huffman parents: diff
changeset | 572 | unfolding tendsto_def by auto | 
| 
2261c8781f73
new theory of filters and limits; prove LIMSEQ and LIM lemmas using filters
 huffman parents: diff
changeset | 573 | |
| 31488 | 574 | lemma topological_tendstoD: | 
| 31492 
5400beeddb55
replace 'topo' with 'open'; add extra type constraint for 'open'
 huffman parents: 
31488diff
changeset | 575 | "(f ---> l) net \<Longrightarrow> open S \<Longrightarrow> l \<in> S \<Longrightarrow> eventually (\<lambda>x. f x \<in> S) net" | 
| 31488 | 576 | unfolding tendsto_def by auto | 
| 577 | ||
| 578 | lemma tendstoI: | |
| 579 | assumes "\<And>e. 0 < e \<Longrightarrow> eventually (\<lambda>x. dist (f x) l < e) net" | |
| 580 | shows "(f ---> l) net" | |
| 581 | apply (rule topological_tendstoI) | |
| 31492 
5400beeddb55
replace 'topo' with 'open'; add extra type constraint for 'open'
 huffman parents: 
31488diff
changeset | 582 | apply (simp add: open_dist) | 
| 31488 | 583 | apply (drule (1) bspec, clarify) | 
| 584 | apply (drule assms) | |
| 585 | apply (erule eventually_elim1, simp) | |
| 586 | done | |
| 587 | ||
| 31349 
2261c8781f73
new theory of filters and limits; prove LIMSEQ and LIM lemmas using filters
 huffman parents: diff
changeset | 588 | lemma tendstoD: | 
| 31487 
93938cafc0e6
put syntax for tendsto in Limits.thy; rename variables
 huffman parents: 
31447diff
changeset | 589 | "(f ---> l) net \<Longrightarrow> 0 < e \<Longrightarrow> eventually (\<lambda>x. dist (f x) l < e) net" | 
| 31488 | 590 | apply (drule_tac S="{x. dist x l < e}" in topological_tendstoD)
 | 
| 31492 
5400beeddb55
replace 'topo' with 'open'; add extra type constraint for 'open'
 huffman parents: 
31488diff
changeset | 591 | apply (clarsimp simp add: open_dist) | 
| 31488 | 592 | apply (rule_tac x="e - dist x l" in exI, clarsimp) | 
| 593 | apply (simp only: less_diff_eq) | |
| 594 | apply (erule le_less_trans [OF dist_triangle]) | |
| 595 | apply simp | |
| 596 | apply simp | |
| 597 | done | |
| 598 | ||
| 599 | lemma tendsto_iff: | |
| 600 | "(f ---> l) net \<longleftrightarrow> (\<forall>e>0. eventually (\<lambda>x. dist (f x) l < e) net)" | |
| 601 | using tendstoI tendstoD by fast | |
| 31349 
2261c8781f73
new theory of filters and limits; prove LIMSEQ and LIM lemmas using filters
 huffman parents: diff
changeset | 602 | |
| 31487 
93938cafc0e6
put syntax for tendsto in Limits.thy; rename variables
 huffman parents: 
31447diff
changeset | 603 | lemma tendsto_Zfun_iff: "(f ---> a) net = Zfun (\<lambda>x. f x - a) net" | 
| 31488 | 604 | by (simp only: tendsto_iff Zfun_def dist_norm) | 
| 31349 
2261c8781f73
new theory of filters and limits; prove LIMSEQ and LIM lemmas using filters
 huffman parents: diff
changeset | 605 | |
| 31565 | 606 | lemma tendsto_ident_at [tendsto_intros]: "((\<lambda>x. x) ---> a) (at a)" | 
| 607 | unfolding tendsto_def eventually_at_topological by auto | |
| 608 | ||
| 609 | lemma tendsto_ident_at_within [tendsto_intros]: | |
| 36655 | 610 | "((\<lambda>x. x) ---> a) (at a within S)" | 
| 31565 | 611 | unfolding tendsto_def eventually_within eventually_at_topological by auto | 
| 612 | ||
| 613 | lemma tendsto_const [tendsto_intros]: "((\<lambda>x. k) ---> k) net" | |
| 31349 
2261c8781f73
new theory of filters and limits; prove LIMSEQ and LIM lemmas using filters
 huffman parents: diff
changeset | 614 | by (simp add: tendsto_def) | 
| 
2261c8781f73
new theory of filters and limits; prove LIMSEQ and LIM lemmas using filters
 huffman parents: diff
changeset | 615 | |
| 36662 
621122eeb138
generalize types of LIMSEQ and LIM; generalize many lemmas
 huffman parents: 
36656diff
changeset | 616 | lemma tendsto_const_iff: | 
| 
621122eeb138
generalize types of LIMSEQ and LIM; generalize many lemmas
 huffman parents: 
36656diff
changeset | 617 | fixes k l :: "'a::metric_space" | 
| 
621122eeb138
generalize types of LIMSEQ and LIM; generalize many lemmas
 huffman parents: 
36656diff
changeset | 618 | assumes "net \<noteq> bot" shows "((\<lambda>n. k) ---> l) net \<longleftrightarrow> k = l" | 
| 
621122eeb138
generalize types of LIMSEQ and LIM; generalize many lemmas
 huffman parents: 
36656diff
changeset | 619 | apply (safe intro!: tendsto_const) | 
| 
621122eeb138
generalize types of LIMSEQ and LIM; generalize many lemmas
 huffman parents: 
36656diff
changeset | 620 | apply (rule ccontr) | 
| 
621122eeb138
generalize types of LIMSEQ and LIM; generalize many lemmas
 huffman parents: 
36656diff
changeset | 621 | apply (drule_tac e="dist k l" in tendstoD) | 
| 
621122eeb138
generalize types of LIMSEQ and LIM; generalize many lemmas
 huffman parents: 
36656diff
changeset | 622 | apply (simp add: zero_less_dist_iff) | 
| 
621122eeb138
generalize types of LIMSEQ and LIM; generalize many lemmas
 huffman parents: 
36656diff
changeset | 623 | apply (simp add: eventually_False assms) | 
| 
621122eeb138
generalize types of LIMSEQ and LIM; generalize many lemmas
 huffman parents: 
36656diff
changeset | 624 | done | 
| 
621122eeb138
generalize types of LIMSEQ and LIM; generalize many lemmas
 huffman parents: 
36656diff
changeset | 625 | |
| 31565 | 626 | lemma tendsto_dist [tendsto_intros]: | 
| 627 | assumes f: "(f ---> l) net" and g: "(g ---> m) net" | |
| 628 | shows "((\<lambda>x. dist (f x) (g x)) ---> dist l m) net" | |
| 629 | proof (rule tendstoI) | |
| 630 | fix e :: real assume "0 < e" | |
| 631 | hence e2: "0 < e/2" by simp | |
| 632 | from tendstoD [OF f e2] tendstoD [OF g e2] | |
| 633 | show "eventually (\<lambda>x. dist (dist (f x) (g x)) (dist l m) < e) net" | |
| 634 | proof (rule eventually_elim2) | |
| 635 | fix x assume "dist (f x) l < e/2" "dist (g x) m < e/2" | |
| 636 | then show "dist (dist (f x) (g x)) (dist l m) < e" | |
| 637 | unfolding dist_real_def | |
| 638 | using dist_triangle2 [of "f x" "g x" "l"] | |
| 639 | using dist_triangle2 [of "g x" "l" "m"] | |
| 640 | using dist_triangle3 [of "l" "m" "f x"] | |
| 641 | using dist_triangle [of "f x" "m" "g x"] | |
| 642 | by arith | |
| 643 | qed | |
| 644 | qed | |
| 645 | ||
| 36662 
621122eeb138
generalize types of LIMSEQ and LIM; generalize many lemmas
 huffman parents: 
36656diff
changeset | 646 | lemma norm_conv_dist: "norm x = dist x 0" | 
| 
621122eeb138
generalize types of LIMSEQ and LIM; generalize many lemmas
 huffman parents: 
36656diff
changeset | 647 | unfolding dist_norm by simp | 
| 
621122eeb138
generalize types of LIMSEQ and LIM; generalize many lemmas
 huffman parents: 
36656diff
changeset | 648 | |
| 31565 | 649 | lemma tendsto_norm [tendsto_intros]: | 
| 650 | "(f ---> a) net \<Longrightarrow> ((\<lambda>x. norm (f x)) ---> norm a) net" | |
| 36662 
621122eeb138
generalize types of LIMSEQ and LIM; generalize many lemmas
 huffman parents: 
36656diff
changeset | 651 | unfolding norm_conv_dist by (intro tendsto_intros) | 
| 
621122eeb138
generalize types of LIMSEQ and LIM; generalize many lemmas
 huffman parents: 
36656diff
changeset | 652 | |
| 
621122eeb138
generalize types of LIMSEQ and LIM; generalize many lemmas
 huffman parents: 
36656diff
changeset | 653 | lemma tendsto_norm_zero: | 
| 
621122eeb138
generalize types of LIMSEQ and LIM; generalize many lemmas
 huffman parents: 
36656diff
changeset | 654 | "(f ---> 0) net \<Longrightarrow> ((\<lambda>x. norm (f x)) ---> 0) net" | 
| 
621122eeb138
generalize types of LIMSEQ and LIM; generalize many lemmas
 huffman parents: 
36656diff
changeset | 655 | by (drule tendsto_norm, simp) | 
| 
621122eeb138
generalize types of LIMSEQ and LIM; generalize many lemmas
 huffman parents: 
36656diff
changeset | 656 | |
| 
621122eeb138
generalize types of LIMSEQ and LIM; generalize many lemmas
 huffman parents: 
36656diff
changeset | 657 | lemma tendsto_norm_zero_cancel: | 
| 
621122eeb138
generalize types of LIMSEQ and LIM; generalize many lemmas
 huffman parents: 
36656diff
changeset | 658 | "((\<lambda>x. norm (f x)) ---> 0) net \<Longrightarrow> (f ---> 0) net" | 
| 
621122eeb138
generalize types of LIMSEQ and LIM; generalize many lemmas
 huffman parents: 
36656diff
changeset | 659 | unfolding tendsto_iff dist_norm by simp | 
| 
621122eeb138
generalize types of LIMSEQ and LIM; generalize many lemmas
 huffman parents: 
36656diff
changeset | 660 | |
| 
621122eeb138
generalize types of LIMSEQ and LIM; generalize many lemmas
 huffman parents: 
36656diff
changeset | 661 | lemma tendsto_norm_zero_iff: | 
| 
621122eeb138
generalize types of LIMSEQ and LIM; generalize many lemmas
 huffman parents: 
36656diff
changeset | 662 | "((\<lambda>x. norm (f x)) ---> 0) net \<longleftrightarrow> (f ---> 0) net" | 
| 
621122eeb138
generalize types of LIMSEQ and LIM; generalize many lemmas
 huffman parents: 
36656diff
changeset | 663 | unfolding tendsto_iff dist_norm by simp | 
| 31349 
2261c8781f73
new theory of filters and limits; prove LIMSEQ and LIM lemmas using filters
 huffman parents: diff
changeset | 664 | |
| 
2261c8781f73
new theory of filters and limits; prove LIMSEQ and LIM lemmas using filters
 huffman parents: diff
changeset | 665 | lemma add_diff_add: | 
| 
2261c8781f73
new theory of filters and limits; prove LIMSEQ and LIM lemmas using filters
 huffman parents: diff
changeset | 666 | fixes a b c d :: "'a::ab_group_add" | 
| 
2261c8781f73
new theory of filters and limits; prove LIMSEQ and LIM lemmas using filters
 huffman parents: diff
changeset | 667 | shows "(a + c) - (b + d) = (a - b) + (c - d)" | 
| 
2261c8781f73
new theory of filters and limits; prove LIMSEQ and LIM lemmas using filters
 huffman parents: diff
changeset | 668 | by simp | 
| 
2261c8781f73
new theory of filters and limits; prove LIMSEQ and LIM lemmas using filters
 huffman parents: diff
changeset | 669 | |
| 
2261c8781f73
new theory of filters and limits; prove LIMSEQ and LIM lemmas using filters
 huffman parents: diff
changeset | 670 | lemma minus_diff_minus: | 
| 
2261c8781f73
new theory of filters and limits; prove LIMSEQ and LIM lemmas using filters
 huffman parents: diff
changeset | 671 | fixes a b :: "'a::ab_group_add" | 
| 
2261c8781f73
new theory of filters and limits; prove LIMSEQ and LIM lemmas using filters
 huffman parents: diff
changeset | 672 | shows "(- a) - (- b) = - (a - b)" | 
| 
2261c8781f73
new theory of filters and limits; prove LIMSEQ and LIM lemmas using filters
 huffman parents: diff
changeset | 673 | by simp | 
| 
2261c8781f73
new theory of filters and limits; prove LIMSEQ and LIM lemmas using filters
 huffman parents: diff
changeset | 674 | |
| 31565 | 675 | lemma tendsto_add [tendsto_intros]: | 
| 31349 
2261c8781f73
new theory of filters and limits; prove LIMSEQ and LIM lemmas using filters
 huffman parents: diff
changeset | 676 | fixes a b :: "'a::real_normed_vector" | 
| 31487 
93938cafc0e6
put syntax for tendsto in Limits.thy; rename variables
 huffman parents: 
31447diff
changeset | 677 | shows "\<lbrakk>(f ---> a) net; (g ---> b) net\<rbrakk> \<Longrightarrow> ((\<lambda>x. f x + g x) ---> a + b) net" | 
| 31349 
2261c8781f73
new theory of filters and limits; prove LIMSEQ and LIM lemmas using filters
 huffman parents: diff
changeset | 678 | by (simp only: tendsto_Zfun_iff add_diff_add Zfun_add) | 
| 
2261c8781f73
new theory of filters and limits; prove LIMSEQ and LIM lemmas using filters
 huffman parents: diff
changeset | 679 | |
| 31565 | 680 | lemma tendsto_minus [tendsto_intros]: | 
| 31349 
2261c8781f73
new theory of filters and limits; prove LIMSEQ and LIM lemmas using filters
 huffman parents: diff
changeset | 681 | fixes a :: "'a::real_normed_vector" | 
| 31487 
93938cafc0e6
put syntax for tendsto in Limits.thy; rename variables
 huffman parents: 
31447diff
changeset | 682 | shows "(f ---> a) net \<Longrightarrow> ((\<lambda>x. - f x) ---> - a) net" | 
| 31349 
2261c8781f73
new theory of filters and limits; prove LIMSEQ and LIM lemmas using filters
 huffman parents: diff
changeset | 683 | by (simp only: tendsto_Zfun_iff minus_diff_minus Zfun_minus) | 
| 
2261c8781f73
new theory of filters and limits; prove LIMSEQ and LIM lemmas using filters
 huffman parents: diff
changeset | 684 | |
| 
2261c8781f73
new theory of filters and limits; prove LIMSEQ and LIM lemmas using filters
 huffman parents: diff
changeset | 685 | lemma tendsto_minus_cancel: | 
| 
2261c8781f73
new theory of filters and limits; prove LIMSEQ and LIM lemmas using filters
 huffman parents: diff
changeset | 686 | fixes a :: "'a::real_normed_vector" | 
| 31487 
93938cafc0e6
put syntax for tendsto in Limits.thy; rename variables
 huffman parents: 
31447diff
changeset | 687 | shows "((\<lambda>x. - f x) ---> - a) net \<Longrightarrow> (f ---> a) net" | 
| 31349 
2261c8781f73
new theory of filters and limits; prove LIMSEQ and LIM lemmas using filters
 huffman parents: diff
changeset | 688 | by (drule tendsto_minus, simp) | 
| 
2261c8781f73
new theory of filters and limits; prove LIMSEQ and LIM lemmas using filters
 huffman parents: diff
changeset | 689 | |
| 31565 | 690 | lemma tendsto_diff [tendsto_intros]: | 
| 31349 
2261c8781f73
new theory of filters and limits; prove LIMSEQ and LIM lemmas using filters
 huffman parents: diff
changeset | 691 | fixes a b :: "'a::real_normed_vector" | 
| 31487 
93938cafc0e6
put syntax for tendsto in Limits.thy; rename variables
 huffman parents: 
31447diff
changeset | 692 | shows "\<lbrakk>(f ---> a) net; (g ---> b) net\<rbrakk> \<Longrightarrow> ((\<lambda>x. f x - g x) ---> a - b) net" | 
| 31349 
2261c8781f73
new theory of filters and limits; prove LIMSEQ and LIM lemmas using filters
 huffman parents: diff
changeset | 693 | by (simp add: diff_minus tendsto_add tendsto_minus) | 
| 
2261c8781f73
new theory of filters and limits; prove LIMSEQ and LIM lemmas using filters
 huffman parents: diff
changeset | 694 | |
| 31588 | 695 | lemma tendsto_setsum [tendsto_intros]: | 
| 696 | fixes f :: "'a \<Rightarrow> 'b \<Rightarrow> 'c::real_normed_vector" | |
| 697 | assumes "\<And>i. i \<in> S \<Longrightarrow> (f i ---> a i) net" | |
| 698 | shows "((\<lambda>x. \<Sum>i\<in>S. f i x) ---> (\<Sum>i\<in>S. a i)) net" | |
| 699 | proof (cases "finite S") | |
| 700 | assume "finite S" thus ?thesis using assms | |
| 701 | proof (induct set: finite) | |
| 702 | case empty show ?case | |
| 703 | by (simp add: tendsto_const) | |
| 704 | next | |
| 705 | case (insert i F) thus ?case | |
| 706 | by (simp add: tendsto_add) | |
| 707 | qed | |
| 708 | next | |
| 709 | assume "\<not> finite S" thus ?thesis | |
| 710 | by (simp add: tendsto_const) | |
| 711 | qed | |
| 712 | ||
| 31565 | 713 | lemma (in bounded_linear) tendsto [tendsto_intros]: | 
| 31487 
93938cafc0e6
put syntax for tendsto in Limits.thy; rename variables
 huffman parents: 
31447diff
changeset | 714 | "(g ---> a) net \<Longrightarrow> ((\<lambda>x. f (g x)) ---> f a) net" | 
| 31349 
2261c8781f73
new theory of filters and limits; prove LIMSEQ and LIM lemmas using filters
 huffman parents: diff
changeset | 715 | by (simp only: tendsto_Zfun_iff diff [symmetric] Zfun) | 
| 
2261c8781f73
new theory of filters and limits; prove LIMSEQ and LIM lemmas using filters
 huffman parents: diff
changeset | 716 | |
| 31565 | 717 | lemma (in bounded_bilinear) tendsto [tendsto_intros]: | 
| 31487 
93938cafc0e6
put syntax for tendsto in Limits.thy; rename variables
 huffman parents: 
31447diff
changeset | 718 | "\<lbrakk>(f ---> a) net; (g ---> b) net\<rbrakk> \<Longrightarrow> ((\<lambda>x. f x ** g x) ---> a ** b) net" | 
| 31349 
2261c8781f73
new theory of filters and limits; prove LIMSEQ and LIM lemmas using filters
 huffman parents: diff
changeset | 719 | by (simp only: tendsto_Zfun_iff prod_diff_prod | 
| 
2261c8781f73
new theory of filters and limits; prove LIMSEQ and LIM lemmas using filters
 huffman parents: diff
changeset | 720 | Zfun_add Zfun Zfun_left Zfun_right) | 
| 
2261c8781f73
new theory of filters and limits; prove LIMSEQ and LIM lemmas using filters
 huffman parents: diff
changeset | 721 | |
| 31355 | 722 | |
| 723 | subsection {* Continuity of Inverse *}
 | |
| 724 | ||
| 725 | lemma (in bounded_bilinear) Zfun_prod_Bfun: | |
| 31487 
93938cafc0e6
put syntax for tendsto in Limits.thy; rename variables
 huffman parents: 
31447diff
changeset | 726 | assumes f: "Zfun f net" | 
| 
93938cafc0e6
put syntax for tendsto in Limits.thy; rename variables
 huffman parents: 
31447diff
changeset | 727 | assumes g: "Bfun g net" | 
| 
93938cafc0e6
put syntax for tendsto in Limits.thy; rename variables
 huffman parents: 
31447diff
changeset | 728 | shows "Zfun (\<lambda>x. f x ** g x) net" | 
| 31355 | 729 | proof - | 
| 730 | obtain K where K: "0 \<le> K" | |
| 731 | and norm_le: "\<And>x y. norm (x ** y) \<le> norm x * norm y * K" | |
| 732 | using nonneg_bounded by fast | |
| 733 | obtain B where B: "0 < B" | |
| 31487 
93938cafc0e6
put syntax for tendsto in Limits.thy; rename variables
 huffman parents: 
31447diff
changeset | 734 | and norm_g: "eventually (\<lambda>x. norm (g x) \<le> B) net" | 
| 
93938cafc0e6
put syntax for tendsto in Limits.thy; rename variables
 huffman parents: 
31447diff
changeset | 735 | using g by (rule BfunE) | 
| 
93938cafc0e6
put syntax for tendsto in Limits.thy; rename variables
 huffman parents: 
31447diff
changeset | 736 | have "eventually (\<lambda>x. norm (f x ** g x) \<le> norm (f x) * (B * K)) net" | 
| 
93938cafc0e6
put syntax for tendsto in Limits.thy; rename variables
 huffman parents: 
31447diff
changeset | 737 | using norm_g proof (rule eventually_elim1) | 
| 
93938cafc0e6
put syntax for tendsto in Limits.thy; rename variables
 huffman parents: 
31447diff
changeset | 738 | fix x | 
| 
93938cafc0e6
put syntax for tendsto in Limits.thy; rename variables
 huffman parents: 
31447diff
changeset | 739 | assume *: "norm (g x) \<le> B" | 
| 
93938cafc0e6
put syntax for tendsto in Limits.thy; rename variables
 huffman parents: 
31447diff
changeset | 740 | have "norm (f x ** g x) \<le> norm (f x) * norm (g x) * K" | 
| 31355 | 741 | by (rule norm_le) | 
| 31487 
93938cafc0e6
put syntax for tendsto in Limits.thy; rename variables
 huffman parents: 
31447diff
changeset | 742 | also have "\<dots> \<le> norm (f x) * B * K" | 
| 
93938cafc0e6
put syntax for tendsto in Limits.thy; rename variables
 huffman parents: 
31447diff
changeset | 743 | by (intro mult_mono' order_refl norm_g norm_ge_zero | 
| 31355 | 744 | mult_nonneg_nonneg K *) | 
| 31487 
93938cafc0e6
put syntax for tendsto in Limits.thy; rename variables
 huffman parents: 
31447diff
changeset | 745 | also have "\<dots> = norm (f x) * (B * K)" | 
| 31355 | 746 | by (rule mult_assoc) | 
| 31487 
93938cafc0e6
put syntax for tendsto in Limits.thy; rename variables
 huffman parents: 
31447diff
changeset | 747 | finally show "norm (f x ** g x) \<le> norm (f x) * (B * K)" . | 
| 31355 | 748 | qed | 
| 31487 
93938cafc0e6
put syntax for tendsto in Limits.thy; rename variables
 huffman parents: 
31447diff
changeset | 749 | with f show ?thesis | 
| 
93938cafc0e6
put syntax for tendsto in Limits.thy; rename variables
 huffman parents: 
31447diff
changeset | 750 | by (rule Zfun_imp_Zfun) | 
| 31355 | 751 | qed | 
| 752 | ||
| 753 | lemma (in bounded_bilinear) flip: | |
| 754 | "bounded_bilinear (\<lambda>x y. y ** x)" | |
| 755 | apply default | |
| 756 | apply (rule add_right) | |
| 757 | apply (rule add_left) | |
| 758 | apply (rule scaleR_right) | |
| 759 | apply (rule scaleR_left) | |
| 760 | apply (subst mult_commute) | |
| 761 | using bounded by fast | |
| 762 | ||
| 763 | lemma (in bounded_bilinear) Bfun_prod_Zfun: | |
| 31487 
93938cafc0e6
put syntax for tendsto in Limits.thy; rename variables
 huffman parents: 
31447diff
changeset | 764 | assumes f: "Bfun f net" | 
| 
93938cafc0e6
put syntax for tendsto in Limits.thy; rename variables
 huffman parents: 
31447diff
changeset | 765 | assumes g: "Zfun g net" | 
| 
93938cafc0e6
put syntax for tendsto in Limits.thy; rename variables
 huffman parents: 
31447diff
changeset | 766 | shows "Zfun (\<lambda>x. f x ** g x) net" | 
| 
93938cafc0e6
put syntax for tendsto in Limits.thy; rename variables
 huffman parents: 
31447diff
changeset | 767 | using flip g f by (rule bounded_bilinear.Zfun_prod_Bfun) | 
| 31355 | 768 | |
| 769 | lemma inverse_diff_inverse: | |
| 770 | "\<lbrakk>(a::'a::division_ring) \<noteq> 0; b \<noteq> 0\<rbrakk> | |
| 771 | \<Longrightarrow> inverse a - inverse b = - (inverse a * (a - b) * inverse b)" | |
| 772 | by (simp add: algebra_simps) | |
| 773 | ||
| 774 | lemma Bfun_inverse_lemma: | |
| 775 | fixes x :: "'a::real_normed_div_algebra" | |
| 776 | shows "\<lbrakk>r \<le> norm x; 0 < r\<rbrakk> \<Longrightarrow> norm (inverse x) \<le> inverse r" | |
| 777 | apply (subst nonzero_norm_inverse, clarsimp) | |
| 778 | apply (erule (1) le_imp_inverse_le) | |
| 779 | done | |
| 780 | ||
| 781 | lemma Bfun_inverse: | |
| 782 | fixes a :: "'a::real_normed_div_algebra" | |
| 31487 
93938cafc0e6
put syntax for tendsto in Limits.thy; rename variables
 huffman parents: 
31447diff
changeset | 783 | assumes f: "(f ---> a) net" | 
| 31355 | 784 | assumes a: "a \<noteq> 0" | 
| 31487 
93938cafc0e6
put syntax for tendsto in Limits.thy; rename variables
 huffman parents: 
31447diff
changeset | 785 | shows "Bfun (\<lambda>x. inverse (f x)) net" | 
| 31355 | 786 | proof - | 
| 787 | from a have "0 < norm a" by simp | |
| 788 | hence "\<exists>r>0. r < norm a" by (rule dense) | |
| 789 | then obtain r where r1: "0 < r" and r2: "r < norm a" by fast | |
| 31487 
93938cafc0e6
put syntax for tendsto in Limits.thy; rename variables
 huffman parents: 
31447diff
changeset | 790 | have "eventually (\<lambda>x. dist (f x) a < r) net" | 
| 
93938cafc0e6
put syntax for tendsto in Limits.thy; rename variables
 huffman parents: 
31447diff
changeset | 791 | using tendstoD [OF f r1] by fast | 
| 
93938cafc0e6
put syntax for tendsto in Limits.thy; rename variables
 huffman parents: 
31447diff
changeset | 792 | hence "eventually (\<lambda>x. norm (inverse (f x)) \<le> inverse (norm a - r)) net" | 
| 31355 | 793 | proof (rule eventually_elim1) | 
| 31487 
93938cafc0e6
put syntax for tendsto in Limits.thy; rename variables
 huffman parents: 
31447diff
changeset | 794 | fix x | 
| 
93938cafc0e6
put syntax for tendsto in Limits.thy; rename variables
 huffman parents: 
31447diff
changeset | 795 | assume "dist (f x) a < r" | 
| 
93938cafc0e6
put syntax for tendsto in Limits.thy; rename variables
 huffman parents: 
31447diff
changeset | 796 | hence 1: "norm (f x - a) < r" | 
| 31355 | 797 | by (simp add: dist_norm) | 
| 31487 
93938cafc0e6
put syntax for tendsto in Limits.thy; rename variables
 huffman parents: 
31447diff
changeset | 798 | hence 2: "f x \<noteq> 0" using r2 by auto | 
| 
93938cafc0e6
put syntax for tendsto in Limits.thy; rename variables
 huffman parents: 
31447diff
changeset | 799 | hence "norm (inverse (f x)) = inverse (norm (f x))" | 
| 31355 | 800 | by (rule nonzero_norm_inverse) | 
| 801 | also have "\<dots> \<le> inverse (norm a - r)" | |
| 802 | proof (rule le_imp_inverse_le) | |
| 803 | show "0 < norm a - r" using r2 by simp | |
| 804 | next | |
| 31487 
93938cafc0e6
put syntax for tendsto in Limits.thy; rename variables
 huffman parents: 
31447diff
changeset | 805 | have "norm a - norm (f x) \<le> norm (a - f x)" | 
| 31355 | 806 | by (rule norm_triangle_ineq2) | 
| 31487 
93938cafc0e6
put syntax for tendsto in Limits.thy; rename variables
 huffman parents: 
31447diff
changeset | 807 | also have "\<dots> = norm (f x - a)" | 
| 31355 | 808 | by (rule norm_minus_commute) | 
| 809 | also have "\<dots> < r" using 1 . | |
| 31487 
93938cafc0e6
put syntax for tendsto in Limits.thy; rename variables
 huffman parents: 
31447diff
changeset | 810 | finally show "norm a - r \<le> norm (f x)" by simp | 
| 31355 | 811 | qed | 
| 31487 
93938cafc0e6
put syntax for tendsto in Limits.thy; rename variables
 huffman parents: 
31447diff
changeset | 812 | finally show "norm (inverse (f x)) \<le> inverse (norm a - r)" . | 
| 31355 | 813 | qed | 
| 814 | thus ?thesis by (rule BfunI) | |
| 815 | qed | |
| 816 | ||
| 817 | lemma tendsto_inverse_lemma: | |
| 818 | fixes a :: "'a::real_normed_div_algebra" | |
| 31487 
93938cafc0e6
put syntax for tendsto in Limits.thy; rename variables
 huffman parents: 
31447diff
changeset | 819 | shows "\<lbrakk>(f ---> a) net; a \<noteq> 0; eventually (\<lambda>x. f x \<noteq> 0) net\<rbrakk> | 
| 
93938cafc0e6
put syntax for tendsto in Limits.thy; rename variables
 huffman parents: 
31447diff
changeset | 820 | \<Longrightarrow> ((\<lambda>x. inverse (f x)) ---> inverse a) net" | 
| 31355 | 821 | apply (subst tendsto_Zfun_iff) | 
| 822 | apply (rule Zfun_ssubst) | |
| 823 | apply (erule eventually_elim1) | |
| 824 | apply (erule (1) inverse_diff_inverse) | |
| 825 | apply (rule Zfun_minus) | |
| 826 | apply (rule Zfun_mult_left) | |
| 827 | apply (rule mult.Bfun_prod_Zfun) | |
| 828 | apply (erule (1) Bfun_inverse) | |
| 829 | apply (simp add: tendsto_Zfun_iff) | |
| 830 | done | |
| 831 | ||
| 31565 | 832 | lemma tendsto_inverse [tendsto_intros]: | 
| 31355 | 833 | fixes a :: "'a::real_normed_div_algebra" | 
| 31487 
93938cafc0e6
put syntax for tendsto in Limits.thy; rename variables
 huffman parents: 
31447diff
changeset | 834 | assumes f: "(f ---> a) net" | 
| 31355 | 835 | assumes a: "a \<noteq> 0" | 
| 31487 
93938cafc0e6
put syntax for tendsto in Limits.thy; rename variables
 huffman parents: 
31447diff
changeset | 836 | shows "((\<lambda>x. inverse (f x)) ---> inverse a) net" | 
| 31355 | 837 | proof - | 
| 838 | from a have "0 < norm a" by simp | |
| 31487 
93938cafc0e6
put syntax for tendsto in Limits.thy; rename variables
 huffman parents: 
31447diff
changeset | 839 | with f have "eventually (\<lambda>x. dist (f x) a < norm a) net" | 
| 31355 | 840 | by (rule tendstoD) | 
| 31487 
93938cafc0e6
put syntax for tendsto in Limits.thy; rename variables
 huffman parents: 
31447diff
changeset | 841 | then have "eventually (\<lambda>x. f x \<noteq> 0) net" | 
| 31355 | 842 | unfolding dist_norm by (auto elim!: eventually_elim1) | 
| 31487 
93938cafc0e6
put syntax for tendsto in Limits.thy; rename variables
 huffman parents: 
31447diff
changeset | 843 | with f a show ?thesis | 
| 31355 | 844 | by (rule tendsto_inverse_lemma) | 
| 845 | qed | |
| 846 | ||
| 31565 | 847 | lemma tendsto_divide [tendsto_intros]: | 
| 31355 | 848 | fixes a b :: "'a::real_normed_field" | 
| 31487 
93938cafc0e6
put syntax for tendsto in Limits.thy; rename variables
 huffman parents: 
31447diff
changeset | 849 | shows "\<lbrakk>(f ---> a) net; (g ---> b) net; b \<noteq> 0\<rbrakk> | 
| 
93938cafc0e6
put syntax for tendsto in Limits.thy; rename variables
 huffman parents: 
31447diff
changeset | 850 | \<Longrightarrow> ((\<lambda>x. f x / g x) ---> a / b) net" | 
| 31355 | 851 | by (simp add: mult.tendsto tendsto_inverse divide_inverse) | 
| 852 | ||
| 31349 
2261c8781f73
new theory of filters and limits; prove LIMSEQ and LIM lemmas using filters
 huffman parents: diff
changeset | 853 | end |