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