| author | haftmann | 
| Tue, 03 Aug 2021 13:53:22 +0000 | |
| changeset 74107 | 2ab5dacdb1f6 | 
| parent 73932 | fd21b4a93043 | 
| child 76876 | c9ffd9cf58db | 
| permissions | -rw-r--r-- | 
| 63627 | 1  | 
(* Title: HOL/Analysis/Extended_Real_Limits.thy  | 
| 41983 | 2  | 
Author: Johannes Hölzl, TU München  | 
3  | 
Author: Robert Himmelmann, TU München  | 
|
4  | 
Author: Armin Heller, TU München  | 
|
5  | 
Author: Bogdan Grechuk, University of Edinburgh  | 
|
6  | 
*)  | 
|
| 
41980
 
28b51effc5ed
split Extended_Reals into parts for Library and Multivariate_Analysis
 
hoelzl 
parents:  
diff
changeset
 | 
7  | 
|
| 
69722
 
b5163b2132c5
minor tagging updates in 13 theories
 
Angeliki KoutsoukouArgyraki <ak2110@cam.ac.uk> 
parents: 
69683 
diff
changeset
 | 
8  | 
section \<open>Limits on the Extended Real Number Line\<close> (* TO FIX: perhaps put all Nonstandard Analysis related  | 
| 
69221
 
21ee588bac7d
tagged a theory for the Analysis manual
 
Angeliki KoutsoukouArgyraki <ak2110@cam.ac.uk> 
parents: 
68752 
diff
changeset
 | 
9  | 
topics together? *)  | 
| 
41980
 
28b51effc5ed
split Extended_Reals into parts for Library and Multivariate_Analysis
 
hoelzl 
parents:  
diff
changeset
 | 
10  | 
|
| 
 
28b51effc5ed
split Extended_Reals into parts for Library and Multivariate_Analysis
 
hoelzl 
parents:  
diff
changeset
 | 
11  | 
theory Extended_Real_Limits  | 
| 61560 | 12  | 
imports  | 
13  | 
Topology_Euclidean_Space  | 
|
| 
66453
 
cc19f7ca2ed6
session-qualified theory imports: isabelle imports -U -i -d '~~/src/Benchmarks' -a;
 
wenzelm 
parents: 
64320 
diff
changeset
 | 
14  | 
"HOL-Library.Extended_Real"  | 
| 
 
cc19f7ca2ed6
session-qualified theory imports: isabelle imports -U -i -d '~~/src/Benchmarks' -a;
 
wenzelm 
parents: 
64320 
diff
changeset
 | 
15  | 
"HOL-Library.Extended_Nonnegative_Real"  | 
| 
 
cc19f7ca2ed6
session-qualified theory imports: isabelle imports -U -i -d '~~/src/Benchmarks' -a;
 
wenzelm 
parents: 
64320 
diff
changeset
 | 
16  | 
"HOL-Library.Indicator_Function"  | 
| 
41980
 
28b51effc5ed
split Extended_Reals into parts for Library and Multivariate_Analysis
 
hoelzl 
parents:  
diff
changeset
 | 
17  | 
begin  | 
| 
 
28b51effc5ed
split Extended_Reals into parts for Library and Multivariate_Analysis
 
hoelzl 
parents:  
diff
changeset
 | 
18  | 
|
| 
69681
 
689997a8a582
redo tagging-related changes from a06b204527e6, 0f4d4a13dc16, and a8faf6f15da7
 
immler 
parents: 
69680 
diff
changeset
 | 
19  | 
lemma compact_UNIV:  | 
| 53788 | 20  | 
  "compact (UNIV :: 'a::{complete_linorder,linorder_topology,second_countable_topology} set)"
 | 
| 
69681
 
689997a8a582
redo tagging-related changes from a06b204527e6, 0f4d4a13dc16, and a8faf6f15da7
 
immler 
parents: 
69680 
diff
changeset
 | 
21  | 
using compact_complete_linorder  | 
| 51351 | 22  | 
by (auto simp: seq_compact_eq_compact[symmetric] seq_compact_def)  | 
23  | 
||
| 
69681
 
689997a8a582
redo tagging-related changes from a06b204527e6, 0f4d4a13dc16, and a8faf6f15da7
 
immler 
parents: 
69680 
diff
changeset
 | 
24  | 
lemma compact_eq_closed:  | 
| 53788 | 25  | 
  fixes S :: "'a::{complete_linorder,linorder_topology,second_countable_topology} set"
 | 
| 51351 | 26  | 
shows "compact S \<longleftrightarrow> closed S"  | 
| 70136 | 27  | 
using closed_Int_compact[of S, OF _ compact_UNIV] compact_imp_closed  | 
| 53788 | 28  | 
by auto  | 
| 51351 | 29  | 
|
| 
69681
 
689997a8a582
redo tagging-related changes from a06b204527e6, 0f4d4a13dc16, and a8faf6f15da7
 
immler 
parents: 
69680 
diff
changeset
 | 
30  | 
lemma closed_contains_Sup_cl:  | 
| 53788 | 31  | 
  fixes S :: "'a::{complete_linorder,linorder_topology,second_countable_topology} set"
 | 
32  | 
assumes "closed S"  | 
|
33  | 
    and "S \<noteq> {}"
 | 
|
34  | 
shows "Sup S \<in> S"  | 
|
| 
69681
 
689997a8a582
redo tagging-related changes from a06b204527e6, 0f4d4a13dc16, and a8faf6f15da7
 
immler 
parents: 
69680 
diff
changeset
 | 
35  | 
proof -  | 
| 51351 | 36  | 
from compact_eq_closed[of S] compact_attains_sup[of S] assms  | 
| 53788 | 37  | 
obtain s where S: "s \<in> S" "\<forall>t\<in>S. t \<le> s"  | 
38  | 
by auto  | 
|
| 
53374
 
a14d2a854c02
tuned proofs -- clarified flow of facts wrt. calculation;
 
wenzelm 
parents: 
51641 
diff
changeset
 | 
39  | 
then have "Sup S = s"  | 
| 51351 | 40  | 
by (auto intro!: Sup_eqI)  | 
| 
53374
 
a14d2a854c02
tuned proofs -- clarified flow of facts wrt. calculation;
 
wenzelm 
parents: 
51641 
diff
changeset
 | 
41  | 
with S show ?thesis  | 
| 51351 | 42  | 
by simp  | 
43  | 
qed  | 
|
44  | 
||
| 
69681
 
689997a8a582
redo tagging-related changes from a06b204527e6, 0f4d4a13dc16, and a8faf6f15da7
 
immler 
parents: 
69680 
diff
changeset
 | 
45  | 
lemma closed_contains_Inf_cl:  | 
| 53788 | 46  | 
  fixes S :: "'a::{complete_linorder,linorder_topology,second_countable_topology} set"
 | 
47  | 
assumes "closed S"  | 
|
48  | 
    and "S \<noteq> {}"
 | 
|
49  | 
shows "Inf S \<in> S"  | 
|
| 
69681
 
689997a8a582
redo tagging-related changes from a06b204527e6, 0f4d4a13dc16, and a8faf6f15da7
 
immler 
parents: 
69680 
diff
changeset
 | 
50  | 
proof -  | 
| 51351 | 51  | 
from compact_eq_closed[of S] compact_attains_inf[of S] assms  | 
| 53788 | 52  | 
obtain s where S: "s \<in> S" "\<forall>t\<in>S. s \<le> t"  | 
53  | 
by auto  | 
|
| 
53374
 
a14d2a854c02
tuned proofs -- clarified flow of facts wrt. calculation;
 
wenzelm 
parents: 
51641 
diff
changeset
 | 
54  | 
then have "Inf S = s"  | 
| 51351 | 55  | 
by (auto intro!: Inf_eqI)  | 
| 
53374
 
a14d2a854c02
tuned proofs -- clarified flow of facts wrt. calculation;
 
wenzelm 
parents: 
51641 
diff
changeset
 | 
56  | 
with S show ?thesis  | 
| 51351 | 57  | 
by simp  | 
58  | 
qed  | 
|
59  | 
||
| 70136 | 60  | 
instance\<^marker>\<open>tag unimportant\<close> enat :: second_countable_topology  | 
| 
64320
 
ba194424b895
HOL-Probability: move stopping time from AFP/Markov_Models
 
hoelzl 
parents: 
63627 
diff
changeset
 | 
61  | 
proof  | 
| 
 
ba194424b895
HOL-Probability: move stopping time from AFP/Markov_Models
 
hoelzl 
parents: 
63627 
diff
changeset
 | 
62  | 
show "\<exists>B::enat set set. countable B \<and> open = generate_topology B"  | 
| 
 
ba194424b895
HOL-Probability: move stopping time from AFP/Markov_Models
 
hoelzl 
parents: 
63627 
diff
changeset
 | 
63  | 
proof (intro exI conjI)  | 
| 
 
ba194424b895
HOL-Probability: move stopping time from AFP/Markov_Models
 
hoelzl 
parents: 
63627 
diff
changeset
 | 
64  | 
show "countable (range lessThan \<union> range greaterThan::enat set set)"  | 
| 
 
ba194424b895
HOL-Probability: move stopping time from AFP/Markov_Models
 
hoelzl 
parents: 
63627 
diff
changeset
 | 
65  | 
by auto  | 
| 
 
ba194424b895
HOL-Probability: move stopping time from AFP/Markov_Models
 
hoelzl 
parents: 
63627 
diff
changeset
 | 
66  | 
qed (simp add: open_enat_def)  | 
| 
 
ba194424b895
HOL-Probability: move stopping time from AFP/Markov_Models
 
hoelzl 
parents: 
63627 
diff
changeset
 | 
67  | 
qed  | 
| 
 
ba194424b895
HOL-Probability: move stopping time from AFP/Markov_Models
 
hoelzl 
parents: 
63627 
diff
changeset
 | 
68  | 
|
| 70136 | 69  | 
instance\<^marker>\<open>tag unimportant\<close> ereal :: second_countable_topology  | 
| 
69681
 
689997a8a582
redo tagging-related changes from a06b204527e6, 0f4d4a13dc16, and a8faf6f15da7
 
immler 
parents: 
69680 
diff
changeset
 | 
70  | 
proof (standard, intro exI conjI)  | 
| 51351 | 71  | 
  let ?B = "(\<Union>r\<in>\<rat>. {{..< r}, {r <..}} :: ereal set set)"
 | 
| 53788 | 72  | 
show "countable ?B"  | 
73  | 
by (auto intro: countable_rat)  | 
|
| 51351 | 74  | 
show "open = generate_topology ?B"  | 
75  | 
proof (intro ext iffI)  | 
|
| 53788 | 76  | 
fix S :: "ereal set"  | 
77  | 
assume "open S"  | 
|
| 51351 | 78  | 
then show "generate_topology ?B S"  | 
79  | 
unfolding open_generated_order  | 
|
80  | 
proof induct  | 
|
81  | 
case (Basis b)  | 
|
| 53788 | 82  | 
      then obtain e where "b = {..<e} \<or> b = {e<..}"
 | 
83  | 
by auto  | 
|
| 51351 | 84  | 
      moreover have "{..<e} = \<Union>{{..<x}|x. x \<in> \<rat> \<and> x < e}" "{e<..} = \<Union>{{x<..}|x. x \<in> \<rat> \<and> e < x}"
 | 
85  | 
by (auto dest: ereal_dense3  | 
|
86  | 
simp del: ex_simps  | 
|
87  | 
simp add: ex_simps[symmetric] conj_commute Rats_def image_iff)  | 
|
88  | 
ultimately show ?case  | 
|
89  | 
by (auto intro: generate_topology.intros)  | 
|
90  | 
qed (auto intro: generate_topology.intros)  | 
|
91  | 
next  | 
|
| 53788 | 92  | 
fix S  | 
93  | 
assume "generate_topology ?B S"  | 
|
94  | 
then show "open S"  | 
|
95  | 
by induct auto  | 
|
| 51351 | 96  | 
qed  | 
97  | 
qed  | 
|
98  | 
||
| 62375 | 99  | 
text \<open>This is a copy from \<open>ereal :: second_countable_topology\<close>. Maybe find a common super class of  | 
100  | 
topological spaces where the rational numbers are densely embedded ?\<close>  | 
|
| 
69681
 
689997a8a582
redo tagging-related changes from a06b204527e6, 0f4d4a13dc16, and a8faf6f15da7
 
immler 
parents: 
69680 
diff
changeset
 | 
101  | 
instance ennreal :: second_countable_topology  | 
| 
 
689997a8a582
redo tagging-related changes from a06b204527e6, 0f4d4a13dc16, and a8faf6f15da7
 
immler 
parents: 
69680 
diff
changeset
 | 
102  | 
proof (standard, intro exI conjI)  | 
| 62375 | 103  | 
  let ?B = "(\<Union>r\<in>\<rat>. {{..< r}, {r <..}} :: ennreal set set)"
 | 
104  | 
show "countable ?B"  | 
|
105  | 
by (auto intro: countable_rat)  | 
|
106  | 
show "open = generate_topology ?B"  | 
|
107  | 
proof (intro ext iffI)  | 
|
108  | 
fix S :: "ennreal set"  | 
|
109  | 
assume "open S"  | 
|
110  | 
then show "generate_topology ?B S"  | 
|
111  | 
unfolding open_generated_order  | 
|
112  | 
proof induct  | 
|
113  | 
case (Basis b)  | 
|
114  | 
      then obtain e where "b = {..<e} \<or> b = {e<..}"
 | 
|
115  | 
by auto  | 
|
116  | 
      moreover have "{..<e} = \<Union>{{..<x}|x. x \<in> \<rat> \<and> x < e}" "{e<..} = \<Union>{{x<..}|x. x \<in> \<rat> \<and> e < x}"
 | 
|
117  | 
by (auto dest: ennreal_rat_dense  | 
|
118  | 
simp del: ex_simps  | 
|
119  | 
simp add: ex_simps[symmetric] conj_commute Rats_def image_iff)  | 
|
120  | 
ultimately show ?case  | 
|
121  | 
by (auto intro: generate_topology.intros)  | 
|
122  | 
qed (auto intro: generate_topology.intros)  | 
|
123  | 
next  | 
|
124  | 
fix S  | 
|
125  | 
assume "generate_topology ?B S"  | 
|
126  | 
then show "open S"  | 
|
127  | 
by induct auto  | 
|
128  | 
qed  | 
|
129  | 
qed  | 
|
130  | 
||
| 
69681
 
689997a8a582
redo tagging-related changes from a06b204527e6, 0f4d4a13dc16, and a8faf6f15da7
 
immler 
parents: 
69680 
diff
changeset
 | 
131  | 
lemma ereal_open_closed_aux:  | 
| 43920 | 132  | 
fixes S :: "ereal set"  | 
| 53788 | 133  | 
assumes "open S"  | 
134  | 
and "closed S"  | 
|
135  | 
and S: "(-\<infinity>) \<notin> S"  | 
|
| 
41980
 
28b51effc5ed
split Extended_Reals into parts for Library and Multivariate_Analysis
 
hoelzl 
parents:  
diff
changeset
 | 
136  | 
  shows "S = {}"
 | 
| 
69681
 
689997a8a582
redo tagging-related changes from a06b204527e6, 0f4d4a13dc16, and a8faf6f15da7
 
immler 
parents: 
69680 
diff
changeset
 | 
137  | 
proof (rule ccontr)  | 
| 53788 | 138  | 
assume "\<not> ?thesis"  | 
139  | 
then have *: "Inf S \<in> S"  | 
|
| 62375 | 140  | 
|
| 53788 | 141  | 
by (metis assms(2) closed_contains_Inf_cl)  | 
142  | 
  {
 | 
|
143  | 
assume "Inf S = -\<infinity>"  | 
|
144  | 
then have False  | 
|
145  | 
using * assms(3) by auto  | 
|
146  | 
}  | 
|
| 
41980
 
28b51effc5ed
split Extended_Reals into parts for Library and Multivariate_Analysis
 
hoelzl 
parents:  
diff
changeset
 | 
147  | 
moreover  | 
| 53788 | 148  | 
  {
 | 
149  | 
assume "Inf S = \<infinity>"  | 
|
150  | 
    then have "S = {\<infinity>}"
 | 
|
| 60420 | 151  | 
      by (metis Inf_eq_PInfty \<open>S \<noteq> {}\<close>)
 | 
| 53788 | 152  | 
then have False  | 
153  | 
by (metis assms(1) not_open_singleton)  | 
|
154  | 
}  | 
|
| 
41980
 
28b51effc5ed
split Extended_Reals into parts for Library and Multivariate_Analysis
 
hoelzl 
parents:  
diff
changeset
 | 
155  | 
moreover  | 
| 53788 | 156  | 
  {
 | 
157  | 
assume fin: "\<bar>Inf S\<bar> \<noteq> \<infinity>"  | 
|
158  | 
from ereal_open_cont_interval[OF assms(1) * fin]  | 
|
159  | 
    obtain e where e: "e > 0" "{Inf S - e<..<Inf S + e} \<subseteq> S" .
 | 
|
160  | 
then obtain b where b: "Inf S - e < b" "b < Inf S"  | 
|
161  | 
using fin ereal_between[of "Inf S" e] dense[of "Inf S - e"]  | 
|
| 44918 | 162  | 
by auto  | 
| 67613 | 163  | 
    then have "b \<in> {Inf S - e <..< Inf S + e}"
 | 
| 53788 | 164  | 
using e fin ereal_between[of "Inf S" e]  | 
165  | 
by auto  | 
|
166  | 
then have "b \<in> S"  | 
|
167  | 
using e by auto  | 
|
168  | 
then have False  | 
|
169  | 
using b by (metis complete_lattice_class.Inf_lower leD)  | 
|
170  | 
}  | 
|
171  | 
ultimately show False  | 
|
172  | 
by auto  | 
|
| 
41980
 
28b51effc5ed
split Extended_Reals into parts for Library and Multivariate_Analysis
 
hoelzl 
parents:  
diff
changeset
 | 
173  | 
qed  | 
| 
 
28b51effc5ed
split Extended_Reals into parts for Library and Multivariate_Analysis
 
hoelzl 
parents:  
diff
changeset
 | 
174  | 
|
| 
69681
 
689997a8a582
redo tagging-related changes from a06b204527e6, 0f4d4a13dc16, and a8faf6f15da7
 
immler 
parents: 
69680 
diff
changeset
 | 
175  | 
lemma ereal_open_closed:  | 
| 43920 | 176  | 
fixes S :: "ereal set"  | 
| 53788 | 177  | 
  shows "open S \<and> closed S \<longleftrightarrow> S = {} \<or> S = UNIV"
 | 
| 
69681
 
689997a8a582
redo tagging-related changes from a06b204527e6, 0f4d4a13dc16, and a8faf6f15da7
 
immler 
parents: 
69680 
diff
changeset
 | 
178  | 
proof -  | 
| 53788 | 179  | 
  {
 | 
180  | 
assume lhs: "open S \<and> closed S"  | 
|
181  | 
    {
 | 
|
182  | 
assume "-\<infinity> \<notin> S"  | 
|
183  | 
      then have "S = {}"
 | 
|
184  | 
using lhs ereal_open_closed_aux by auto  | 
|
185  | 
}  | 
|
| 49664 | 186  | 
moreover  | 
| 53788 | 187  | 
    {
 | 
188  | 
assume "-\<infinity> \<in> S"  | 
|
189  | 
      then have "- S = {}"
 | 
|
190  | 
using lhs ereal_open_closed_aux[of "-S"] by auto  | 
|
191  | 
}  | 
|
192  | 
    ultimately have "S = {} \<or> S = UNIV"
 | 
|
193  | 
by auto  | 
|
194  | 
}  | 
|
195  | 
then show ?thesis  | 
|
196  | 
by auto  | 
|
| 
41980
 
28b51effc5ed
split Extended_Reals into parts for Library and Multivariate_Analysis
 
hoelzl 
parents:  
diff
changeset
 | 
197  | 
qed  | 
| 
 
28b51effc5ed
split Extended_Reals into parts for Library and Multivariate_Analysis
 
hoelzl 
parents:  
diff
changeset
 | 
198  | 
|
| 
69681
 
689997a8a582
redo tagging-related changes from a06b204527e6, 0f4d4a13dc16, and a8faf6f15da7
 
immler 
parents: 
69680 
diff
changeset
 | 
199  | 
lemma ereal_open_atLeast:  | 
| 53788 | 200  | 
fixes x :: ereal  | 
201  | 
  shows "open {x..} \<longleftrightarrow> x = -\<infinity>"
 | 
|
| 
69681
 
689997a8a582
redo tagging-related changes from a06b204527e6, 0f4d4a13dc16, and a8faf6f15da7
 
immler 
parents: 
69680 
diff
changeset
 | 
202  | 
proof  | 
| 53788 | 203  | 
assume "x = -\<infinity>"  | 
204  | 
  then have "{x..} = UNIV"
 | 
|
205  | 
by auto  | 
|
206  | 
  then show "open {x..}"
 | 
|
207  | 
by auto  | 
|
| 
41980
 
28b51effc5ed
split Extended_Reals into parts for Library and Multivariate_Analysis
 
hoelzl 
parents:  
diff
changeset
 | 
208  | 
next  | 
| 
 
28b51effc5ed
split Extended_Reals into parts for Library and Multivariate_Analysis
 
hoelzl 
parents:  
diff
changeset
 | 
209  | 
  assume "open {x..}"
 | 
| 53788 | 210  | 
  then have "open {x..} \<and> closed {x..}"
 | 
211  | 
by auto  | 
|
212  | 
  then have "{x..} = UNIV"
 | 
|
213  | 
unfolding ereal_open_closed by auto  | 
|
214  | 
then show "x = -\<infinity>"  | 
|
215  | 
by (simp add: bot_ereal_def atLeast_eq_UNIV_iff)  | 
|
| 
41980
 
28b51effc5ed
split Extended_Reals into parts for Library and Multivariate_Analysis
 
hoelzl 
parents:  
diff
changeset
 | 
216  | 
qed  | 
| 
 
28b51effc5ed
split Extended_Reals into parts for Library and Multivariate_Analysis
 
hoelzl 
parents:  
diff
changeset
 | 
217  | 
|
| 
69681
 
689997a8a582
redo tagging-related changes from a06b204527e6, 0f4d4a13dc16, and a8faf6f15da7
 
immler 
parents: 
69680 
diff
changeset
 | 
218  | 
lemma mono_closed_real:  | 
| 
41980
 
28b51effc5ed
split Extended_Reals into parts for Library and Multivariate_Analysis
 
hoelzl 
parents:  
diff
changeset
 | 
219  | 
fixes S :: "real set"  | 
| 53788 | 220  | 
assumes mono: "\<forall>y z. y \<in> S \<and> y \<le> z \<longrightarrow> z \<in> S"  | 
| 49664 | 221  | 
and "closed S"  | 
| 53788 | 222  | 
  shows "S = {} \<or> S = UNIV \<or> (\<exists>a. S = {a..})"
 | 
| 
69681
 
689997a8a582
redo tagging-related changes from a06b204527e6, 0f4d4a13dc16, and a8faf6f15da7
 
immler 
parents: 
69680 
diff
changeset
 | 
223  | 
proof -  | 
| 53788 | 224  | 
  {
 | 
225  | 
    assume "S \<noteq> {}"
 | 
|
226  | 
    { assume ex: "\<exists>B. \<forall>x\<in>S. B \<le> x"
 | 
|
227  | 
then have *: "\<forall>x\<in>S. Inf S \<le> x"  | 
|
| 
54258
 
adfc759263ab
use bdd_above and bdd_below for conditionally complete lattices
 
hoelzl 
parents: 
54257 
diff
changeset
 | 
228  | 
using cInf_lower[of _ S] ex by (metis bdd_below_def)  | 
| 53788 | 229  | 
then have "Inf S \<in> S"  | 
230  | 
apply (subst closed_contains_Inf)  | 
|
| 60420 | 231  | 
        using ex \<open>S \<noteq> {}\<close> \<open>closed S\<close>
 | 
| 53788 | 232  | 
apply auto  | 
233  | 
done  | 
|
234  | 
then have "\<forall>x. Inf S \<le> x \<longleftrightarrow> x \<in> S"  | 
|
235  | 
using mono[rule_format, of "Inf S"] *  | 
|
236  | 
by auto  | 
|
237  | 
      then have "S = {Inf S ..}"
 | 
|
238  | 
by auto  | 
|
239  | 
      then have "\<exists>a. S = {a ..}"
 | 
|
240  | 
by auto  | 
|
| 49664 | 241  | 
}  | 
242  | 
moreover  | 
|
| 53788 | 243  | 
    {
 | 
244  | 
assume "\<not> (\<exists>B. \<forall>x\<in>S. B \<le> x)"  | 
|
245  | 
then have nex: "\<forall>B. \<exists>x\<in>S. x < B"  | 
|
246  | 
by (simp add: not_le)  | 
|
247  | 
      {
 | 
|
248  | 
fix y  | 
|
249  | 
obtain x where "x\<in>S" and "x < y"  | 
|
250  | 
using nex by auto  | 
|
251  | 
then have "y \<in> S"  | 
|
252  | 
using mono[rule_format, of x y] by auto  | 
|
253  | 
}  | 
|
254  | 
then have "S = UNIV"  | 
|
255  | 
by auto  | 
|
| 49664 | 256  | 
}  | 
| 53788 | 257  | 
    ultimately have "S = UNIV \<or> (\<exists>a. S = {a ..})"
 | 
258  | 
by blast  | 
|
259  | 
}  | 
|
260  | 
then show ?thesis  | 
|
261  | 
by blast  | 
|
| 
41980
 
28b51effc5ed
split Extended_Reals into parts for Library and Multivariate_Analysis
 
hoelzl 
parents:  
diff
changeset
 | 
262  | 
qed  | 
| 
 
28b51effc5ed
split Extended_Reals into parts for Library and Multivariate_Analysis
 
hoelzl 
parents:  
diff
changeset
 | 
263  | 
|
| 
69681
 
689997a8a582
redo tagging-related changes from a06b204527e6, 0f4d4a13dc16, and a8faf6f15da7
 
immler 
parents: 
69680 
diff
changeset
 | 
264  | 
lemma mono_closed_ereal:  | 
| 
41980
 
28b51effc5ed
split Extended_Reals into parts for Library and Multivariate_Analysis
 
hoelzl 
parents:  
diff
changeset
 | 
265  | 
fixes S :: "real set"  | 
| 53788 | 266  | 
assumes mono: "\<forall>y z. y \<in> S \<and> y \<le> z \<longrightarrow> z \<in> S"  | 
| 49664 | 267  | 
and "closed S"  | 
| 53788 | 268  | 
  shows "\<exists>a. S = {x. a \<le> ereal x}"
 | 
| 
69681
 
689997a8a582
redo tagging-related changes from a06b204527e6, 0f4d4a13dc16, and a8faf6f15da7
 
immler 
parents: 
69680 
diff
changeset
 | 
269  | 
proof -  | 
| 53788 | 270  | 
  {
 | 
271  | 
    assume "S = {}"
 | 
|
272  | 
then have ?thesis  | 
|
273  | 
apply (rule_tac x=PInfty in exI)  | 
|
274  | 
apply auto  | 
|
275  | 
done  | 
|
276  | 
}  | 
|
| 49664 | 277  | 
moreover  | 
| 53788 | 278  | 
  {
 | 
279  | 
assume "S = UNIV"  | 
|
280  | 
then have ?thesis  | 
|
281  | 
apply (rule_tac x="-\<infinity>" in exI)  | 
|
282  | 
apply auto  | 
|
283  | 
done  | 
|
284  | 
}  | 
|
| 49664 | 285  | 
moreover  | 
| 53788 | 286  | 
  {
 | 
287  | 
    assume "\<exists>a. S = {a ..}"
 | 
|
288  | 
    then obtain a where "S = {a ..}"
 | 
|
289  | 
by auto  | 
|
290  | 
then have ?thesis  | 
|
291  | 
apply (rule_tac x="ereal a" in exI)  | 
|
292  | 
apply auto  | 
|
293  | 
done  | 
|
| 49664 | 294  | 
}  | 
| 53788 | 295  | 
ultimately show ?thesis  | 
296  | 
using mono_closed_real[of S] assms by auto  | 
|
| 
41980
 
28b51effc5ed
split Extended_Reals into parts for Library and Multivariate_Analysis
 
hoelzl 
parents:  
diff
changeset
 | 
297  | 
qed  | 
| 
 
28b51effc5ed
split Extended_Reals into parts for Library and Multivariate_Analysis
 
hoelzl 
parents:  
diff
changeset
 | 
298  | 
|
| 
69681
 
689997a8a582
redo tagging-related changes from a06b204527e6, 0f4d4a13dc16, and a8faf6f15da7
 
immler 
parents: 
69680 
diff
changeset
 | 
299  | 
lemma Liminf_within:  | 
| 
51340
 
5e6296afe08d
move Liminf / Limsup lemmas on complete_lattices to its own file
 
hoelzl 
parents: 
51329 
diff
changeset
 | 
300  | 
fixes f :: "'a::metric_space \<Rightarrow> 'b::complete_lattice"  | 
| 
69260
 
0a9688695a1b
removed relics of ASCII syntax for indexed big operators
 
haftmann 
parents: 
69221 
diff
changeset
 | 
301  | 
  shows "Liminf (at x within S) f = (SUP e\<in>{0<..}. INF y\<in>(S \<inter> ball x e - {x}). f y)"
 | 
| 
51641
 
cd05e9fcc63d
remove the within-filter, replace "at" by "at _ within UNIV" (This allows to remove a couple of redundant lemmas)
 
hoelzl 
parents: 
51530 
diff
changeset
 | 
302  | 
unfolding Liminf_def eventually_at  | 
| 
69681
 
689997a8a582
redo tagging-related changes from a06b204527e6, 0f4d4a13dc16, and a8faf6f15da7
 
immler 
parents: 
69680 
diff
changeset
 | 
303  | 
proof (rule SUP_eq, simp_all add: Ball_def Bex_def, safe)  | 
| 53788 | 304  | 
fix P d  | 
305  | 
assume "0 < d" and "\<forall>y. y \<in> S \<longrightarrow> y \<noteq> x \<and> dist y x < d \<longrightarrow> P y"  | 
|
| 
51340
 
5e6296afe08d
move Liminf / Limsup lemmas on complete_lattices to its own file
 
hoelzl 
parents: 
51329 
diff
changeset
 | 
306  | 
  then have "S \<inter> ball x d - {x} \<subseteq> {x. P x}"
 | 
| 71633 | 307  | 
by (auto simp: dist_commute)  | 
| 69313 | 308  | 
  then show "\<exists>r>0. Inf (f ` (Collect P)) \<le> Inf (f ` (S \<inter> ball x r - {x}))"
 | 
| 60420 | 309  | 
by (intro exI[of _ d] INF_mono conjI \<open>0 < d\<close>) auto  | 
| 
51340
 
5e6296afe08d
move Liminf / Limsup lemmas on complete_lattices to its own file
 
hoelzl 
parents: 
51329 
diff
changeset
 | 
310  | 
next  | 
| 53788 | 311  | 
fix d :: real  | 
312  | 
assume "0 < d"  | 
|
| 
51641
 
cd05e9fcc63d
remove the within-filter, replace "at" by "at _ within UNIV" (This allows to remove a couple of redundant lemmas)
 
hoelzl 
parents: 
51530 
diff
changeset
 | 
313  | 
then show "\<exists>P. (\<exists>d>0. \<forall>xa. xa \<in> S \<longrightarrow> xa \<noteq> x \<and> dist xa x < d \<longrightarrow> P xa) \<and>  | 
| 69313 | 314  | 
    Inf (f ` (S \<inter> ball x d - {x})) \<le> Inf (f ` (Collect P))"
 | 
| 
51340
 
5e6296afe08d
move Liminf / Limsup lemmas on complete_lattices to its own file
 
hoelzl 
parents: 
51329 
diff
changeset
 | 
315  | 
    by (intro exI[of _ "\<lambda>y. y \<in> S \<inter> ball x d - {x}"])
 | 
| 
 
5e6296afe08d
move Liminf / Limsup lemmas on complete_lattices to its own file
 
hoelzl 
parents: 
51329 
diff
changeset
 | 
316  | 
(auto intro!: INF_mono exI[of _ d] simp: dist_commute)  | 
| 
 
5e6296afe08d
move Liminf / Limsup lemmas on complete_lattices to its own file
 
hoelzl 
parents: 
51329 
diff
changeset
 | 
317  | 
qed  | 
| 
 
5e6296afe08d
move Liminf / Limsup lemmas on complete_lattices to its own file
 
hoelzl 
parents: 
51329 
diff
changeset
 | 
318  | 
|
| 
69681
 
689997a8a582
redo tagging-related changes from a06b204527e6, 0f4d4a13dc16, and a8faf6f15da7
 
immler 
parents: 
69680 
diff
changeset
 | 
319  | 
lemma Limsup_within:  | 
| 53788 | 320  | 
fixes f :: "'a::metric_space \<Rightarrow> 'b::complete_lattice"  | 
| 
69260
 
0a9688695a1b
removed relics of ASCII syntax for indexed big operators
 
haftmann 
parents: 
69221 
diff
changeset
 | 
321  | 
  shows "Limsup (at x within S) f = (INF e\<in>{0<..}. SUP y\<in>(S \<inter> ball x e - {x}). f y)"
 | 
| 
51641
 
cd05e9fcc63d
remove the within-filter, replace "at" by "at _ within UNIV" (This allows to remove a couple of redundant lemmas)
 
hoelzl 
parents: 
51530 
diff
changeset
 | 
322  | 
unfolding Limsup_def eventually_at  | 
| 
69681
 
689997a8a582
redo tagging-related changes from a06b204527e6, 0f4d4a13dc16, and a8faf6f15da7
 
immler 
parents: 
69680 
diff
changeset
 | 
323  | 
proof (rule INF_eq, simp_all add: Ball_def Bex_def, safe)  | 
| 53788 | 324  | 
fix P d  | 
325  | 
assume "0 < d" and "\<forall>y. y \<in> S \<longrightarrow> y \<noteq> x \<and> dist y x < d \<longrightarrow> P y"  | 
|
| 
51340
 
5e6296afe08d
move Liminf / Limsup lemmas on complete_lattices to its own file
 
hoelzl 
parents: 
51329 
diff
changeset
 | 
326  | 
  then have "S \<inter> ball x d - {x} \<subseteq> {x. P x}"
 | 
| 71633 | 327  | 
by (auto simp: dist_commute)  | 
| 69313 | 328  | 
  then show "\<exists>r>0. Sup (f ` (S \<inter> ball x r - {x})) \<le> Sup (f ` (Collect P))"
 | 
| 60420 | 329  | 
by (intro exI[of _ d] SUP_mono conjI \<open>0 < d\<close>) auto  | 
| 
51340
 
5e6296afe08d
move Liminf / Limsup lemmas on complete_lattices to its own file
 
hoelzl 
parents: 
51329 
diff
changeset
 | 
330  | 
next  | 
| 53788 | 331  | 
fix d :: real  | 
332  | 
assume "0 < d"  | 
|
| 
51641
 
cd05e9fcc63d
remove the within-filter, replace "at" by "at _ within UNIV" (This allows to remove a couple of redundant lemmas)
 
hoelzl 
parents: 
51530 
diff
changeset
 | 
333  | 
then show "\<exists>P. (\<exists>d>0. \<forall>xa. xa \<in> S \<longrightarrow> xa \<noteq> x \<and> dist xa x < d \<longrightarrow> P xa) \<and>  | 
| 69313 | 334  | 
    Sup (f ` (Collect P)) \<le> Sup (f ` (S \<inter> ball x d - {x}))"
 | 
| 
51340
 
5e6296afe08d
move Liminf / Limsup lemmas on complete_lattices to its own file
 
hoelzl 
parents: 
51329 
diff
changeset
 | 
335  | 
    by (intro exI[of _ "\<lambda>y. y \<in> S \<inter> ball x d - {x}"])
 | 
| 
 
5e6296afe08d
move Liminf / Limsup lemmas on complete_lattices to its own file
 
hoelzl 
parents: 
51329 
diff
changeset
 | 
336  | 
(auto intro!: SUP_mono exI[of _ d] simp: dist_commute)  | 
| 
 
5e6296afe08d
move Liminf / Limsup lemmas on complete_lattices to its own file
 
hoelzl 
parents: 
51329 
diff
changeset
 | 
337  | 
qed  | 
| 
 
5e6296afe08d
move Liminf / Limsup lemmas on complete_lattices to its own file
 
hoelzl 
parents: 
51329 
diff
changeset
 | 
338  | 
|
| 
 
5e6296afe08d
move Liminf / Limsup lemmas on complete_lattices to its own file
 
hoelzl 
parents: 
51329 
diff
changeset
 | 
339  | 
lemma Liminf_at:  | 
| 
54257
 
5c7a3b6b05a9
generalize SUP and INF to the syntactic type classes Sup and Inf
 
hoelzl 
parents: 
53788 
diff
changeset
 | 
340  | 
fixes f :: "'a::metric_space \<Rightarrow> 'b::complete_lattice"  | 
| 
69260
 
0a9688695a1b
removed relics of ASCII syntax for indexed big operators
 
haftmann 
parents: 
69221 
diff
changeset
 | 
341  | 
  shows "Liminf (at x) f = (SUP e\<in>{0<..}. INF y\<in>(ball x e - {x}). f y)"
 | 
| 
51340
 
5e6296afe08d
move Liminf / Limsup lemmas on complete_lattices to its own file
 
hoelzl 
parents: 
51329 
diff
changeset
 | 
342  | 
using Liminf_within[of x UNIV f] by simp  | 
| 
 
5e6296afe08d
move Liminf / Limsup lemmas on complete_lattices to its own file
 
hoelzl 
parents: 
51329 
diff
changeset
 | 
343  | 
|
| 
 
5e6296afe08d
move Liminf / Limsup lemmas on complete_lattices to its own file
 
hoelzl 
parents: 
51329 
diff
changeset
 | 
344  | 
lemma Limsup_at:  | 
| 
54257
 
5c7a3b6b05a9
generalize SUP and INF to the syntactic type classes Sup and Inf
 
hoelzl 
parents: 
53788 
diff
changeset
 | 
345  | 
fixes f :: "'a::metric_space \<Rightarrow> 'b::complete_lattice"  | 
| 
69260
 
0a9688695a1b
removed relics of ASCII syntax for indexed big operators
 
haftmann 
parents: 
69221 
diff
changeset
 | 
346  | 
  shows "Limsup (at x) f = (INF e\<in>{0<..}. SUP y\<in>(ball x e - {x}). f y)"
 | 
| 
51340
 
5e6296afe08d
move Liminf / Limsup lemmas on complete_lattices to its own file
 
hoelzl 
parents: 
51329 
diff
changeset
 | 
347  | 
using Limsup_within[of x UNIV f] by simp  | 
| 
 
5e6296afe08d
move Liminf / Limsup lemmas on complete_lattices to its own file
 
hoelzl 
parents: 
51329 
diff
changeset
 | 
348  | 
|
| 
 
5e6296afe08d
move Liminf / Limsup lemmas on complete_lattices to its own file
 
hoelzl 
parents: 
51329 
diff
changeset
 | 
349  | 
lemma min_Liminf_at:  | 
| 53788 | 350  | 
fixes f :: "'a::metric_space \<Rightarrow> 'b::complete_linorder"  | 
| 
69260
 
0a9688695a1b
removed relics of ASCII syntax for indexed big operators
 
haftmann 
parents: 
69221 
diff
changeset
 | 
351  | 
  shows "min (f x) (Liminf (at x) f) = (SUP e\<in>{0<..}. INF y\<in>ball x e. f y)"
 | 
| 69661 | 352  | 
apply (simp add: inf_min [symmetric] Liminf_at)  | 
| 
51340
 
5e6296afe08d
move Liminf / Limsup lemmas on complete_lattices to its own file
 
hoelzl 
parents: 
51329 
diff
changeset
 | 
353  | 
apply (subst inf_commute)  | 
| 
 
5e6296afe08d
move Liminf / Limsup lemmas on complete_lattices to its own file
 
hoelzl 
parents: 
51329 
diff
changeset
 | 
354  | 
apply (subst SUP_inf)  | 
| 56166 | 355  | 
apply auto  | 
| 69661 | 356  | 
apply (metis (no_types, lifting) INF_insert centre_in_ball greaterThan_iff image_cong inf_commute insert_Diff)  | 
| 57865 | 357  | 
done  | 
| 
51340
 
5e6296afe08d
move Liminf / Limsup lemmas on complete_lattices to its own file
 
hoelzl 
parents: 
51329 
diff
changeset
 | 
358  | 
|
| 
66456
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
359  | 
|
| 69683 | 360  | 
subsection \<open>Extended-Real.thy\<close> (*FIX ME change title *)  | 
| 
66456
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
361  | 
|
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
362  | 
lemma sum_constant_ereal:  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
363  | 
fixes a::ereal  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
364  | 
shows "(\<Sum>i\<in>I. a) = a * card I"  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
365  | 
apply (cases "finite I", induct set: finite, simp_all)  | 
| 
73932
 
fd21b4a93043
added opaque_combs and renamed hide_lams to opaque_lifting
 
desharna 
parents: 
71633 
diff
changeset
 | 
366  | 
apply (cases a, auto, metis (no_types, opaque_lifting) add.commute mult.commute semiring_normalization_rules(3))  | 
| 
66456
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
367  | 
done  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
368  | 
|
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
369  | 
lemma real_lim_then_eventually_real:  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
370  | 
assumes "(u \<longlongrightarrow> ereal l) F"  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
371  | 
shows "eventually (\<lambda>n. u n = ereal(real_of_ereal(u n))) F"  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
372  | 
proof -  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
373  | 
  have "ereal l \<in> {-\<infinity><..<(\<infinity>::ereal)}" by simp
 | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
374  | 
  moreover have "open {-\<infinity><..<(\<infinity>::ereal)}" by simp
 | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
375  | 
  ultimately have "eventually (\<lambda>n. u n \<in> {-\<infinity><..<(\<infinity>::ereal)}) F" using assms tendsto_def by blast
 | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
376  | 
  moreover have "\<And>x. x \<in> {-\<infinity><..<(\<infinity>::ereal)} \<Longrightarrow> x = ereal(real_of_ereal x)" using ereal_real by auto
 | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
377  | 
ultimately show ?thesis by (metis (mono_tags, lifting) eventually_mono)  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
378  | 
qed  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
379  | 
|
| 
69681
 
689997a8a582
redo tagging-related changes from a06b204527e6, 0f4d4a13dc16, and a8faf6f15da7
 
immler 
parents: 
69680 
diff
changeset
 | 
380  | 
lemma ereal_Inf_cmult:  | 
| 
66456
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
381  | 
assumes "c>(0::real)"  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
382  | 
  shows "Inf {ereal c * x |x. P x} = ereal c * Inf {x. P x}"
 | 
| 
69681
 
689997a8a582
redo tagging-related changes from a06b204527e6, 0f4d4a13dc16, and a8faf6f15da7
 
immler 
parents: 
69680 
diff
changeset
 | 
383  | 
proof -  | 
| 
66456
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
384  | 
  have "(\<lambda>x::ereal. c * x) (Inf {x::ereal. P x}) = Inf ((\<lambda>x::ereal. c * x)`{x::ereal. P x})"
 | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
385  | 
apply (rule mono_bij_Inf)  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
386  | 
apply (simp add: assms ereal_mult_left_mono less_imp_le mono_def)  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
387  | 
apply (rule bij_betw_byWitness[of _ "\<lambda>x. (x::ereal) / c"], auto simp add: assms ereal_mult_divide)  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
388  | 
using assms ereal_divide_eq apply auto  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
389  | 
done  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
390  | 
then show ?thesis by (simp only: setcompr_eq_image[symmetric])  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
391  | 
qed  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
392  | 
|
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
393  | 
|
| 70136 | 394  | 
subsubsection\<^marker>\<open>tag important\<close> \<open>Continuity of addition\<close>  | 
| 
66456
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
395  | 
|
| 69566 | 396  | 
text \<open>The next few lemmas remove an unnecessary assumption in \<open>tendsto_add_ereal\<close>, culminating  | 
397  | 
in \<open>tendsto_add_ereal_general\<close> which essentially says that the addition  | 
|
398  | 
is continuous on ereal times ereal, except at \<open>(-\<infinity>, \<infinity>)\<close> and \<open>(\<infinity>, -\<infinity>)\<close>.  | 
|
| 
66456
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
399  | 
It is much more convenient in many situations, see for instance the proof of  | 
| 69566 | 400  | 
\<open>tendsto_sum_ereal\<close> below.\<close>  | 
| 
66456
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
401  | 
|
| 
69681
 
689997a8a582
redo tagging-related changes from a06b204527e6, 0f4d4a13dc16, and a8faf6f15da7
 
immler 
parents: 
69680 
diff
changeset
 | 
402  | 
lemma tendsto_add_ereal_PInf:  | 
| 
66456
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
403  | 
fixes y :: ereal  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
404  | 
assumes y: "y \<noteq> -\<infinity>"  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
405  | 
assumes f: "(f \<longlongrightarrow> \<infinity>) F" and g: "(g \<longlongrightarrow> y) F"  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
406  | 
shows "((\<lambda>x. f x + g x) \<longlongrightarrow> \<infinity>) F"  | 
| 
69681
 
689997a8a582
redo tagging-related changes from a06b204527e6, 0f4d4a13dc16, and a8faf6f15da7
 
immler 
parents: 
69680 
diff
changeset
 | 
407  | 
proof -  | 
| 
66456
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
408  | 
have "\<exists>C. eventually (\<lambda>x. g x > ereal C) F"  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
409  | 
proof (cases y)  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
410  | 
case (real r)  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
411  | 
have "y > y-1" using y real by (simp add: ereal_between(1))  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
412  | 
then have "eventually (\<lambda>x. g x > y - 1) F" using g y order_tendsto_iff by auto  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
413  | 
moreover have "y-1 = ereal(real_of_ereal(y-1))"  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
414  | 
by (metis real ereal_eq_1(1) ereal_minus(1) real_of_ereal.simps(1))  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
415  | 
ultimately have "eventually (\<lambda>x. g x > ereal(real_of_ereal(y - 1))) F" by simp  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
416  | 
then show ?thesis by auto  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
417  | 
next  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
418  | 
case (PInf)  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
419  | 
have "eventually (\<lambda>x. g x > ereal 0) F" using g PInf by (simp add: tendsto_PInfty)  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
420  | 
then show ?thesis by auto  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
421  | 
qed (simp add: y)  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
422  | 
then obtain C::real where ge: "eventually (\<lambda>x. g x > ereal C) F" by auto  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
423  | 
|
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
424  | 
  {
 | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
425  | 
fix M::real  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
426  | 
have "eventually (\<lambda>x. f x > ereal(M - C)) F" using f by (simp add: tendsto_PInfty)  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
427  | 
then have "eventually (\<lambda>x. (f x > ereal (M-C)) \<and> (g x > ereal C)) F"  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
428  | 
by (auto simp add: ge eventually_conj_iff)  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
429  | 
moreover have "\<And>x. ((f x > ereal (M-C)) \<and> (g x > ereal C)) \<Longrightarrow> (f x + g x > ereal M)"  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
430  | 
using ereal_add_strict_mono2 by fastforce  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
431  | 
ultimately have "eventually (\<lambda>x. f x + g x > ereal M) F" using eventually_mono by force  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
432  | 
}  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
433  | 
then show ?thesis by (simp add: tendsto_PInfty)  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
434  | 
qed  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
435  | 
|
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
436  | 
text\<open>One would like to deduce the next lemma from the previous one, but the fact  | 
| 69566 | 437  | 
that \<open>- (x + y)\<close> is in general different from \<open>(- x) + (- y)\<close> in ereal creates difficulties,  | 
| 
66456
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
438  | 
so it is more efficient to copy the previous proof.\<close>  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
439  | 
|
| 
69681
 
689997a8a582
redo tagging-related changes from a06b204527e6, 0f4d4a13dc16, and a8faf6f15da7
 
immler 
parents: 
69680 
diff
changeset
 | 
440  | 
lemma tendsto_add_ereal_MInf:  | 
| 
66456
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
441  | 
fixes y :: ereal  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
442  | 
assumes y: "y \<noteq> \<infinity>"  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
443  | 
assumes f: "(f \<longlongrightarrow> -\<infinity>) F" and g: "(g \<longlongrightarrow> y) F"  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
444  | 
shows "((\<lambda>x. f x + g x) \<longlongrightarrow> -\<infinity>) F"  | 
| 
69681
 
689997a8a582
redo tagging-related changes from a06b204527e6, 0f4d4a13dc16, and a8faf6f15da7
 
immler 
parents: 
69680 
diff
changeset
 | 
445  | 
proof -  | 
| 
66456
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
446  | 
have "\<exists>C. eventually (\<lambda>x. g x < ereal C) F"  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
447  | 
proof (cases y)  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
448  | 
case (real r)  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
449  | 
have "y < y+1" using y real by (simp add: ereal_between(1))  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
450  | 
then have "eventually (\<lambda>x. g x < y + 1) F" using g y order_tendsto_iff by force  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
451  | 
moreover have "y+1 = ereal(real_of_ereal (y+1))" by (simp add: real)  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
452  | 
ultimately have "eventually (\<lambda>x. g x < ereal(real_of_ereal(y + 1))) F" by simp  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
453  | 
then show ?thesis by auto  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
454  | 
next  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
455  | 
case (MInf)  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
456  | 
have "eventually (\<lambda>x. g x < ereal 0) F" using g MInf by (simp add: tendsto_MInfty)  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
457  | 
then show ?thesis by auto  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
458  | 
qed (simp add: y)  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
459  | 
then obtain C::real where ge: "eventually (\<lambda>x. g x < ereal C) F" by auto  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
460  | 
|
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
461  | 
  {
 | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
462  | 
fix M::real  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
463  | 
have "eventually (\<lambda>x. f x < ereal(M - C)) F" using f by (simp add: tendsto_MInfty)  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
464  | 
then have "eventually (\<lambda>x. (f x < ereal (M- C)) \<and> (g x < ereal C)) F"  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
465  | 
by (auto simp add: ge eventually_conj_iff)  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
466  | 
moreover have "\<And>x. ((f x < ereal (M-C)) \<and> (g x < ereal C)) \<Longrightarrow> (f x + g x < ereal M)"  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
467  | 
using ereal_add_strict_mono2 by fastforce  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
468  | 
ultimately have "eventually (\<lambda>x. f x + g x < ereal M) F" using eventually_mono by force  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
469  | 
}  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
470  | 
then show ?thesis by (simp add: tendsto_MInfty)  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
471  | 
qed  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
472  | 
|
| 
69681
 
689997a8a582
redo tagging-related changes from a06b204527e6, 0f4d4a13dc16, and a8faf6f15da7
 
immler 
parents: 
69680 
diff
changeset
 | 
473  | 
lemma tendsto_add_ereal_general1:  | 
| 
66456
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
474  | 
fixes x y :: ereal  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
475  | 
assumes y: "\<bar>y\<bar> \<noteq> \<infinity>"  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
476  | 
assumes f: "(f \<longlongrightarrow> x) F" and g: "(g \<longlongrightarrow> y) F"  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
477  | 
shows "((\<lambda>x. f x + g x) \<longlongrightarrow> x + y) F"  | 
| 
69681
 
689997a8a582
redo tagging-related changes from a06b204527e6, 0f4d4a13dc16, and a8faf6f15da7
 
immler 
parents: 
69680 
diff
changeset
 | 
478  | 
proof (cases x)  | 
| 
66456
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
479  | 
case (real r)  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
480  | 
have a: "\<bar>x\<bar> \<noteq> \<infinity>" by (simp add: real)  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
481  | 
show ?thesis by (rule tendsto_add_ereal[OF a, OF y, OF f, OF g])  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
482  | 
next  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
483  | 
case PInf  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
484  | 
then show ?thesis using tendsto_add_ereal_PInf assms by force  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
485  | 
next  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
486  | 
case MInf  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
487  | 
then show ?thesis using tendsto_add_ereal_MInf assms  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
488  | 
by (metis abs_ereal.simps(3) ereal_MInfty_eq_plus)  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
489  | 
qed  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
490  | 
|
| 
69681
 
689997a8a582
redo tagging-related changes from a06b204527e6, 0f4d4a13dc16, and a8faf6f15da7
 
immler 
parents: 
69680 
diff
changeset
 | 
491  | 
lemma tendsto_add_ereal_general2:  | 
| 
66456
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
492  | 
fixes x y :: ereal  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
493  | 
assumes x: "\<bar>x\<bar> \<noteq> \<infinity>"  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
494  | 
and f: "(f \<longlongrightarrow> x) F" and g: "(g \<longlongrightarrow> y) F"  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
495  | 
shows "((\<lambda>x. f x + g x) \<longlongrightarrow> x + y) F"  | 
| 
69681
 
689997a8a582
redo tagging-related changes from a06b204527e6, 0f4d4a13dc16, and a8faf6f15da7
 
immler 
parents: 
69680 
diff
changeset
 | 
496  | 
proof -  | 
| 
66456
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
497  | 
have "((\<lambda>x. g x + f x) \<longlongrightarrow> x + y) F"  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
498  | 
using tendsto_add_ereal_general1[OF x, OF g, OF f] add.commute[of "y", of "x"] by simp  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
499  | 
moreover have "\<And>x. g x + f x = f x + g x" using add.commute by auto  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
500  | 
ultimately show ?thesis by simp  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
501  | 
qed  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
502  | 
|
| 69566 | 503  | 
text \<open>The next lemma says that the addition is continuous on \<open>ereal\<close>, except at  | 
504  | 
the pairs \<open>(-\<infinity>, \<infinity>)\<close> and \<open>(\<infinity>, -\<infinity>)\<close>.\<close>  | 
|
| 
66456
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
505  | 
|
| 
69681
 
689997a8a582
redo tagging-related changes from a06b204527e6, 0f4d4a13dc16, and a8faf6f15da7
 
immler 
parents: 
69680 
diff
changeset
 | 
506  | 
lemma tendsto_add_ereal_general [tendsto_intros]:  | 
| 
66456
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
507  | 
fixes x y :: ereal  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
508  | 
assumes "\<not>((x=\<infinity> \<and> y=-\<infinity>) \<or> (x=-\<infinity> \<and> y=\<infinity>))"  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
509  | 
and f: "(f \<longlongrightarrow> x) F" and g: "(g \<longlongrightarrow> y) F"  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
510  | 
shows "((\<lambda>x. f x + g x) \<longlongrightarrow> x + y) F"  | 
| 
69681
 
689997a8a582
redo tagging-related changes from a06b204527e6, 0f4d4a13dc16, and a8faf6f15da7
 
immler 
parents: 
69680 
diff
changeset
 | 
511  | 
proof (cases x)  | 
| 
66456
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
512  | 
case (real r)  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
513  | 
show ?thesis  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
514  | 
apply (rule tendsto_add_ereal_general2) using real assms by auto  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
515  | 
next  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
516  | 
case (PInf)  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
517  | 
then have "y \<noteq> -\<infinity>" using assms by simp  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
518  | 
then show ?thesis using tendsto_add_ereal_PInf PInf assms by auto  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
519  | 
next  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
520  | 
case (MInf)  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
521  | 
then have "y \<noteq> \<infinity>" using assms by simp  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
522  | 
then show ?thesis using tendsto_add_ereal_MInf MInf f g by (metis ereal_MInfty_eq_plus)  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
523  | 
qed  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
524  | 
|
| 70136 | 525  | 
subsubsection\<^marker>\<open>tag important\<close> \<open>Continuity of multiplication\<close>  | 
| 
66456
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
526  | 
|
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
527  | 
text \<open>In the same way as for addition, we prove that the multiplication is continuous on  | 
| 69566 | 528  | 
ereal times ereal, except at \<open>(\<infinity>, 0)\<close> and \<open>(-\<infinity>, 0)\<close> and \<open>(0, \<infinity>)\<close> and \<open>(0, -\<infinity>)\<close>,  | 
| 
66456
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
529  | 
starting with specific situations.\<close>  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
530  | 
|
| 
69681
 
689997a8a582
redo tagging-related changes from a06b204527e6, 0f4d4a13dc16, and a8faf6f15da7
 
immler 
parents: 
69680 
diff
changeset
 | 
531  | 
lemma tendsto_mult_real_ereal:  | 
| 
66456
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
532  | 
assumes "(u \<longlongrightarrow> ereal l) F" "(v \<longlongrightarrow> ereal m) F"  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
533  | 
shows "((\<lambda>n. u n * v n) \<longlongrightarrow> ereal l * ereal m) F"  | 
| 
69681
 
689997a8a582
redo tagging-related changes from a06b204527e6, 0f4d4a13dc16, and a8faf6f15da7
 
immler 
parents: 
69680 
diff
changeset
 | 
534  | 
proof -  | 
| 
66456
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
535  | 
have ureal: "eventually (\<lambda>n. u n = ereal(real_of_ereal(u n))) F" by (rule real_lim_then_eventually_real[OF assms(1)])  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
536  | 
then have "((\<lambda>n. ereal(real_of_ereal(u n))) \<longlongrightarrow> ereal l) F" using assms by auto  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
537  | 
then have limu: "((\<lambda>n. real_of_ereal(u n)) \<longlongrightarrow> l) F" by auto  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
538  | 
have vreal: "eventually (\<lambda>n. v n = ereal(real_of_ereal(v n))) F" by (rule real_lim_then_eventually_real[OF assms(2)])  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
539  | 
then have "((\<lambda>n. ereal(real_of_ereal(v n))) \<longlongrightarrow> ereal m) F" using assms by auto  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
540  | 
then have limv: "((\<lambda>n. real_of_ereal(v n)) \<longlongrightarrow> m) F" by auto  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
541  | 
|
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
542  | 
  {
 | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
543  | 
fix n assume "u n = ereal(real_of_ereal(u n))" "v n = ereal(real_of_ereal(v n))"  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
544  | 
then have "ereal(real_of_ereal(u n) * real_of_ereal(v n)) = u n * v n" by (metis times_ereal.simps(1))  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
545  | 
}  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
546  | 
then have *: "eventually (\<lambda>n. ereal(real_of_ereal(u n) * real_of_ereal(v n)) = u n * v n) F"  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
547  | 
using eventually_elim2[OF ureal vreal] by auto  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
548  | 
|
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
549  | 
have "((\<lambda>n. real_of_ereal(u n) * real_of_ereal(v n)) \<longlongrightarrow> l * m) F" using tendsto_mult[OF limu limv] by auto  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
550  | 
then have "((\<lambda>n. ereal(real_of_ereal(u n)) * real_of_ereal(v n)) \<longlongrightarrow> ereal(l * m)) F" by auto  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
551  | 
then show ?thesis using * filterlim_cong by fastforce  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
552  | 
qed  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
553  | 
|
| 
69681
 
689997a8a582
redo tagging-related changes from a06b204527e6, 0f4d4a13dc16, and a8faf6f15da7
 
immler 
parents: 
69680 
diff
changeset
 | 
554  | 
lemma tendsto_mult_ereal_PInf:  | 
| 
66456
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
555  | 
fixes f g::"_ \<Rightarrow> ereal"  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
556  | 
assumes "(f \<longlongrightarrow> l) F" "l>0" "(g \<longlongrightarrow> \<infinity>) F"  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
557  | 
shows "((\<lambda>x. f x * g x) \<longlongrightarrow> \<infinity>) F"  | 
| 
69681
 
689997a8a582
redo tagging-related changes from a06b204527e6, 0f4d4a13dc16, and a8faf6f15da7
 
immler 
parents: 
69680 
diff
changeset
 | 
558  | 
proof -  | 
| 
66456
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
559  | 
obtain a::real where "0 < ereal a" "a < l" using assms(2) using ereal_dense2 by blast  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
560  | 
have *: "eventually (\<lambda>x. f x > a) F" using \<open>a < l\<close> assms(1) by (simp add: order_tendsto_iff)  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
561  | 
  {
 | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
562  | 
fix K::real  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
563  | 
define M where "M = max K 1"  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
564  | 
then have "M > 0" by simp  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
565  | 
then have "ereal(M/a) > 0" using \<open>ereal a > 0\<close> by simp  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
566  | 
then have "\<And>x. ((f x > a) \<and> (g x > M/a)) \<Longrightarrow> (f x * g x > ereal a * ereal(M/a))"  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
567  | 
using ereal_mult_mono_strict'[where ?c = "M/a", OF \<open>0 < ereal a\<close>] by auto  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
568  | 
moreover have "ereal a * ereal(M/a) = M" using \<open>ereal a > 0\<close> by simp  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
569  | 
ultimately have "\<And>x. ((f x > a) \<and> (g x > M/a)) \<Longrightarrow> (f x * g x > M)" by simp  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
570  | 
moreover have "M \<ge> K" unfolding M_def by simp  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
571  | 
ultimately have Imp: "\<And>x. ((f x > a) \<and> (g x > M/a)) \<Longrightarrow> (f x * g x > K)"  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
572  | 
using ereal_less_eq(3) le_less_trans by blast  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
573  | 
|
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
574  | 
have "eventually (\<lambda>x. g x > M/a) F" using assms(3) by (simp add: tendsto_PInfty)  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
575  | 
then have "eventually (\<lambda>x. (f x > a) \<and> (g x > M/a)) F"  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
576  | 
using * by (auto simp add: eventually_conj_iff)  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
577  | 
then have "eventually (\<lambda>x. f x * g x > K) F" using eventually_mono Imp by force  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
578  | 
}  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
579  | 
then show ?thesis by (auto simp add: tendsto_PInfty)  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
580  | 
qed  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
581  | 
|
| 
69681
 
689997a8a582
redo tagging-related changes from a06b204527e6, 0f4d4a13dc16, and a8faf6f15da7
 
immler 
parents: 
69680 
diff
changeset
 | 
582  | 
lemma tendsto_mult_ereal_pos:  | 
| 
66456
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
583  | 
fixes f g::"_ \<Rightarrow> ereal"  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
584  | 
assumes "(f \<longlongrightarrow> l) F" "(g \<longlongrightarrow> m) F" "l>0" "m>0"  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
585  | 
shows "((\<lambda>x. f x * g x) \<longlongrightarrow> l * m) F"  | 
| 
69681
 
689997a8a582
redo tagging-related changes from a06b204527e6, 0f4d4a13dc16, and a8faf6f15da7
 
immler 
parents: 
69680 
diff
changeset
 | 
586  | 
proof (cases)  | 
| 
66456
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
587  | 
assume *: "l = \<infinity> \<or> m = \<infinity>"  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
588  | 
then show ?thesis  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
589  | 
proof (cases)  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
590  | 
assume "m = \<infinity>"  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
591  | 
then show ?thesis using tendsto_mult_ereal_PInf assms by auto  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
592  | 
next  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
593  | 
assume "\<not>(m = \<infinity>)"  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
594  | 
then have "l = \<infinity>" using * by simp  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
595  | 
then have "((\<lambda>x. g x * f x) \<longlongrightarrow> l * m) F" using tendsto_mult_ereal_PInf assms by auto  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
596  | 
moreover have "\<And>x. g x * f x = f x * g x" using mult.commute by auto  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
597  | 
ultimately show ?thesis by simp  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
598  | 
qed  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
599  | 
next  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
600  | 
assume "\<not>(l = \<infinity> \<or> m = \<infinity>)"  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
601  | 
then have "l < \<infinity>" "m < \<infinity>" by auto  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
602  | 
then obtain lr mr where "l = ereal lr" "m = ereal mr"  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
603  | 
using \<open>l>0\<close> \<open>m>0\<close> by (metis ereal_cases ereal_less(6) not_less_iff_gr_or_eq)  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
604  | 
then show ?thesis using tendsto_mult_real_ereal assms by auto  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
605  | 
qed  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
606  | 
|
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
607  | 
text \<open>We reduce the general situation to the positive case by multiplying by suitable signs.  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
608  | 
Unfortunately, as ereal is not a ring, all the neat sign lemmas are not available there. We  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
609  | 
give the bare minimum we need.\<close>  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
610  | 
|
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
611  | 
lemma ereal_sgn_abs:  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
612  | 
fixes l::ereal  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
613  | 
shows "sgn(l) * l = abs(l)"  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
614  | 
apply (cases l) by (auto simp add: sgn_if ereal_less_uminus_reorder)  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
615  | 
|
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
616  | 
lemma sgn_squared_ereal:  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
617  | 
assumes "l \<noteq> (0::ereal)"  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
618  | 
shows "sgn(l) * sgn(l) = 1"  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
619  | 
apply (cases l) using assms by (auto simp add: one_ereal_def sgn_if)  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
620  | 
|
| 
69681
 
689997a8a582
redo tagging-related changes from a06b204527e6, 0f4d4a13dc16, and a8faf6f15da7
 
immler 
parents: 
69680 
diff
changeset
 | 
621  | 
lemma tendsto_mult_ereal [tendsto_intros]:  | 
| 
66456
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
622  | 
fixes f g::"_ \<Rightarrow> ereal"  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
623  | 
assumes "(f \<longlongrightarrow> l) F" "(g \<longlongrightarrow> m) F" "\<not>((l=0 \<and> abs(m) = \<infinity>) \<or> (m=0 \<and> abs(l) = \<infinity>))"  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
624  | 
shows "((\<lambda>x. f x * g x) \<longlongrightarrow> l * m) F"  | 
| 
69681
 
689997a8a582
redo tagging-related changes from a06b204527e6, 0f4d4a13dc16, and a8faf6f15da7
 
immler 
parents: 
69680 
diff
changeset
 | 
625  | 
proof (cases)  | 
| 
66456
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
626  | 
assume "l=0 \<or> m=0"  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
627  | 
then have "abs(l) \<noteq> \<infinity>" "abs(m) \<noteq> \<infinity>" using assms(3) by auto  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
628  | 
then obtain lr mr where "l = ereal lr" "m = ereal mr" by auto  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
629  | 
then show ?thesis using tendsto_mult_real_ereal assms by auto  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
630  | 
next  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
631  | 
have sgn_finite: "\<And>a::ereal. abs(sgn a) \<noteq> \<infinity>"  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
632  | 
by (metis MInfty_neq_ereal(2) PInfty_neq_ereal(2) abs_eq_infinity_cases ereal_times(1) ereal_times(3) ereal_uminus_eq_reorder sgn_ereal.elims)  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
633  | 
then have sgn_finite2: "\<And>a b::ereal. abs(sgn a * sgn b) \<noteq> \<infinity>"  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
634  | 
by (metis abs_eq_infinity_cases abs_ereal.simps(2) abs_ereal.simps(3) ereal_mult_eq_MInfty ereal_mult_eq_PInfty)  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
635  | 
assume "\<not>(l=0 \<or> m=0)"  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
636  | 
then have "l \<noteq> 0" "m \<noteq> 0" by auto  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
637  | 
then have "abs(l) > 0" "abs(m) > 0"  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
638  | 
by (metis abs_ereal_ge0 abs_ereal_less0 abs_ereal_pos ereal_uminus_uminus ereal_uminus_zero less_le not_less)+  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
639  | 
then have "sgn(l) * l > 0" "sgn(m) * m > 0" using ereal_sgn_abs by auto  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
640  | 
moreover have "((\<lambda>x. sgn(l) * f x) \<longlongrightarrow> (sgn(l) * l)) F"  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
641  | 
by (rule tendsto_cmult_ereal, auto simp add: sgn_finite assms(1))  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
642  | 
moreover have "((\<lambda>x. sgn(m) * g x) \<longlongrightarrow> (sgn(m) * m)) F"  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
643  | 
by (rule tendsto_cmult_ereal, auto simp add: sgn_finite assms(2))  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
644  | 
ultimately have *: "((\<lambda>x. (sgn(l) * f x) * (sgn(m) * g x)) \<longlongrightarrow> (sgn(l) * l) * (sgn(m) * m)) F"  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
645  | 
using tendsto_mult_ereal_pos by force  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
646  | 
have "((\<lambda>x. (sgn(l) * sgn(m)) * ((sgn(l) * f x) * (sgn(m) * g x))) \<longlongrightarrow> (sgn(l) * sgn(m)) * ((sgn(l) * l) * (sgn(m) * m))) F"  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
647  | 
by (rule tendsto_cmult_ereal, auto simp add: sgn_finite2 *)  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
648  | 
moreover have "\<And>x. (sgn(l) * sgn(m)) * ((sgn(l) * f x) * (sgn(m) * g x)) = f x * g x"  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
649  | 
by (metis mult.left_neutral sgn_squared_ereal[OF \<open>l \<noteq> 0\<close>] sgn_squared_ereal[OF \<open>m \<noteq> 0\<close>] mult.assoc mult.commute)  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
650  | 
moreover have "(sgn(l) * sgn(m)) * ((sgn(l) * l) * (sgn(m) * m)) = l * m"  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
651  | 
by (metis mult.left_neutral sgn_squared_ereal[OF \<open>l \<noteq> 0\<close>] sgn_squared_ereal[OF \<open>m \<noteq> 0\<close>] mult.assoc mult.commute)  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
652  | 
ultimately show ?thesis by auto  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
653  | 
qed  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
654  | 
|
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
655  | 
lemma tendsto_cmult_ereal_general [tendsto_intros]:  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
656  | 
fixes f::"_ \<Rightarrow> ereal" and c::ereal  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
657  | 
assumes "(f \<longlongrightarrow> l) F" "\<not> (l=0 \<and> abs(c) = \<infinity>)"  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
658  | 
shows "((\<lambda>x. c * f x) \<longlongrightarrow> c * l) F"  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
659  | 
by (cases "c = 0", auto simp add: assms tendsto_mult_ereal)  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
660  | 
|
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
661  | 
|
| 70136 | 662  | 
subsubsection\<^marker>\<open>tag important\<close> \<open>Continuity of division\<close>  | 
| 
66456
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
663  | 
|
| 
69681
 
689997a8a582
redo tagging-related changes from a06b204527e6, 0f4d4a13dc16, and a8faf6f15da7
 
immler 
parents: 
69680 
diff
changeset
 | 
664  | 
lemma tendsto_inverse_ereal_PInf:  | 
| 
66456
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
665  | 
fixes u::"_ \<Rightarrow> ereal"  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
666  | 
assumes "(u \<longlongrightarrow> \<infinity>) F"  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
667  | 
shows "((\<lambda>x. 1/ u x) \<longlongrightarrow> 0) F"  | 
| 
69681
 
689997a8a582
redo tagging-related changes from a06b204527e6, 0f4d4a13dc16, and a8faf6f15da7
 
immler 
parents: 
69680 
diff
changeset
 | 
668  | 
proof -  | 
| 
66456
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
669  | 
  {
 | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
670  | 
fix e::real assume "e>0"  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
671  | 
have "1/e < \<infinity>" by auto  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
672  | 
then have "eventually (\<lambda>n. u n > 1/e) F" using assms(1) by (simp add: tendsto_PInfty)  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
673  | 
moreover  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
674  | 
    {
 | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
675  | 
fix z::ereal assume "z>1/e"  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
676  | 
then have "z>0" using \<open>e>0\<close> using less_le_trans not_le by fastforce  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
677  | 
then have "1/z \<ge> 0" by auto  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
678  | 
moreover have "1/z < e" using \<open>e>0\<close> \<open>z>1/e\<close>  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
679  | 
apply (cases z) apply auto  | 
| 
73932
 
fd21b4a93043
added opaque_combs and renamed hide_lams to opaque_lifting
 
desharna 
parents: 
71633 
diff
changeset
 | 
680  | 
by (metis (mono_tags, opaque_lifting) less_ereal.simps(2) less_ereal.simps(4) divide_less_eq ereal_divide_less_pos ereal_less(4)  | 
| 
66456
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
681  | 
ereal_less_eq(4) less_le_trans mult_eq_0_iff not_le not_one_less_zero times_ereal.simps(1))  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
682  | 
ultimately have "1/z \<ge> 0" "1/z < e" by auto  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
683  | 
}  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
684  | 
ultimately have "eventually (\<lambda>n. 1/u n<e) F" "eventually (\<lambda>n. 1/u n\<ge>0) F" by (auto simp add: eventually_mono)  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
685  | 
} note * = this  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
686  | 
show ?thesis  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
687  | 
proof (subst order_tendsto_iff, auto)  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
688  | 
fix a::ereal assume "a<0"  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
689  | 
then show "eventually (\<lambda>n. 1/u n > a) F" using *(2) eventually_mono less_le_trans linordered_field_no_ub by fastforce  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
690  | 
next  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
691  | 
fix a::ereal assume "a>0"  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
692  | 
then obtain e::real where "e>0" "a>e" using ereal_dense2 ereal_less(2) by blast  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
693  | 
then have "eventually (\<lambda>n. 1/u n < e) F" using *(1) by auto  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
694  | 
then show "eventually (\<lambda>n. 1/u n < a) F" using \<open>a>e\<close> by (metis (mono_tags, lifting) eventually_mono less_trans)  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
695  | 
qed  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
696  | 
qed  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
697  | 
|
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
698  | 
text \<open>The next lemma deserves to exist by itself, as it is so common and useful.\<close>  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
699  | 
|
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
700  | 
lemma tendsto_inverse_real [tendsto_intros]:  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
701  | 
fixes u::"_ \<Rightarrow> real"  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
702  | 
shows "(u \<longlongrightarrow> l) F \<Longrightarrow> l \<noteq> 0 \<Longrightarrow> ((\<lambda>x. 1/ u x) \<longlongrightarrow> 1/l) F"  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
703  | 
using tendsto_inverse unfolding inverse_eq_divide .  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
704  | 
|
| 
69681
 
689997a8a582
redo tagging-related changes from a06b204527e6, 0f4d4a13dc16, and a8faf6f15da7
 
immler 
parents: 
69680 
diff
changeset
 | 
705  | 
lemma tendsto_inverse_ereal [tendsto_intros]:  | 
| 
66456
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
706  | 
fixes u::"_ \<Rightarrow> ereal"  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
707  | 
assumes "(u \<longlongrightarrow> l) F" "l \<noteq> 0"  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
708  | 
shows "((\<lambda>x. 1/ u x) \<longlongrightarrow> 1/l) F"  | 
| 
69681
 
689997a8a582
redo tagging-related changes from a06b204527e6, 0f4d4a13dc16, and a8faf6f15da7
 
immler 
parents: 
69680 
diff
changeset
 | 
709  | 
proof (cases l)  | 
| 
66456
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
710  | 
case (real r)  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
711  | 
then have "r \<noteq> 0" using assms(2) by auto  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
712  | 
then have "1/l = ereal(1/r)" using real by (simp add: one_ereal_def)  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
713  | 
define v where "v = (\<lambda>n. real_of_ereal(u n))"  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
714  | 
have ureal: "eventually (\<lambda>n. u n = ereal(v n)) F" unfolding v_def using real_lim_then_eventually_real assms(1) real by auto  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
715  | 
then have "((\<lambda>n. ereal(v n)) \<longlongrightarrow> ereal r) F" using assms real v_def by auto  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
716  | 
then have *: "((\<lambda>n. v n) \<longlongrightarrow> r) F" by auto  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
717  | 
then have "((\<lambda>n. 1/v n) \<longlongrightarrow> 1/r) F" using \<open>r \<noteq> 0\<close> tendsto_inverse_real by auto  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
718  | 
then have lim: "((\<lambda>n. ereal(1/v n)) \<longlongrightarrow> 1/l) F" using \<open>1/l = ereal(1/r)\<close> by auto  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
719  | 
|
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
720  | 
  have "r \<in> -{0}" "open (-{(0::real)})" using \<open>r \<noteq> 0\<close> by auto
 | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
721  | 
  then have "eventually (\<lambda>n. v n \<in> -{0}) F" using * using topological_tendstoD by blast
 | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
722  | 
then have "eventually (\<lambda>n. v n \<noteq> 0) F" by auto  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
723  | 
moreover  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
724  | 
  {
 | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
725  | 
fix n assume H: "v n \<noteq> 0" "u n = ereal(v n)"  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
726  | 
then have "ereal(1/v n) = 1/ereal(v n)" by (simp add: one_ereal_def)  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
727  | 
then have "ereal(1/v n) = 1/u n" using H(2) by simp  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
728  | 
}  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
729  | 
ultimately have "eventually (\<lambda>n. ereal(1/v n) = 1/u n) F" using ureal eventually_elim2 by force  | 
| 
70532
 
fcf3b891ccb1
new material; rotated premises of Lim_transform_eventually
 
paulson <lp15@cam.ac.uk> 
parents: 
70365 
diff
changeset
 | 
730  | 
with Lim_transform_eventually[OF lim this] show ?thesis by simp  | 
| 
66456
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
731  | 
next  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
732  | 
case (PInf)  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
733  | 
then have "1/l = 0" by auto  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
734  | 
then show ?thesis using tendsto_inverse_ereal_PInf assms PInf by auto  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
735  | 
next  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
736  | 
case (MInf)  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
737  | 
then have "1/l = 0" by auto  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
738  | 
have "1/z = -1/ -z" if "z < 0" for z::ereal  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
739  | 
apply (cases z) using divide_ereal_def \<open> z < 0 \<close> by auto  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
740  | 
moreover have "eventually (\<lambda>n. u n < 0) F" by (metis (no_types) MInf assms(1) tendsto_MInfty zero_ereal_def)  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
741  | 
ultimately have *: "eventually (\<lambda>n. -1/-u n = 1/u n) F" by (simp add: eventually_mono)  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
742  | 
|
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
743  | 
define v where "v = (\<lambda>n. - u n)"  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
744  | 
have "(v \<longlongrightarrow> \<infinity>) F" unfolding v_def using MInf assms(1) tendsto_uminus_ereal by fastforce  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
745  | 
then have "((\<lambda>n. 1/v n) \<longlongrightarrow> 0) F" using tendsto_inverse_ereal_PInf by auto  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
746  | 
then have "((\<lambda>n. -1/v n) \<longlongrightarrow> 0) F" using tendsto_uminus_ereal by fastforce  | 
| 
70532
 
fcf3b891ccb1
new material; rotated premises of Lim_transform_eventually
 
paulson <lp15@cam.ac.uk> 
parents: 
70365 
diff
changeset
 | 
747  | 
then show ?thesis unfolding v_def using Lim_transform_eventually[OF _ *] \<open> 1/l = 0 \<close> by auto  | 
| 
66456
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
748  | 
qed  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
749  | 
|
| 
69681
 
689997a8a582
redo tagging-related changes from a06b204527e6, 0f4d4a13dc16, and a8faf6f15da7
 
immler 
parents: 
69680 
diff
changeset
 | 
750  | 
lemma tendsto_divide_ereal [tendsto_intros]:  | 
| 
66456
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
751  | 
fixes f g::"_ \<Rightarrow> ereal"  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
752  | 
assumes "(f \<longlongrightarrow> l) F" "(g \<longlongrightarrow> m) F" "m \<noteq> 0" "\<not>(abs(l) = \<infinity> \<and> abs(m) = \<infinity>)"  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
753  | 
shows "((\<lambda>x. f x / g x) \<longlongrightarrow> l / m) F"  | 
| 
69681
 
689997a8a582
redo tagging-related changes from a06b204527e6, 0f4d4a13dc16, and a8faf6f15da7
 
immler 
parents: 
69680 
diff
changeset
 | 
754  | 
proof -  | 
| 
66456
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
755  | 
define h where "h = (\<lambda>x. 1/ g x)"  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
756  | 
have *: "(h \<longlongrightarrow> 1/m) F" unfolding h_def using assms(2) assms(3) tendsto_inverse_ereal by auto  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
757  | 
have "((\<lambda>x. f x * h x) \<longlongrightarrow> l * (1/m)) F"  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
758  | 
apply (rule tendsto_mult_ereal[OF assms(1) *]) using assms(3) assms(4) by (auto simp add: divide_ereal_def)  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
759  | 
moreover have "f x * h x = f x / g x" for x unfolding h_def by (simp add: divide_ereal_def)  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
760  | 
moreover have "l * (1/m) = l/m" by (simp add: divide_ereal_def)  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
761  | 
ultimately show ?thesis unfolding h_def using Lim_transform_eventually by auto  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
762  | 
qed  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
763  | 
|
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
764  | 
|
| 69683 | 765  | 
subsubsection \<open>Further limits\<close>  | 
| 
66456
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
766  | 
|
| 
67727
 
ce3e87a51488
moved Lipschitz continuity from AFP/Ordinary_Differential_Equations and AFP/Gromov_Hyperbolicity; moved lemmas from AFP/Gromov_Hyperbolicity/Library_Complements
 
immler 
parents: 
67613 
diff
changeset
 | 
767  | 
text \<open>The assumptions of @{thm tendsto_diff_ereal} are too strong, we weaken them here.\<close>
 | 
| 
 
ce3e87a51488
moved Lipschitz continuity from AFP/Ordinary_Differential_Equations and AFP/Gromov_Hyperbolicity; moved lemmas from AFP/Gromov_Hyperbolicity/Library_Complements
 
immler 
parents: 
67613 
diff
changeset
 | 
768  | 
|
| 
69681
 
689997a8a582
redo tagging-related changes from a06b204527e6, 0f4d4a13dc16, and a8faf6f15da7
 
immler 
parents: 
69680 
diff
changeset
 | 
769  | 
lemma tendsto_diff_ereal_general [tendsto_intros]:  | 
| 
67727
 
ce3e87a51488
moved Lipschitz continuity from AFP/Ordinary_Differential_Equations and AFP/Gromov_Hyperbolicity; moved lemmas from AFP/Gromov_Hyperbolicity/Library_Complements
 
immler 
parents: 
67613 
diff
changeset
 | 
770  | 
fixes u v::"'a \<Rightarrow> ereal"  | 
| 
 
ce3e87a51488
moved Lipschitz continuity from AFP/Ordinary_Differential_Equations and AFP/Gromov_Hyperbolicity; moved lemmas from AFP/Gromov_Hyperbolicity/Library_Complements
 
immler 
parents: 
67613 
diff
changeset
 | 
771  | 
assumes "(u \<longlongrightarrow> l) F" "(v \<longlongrightarrow> m) F" "\<not>((l = \<infinity> \<and> m = \<infinity>) \<or> (l = -\<infinity> \<and> m = -\<infinity>))"  | 
| 
 
ce3e87a51488
moved Lipschitz continuity from AFP/Ordinary_Differential_Equations and AFP/Gromov_Hyperbolicity; moved lemmas from AFP/Gromov_Hyperbolicity/Library_Complements
 
immler 
parents: 
67613 
diff
changeset
 | 
772  | 
shows "((\<lambda>n. u n - v n) \<longlongrightarrow> l - m) F"  | 
| 
69681
 
689997a8a582
redo tagging-related changes from a06b204527e6, 0f4d4a13dc16, and a8faf6f15da7
 
immler 
parents: 
69680 
diff
changeset
 | 
773  | 
proof -  | 
| 
67727
 
ce3e87a51488
moved Lipschitz continuity from AFP/Ordinary_Differential_Equations and AFP/Gromov_Hyperbolicity; moved lemmas from AFP/Gromov_Hyperbolicity/Library_Complements
 
immler 
parents: 
67613 
diff
changeset
 | 
774  | 
have "((\<lambda>n. u n + (-v n)) \<longlongrightarrow> l + (-m)) F"  | 
| 
 
ce3e87a51488
moved Lipschitz continuity from AFP/Ordinary_Differential_Equations and AFP/Gromov_Hyperbolicity; moved lemmas from AFP/Gromov_Hyperbolicity/Library_Complements
 
immler 
parents: 
67613 
diff
changeset
 | 
775  | 
apply (intro tendsto_intros assms) using assms by (auto simp add: ereal_uminus_eq_reorder)  | 
| 
 
ce3e87a51488
moved Lipschitz continuity from AFP/Ordinary_Differential_Equations and AFP/Gromov_Hyperbolicity; moved lemmas from AFP/Gromov_Hyperbolicity/Library_Complements
 
immler 
parents: 
67613 
diff
changeset
 | 
776  | 
then show ?thesis by (simp add: minus_ereal_def)  | 
| 
 
ce3e87a51488
moved Lipschitz continuity from AFP/Ordinary_Differential_Equations and AFP/Gromov_Hyperbolicity; moved lemmas from AFP/Gromov_Hyperbolicity/Library_Complements
 
immler 
parents: 
67613 
diff
changeset
 | 
777  | 
qed  | 
| 
 
ce3e87a51488
moved Lipschitz continuity from AFP/Ordinary_Differential_Equations and AFP/Gromov_Hyperbolicity; moved lemmas from AFP/Gromov_Hyperbolicity/Library_Complements
 
immler 
parents: 
67613 
diff
changeset
 | 
778  | 
|
| 
66456
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
779  | 
lemma id_nat_ereal_tendsto_PInf [tendsto_intros]:  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
780  | 
"(\<lambda> n::nat. real n) \<longlonglongrightarrow> \<infinity>"  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
781  | 
by (simp add: filterlim_real_sequentially tendsto_PInfty_eq_at_top)  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
782  | 
|
| 
69681
 
689997a8a582
redo tagging-related changes from a06b204527e6, 0f4d4a13dc16, and a8faf6f15da7
 
immler 
parents: 
69680 
diff
changeset
 | 
783  | 
lemma tendsto_at_top_pseudo_inverse [tendsto_intros]:  | 
| 
66456
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
784  | 
fixes u::"nat \<Rightarrow> nat"  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
785  | 
assumes "LIM n sequentially. u n :> at_top"  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
786  | 
  shows "LIM n sequentially. Inf {N. u N \<ge> n} :> at_top"
 | 
| 
69681
 
689997a8a582
redo tagging-related changes from a06b204527e6, 0f4d4a13dc16, and a8faf6f15da7
 
immler 
parents: 
69680 
diff
changeset
 | 
787  | 
proof -  | 
| 
66456
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
788  | 
  {
 | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
789  | 
fix C::nat  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
790  | 
    define M where "M = Max {u n| n. n \<le> C}+1"
 | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
791  | 
    {
 | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
792  | 
fix n assume "n \<ge> M"  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
793  | 
have "eventually (\<lambda>N. u N \<ge> n) sequentially" using assms  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
794  | 
by (simp add: filterlim_at_top)  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
795  | 
      then have *: "{N. u N \<ge> n} \<noteq> {}" by force
 | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
796  | 
|
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
797  | 
have "N > C" if "u N \<ge> n" for N  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
798  | 
proof (rule ccontr)  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
799  | 
assume "\<not>(N > C)"  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
800  | 
        have "u N \<le> Max {u n| n. n \<le> C}"
 | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
801  | 
apply (rule Max_ge) using \<open>\<not>(N > C)\<close> by auto  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
802  | 
then show False using \<open>u N \<ge> n\<close> \<open>n \<ge> M\<close> unfolding M_def by auto  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
803  | 
qed  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
804  | 
      then have **: "{N. u N \<ge> n} \<subseteq> {C..}" by fastforce
 | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
805  | 
      have "Inf {N. u N \<ge> n} \<ge> C"
 | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
806  | 
by (metis "*" "**" Inf_nat_def1 atLeast_iff subset_eq)  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
807  | 
}  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
808  | 
    then have "eventually (\<lambda>n. Inf {N. u N \<ge> n} \<ge> C) sequentially"
 | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
809  | 
using eventually_sequentially by auto  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
810  | 
}  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
811  | 
then show ?thesis using filterlim_at_top by auto  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
812  | 
qed  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
813  | 
|
| 
69681
 
689997a8a582
redo tagging-related changes from a06b204527e6, 0f4d4a13dc16, and a8faf6f15da7
 
immler 
parents: 
69680 
diff
changeset
 | 
814  | 
lemma pseudo_inverse_finite_set:  | 
| 
66456
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
815  | 
fixes u::"nat \<Rightarrow> nat"  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
816  | 
assumes "LIM n sequentially. u n :> at_top"  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
817  | 
  shows "finite {N. u N \<le> n}"
 | 
| 
69681
 
689997a8a582
redo tagging-related changes from a06b204527e6, 0f4d4a13dc16, and a8faf6f15da7
 
immler 
parents: 
69680 
diff
changeset
 | 
818  | 
proof -  | 
| 
66456
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
819  | 
fix n  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
820  | 
have "eventually (\<lambda>N. u N \<ge> n+1) sequentially" using assms  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
821  | 
by (simp add: filterlim_at_top)  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
822  | 
then obtain N1 where N1: "\<And>N. N \<ge> N1 \<Longrightarrow> u N \<ge> n + 1"  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
823  | 
using eventually_sequentially by auto  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
824  | 
  have "{N. u N \<le> n} \<subseteq> {..<N1}"
 | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
825  | 
apply auto using N1 by (metis Suc_eq_plus1 not_less not_less_eq_eq)  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
826  | 
  then show "finite {N. u N \<le> n}" by (simp add: finite_subset)
 | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
827  | 
qed  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
828  | 
|
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
829  | 
lemma tendsto_at_top_pseudo_inverse2 [tendsto_intros]:  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
830  | 
fixes u::"nat \<Rightarrow> nat"  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
831  | 
assumes "LIM n sequentially. u n :> at_top"  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
832  | 
  shows "LIM n sequentially. Max {N. u N \<le> n} :> at_top"
 | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
833  | 
proof -  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
834  | 
  {
 | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
835  | 
fix N0::nat  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
836  | 
    have "N0 \<le> Max {N. u N \<le> n}" if "n \<ge> u N0" for n
 | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
837  | 
apply (rule Max.coboundedI) using pseudo_inverse_finite_set[OF assms] that by auto  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
838  | 
    then have "eventually (\<lambda>n. N0 \<le> Max {N. u N \<le> n}) sequentially"
 | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
839  | 
using eventually_sequentially by blast  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
840  | 
}  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
841  | 
then show ?thesis using filterlim_at_top by auto  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
842  | 
qed  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
843  | 
|
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
844  | 
lemma ereal_truncation_top [tendsto_intros]:  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
845  | 
fixes x::ereal  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
846  | 
shows "(\<lambda>n::nat. min x n) \<longlonglongrightarrow> x"  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
847  | 
proof (cases x)  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
848  | 
case (real r)  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
849  | 
then obtain K::nat where "K>0" "K > abs(r)" using reals_Archimedean2 gr0I by auto  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
850  | 
then have "min x n = x" if "n \<ge> K" for n apply (subst real, subst real, auto) using that eq_iff by fastforce  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
851  | 
then have "eventually (\<lambda>n. min x n = x) sequentially" using eventually_at_top_linorder by blast  | 
| 
70365
 
4df0628e8545
a few new lemmas and a bit of tidying
 
paulson <lp15@cam.ac.uk> 
parents: 
70136 
diff
changeset
 | 
852  | 
then show ?thesis by (simp add: tendsto_eventually)  | 
| 
66456
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
853  | 
next  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
854  | 
case (PInf)  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
855  | 
then have "min x n = n" for n::nat by (auto simp add: min_def)  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
856  | 
then show ?thesis using id_nat_ereal_tendsto_PInf PInf by auto  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
857  | 
next  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
858  | 
case (MInf)  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
859  | 
then have "min x n = x" for n::nat by (auto simp add: min_def)  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
860  | 
then show ?thesis by auto  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
861  | 
qed  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
862  | 
|
| 
69681
 
689997a8a582
redo tagging-related changes from a06b204527e6, 0f4d4a13dc16, and a8faf6f15da7
 
immler 
parents: 
69680 
diff
changeset
 | 
863  | 
lemma ereal_truncation_real_top [tendsto_intros]:  | 
| 
66456
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
864  | 
fixes x::ereal  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
865  | 
assumes "x \<noteq> - \<infinity>"  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
866  | 
shows "(\<lambda>n::nat. real_of_ereal(min x n)) \<longlonglongrightarrow> x"  | 
| 
69681
 
689997a8a582
redo tagging-related changes from a06b204527e6, 0f4d4a13dc16, and a8faf6f15da7
 
immler 
parents: 
69680 
diff
changeset
 | 
867  | 
proof (cases x)  | 
| 
66456
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
868  | 
case (real r)  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
869  | 
then obtain K::nat where "K>0" "K > abs(r)" using reals_Archimedean2 gr0I by auto  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
870  | 
then have "min x n = x" if "n \<ge> K" for n apply (subst real, subst real, auto) using that eq_iff by fastforce  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
871  | 
then have "real_of_ereal(min x n) = r" if "n \<ge> K" for n using real that by auto  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
872  | 
then have "eventually (\<lambda>n. real_of_ereal(min x n) = r) sequentially" using eventually_at_top_linorder by blast  | 
| 
70365
 
4df0628e8545
a few new lemmas and a bit of tidying
 
paulson <lp15@cam.ac.uk> 
parents: 
70136 
diff
changeset
 | 
873  | 
then have "(\<lambda>n. real_of_ereal(min x n)) \<longlonglongrightarrow> r" by (simp add: tendsto_eventually)  | 
| 
66456
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
874  | 
then show ?thesis using real by auto  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
875  | 
next  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
876  | 
case (PInf)  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
877  | 
then have "real_of_ereal(min x n) = n" for n::nat by (auto simp add: min_def)  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
878  | 
then show ?thesis using id_nat_ereal_tendsto_PInf PInf by auto  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
879  | 
qed (simp add: assms)  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
880  | 
|
| 
69681
 
689997a8a582
redo tagging-related changes from a06b204527e6, 0f4d4a13dc16, and a8faf6f15da7
 
immler 
parents: 
69680 
diff
changeset
 | 
881  | 
lemma ereal_truncation_bottom [tendsto_intros]:  | 
| 
66456
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
882  | 
fixes x::ereal  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
883  | 
shows "(\<lambda>n::nat. max x (- real n)) \<longlonglongrightarrow> x"  | 
| 
69681
 
689997a8a582
redo tagging-related changes from a06b204527e6, 0f4d4a13dc16, and a8faf6f15da7
 
immler 
parents: 
69680 
diff
changeset
 | 
884  | 
proof (cases x)  | 
| 
66456
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
885  | 
case (real r)  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
886  | 
then obtain K::nat where "K>0" "K > abs(r)" using reals_Archimedean2 gr0I by auto  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
887  | 
then have "max x (-real n) = x" if "n \<ge> K" for n apply (subst real, subst real, auto) using that eq_iff by fastforce  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
888  | 
then have "eventually (\<lambda>n. max x (-real n) = x) sequentially" using eventually_at_top_linorder by blast  | 
| 
70365
 
4df0628e8545
a few new lemmas and a bit of tidying
 
paulson <lp15@cam.ac.uk> 
parents: 
70136 
diff
changeset
 | 
889  | 
then show ?thesis by (simp add: tendsto_eventually)  | 
| 
66456
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
890  | 
next  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
891  | 
case (MInf)  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
892  | 
then have "max x (-real n) = (-1)* ereal(real n)" for n::nat by (auto simp add: max_def)  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
893  | 
moreover have "(\<lambda>n. (-1)* ereal(real n)) \<longlonglongrightarrow> -\<infinity>"  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
894  | 
using tendsto_cmult_ereal[of "-1", OF _ id_nat_ereal_tendsto_PInf] by (simp add: one_ereal_def)  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
895  | 
ultimately show ?thesis using MInf by auto  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
896  | 
next  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
897  | 
case (PInf)  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
898  | 
then have "max x (-real n) = x" for n::nat by (auto simp add: max_def)  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
899  | 
then show ?thesis by auto  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
900  | 
qed  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
901  | 
|
| 
69681
 
689997a8a582
redo tagging-related changes from a06b204527e6, 0f4d4a13dc16, and a8faf6f15da7
 
immler 
parents: 
69680 
diff
changeset
 | 
902  | 
lemma ereal_truncation_real_bottom [tendsto_intros]:  | 
| 
66456
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
903  | 
fixes x::ereal  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
904  | 
assumes "x \<noteq> \<infinity>"  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
905  | 
shows "(\<lambda>n::nat. real_of_ereal(max x (- real n))) \<longlonglongrightarrow> x"  | 
| 
69681
 
689997a8a582
redo tagging-related changes from a06b204527e6, 0f4d4a13dc16, and a8faf6f15da7
 
immler 
parents: 
69680 
diff
changeset
 | 
906  | 
proof (cases x)  | 
| 
66456
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
907  | 
case (real r)  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
908  | 
then obtain K::nat where "K>0" "K > abs(r)" using reals_Archimedean2 gr0I by auto  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
909  | 
then have "max x (-real n) = x" if "n \<ge> K" for n apply (subst real, subst real, auto) using that eq_iff by fastforce  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
910  | 
then have "real_of_ereal(max x (-real n)) = r" if "n \<ge> K" for n using real that by auto  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
911  | 
then have "eventually (\<lambda>n. real_of_ereal(max x (-real n)) = r) sequentially" using eventually_at_top_linorder by blast  | 
| 
70365
 
4df0628e8545
a few new lemmas and a bit of tidying
 
paulson <lp15@cam.ac.uk> 
parents: 
70136 
diff
changeset
 | 
912  | 
then have "(\<lambda>n. real_of_ereal(max x (-real n))) \<longlonglongrightarrow> r" by (simp add: tendsto_eventually)  | 
| 
66456
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
913  | 
then show ?thesis using real by auto  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
914  | 
next  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
915  | 
case (MInf)  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
916  | 
then have "real_of_ereal(max x (-real n)) = (-1)* ereal(real n)" for n::nat by (auto simp add: max_def)  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
917  | 
moreover have "(\<lambda>n. (-1)* ereal(real n)) \<longlonglongrightarrow> -\<infinity>"  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
918  | 
using tendsto_cmult_ereal[of "-1", OF _ id_nat_ereal_tendsto_PInf] by (simp add: one_ereal_def)  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
919  | 
ultimately show ?thesis using MInf by auto  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
920  | 
qed (simp add: assms)  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
921  | 
|
| 69566 | 922  | 
text \<open>the next one is copied from \<open>tendsto_sum\<close>.\<close>  | 
| 
66456
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
923  | 
lemma tendsto_sum_ereal [tendsto_intros]:  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
924  | 
fixes f :: "'a \<Rightarrow> 'b \<Rightarrow> ereal"  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
925  | 
assumes "\<And>i. i \<in> S \<Longrightarrow> (f i \<longlongrightarrow> a i) F"  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
926  | 
"\<And>i. abs(a i) \<noteq> \<infinity>"  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
927  | 
shows "((\<lambda>x. \<Sum>i\<in>S. f i x) \<longlongrightarrow> (\<Sum>i\<in>S. a i)) F"  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
928  | 
proof (cases "finite S")  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
929  | 
assume "finite S" then show ?thesis using assms  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
930  | 
by (induct, simp, simp add: tendsto_add_ereal_general2 assms)  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
931  | 
qed(simp)  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
932  | 
|
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
933  | 
|
| 
69681
 
689997a8a582
redo tagging-related changes from a06b204527e6, 0f4d4a13dc16, and a8faf6f15da7
 
immler 
parents: 
69680 
diff
changeset
 | 
934  | 
lemma continuous_ereal_abs:  | 
| 
67727
 
ce3e87a51488
moved Lipschitz continuity from AFP/Ordinary_Differential_Equations and AFP/Gromov_Hyperbolicity; moved lemmas from AFP/Gromov_Hyperbolicity/Library_Complements
 
immler 
parents: 
67613 
diff
changeset
 | 
935  | 
"continuous_on (UNIV::ereal set) abs"  | 
| 
69681
 
689997a8a582
redo tagging-related changes from a06b204527e6, 0f4d4a13dc16, and a8faf6f15da7
 
immler 
parents: 
69680 
diff
changeset
 | 
936  | 
proof -  | 
| 
67727
 
ce3e87a51488
moved Lipschitz continuity from AFP/Ordinary_Differential_Equations and AFP/Gromov_Hyperbolicity; moved lemmas from AFP/Gromov_Hyperbolicity/Library_Complements
 
immler 
parents: 
67613 
diff
changeset
 | 
937  | 
  have "continuous_on ({..0} \<union> {(0::ereal)..}) abs"
 | 
| 
 
ce3e87a51488
moved Lipschitz continuity from AFP/Ordinary_Differential_Equations and AFP/Gromov_Hyperbolicity; moved lemmas from AFP/Gromov_Hyperbolicity/Library_Complements
 
immler 
parents: 
67613 
diff
changeset
 | 
938  | 
apply (rule continuous_on_closed_Un, auto)  | 
| 
 
ce3e87a51488
moved Lipschitz continuity from AFP/Ordinary_Differential_Equations and AFP/Gromov_Hyperbolicity; moved lemmas from AFP/Gromov_Hyperbolicity/Library_Complements
 
immler 
parents: 
67613 
diff
changeset
 | 
939  | 
    apply (rule iffD1[OF continuous_on_cong, of "{..0}" _ "\<lambda>x. -x"])
 | 
| 
 
ce3e87a51488
moved Lipschitz continuity from AFP/Ordinary_Differential_Equations and AFP/Gromov_Hyperbolicity; moved lemmas from AFP/Gromov_Hyperbolicity/Library_Complements
 
immler 
parents: 
67613 
diff
changeset
 | 
940  | 
using less_eq_ereal_def apply (auto simp add: continuous_uminus_ereal)  | 
| 
 
ce3e87a51488
moved Lipschitz continuity from AFP/Ordinary_Differential_Equations and AFP/Gromov_Hyperbolicity; moved lemmas from AFP/Gromov_Hyperbolicity/Library_Complements
 
immler 
parents: 
67613 
diff
changeset
 | 
941  | 
    apply (rule iffD1[OF continuous_on_cong, of "{0..}" _ "\<lambda>x. x"])
 | 
| 71172 | 942  | 
apply (auto)  | 
| 
67727
 
ce3e87a51488
moved Lipschitz continuity from AFP/Ordinary_Differential_Equations and AFP/Gromov_Hyperbolicity; moved lemmas from AFP/Gromov_Hyperbolicity/Library_Complements
 
immler 
parents: 
67613 
diff
changeset
 | 
943  | 
done  | 
| 
 
ce3e87a51488
moved Lipschitz continuity from AFP/Ordinary_Differential_Equations and AFP/Gromov_Hyperbolicity; moved lemmas from AFP/Gromov_Hyperbolicity/Library_Complements
 
immler 
parents: 
67613 
diff
changeset
 | 
944  | 
  moreover have "(UNIV::ereal set) = {..0} \<union> {(0::ereal)..}" by auto
 | 
| 
 
ce3e87a51488
moved Lipschitz continuity from AFP/Ordinary_Differential_Equations and AFP/Gromov_Hyperbolicity; moved lemmas from AFP/Gromov_Hyperbolicity/Library_Complements
 
immler 
parents: 
67613 
diff
changeset
 | 
945  | 
ultimately show ?thesis by auto  | 
| 
 
ce3e87a51488
moved Lipschitz continuity from AFP/Ordinary_Differential_Equations and AFP/Gromov_Hyperbolicity; moved lemmas from AFP/Gromov_Hyperbolicity/Library_Complements
 
immler 
parents: 
67613 
diff
changeset
 | 
946  | 
qed  | 
| 
 
ce3e87a51488
moved Lipschitz continuity from AFP/Ordinary_Differential_Equations and AFP/Gromov_Hyperbolicity; moved lemmas from AFP/Gromov_Hyperbolicity/Library_Complements
 
immler 
parents: 
67613 
diff
changeset
 | 
947  | 
|
| 
 
ce3e87a51488
moved Lipschitz continuity from AFP/Ordinary_Differential_Equations and AFP/Gromov_Hyperbolicity; moved lemmas from AFP/Gromov_Hyperbolicity/Library_Complements
 
immler 
parents: 
67613 
diff
changeset
 | 
948  | 
lemmas continuous_on_compose_ereal_abs[continuous_intros] =  | 
| 
 
ce3e87a51488
moved Lipschitz continuity from AFP/Ordinary_Differential_Equations and AFP/Gromov_Hyperbolicity; moved lemmas from AFP/Gromov_Hyperbolicity/Library_Complements
 
immler 
parents: 
67613 
diff
changeset
 | 
949  | 
continuous_on_compose2[OF continuous_ereal_abs _ subset_UNIV]  | 
| 
 
ce3e87a51488
moved Lipschitz continuity from AFP/Ordinary_Differential_Equations and AFP/Gromov_Hyperbolicity; moved lemmas from AFP/Gromov_Hyperbolicity/Library_Complements
 
immler 
parents: 
67613 
diff
changeset
 | 
950  | 
|
| 
 
ce3e87a51488
moved Lipschitz continuity from AFP/Ordinary_Differential_Equations and AFP/Gromov_Hyperbolicity; moved lemmas from AFP/Gromov_Hyperbolicity/Library_Complements
 
immler 
parents: 
67613 
diff
changeset
 | 
951  | 
lemma tendsto_abs_ereal [tendsto_intros]:  | 
| 
 
ce3e87a51488
moved Lipschitz continuity from AFP/Ordinary_Differential_Equations and AFP/Gromov_Hyperbolicity; moved lemmas from AFP/Gromov_Hyperbolicity/Library_Complements
 
immler 
parents: 
67613 
diff
changeset
 | 
952  | 
assumes "(u \<longlongrightarrow> (l::ereal)) F"  | 
| 
 
ce3e87a51488
moved Lipschitz continuity from AFP/Ordinary_Differential_Equations and AFP/Gromov_Hyperbolicity; moved lemmas from AFP/Gromov_Hyperbolicity/Library_Complements
 
immler 
parents: 
67613 
diff
changeset
 | 
953  | 
shows "((\<lambda>n. abs(u n)) \<longlongrightarrow> abs l) F"  | 
| 
 
ce3e87a51488
moved Lipschitz continuity from AFP/Ordinary_Differential_Equations and AFP/Gromov_Hyperbolicity; moved lemmas from AFP/Gromov_Hyperbolicity/Library_Complements
 
immler 
parents: 
67613 
diff
changeset
 | 
954  | 
using continuous_ereal_abs assms by (metis UNIV_I continuous_on tendsto_compose)  | 
| 
 
ce3e87a51488
moved Lipschitz continuity from AFP/Ordinary_Differential_Equations and AFP/Gromov_Hyperbolicity; moved lemmas from AFP/Gromov_Hyperbolicity/Library_Complements
 
immler 
parents: 
67613 
diff
changeset
 | 
955  | 
|
| 
 
ce3e87a51488
moved Lipschitz continuity from AFP/Ordinary_Differential_Equations and AFP/Gromov_Hyperbolicity; moved lemmas from AFP/Gromov_Hyperbolicity/Library_Complements
 
immler 
parents: 
67613 
diff
changeset
 | 
956  | 
lemma ereal_minus_real_tendsto_MInf [tendsto_intros]:  | 
| 
 
ce3e87a51488
moved Lipschitz continuity from AFP/Ordinary_Differential_Equations and AFP/Gromov_Hyperbolicity; moved lemmas from AFP/Gromov_Hyperbolicity/Library_Complements
 
immler 
parents: 
67613 
diff
changeset
 | 
957  | 
"(\<lambda>x. ereal (- real x)) \<longlonglongrightarrow> - \<infinity>"  | 
| 
 
ce3e87a51488
moved Lipschitz continuity from AFP/Ordinary_Differential_Equations and AFP/Gromov_Hyperbolicity; moved lemmas from AFP/Gromov_Hyperbolicity/Library_Complements
 
immler 
parents: 
67613 
diff
changeset
 | 
958  | 
by (subst uminus_ereal.simps(1)[symmetric], intro tendsto_intros)  | 
| 
 
ce3e87a51488
moved Lipschitz continuity from AFP/Ordinary_Differential_Equations and AFP/Gromov_Hyperbolicity; moved lemmas from AFP/Gromov_Hyperbolicity/Library_Complements
 
immler 
parents: 
67613 
diff
changeset
 | 
959  | 
|
| 
 
ce3e87a51488
moved Lipschitz continuity from AFP/Ordinary_Differential_Equations and AFP/Gromov_Hyperbolicity; moved lemmas from AFP/Gromov_Hyperbolicity/Library_Complements
 
immler 
parents: 
67613 
diff
changeset
 | 
960  | 
|
| 69683 | 961  | 
subsection \<open>Extended-Nonnegative-Real.thy\<close> (*FIX title *)  | 
| 
67727
 
ce3e87a51488
moved Lipschitz continuity from AFP/Ordinary_Differential_Equations and AFP/Gromov_Hyperbolicity; moved lemmas from AFP/Gromov_Hyperbolicity/Library_Complements
 
immler 
parents: 
67613 
diff
changeset
 | 
962  | 
|
| 
 
ce3e87a51488
moved Lipschitz continuity from AFP/Ordinary_Differential_Equations and AFP/Gromov_Hyperbolicity; moved lemmas from AFP/Gromov_Hyperbolicity/Library_Complements
 
immler 
parents: 
67613 
diff
changeset
 | 
963  | 
lemma tendsto_diff_ennreal_general [tendsto_intros]:  | 
| 
 
ce3e87a51488
moved Lipschitz continuity from AFP/Ordinary_Differential_Equations and AFP/Gromov_Hyperbolicity; moved lemmas from AFP/Gromov_Hyperbolicity/Library_Complements
 
immler 
parents: 
67613 
diff
changeset
 | 
964  | 
fixes u v::"'a \<Rightarrow> ennreal"  | 
| 
 
ce3e87a51488
moved Lipschitz continuity from AFP/Ordinary_Differential_Equations and AFP/Gromov_Hyperbolicity; moved lemmas from AFP/Gromov_Hyperbolicity/Library_Complements
 
immler 
parents: 
67613 
diff
changeset
 | 
965  | 
assumes "(u \<longlongrightarrow> l) F" "(v \<longlongrightarrow> m) F" "\<not>(l = \<infinity> \<and> m = \<infinity>)"  | 
| 
 
ce3e87a51488
moved Lipschitz continuity from AFP/Ordinary_Differential_Equations and AFP/Gromov_Hyperbolicity; moved lemmas from AFP/Gromov_Hyperbolicity/Library_Complements
 
immler 
parents: 
67613 
diff
changeset
 | 
966  | 
shows "((\<lambda>n. u n - v n) \<longlongrightarrow> l - m) F"  | 
| 
 
ce3e87a51488
moved Lipschitz continuity from AFP/Ordinary_Differential_Equations and AFP/Gromov_Hyperbolicity; moved lemmas from AFP/Gromov_Hyperbolicity/Library_Complements
 
immler 
parents: 
67613 
diff
changeset
 | 
967  | 
proof -  | 
| 
 
ce3e87a51488
moved Lipschitz continuity from AFP/Ordinary_Differential_Equations and AFP/Gromov_Hyperbolicity; moved lemmas from AFP/Gromov_Hyperbolicity/Library_Complements
 
immler 
parents: 
67613 
diff
changeset
 | 
968  | 
have "((\<lambda>n. e2ennreal(enn2ereal(u n) - enn2ereal(v n))) \<longlongrightarrow> e2ennreal(enn2ereal l - enn2ereal m)) F"  | 
| 
 
ce3e87a51488
moved Lipschitz continuity from AFP/Ordinary_Differential_Equations and AFP/Gromov_Hyperbolicity; moved lemmas from AFP/Gromov_Hyperbolicity/Library_Complements
 
immler 
parents: 
67613 
diff
changeset
 | 
969  | 
apply (intro tendsto_intros) using assms by auto  | 
| 
 
ce3e87a51488
moved Lipschitz continuity from AFP/Ordinary_Differential_Equations and AFP/Gromov_Hyperbolicity; moved lemmas from AFP/Gromov_Hyperbolicity/Library_Complements
 
immler 
parents: 
67613 
diff
changeset
 | 
970  | 
then show ?thesis by auto  | 
| 
 
ce3e87a51488
moved Lipschitz continuity from AFP/Ordinary_Differential_Equations and AFP/Gromov_Hyperbolicity; moved lemmas from AFP/Gromov_Hyperbolicity/Library_Complements
 
immler 
parents: 
67613 
diff
changeset
 | 
971  | 
qed  | 
| 
 
ce3e87a51488
moved Lipschitz continuity from AFP/Ordinary_Differential_Equations and AFP/Gromov_Hyperbolicity; moved lemmas from AFP/Gromov_Hyperbolicity/Library_Complements
 
immler 
parents: 
67613 
diff
changeset
 | 
972  | 
|
| 
69681
 
689997a8a582
redo tagging-related changes from a06b204527e6, 0f4d4a13dc16, and a8faf6f15da7
 
immler 
parents: 
69680 
diff
changeset
 | 
973  | 
lemma tendsto_mult_ennreal [tendsto_intros]:  | 
| 
67727
 
ce3e87a51488
moved Lipschitz continuity from AFP/Ordinary_Differential_Equations and AFP/Gromov_Hyperbolicity; moved lemmas from AFP/Gromov_Hyperbolicity/Library_Complements
 
immler 
parents: 
67613 
diff
changeset
 | 
974  | 
fixes l m::ennreal  | 
| 
 
ce3e87a51488
moved Lipschitz continuity from AFP/Ordinary_Differential_Equations and AFP/Gromov_Hyperbolicity; moved lemmas from AFP/Gromov_Hyperbolicity/Library_Complements
 
immler 
parents: 
67613 
diff
changeset
 | 
975  | 
assumes "(u \<longlongrightarrow> l) F" "(v \<longlongrightarrow> m) F" "\<not>((l = 0 \<and> m = \<infinity>) \<or> (l = \<infinity> \<and> m = 0))"  | 
| 
 
ce3e87a51488
moved Lipschitz continuity from AFP/Ordinary_Differential_Equations and AFP/Gromov_Hyperbolicity; moved lemmas from AFP/Gromov_Hyperbolicity/Library_Complements
 
immler 
parents: 
67613 
diff
changeset
 | 
976  | 
shows "((\<lambda>n. u n * v n) \<longlongrightarrow> l * m) F"  | 
| 
69681
 
689997a8a582
redo tagging-related changes from a06b204527e6, 0f4d4a13dc16, and a8faf6f15da7
 
immler 
parents: 
69680 
diff
changeset
 | 
977  | 
proof -  | 
| 
67727
 
ce3e87a51488
moved Lipschitz continuity from AFP/Ordinary_Differential_Equations and AFP/Gromov_Hyperbolicity; moved lemmas from AFP/Gromov_Hyperbolicity/Library_Complements
 
immler 
parents: 
67613 
diff
changeset
 | 
978  | 
have "((\<lambda>n. e2ennreal(enn2ereal (u n) * enn2ereal (v n))) \<longlongrightarrow> e2ennreal(enn2ereal l * enn2ereal m)) F"  | 
| 
 
ce3e87a51488
moved Lipschitz continuity from AFP/Ordinary_Differential_Equations and AFP/Gromov_Hyperbolicity; moved lemmas from AFP/Gromov_Hyperbolicity/Library_Complements
 
immler 
parents: 
67613 
diff
changeset
 | 
979  | 
apply (intro tendsto_intros) using assms apply auto  | 
| 
 
ce3e87a51488
moved Lipschitz continuity from AFP/Ordinary_Differential_Equations and AFP/Gromov_Hyperbolicity; moved lemmas from AFP/Gromov_Hyperbolicity/Library_Complements
 
immler 
parents: 
67613 
diff
changeset
 | 
980  | 
using enn2ereal_inject zero_ennreal.rep_eq by fastforce+  | 
| 
 
ce3e87a51488
moved Lipschitz continuity from AFP/Ordinary_Differential_Equations and AFP/Gromov_Hyperbolicity; moved lemmas from AFP/Gromov_Hyperbolicity/Library_Complements
 
immler 
parents: 
67613 
diff
changeset
 | 
981  | 
moreover have "e2ennreal(enn2ereal (u n) * enn2ereal (v n)) = u n * v n" for n  | 
| 
 
ce3e87a51488
moved Lipschitz continuity from AFP/Ordinary_Differential_Equations and AFP/Gromov_Hyperbolicity; moved lemmas from AFP/Gromov_Hyperbolicity/Library_Complements
 
immler 
parents: 
67613 
diff
changeset
 | 
982  | 
by (subst times_ennreal.abs_eq[symmetric], auto simp add: eq_onp_same_args)  | 
| 
 
ce3e87a51488
moved Lipschitz continuity from AFP/Ordinary_Differential_Equations and AFP/Gromov_Hyperbolicity; moved lemmas from AFP/Gromov_Hyperbolicity/Library_Complements
 
immler 
parents: 
67613 
diff
changeset
 | 
983  | 
moreover have "e2ennreal(enn2ereal l * enn2ereal m) = l * m"  | 
| 
 
ce3e87a51488
moved Lipschitz continuity from AFP/Ordinary_Differential_Equations and AFP/Gromov_Hyperbolicity; moved lemmas from AFP/Gromov_Hyperbolicity/Library_Complements
 
immler 
parents: 
67613 
diff
changeset
 | 
984  | 
by (subst times_ennreal.abs_eq[symmetric], auto simp add: eq_onp_same_args)  | 
| 
 
ce3e87a51488
moved Lipschitz continuity from AFP/Ordinary_Differential_Equations and AFP/Gromov_Hyperbolicity; moved lemmas from AFP/Gromov_Hyperbolicity/Library_Complements
 
immler 
parents: 
67613 
diff
changeset
 | 
985  | 
ultimately show ?thesis  | 
| 
 
ce3e87a51488
moved Lipschitz continuity from AFP/Ordinary_Differential_Equations and AFP/Gromov_Hyperbolicity; moved lemmas from AFP/Gromov_Hyperbolicity/Library_Complements
 
immler 
parents: 
67613 
diff
changeset
 | 
986  | 
by auto  | 
| 
 
ce3e87a51488
moved Lipschitz continuity from AFP/Ordinary_Differential_Equations and AFP/Gromov_Hyperbolicity; moved lemmas from AFP/Gromov_Hyperbolicity/Library_Complements
 
immler 
parents: 
67613 
diff
changeset
 | 
987  | 
qed  | 
| 
 
ce3e87a51488
moved Lipschitz continuity from AFP/Ordinary_Differential_Equations and AFP/Gromov_Hyperbolicity; moved lemmas from AFP/Gromov_Hyperbolicity/Library_Complements
 
immler 
parents: 
67613 
diff
changeset
 | 
988  | 
|
| 
 
ce3e87a51488
moved Lipschitz continuity from AFP/Ordinary_Differential_Equations and AFP/Gromov_Hyperbolicity; moved lemmas from AFP/Gromov_Hyperbolicity/Library_Complements
 
immler 
parents: 
67613 
diff
changeset
 | 
989  | 
|
| 69683 | 990  | 
subsection \<open>monoset\<close> (*FIX ME title *)  | 
| 
51340
 
5e6296afe08d
move Liminf / Limsup lemmas on complete_lattices to its own file
 
hoelzl 
parents: 
51329 
diff
changeset
 | 
991  | 
|
| 
69681
 
689997a8a582
redo tagging-related changes from a06b204527e6, 0f4d4a13dc16, and a8faf6f15da7
 
immler 
parents: 
69680 
diff
changeset
 | 
992  | 
definition (in order) mono_set:  | 
| 
51340
 
5e6296afe08d
move Liminf / Limsup lemmas on complete_lattices to its own file
 
hoelzl 
parents: 
51329 
diff
changeset
 | 
993  | 
"mono_set S \<longleftrightarrow> (\<forall>x y. x \<le> y \<longrightarrow> x \<in> S \<longrightarrow> y \<in> S)"  | 
| 
 
5e6296afe08d
move Liminf / Limsup lemmas on complete_lattices to its own file
 
hoelzl 
parents: 
51329 
diff
changeset
 | 
994  | 
|
| 
 
5e6296afe08d
move Liminf / Limsup lemmas on complete_lattices to its own file
 
hoelzl 
parents: 
51329 
diff
changeset
 | 
995  | 
lemma (in order) mono_greaterThan [intro, simp]: "mono_set {B<..}" unfolding mono_set by auto
 | 
| 
 
5e6296afe08d
move Liminf / Limsup lemmas on complete_lattices to its own file
 
hoelzl 
parents: 
51329 
diff
changeset
 | 
996  | 
lemma (in order) mono_atLeast [intro, simp]: "mono_set {B..}" unfolding mono_set by auto
 | 
| 
 
5e6296afe08d
move Liminf / Limsup lemmas on complete_lattices to its own file
 
hoelzl 
parents: 
51329 
diff
changeset
 | 
997  | 
lemma (in order) mono_UNIV [intro, simp]: "mono_set UNIV" unfolding mono_set by auto  | 
| 
 
5e6296afe08d
move Liminf / Limsup lemmas on complete_lattices to its own file
 
hoelzl 
parents: 
51329 
diff
changeset
 | 
998  | 
lemma (in order) mono_empty [intro, simp]: "mono_set {}" unfolding mono_set by auto
 | 
| 
 
5e6296afe08d
move Liminf / Limsup lemmas on complete_lattices to its own file
 
hoelzl 
parents: 
51329 
diff
changeset
 | 
999  | 
|
| 
69681
 
689997a8a582
redo tagging-related changes from a06b204527e6, 0f4d4a13dc16, and a8faf6f15da7
 
immler 
parents: 
69680 
diff
changeset
 | 
1000  | 
lemma (in complete_linorder) mono_set_iff:  | 
| 
51340
 
5e6296afe08d
move Liminf / Limsup lemmas on complete_lattices to its own file
 
hoelzl 
parents: 
51329 
diff
changeset
 | 
1001  | 
fixes S :: "'a set"  | 
| 
 
5e6296afe08d
move Liminf / Limsup lemmas on complete_lattices to its own file
 
hoelzl 
parents: 
51329 
diff
changeset
 | 
1002  | 
defines "a \<equiv> Inf S"  | 
| 53788 | 1003  | 
  shows "mono_set S \<longleftrightarrow> S = {a <..} \<or> S = {a..}" (is "_ = ?c")
 | 
| 
69681
 
689997a8a582
redo tagging-related changes from a06b204527e6, 0f4d4a13dc16, and a8faf6f15da7
 
immler 
parents: 
69680 
diff
changeset
 | 
1004  | 
proof  | 
| 
51340
 
5e6296afe08d
move Liminf / Limsup lemmas on complete_lattices to its own file
 
hoelzl 
parents: 
51329 
diff
changeset
 | 
1005  | 
assume "mono_set S"  | 
| 53788 | 1006  | 
then have mono: "\<And>x y. x \<le> y \<Longrightarrow> x \<in> S \<Longrightarrow> y \<in> S"  | 
1007  | 
by (auto simp: mono_set)  | 
|
| 
51340
 
5e6296afe08d
move Liminf / Limsup lemmas on complete_lattices to its own file
 
hoelzl 
parents: 
51329 
diff
changeset
 | 
1008  | 
show ?c  | 
| 
 
5e6296afe08d
move Liminf / Limsup lemmas on complete_lattices to its own file
 
hoelzl 
parents: 
51329 
diff
changeset
 | 
1009  | 
proof cases  | 
| 
 
5e6296afe08d
move Liminf / Limsup lemmas on complete_lattices to its own file
 
hoelzl 
parents: 
51329 
diff
changeset
 | 
1010  | 
assume "a \<in> S"  | 
| 
 
5e6296afe08d
move Liminf / Limsup lemmas on complete_lattices to its own file
 
hoelzl 
parents: 
51329 
diff
changeset
 | 
1011  | 
show ?c  | 
| 60420 | 1012  | 
using mono[OF _ \<open>a \<in> S\<close>]  | 
| 
51340
 
5e6296afe08d
move Liminf / Limsup lemmas on complete_lattices to its own file
 
hoelzl 
parents: 
51329 
diff
changeset
 | 
1013  | 
by (auto intro: Inf_lower simp: a_def)  | 
| 
 
5e6296afe08d
move Liminf / Limsup lemmas on complete_lattices to its own file
 
hoelzl 
parents: 
51329 
diff
changeset
 | 
1014  | 
next  | 
| 
 
5e6296afe08d
move Liminf / Limsup lemmas on complete_lattices to its own file
 
hoelzl 
parents: 
51329 
diff
changeset
 | 
1015  | 
assume "a \<notin> S"  | 
| 
 
5e6296afe08d
move Liminf / Limsup lemmas on complete_lattices to its own file
 
hoelzl 
parents: 
51329 
diff
changeset
 | 
1016  | 
    have "S = {a <..}"
 | 
| 
 
5e6296afe08d
move Liminf / Limsup lemmas on complete_lattices to its own file
 
hoelzl 
parents: 
51329 
diff
changeset
 | 
1017  | 
proof safe  | 
| 
 
5e6296afe08d
move Liminf / Limsup lemmas on complete_lattices to its own file
 
hoelzl 
parents: 
51329 
diff
changeset
 | 
1018  | 
fix x assume "x \<in> S"  | 
| 53788 | 1019  | 
then have "a \<le> x"  | 
1020  | 
unfolding a_def by (rule Inf_lower)  | 
|
1021  | 
then show "a < x"  | 
|
| 60420 | 1022  | 
using \<open>x \<in> S\<close> \<open>a \<notin> S\<close> by (cases "a = x") auto  | 
| 
51340
 
5e6296afe08d
move Liminf / Limsup lemmas on complete_lattices to its own file
 
hoelzl 
parents: 
51329 
diff
changeset
 | 
1023  | 
next  | 
| 
 
5e6296afe08d
move Liminf / Limsup lemmas on complete_lattices to its own file
 
hoelzl 
parents: 
51329 
diff
changeset
 | 
1024  | 
fix x assume "a < x"  | 
| 53788 | 1025  | 
then obtain y where "y < x" "y \<in> S"  | 
1026  | 
unfolding a_def Inf_less_iff ..  | 
|
1027  | 
with mono[of y x] show "x \<in> S"  | 
|
1028  | 
by auto  | 
|
| 
51340
 
5e6296afe08d
move Liminf / Limsup lemmas on complete_lattices to its own file
 
hoelzl 
parents: 
51329 
diff
changeset
 | 
1029  | 
qed  | 
| 
 
5e6296afe08d
move Liminf / Limsup lemmas on complete_lattices to its own file
 
hoelzl 
parents: 
51329 
diff
changeset
 | 
1030  | 
then show ?c ..  | 
| 
 
5e6296afe08d
move Liminf / Limsup lemmas on complete_lattices to its own file
 
hoelzl 
parents: 
51329 
diff
changeset
 | 
1031  | 
qed  | 
| 
 
5e6296afe08d
move Liminf / Limsup lemmas on complete_lattices to its own file
 
hoelzl 
parents: 
51329 
diff
changeset
 | 
1032  | 
qed auto  | 
| 
 
5e6296afe08d
move Liminf / Limsup lemmas on complete_lattices to its own file
 
hoelzl 
parents: 
51329 
diff
changeset
 | 
1033  | 
|
| 
 
5e6296afe08d
move Liminf / Limsup lemmas on complete_lattices to its own file
 
hoelzl 
parents: 
51329 
diff
changeset
 | 
1034  | 
lemma ereal_open_mono_set:  | 
| 
 
5e6296afe08d
move Liminf / Limsup lemmas on complete_lattices to its own file
 
hoelzl 
parents: 
51329 
diff
changeset
 | 
1035  | 
fixes S :: "ereal set"  | 
| 53788 | 1036  | 
  shows "open S \<and> mono_set S \<longleftrightarrow> S = UNIV \<or> S = {Inf S <..}"
 | 
| 
51340
 
5e6296afe08d
move Liminf / Limsup lemmas on complete_lattices to its own file
 
hoelzl 
parents: 
51329 
diff
changeset
 | 
1037  | 
by (metis Inf_UNIV atLeast_eq_UNIV_iff ereal_open_atLeast  | 
| 
 
5e6296afe08d
move Liminf / Limsup lemmas on complete_lattices to its own file
 
hoelzl 
parents: 
51329 
diff
changeset
 | 
1038  | 
ereal_open_closed mono_set_iff open_ereal_greaterThan)  | 
| 
 
5e6296afe08d
move Liminf / Limsup lemmas on complete_lattices to its own file
 
hoelzl 
parents: 
51329 
diff
changeset
 | 
1039  | 
|
| 
 
5e6296afe08d
move Liminf / Limsup lemmas on complete_lattices to its own file
 
hoelzl 
parents: 
51329 
diff
changeset
 | 
1040  | 
lemma ereal_closed_mono_set:  | 
| 
 
5e6296afe08d
move Liminf / Limsup lemmas on complete_lattices to its own file
 
hoelzl 
parents: 
51329 
diff
changeset
 | 
1041  | 
fixes S :: "ereal set"  | 
| 53788 | 1042  | 
  shows "closed S \<and> mono_set S \<longleftrightarrow> S = {} \<or> S = {Inf S ..}"
 | 
| 
51340
 
5e6296afe08d
move Liminf / Limsup lemmas on complete_lattices to its own file
 
hoelzl 
parents: 
51329 
diff
changeset
 | 
1043  | 
by (metis Inf_UNIV atLeast_eq_UNIV_iff closed_ereal_atLeast  | 
| 
 
5e6296afe08d
move Liminf / Limsup lemmas on complete_lattices to its own file
 
hoelzl 
parents: 
51329 
diff
changeset
 | 
1044  | 
ereal_open_closed mono_empty mono_set_iff open_ereal_greaterThan)  | 
| 
 
5e6296afe08d
move Liminf / Limsup lemmas on complete_lattices to its own file
 
hoelzl 
parents: 
51329 
diff
changeset
 | 
1045  | 
|
| 
69681
 
689997a8a582
redo tagging-related changes from a06b204527e6, 0f4d4a13dc16, and a8faf6f15da7
 
immler 
parents: 
69680 
diff
changeset
 | 
1046  | 
lemma ereal_Liminf_Sup_monoset:  | 
| 53788 | 1047  | 
fixes f :: "'a \<Rightarrow> ereal"  | 
| 
51340
 
5e6296afe08d
move Liminf / Limsup lemmas on complete_lattices to its own file
 
hoelzl 
parents: 
51329 
diff
changeset
 | 
1048  | 
shows "Liminf net f =  | 
| 
 
5e6296afe08d
move Liminf / Limsup lemmas on complete_lattices to its own file
 
hoelzl 
parents: 
51329 
diff
changeset
 | 
1049  | 
    Sup {l. \<forall>S. open S \<longrightarrow> mono_set S \<longrightarrow> l \<in> S \<longrightarrow> eventually (\<lambda>x. f x \<in> S) net}"
 | 
| 
 
5e6296afe08d
move Liminf / Limsup lemmas on complete_lattices to its own file
 
hoelzl 
parents: 
51329 
diff
changeset
 | 
1050  | 
(is "_ = Sup ?A")  | 
| 
69681
 
689997a8a582
redo tagging-related changes from a06b204527e6, 0f4d4a13dc16, and a8faf6f15da7
 
immler 
parents: 
69680 
diff
changeset
 | 
1051  | 
proof (safe intro!: Liminf_eqI complete_lattice_class.Sup_upper complete_lattice_class.Sup_least)  | 
| 53788 | 1052  | 
fix P  | 
1053  | 
assume P: "eventually P net"  | 
|
1054  | 
fix S  | 
|
| 69313 | 1055  | 
assume S: "mono_set S" "Inf (f ` (Collect P)) \<in> S"  | 
| 53788 | 1056  | 
  {
 | 
1057  | 
fix x  | 
|
1058  | 
assume "P x"  | 
|
| 69313 | 1059  | 
then have "Inf (f ` (Collect P)) \<le> f x"  | 
| 
51340
 
5e6296afe08d
move Liminf / Limsup lemmas on complete_lattices to its own file
 
hoelzl 
parents: 
51329 
diff
changeset
 | 
1060  | 
by (intro complete_lattice_class.INF_lower) simp  | 
| 
 
5e6296afe08d
move Liminf / Limsup lemmas on complete_lattices to its own file
 
hoelzl 
parents: 
51329 
diff
changeset
 | 
1061  | 
with S have "f x \<in> S"  | 
| 53788 | 1062  | 
by (simp add: mono_set)  | 
1063  | 
}  | 
|
| 
51340
 
5e6296afe08d
move Liminf / Limsup lemmas on complete_lattices to its own file
 
hoelzl 
parents: 
51329 
diff
changeset
 | 
1064  | 
with P show "eventually (\<lambda>x. f x \<in> S) net"  | 
| 61810 | 1065  | 
by (auto elim: eventually_mono)  | 
| 
51340
 
5e6296afe08d
move Liminf / Limsup lemmas on complete_lattices to its own file
 
hoelzl 
parents: 
51329 
diff
changeset
 | 
1066  | 
next  | 
| 
 
5e6296afe08d
move Liminf / Limsup lemmas on complete_lattices to its own file
 
hoelzl 
parents: 
51329 
diff
changeset
 | 
1067  | 
fix y l  | 
| 
 
5e6296afe08d
move Liminf / Limsup lemmas on complete_lattices to its own file
 
hoelzl 
parents: 
51329 
diff
changeset
 | 
1068  | 
assume S: "\<forall>S. open S \<longrightarrow> mono_set S \<longrightarrow> l \<in> S \<longrightarrow> eventually (\<lambda>x. f x \<in> S) net"  | 
| 69313 | 1069  | 
assume P: "\<forall>P. eventually P net \<longrightarrow> Inf (f ` (Collect P)) \<le> y"  | 
| 
51340
 
5e6296afe08d
move Liminf / Limsup lemmas on complete_lattices to its own file
 
hoelzl 
parents: 
51329 
diff
changeset
 | 
1070  | 
show "l \<le> y"  | 
| 
 
5e6296afe08d
move Liminf / Limsup lemmas on complete_lattices to its own file
 
hoelzl 
parents: 
51329 
diff
changeset
 | 
1071  | 
proof (rule dense_le)  | 
| 53788 | 1072  | 
fix B  | 
1073  | 
assume "B < l"  | 
|
| 
51340
 
5e6296afe08d
move Liminf / Limsup lemmas on complete_lattices to its own file
 
hoelzl 
parents: 
51329 
diff
changeset
 | 
1074  | 
    then have "eventually (\<lambda>x. f x \<in> {B <..}) net"
 | 
| 
 
5e6296afe08d
move Liminf / Limsup lemmas on complete_lattices to its own file
 
hoelzl 
parents: 
51329 
diff
changeset
 | 
1075  | 
by (intro S[rule_format]) auto  | 
| 69313 | 1076  | 
    then have "Inf (f ` {x. B < f x}) \<le> y"
 | 
| 
51340
 
5e6296afe08d
move Liminf / Limsup lemmas on complete_lattices to its own file
 
hoelzl 
parents: 
51329 
diff
changeset
 | 
1077  | 
using P by auto  | 
| 69313 | 1078  | 
    moreover have "B \<le> Inf (f ` {x. B < f x})"
 | 
| 
51340
 
5e6296afe08d
move Liminf / Limsup lemmas on complete_lattices to its own file
 
hoelzl 
parents: 
51329 
diff
changeset
 | 
1079  | 
by (intro INF_greatest) auto  | 
| 
 
5e6296afe08d
move Liminf / Limsup lemmas on complete_lattices to its own file
 
hoelzl 
parents: 
51329 
diff
changeset
 | 
1080  | 
ultimately show "B \<le> y"  | 
| 
 
5e6296afe08d
move Liminf / Limsup lemmas on complete_lattices to its own file
 
hoelzl 
parents: 
51329 
diff
changeset
 | 
1081  | 
by simp  | 
| 
 
5e6296afe08d
move Liminf / Limsup lemmas on complete_lattices to its own file
 
hoelzl 
parents: 
51329 
diff
changeset
 | 
1082  | 
qed  | 
| 
 
5e6296afe08d
move Liminf / Limsup lemmas on complete_lattices to its own file
 
hoelzl 
parents: 
51329 
diff
changeset
 | 
1083  | 
qed  | 
| 
 
5e6296afe08d
move Liminf / Limsup lemmas on complete_lattices to its own file
 
hoelzl 
parents: 
51329 
diff
changeset
 | 
1084  | 
|
| 
69681
 
689997a8a582
redo tagging-related changes from a06b204527e6, 0f4d4a13dc16, and a8faf6f15da7
 
immler 
parents: 
69680 
diff
changeset
 | 
1085  | 
lemma ereal_Limsup_Inf_monoset:  | 
| 53788 | 1086  | 
fixes f :: "'a \<Rightarrow> ereal"  | 
| 
51340
 
5e6296afe08d
move Liminf / Limsup lemmas on complete_lattices to its own file
 
hoelzl 
parents: 
51329 
diff
changeset
 | 
1087  | 
shows "Limsup net f =  | 
| 
 
5e6296afe08d
move Liminf / Limsup lemmas on complete_lattices to its own file
 
hoelzl 
parents: 
51329 
diff
changeset
 | 
1088  | 
    Inf {l. \<forall>S. open S \<longrightarrow> mono_set (uminus ` S) \<longrightarrow> l \<in> S \<longrightarrow> eventually (\<lambda>x. f x \<in> S) net}"
 | 
| 
 
5e6296afe08d
move Liminf / Limsup lemmas on complete_lattices to its own file
 
hoelzl 
parents: 
51329 
diff
changeset
 | 
1089  | 
(is "_ = Inf ?A")  | 
| 
69681
 
689997a8a582
redo tagging-related changes from a06b204527e6, 0f4d4a13dc16, and a8faf6f15da7
 
immler 
parents: 
69680 
diff
changeset
 | 
1090  | 
proof (safe intro!: Limsup_eqI complete_lattice_class.Inf_lower complete_lattice_class.Inf_greatest)  | 
| 53788 | 1091  | 
fix P  | 
1092  | 
assume P: "eventually P net"  | 
|
1093  | 
fix S  | 
|
| 69313 | 1094  | 
assume S: "mono_set (uminus`S)" "Sup (f ` (Collect P)) \<in> S"  | 
| 53788 | 1095  | 
  {
 | 
1096  | 
fix x  | 
|
1097  | 
assume "P x"  | 
|
| 69313 | 1098  | 
then have "f x \<le> Sup (f ` (Collect P))"  | 
| 
51340
 
5e6296afe08d
move Liminf / Limsup lemmas on complete_lattices to its own file
 
hoelzl 
parents: 
51329 
diff
changeset
 | 
1099  | 
by (intro complete_lattice_class.SUP_upper) simp  | 
| 69313 | 1100  | 
with S(1)[unfolded mono_set, rule_format, of "- Sup (f ` (Collect P))" "- f x"] S(2)  | 
| 
51340
 
5e6296afe08d
move Liminf / Limsup lemmas on complete_lattices to its own file
 
hoelzl 
parents: 
51329 
diff
changeset
 | 
1101  | 
have "f x \<in> S"  | 
| 
 
5e6296afe08d
move Liminf / Limsup lemmas on complete_lattices to its own file
 
hoelzl 
parents: 
51329 
diff
changeset
 | 
1102  | 
by (simp add: inj_image_mem_iff) }  | 
| 
 
5e6296afe08d
move Liminf / Limsup lemmas on complete_lattices to its own file
 
hoelzl 
parents: 
51329 
diff
changeset
 | 
1103  | 
with P show "eventually (\<lambda>x. f x \<in> S) net"  | 
| 61810 | 1104  | 
by (auto elim: eventually_mono)  | 
| 
51340
 
5e6296afe08d
move Liminf / Limsup lemmas on complete_lattices to its own file
 
hoelzl 
parents: 
51329 
diff
changeset
 | 
1105  | 
next  | 
| 
 
5e6296afe08d
move Liminf / Limsup lemmas on complete_lattices to its own file
 
hoelzl 
parents: 
51329 
diff
changeset
 | 
1106  | 
fix y l  | 
| 
 
5e6296afe08d
move Liminf / Limsup lemmas on complete_lattices to its own file
 
hoelzl 
parents: 
51329 
diff
changeset
 | 
1107  | 
assume S: "\<forall>S. open S \<longrightarrow> mono_set (uminus ` S) \<longrightarrow> l \<in> S \<longrightarrow> eventually (\<lambda>x. f x \<in> S) net"  | 
| 69313 | 1108  | 
assume P: "\<forall>P. eventually P net \<longrightarrow> y \<le> Sup (f ` (Collect P))"  | 
| 
51340
 
5e6296afe08d
move Liminf / Limsup lemmas on complete_lattices to its own file
 
hoelzl 
parents: 
51329 
diff
changeset
 | 
1109  | 
show "y \<le> l"  | 
| 
 
5e6296afe08d
move Liminf / Limsup lemmas on complete_lattices to its own file
 
hoelzl 
parents: 
51329 
diff
changeset
 | 
1110  | 
proof (rule dense_ge)  | 
| 53788 | 1111  | 
fix B  | 
1112  | 
assume "l < B"  | 
|
| 
51340
 
5e6296afe08d
move Liminf / Limsup lemmas on complete_lattices to its own file
 
hoelzl 
parents: 
51329 
diff
changeset
 | 
1113  | 
    then have "eventually (\<lambda>x. f x \<in> {..< B}) net"
 | 
| 
 
5e6296afe08d
move Liminf / Limsup lemmas on complete_lattices to its own file
 
hoelzl 
parents: 
51329 
diff
changeset
 | 
1114  | 
by (intro S[rule_format]) auto  | 
| 69313 | 1115  | 
    then have "y \<le> Sup (f ` {x. f x < B})"
 | 
| 
51340
 
5e6296afe08d
move Liminf / Limsup lemmas on complete_lattices to its own file
 
hoelzl 
parents: 
51329 
diff
changeset
 | 
1116  | 
using P by auto  | 
| 69313 | 1117  | 
    moreover have "Sup (f ` {x. f x < B}) \<le> B"
 | 
| 
51340
 
5e6296afe08d
move Liminf / Limsup lemmas on complete_lattices to its own file
 
hoelzl 
parents: 
51329 
diff
changeset
 | 
1118  | 
by (intro SUP_least) auto  | 
| 
 
5e6296afe08d
move Liminf / Limsup lemmas on complete_lattices to its own file
 
hoelzl 
parents: 
51329 
diff
changeset
 | 
1119  | 
ultimately show "y \<le> B"  | 
| 
 
5e6296afe08d
move Liminf / Limsup lemmas on complete_lattices to its own file
 
hoelzl 
parents: 
51329 
diff
changeset
 | 
1120  | 
by simp  | 
| 
 
5e6296afe08d
move Liminf / Limsup lemmas on complete_lattices to its own file
 
hoelzl 
parents: 
51329 
diff
changeset
 | 
1121  | 
qed  | 
| 
 
5e6296afe08d
move Liminf / Limsup lemmas on complete_lattices to its own file
 
hoelzl 
parents: 
51329 
diff
changeset
 | 
1122  | 
qed  | 
| 
 
5e6296afe08d
move Liminf / Limsup lemmas on complete_lattices to its own file
 
hoelzl 
parents: 
51329 
diff
changeset
 | 
1123  | 
|
| 
69681
 
689997a8a582
redo tagging-related changes from a06b204527e6, 0f4d4a13dc16, and a8faf6f15da7
 
immler 
parents: 
69680 
diff
changeset
 | 
1124  | 
lemma liminf_bounded_open:  | 
| 
51340
 
5e6296afe08d
move Liminf / Limsup lemmas on complete_lattices to its own file
 
hoelzl 
parents: 
51329 
diff
changeset
 | 
1125  | 
fixes x :: "nat \<Rightarrow> ereal"  | 
| 
 
5e6296afe08d
move Liminf / Limsup lemmas on complete_lattices to its own file
 
hoelzl 
parents: 
51329 
diff
changeset
 | 
1126  | 
shows "x0 \<le> liminf x \<longleftrightarrow> (\<forall>S. open S \<longrightarrow> mono_set S \<longrightarrow> x0 \<in> S \<longrightarrow> (\<exists>N. \<forall>n\<ge>N. x n \<in> S))"  | 
| 
 
5e6296afe08d
move Liminf / Limsup lemmas on complete_lattices to its own file
 
hoelzl 
parents: 
51329 
diff
changeset
 | 
1127  | 
(is "_ \<longleftrightarrow> ?P x0")  | 
| 
69681
 
689997a8a582
redo tagging-related changes from a06b204527e6, 0f4d4a13dc16, and a8faf6f15da7
 
immler 
parents: 
69680 
diff
changeset
 | 
1128  | 
proof  | 
| 
51340
 
5e6296afe08d
move Liminf / Limsup lemmas on complete_lattices to its own file
 
hoelzl 
parents: 
51329 
diff
changeset
 | 
1129  | 
assume "?P x0"  | 
| 
 
5e6296afe08d
move Liminf / Limsup lemmas on complete_lattices to its own file
 
hoelzl 
parents: 
51329 
diff
changeset
 | 
1130  | 
then show "x0 \<le> liminf x"  | 
| 
 
5e6296afe08d
move Liminf / Limsup lemmas on complete_lattices to its own file
 
hoelzl 
parents: 
51329 
diff
changeset
 | 
1131  | 
unfolding ereal_Liminf_Sup_monoset eventually_sequentially  | 
| 
 
5e6296afe08d
move Liminf / Limsup lemmas on complete_lattices to its own file
 
hoelzl 
parents: 
51329 
diff
changeset
 | 
1132  | 
by (intro complete_lattice_class.Sup_upper) auto  | 
| 
 
5e6296afe08d
move Liminf / Limsup lemmas on complete_lattices to its own file
 
hoelzl 
parents: 
51329 
diff
changeset
 | 
1133  | 
next  | 
| 
 
5e6296afe08d
move Liminf / Limsup lemmas on complete_lattices to its own file
 
hoelzl 
parents: 
51329 
diff
changeset
 | 
1134  | 
assume "x0 \<le> liminf x"  | 
| 53788 | 1135  | 
  {
 | 
1136  | 
fix S :: "ereal set"  | 
|
1137  | 
assume om: "open S" "mono_set S" "x0 \<in> S"  | 
|
1138  | 
    {
 | 
|
1139  | 
assume "S = UNIV"  | 
|
1140  | 
then have "\<exists>N. \<forall>n\<ge>N. x n \<in> S"  | 
|
1141  | 
by auto  | 
|
1142  | 
}  | 
|
| 
51340
 
5e6296afe08d
move Liminf / Limsup lemmas on complete_lattices to its own file
 
hoelzl 
parents: 
51329 
diff
changeset
 | 
1143  | 
moreover  | 
| 53788 | 1144  | 
    {
 | 
1145  | 
assume "S \<noteq> UNIV"  | 
|
1146  | 
      then obtain B where B: "S = {B<..}"
 | 
|
1147  | 
using om ereal_open_mono_set by auto  | 
|
1148  | 
then have "B < x0"  | 
|
1149  | 
using om by auto  | 
|
1150  | 
then have "\<exists>N. \<forall>n\<ge>N. x n \<in> S"  | 
|
1151  | 
unfolding B  | 
|
| 60420 | 1152  | 
using \<open>x0 \<le> liminf x\<close> liminf_bounded_iff  | 
| 53788 | 1153  | 
by auto  | 
| 
51340
 
5e6296afe08d
move Liminf / Limsup lemmas on complete_lattices to its own file
 
hoelzl 
parents: 
51329 
diff
changeset
 | 
1154  | 
}  | 
| 53788 | 1155  | 
ultimately have "\<exists>N. \<forall>n\<ge>N. x n \<in> S"  | 
1156  | 
by auto  | 
|
| 
51340
 
5e6296afe08d
move Liminf / Limsup lemmas on complete_lattices to its own file
 
hoelzl 
parents: 
51329 
diff
changeset
 | 
1157  | 
}  | 
| 53788 | 1158  | 
then show "?P x0"  | 
1159  | 
by auto  | 
|
| 
51340
 
5e6296afe08d
move Liminf / Limsup lemmas on complete_lattices to its own file
 
hoelzl 
parents: 
51329 
diff
changeset
 | 
1160  | 
qed  | 
| 
 
5e6296afe08d
move Liminf / Limsup lemmas on complete_lattices to its own file
 
hoelzl 
parents: 
51329 
diff
changeset
 | 
1161  | 
|
| 
69681
 
689997a8a582
redo tagging-related changes from a06b204527e6, 0f4d4a13dc16, and a8faf6f15da7
 
immler 
parents: 
69680 
diff
changeset
 | 
1162  | 
lemma limsup_finite_then_bounded:  | 
| 
66456
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1163  | 
fixes u::"nat \<Rightarrow> real"  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1164  | 
assumes "limsup u < \<infinity>"  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1165  | 
shows "\<exists>C. \<forall>n. u n \<le> C"  | 
| 
69681
 
689997a8a582
redo tagging-related changes from a06b204527e6, 0f4d4a13dc16, and a8faf6f15da7
 
immler 
parents: 
69680 
diff
changeset
 | 
1166  | 
proof -  | 
| 
66456
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1167  | 
obtain C where C: "limsup u < C" "C < \<infinity>" using assms ereal_dense2 by blast  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1168  | 
then have "C = ereal(real_of_ereal C)" using ereal_real by force  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1169  | 
have "eventually (\<lambda>n. u n < C) sequentially" using C(1) unfolding Limsup_def  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1170  | 
apply (auto simp add: INF_less_iff)  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1171  | 
using SUP_lessD eventually_mono by fastforce  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1172  | 
then obtain N where N: "\<And>n. n \<ge> N \<Longrightarrow> u n < C" using eventually_sequentially by auto  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1173  | 
  define D where "D = max (real_of_ereal C) (Max {u n |n. n \<le> N})"
 | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1174  | 
have "\<And>n. u n \<le> D"  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1175  | 
proof -  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1176  | 
fix n show "u n \<le> D"  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1177  | 
proof (cases)  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1178  | 
assume *: "n \<le> N"  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1179  | 
      have "u n \<le> Max {u n |n. n \<le> N}" by (rule Max_ge, auto simp add: *)
 | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1180  | 
then show "u n \<le> D" unfolding D_def by linarith  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1181  | 
next  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1182  | 
assume "\<not>(n \<le> N)"  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1183  | 
then have "n \<ge> N" by simp  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1184  | 
then have "u n < C" using N by auto  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1185  | 
then have "u n < real_of_ereal C" using \<open>C = ereal(real_of_ereal C)\<close> less_ereal.simps(1) by fastforce  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1186  | 
then show "u n \<le> D" unfolding D_def by linarith  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1187  | 
qed  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1188  | 
qed  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1189  | 
then show ?thesis by blast  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1190  | 
qed  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1191  | 
|
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1192  | 
lemma liminf_finite_then_bounded_below:  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1193  | 
fixes u::"nat \<Rightarrow> real"  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1194  | 
assumes "liminf u > -\<infinity>"  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1195  | 
shows "\<exists>C. \<forall>n. u n \<ge> C"  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1196  | 
proof -  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1197  | 
obtain C where C: "liminf u > C" "C > -\<infinity>" using assms using ereal_dense2 by blast  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1198  | 
then have "C = ereal(real_of_ereal C)" using ereal_real by force  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1199  | 
have "eventually (\<lambda>n. u n > C) sequentially" using C(1) unfolding Liminf_def  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1200  | 
apply (auto simp add: less_SUP_iff)  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1201  | 
using eventually_elim2 less_INF_D by fastforce  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1202  | 
then obtain N where N: "\<And>n. n \<ge> N \<Longrightarrow> u n > C" using eventually_sequentially by auto  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1203  | 
  define D where "D = min (real_of_ereal C) (Min {u n |n. n \<le> N})"
 | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1204  | 
have "\<And>n. u n \<ge> D"  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1205  | 
proof -  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1206  | 
fix n show "u n \<ge> D"  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1207  | 
proof (cases)  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1208  | 
assume *: "n \<le> N"  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1209  | 
      have "u n \<ge> Min {u n |n. n \<le> N}" by (rule Min_le, auto simp add: *)
 | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1210  | 
then show "u n \<ge> D" unfolding D_def by linarith  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1211  | 
next  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1212  | 
assume "\<not>(n \<le> N)"  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1213  | 
then have "n \<ge> N" by simp  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1214  | 
then have "u n > C" using N by auto  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1215  | 
then have "u n > real_of_ereal C" using \<open>C = ereal(real_of_ereal C)\<close> less_ereal.simps(1) by fastforce  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1216  | 
then show "u n \<ge> D" unfolding D_def by linarith  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1217  | 
qed  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1218  | 
qed  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1219  | 
then show ?thesis by blast  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1220  | 
qed  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1221  | 
|
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1222  | 
lemma liminf_upper_bound:  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1223  | 
fixes u:: "nat \<Rightarrow> ereal"  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1224  | 
assumes "liminf u < l"  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1225  | 
shows "\<exists>N>k. u N < l"  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1226  | 
by (metis assms gt_ex less_le_trans liminf_bounded_iff not_less)  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1227  | 
|
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1228  | 
lemma limsup_shift:  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1229  | 
"limsup (\<lambda>n. u (n+1)) = limsup u"  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1230  | 
proof -  | 
| 
69260
 
0a9688695a1b
removed relics of ASCII syntax for indexed big operators
 
haftmann 
parents: 
69221 
diff
changeset
 | 
1231  | 
  have "(SUP m\<in>{n+1..}. u m) = (SUP m\<in>{n..}. u (m + 1))" for n
 | 
| 
66456
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1232  | 
apply (rule SUP_eq) using Suc_le_D by auto  | 
| 
69260
 
0a9688695a1b
removed relics of ASCII syntax for indexed big operators
 
haftmann 
parents: 
69221 
diff
changeset
 | 
1233  | 
  then have a: "(INF n. SUP m\<in>{n..}. u (m + 1)) = (INF n. (SUP m\<in>{n+1..}. u m))" by auto
 | 
| 
 
0a9688695a1b
removed relics of ASCII syntax for indexed big operators
 
haftmann 
parents: 
69221 
diff
changeset
 | 
1234  | 
  have b: "(INF n. (SUP m\<in>{n+1..}. u m)) = (INF n\<in>{1..}. (SUP m\<in>{n..}. u m))"
 | 
| 
66456
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1235  | 
apply (rule INF_eq) using Suc_le_D by auto  | 
| 
69260
 
0a9688695a1b
removed relics of ASCII syntax for indexed big operators
 
haftmann 
parents: 
69221 
diff
changeset
 | 
1236  | 
  have "(INF n\<in>{1..}. v n) = (INF n. v n)" if "decseq v" for v::"nat \<Rightarrow> 'a"
 | 
| 
66456
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1237  | 
apply (rule INF_eq) using \<open>decseq v\<close> decseq_Suc_iff by auto  | 
| 
69260
 
0a9688695a1b
removed relics of ASCII syntax for indexed big operators
 
haftmann 
parents: 
69221 
diff
changeset
 | 
1238  | 
  moreover have "decseq (\<lambda>n. (SUP m\<in>{n..}. u m))" by (simp add: SUP_subset_mono decseq_def)
 | 
| 
 
0a9688695a1b
removed relics of ASCII syntax for indexed big operators
 
haftmann 
parents: 
69221 
diff
changeset
 | 
1239  | 
  ultimately have c: "(INF n\<in>{1..}. (SUP m\<in>{n..}. u m)) = (INF n. (SUP m\<in>{n..}. u m))" by simp
 | 
| 69313 | 1240  | 
  have "(INF n. Sup (u ` {n..})) = (INF n. SUP m\<in>{n..}. u (m + 1))" using a b c by simp
 | 
| 
66456
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1241  | 
then show ?thesis by (auto cong: limsup_INF_SUP)  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1242  | 
qed  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1243  | 
|
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1244  | 
lemma limsup_shift_k:  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1245  | 
"limsup (\<lambda>n. u (n+k)) = limsup u"  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1246  | 
proof (induction k)  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1247  | 
case (Suc k)  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1248  | 
have "limsup (\<lambda>n. u (n+k+1)) = limsup (\<lambda>n. u (n+k))" using limsup_shift[where ?u="\<lambda>n. u(n+k)"] by simp  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1249  | 
then show ?case using Suc.IH by simp  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1250  | 
qed (auto)  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1251  | 
|
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1252  | 
lemma liminf_shift:  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1253  | 
"liminf (\<lambda>n. u (n+1)) = liminf u"  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1254  | 
proof -  | 
| 
69260
 
0a9688695a1b
removed relics of ASCII syntax for indexed big operators
 
haftmann 
parents: 
69221 
diff
changeset
 | 
1255  | 
  have "(INF m\<in>{n+1..}. u m) = (INF m\<in>{n..}. u (m + 1))" for n
 | 
| 
66456
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1256  | 
apply (rule INF_eq) using Suc_le_D by (auto)  | 
| 
69260
 
0a9688695a1b
removed relics of ASCII syntax for indexed big operators
 
haftmann 
parents: 
69221 
diff
changeset
 | 
1257  | 
  then have a: "(SUP n. INF m\<in>{n..}. u (m + 1)) = (SUP n. (INF m\<in>{n+1..}. u m))" by auto
 | 
| 
 
0a9688695a1b
removed relics of ASCII syntax for indexed big operators
 
haftmann 
parents: 
69221 
diff
changeset
 | 
1258  | 
  have b: "(SUP n. (INF m\<in>{n+1..}. u m)) = (SUP n\<in>{1..}. (INF m\<in>{n..}. u m))"
 | 
| 
66456
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1259  | 
apply (rule SUP_eq) using Suc_le_D by (auto)  | 
| 
69260
 
0a9688695a1b
removed relics of ASCII syntax for indexed big operators
 
haftmann 
parents: 
69221 
diff
changeset
 | 
1260  | 
  have "(SUP n\<in>{1..}. v n) = (SUP n. v n)" if "incseq v" for v::"nat \<Rightarrow> 'a"
 | 
| 
66456
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1261  | 
apply (rule SUP_eq) using \<open>incseq v\<close> incseq_Suc_iff by auto  | 
| 
69260
 
0a9688695a1b
removed relics of ASCII syntax for indexed big operators
 
haftmann 
parents: 
69221 
diff
changeset
 | 
1262  | 
  moreover have "incseq (\<lambda>n. (INF m\<in>{n..}. u m))" by (simp add: INF_superset_mono mono_def)
 | 
| 
 
0a9688695a1b
removed relics of ASCII syntax for indexed big operators
 
haftmann 
parents: 
69221 
diff
changeset
 | 
1263  | 
  ultimately have c: "(SUP n\<in>{1..}. (INF m\<in>{n..}. u m)) = (SUP n. (INF m\<in>{n..}. u m))" by simp
 | 
| 69313 | 1264  | 
  have "(SUP n. Inf (u ` {n..})) = (SUP n. INF m\<in>{n..}. u (m + 1))" using a b c by simp
 | 
| 
66456
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1265  | 
then show ?thesis by (auto cong: liminf_SUP_INF)  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1266  | 
qed  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1267  | 
|
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1268  | 
lemma liminf_shift_k:  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1269  | 
"liminf (\<lambda>n. u (n+k)) = liminf u"  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1270  | 
proof (induction k)  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1271  | 
case (Suc k)  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1272  | 
have "liminf (\<lambda>n. u (n+k+1)) = liminf (\<lambda>n. u (n+k))" using liminf_shift[where ?u="\<lambda>n. u(n+k)"] by simp  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1273  | 
then show ?case using Suc.IH by simp  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1274  | 
qed (auto)  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1275  | 
|
| 
69681
 
689997a8a582
redo tagging-related changes from a06b204527e6, 0f4d4a13dc16, and a8faf6f15da7
 
immler 
parents: 
69680 
diff
changeset
 | 
1276  | 
lemma Limsup_obtain:  | 
| 
66456
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1277  | 
fixes u::"_ \<Rightarrow> 'a :: complete_linorder"  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1278  | 
assumes "Limsup F u > c"  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1279  | 
shows "\<exists>i. u i > c"  | 
| 
69681
 
689997a8a582
redo tagging-related changes from a06b204527e6, 0f4d4a13dc16, and a8faf6f15da7
 
immler 
parents: 
69680 
diff
changeset
 | 
1280  | 
proof -  | 
| 
69260
 
0a9688695a1b
removed relics of ASCII syntax for indexed big operators
 
haftmann 
parents: 
69221 
diff
changeset
 | 
1281  | 
  have "(INF P\<in>{P. eventually P F}. SUP x\<in>{x. P x}. u x) > c" using assms by (simp add: Limsup_def)
 | 
| 
66456
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1282  | 
then show ?thesis by (metis eventually_True mem_Collect_eq less_INF_D less_SUP_iff)  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1283  | 
qed  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1284  | 
|
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1285  | 
text \<open>The next lemma is extremely useful, as it often makes it possible to reduce statements  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1286  | 
about limsups to statements about limits.\<close>  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1287  | 
|
| 
69681
 
689997a8a582
redo tagging-related changes from a06b204527e6, 0f4d4a13dc16, and a8faf6f15da7
 
immler 
parents: 
69680 
diff
changeset
 | 
1288  | 
lemma limsup_subseq_lim:  | 
| 
66456
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1289  | 
  fixes u::"nat \<Rightarrow> 'a :: {complete_linorder, linorder_topology}"
 | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1290  | 
shows "\<exists>r::nat\<Rightarrow>nat. strict_mono r \<and> (u o r) \<longlonglongrightarrow> limsup u"  | 
| 
69681
 
689997a8a582
redo tagging-related changes from a06b204527e6, 0f4d4a13dc16, and a8faf6f15da7
 
immler 
parents: 
69680 
diff
changeset
 | 
1291  | 
proof (cases)  | 
| 
66456
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1292  | 
assume "\<forall>n. \<exists>p>n. \<forall>m\<ge>p. u m \<le> u p"  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1293  | 
then have "\<exists>r. \<forall>n. (\<forall>m\<ge>r n. u m \<le> u (r n)) \<and> r n < r (Suc n)"  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1294  | 
by (intro dependent_nat_choice) (auto simp: conj_commute)  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1295  | 
then obtain r :: "nat \<Rightarrow> nat" where "strict_mono r" and mono: "\<And>n m. r n \<le> m \<Longrightarrow> u m \<le> u (r n)"  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1296  | 
by (auto simp: strict_mono_Suc_iff)  | 
| 
69260
 
0a9688695a1b
removed relics of ASCII syntax for indexed big operators
 
haftmann 
parents: 
69221 
diff
changeset
 | 
1297  | 
  define umax where "umax = (\<lambda>n. (SUP m\<in>{n..}. u m))"
 | 
| 
66456
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1298  | 
have "decseq umax" unfolding umax_def by (simp add: SUP_subset_mono antimono_def)  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1299  | 
then have "umax \<longlonglongrightarrow> limsup u" unfolding umax_def by (metis LIMSEQ_INF limsup_INF_SUP)  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1300  | 
then have *: "(umax o r) \<longlonglongrightarrow> limsup u" by (simp add: LIMSEQ_subseq_LIMSEQ \<open>strict_mono r\<close>)  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1301  | 
have "\<And>n. umax(r n) = u(r n)" unfolding umax_def using mono  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1302  | 
by (metis SUP_le_iff antisym atLeast_def mem_Collect_eq order_refl)  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1303  | 
then have "umax o r = u o r" unfolding o_def by simp  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1304  | 
then have "(u o r) \<longlonglongrightarrow> limsup u" using * by simp  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1305  | 
then show ?thesis using \<open>strict_mono r\<close> by blast  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1306  | 
next  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1307  | 
assume "\<not> (\<forall>n. \<exists>p>n. (\<forall>m\<ge>p. u m \<le> u p))"  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1308  | 
then obtain N where N: "\<And>p. p > N \<Longrightarrow> \<exists>m>p. u p < u m" by (force simp: not_le le_less)  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1309  | 
  have "\<exists>r. \<forall>n. N < r n \<and> r n < r (Suc n) \<and> (\<forall>i\<in> {N<..r (Suc n)}. u i \<le> u (r (Suc n)))"
 | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1310  | 
proof (rule dependent_nat_choice)  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1311  | 
fix x assume "N < x"  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1312  | 
    then have a: "finite {N<..x}" "{N<..x} \<noteq> {}" by simp_all
 | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1313  | 
    have "Max {u i |i. i \<in> {N<..x}} \<in> {u i |i. i \<in> {N<..x}}" apply (rule Max_in) using a by (auto)
 | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1314  | 
    then obtain p where "p \<in> {N<..x}" and upmax: "u p = Max{u i |i. i \<in> {N<..x}}" by auto
 | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1315  | 
    define U where "U = {m. m > p \<and> u p < u m}"
 | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1316  | 
    have "U \<noteq> {}" unfolding U_def using N[of p] \<open>p \<in> {N<..x}\<close> by auto
 | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1317  | 
define y where "y = Inf U"  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1318  | 
    then have "y \<in> U" using \<open>U \<noteq> {}\<close> by (simp add: Inf_nat_def1)
 | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1319  | 
    have a: "\<And>i. i \<in> {N<..x} \<Longrightarrow> u i \<le> u p"
 | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1320  | 
proof -  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1321  | 
      fix i assume "i \<in> {N<..x}"
 | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1322  | 
      then have "u i \<in> {u i |i. i \<in> {N<..x}}" by blast
 | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1323  | 
then show "u i \<le> u p" using upmax by simp  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1324  | 
qed  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1325  | 
moreover have "u p < u y" using \<open>y \<in> U\<close> U_def by auto  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1326  | 
    ultimately have "y \<notin> {N<..x}" using not_le by blast
 | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1327  | 
    moreover have "y > N" using \<open>y \<in> U\<close> U_def \<open>p \<in> {N<..x}\<close> by auto
 | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1328  | 
ultimately have "y > x" by auto  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1329  | 
|
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1330  | 
    have "\<And>i. i \<in> {N<..y} \<Longrightarrow> u i \<le> u y"
 | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1331  | 
proof -  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1332  | 
      fix i assume "i \<in> {N<..y}" show "u i \<le> u y"
 | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1333  | 
proof (cases)  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1334  | 
assume "i = y"  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1335  | 
then show ?thesis by simp  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1336  | 
next  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1337  | 
assume "\<not>(i=y)"  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1338  | 
        then have i:"i \<in> {N<..<y}" using \<open>i \<in> {N<..y}\<close> by simp
 | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1339  | 
have "u i \<le> u p"  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1340  | 
proof (cases)  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1341  | 
assume "i \<le> x"  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1342  | 
          then have "i \<in> {N<..x}" using i by simp
 | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1343  | 
then show ?thesis using a by simp  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1344  | 
next  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1345  | 
assume "\<not>(i \<le> x)"  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1346  | 
then have "i > x" by simp  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1347  | 
          then have *: "i > p" using \<open>p \<in> {N<..x}\<close> by simp
 | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1348  | 
have "i < Inf U" using i y_def by simp  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1349  | 
then have "i \<notin> U" using Inf_nat_def not_less_Least by auto  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1350  | 
then show ?thesis using U_def * by auto  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1351  | 
qed  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1352  | 
then show "u i \<le> u y" using \<open>u p < u y\<close> by auto  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1353  | 
qed  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1354  | 
qed  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1355  | 
    then have "N < y \<and> x < y \<and> (\<forall>i\<in>{N<..y}. u i \<le> u y)" using \<open>y > x\<close> \<open>y > N\<close> by auto
 | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1356  | 
    then show "\<exists>y>N. x < y \<and> (\<forall>i\<in>{N<..y}. u i \<le> u y)" by auto
 | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1357  | 
qed (auto)  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1358  | 
  then obtain r where r: "\<forall>n. N < r n \<and> r n < r (Suc n) \<and> (\<forall>i\<in> {N<..r (Suc n)}. u i \<le> u (r (Suc n)))" by auto
 | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1359  | 
have "strict_mono r" using r by (auto simp: strict_mono_Suc_iff)  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1360  | 
have "incseq (u o r)" unfolding o_def using r by (simp add: incseq_SucI order.strict_implies_order)  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1361  | 
then have "(u o r) \<longlonglongrightarrow> (SUP n. (u o r) n)" using LIMSEQ_SUP by blast  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1362  | 
then have "limsup (u o r) = (SUP n. (u o r) n)" by (simp add: lim_imp_Limsup)  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1363  | 
moreover have "limsup (u o r) \<le> limsup u" using \<open>strict_mono r\<close> by (simp add: limsup_subseq_mono)  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1364  | 
ultimately have "(SUP n. (u o r) n) \<le> limsup u" by simp  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1365  | 
|
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1366  | 
  {
 | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1367  | 
    fix i assume i: "i \<in> {N<..}"
 | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1368  | 
obtain n where "i < r (Suc n)" using \<open>strict_mono r\<close> using Suc_le_eq seq_suble by blast  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1369  | 
    then have "i \<in> {N<..r(Suc n)}" using i by simp
 | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1370  | 
then have "u i \<le> u (r(Suc n))" using r by simp  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1371  | 
then have "u i \<le> (SUP n. (u o r) n)" unfolding o_def by (meson SUP_upper2 UNIV_I)  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1372  | 
}  | 
| 
69260
 
0a9688695a1b
removed relics of ASCII syntax for indexed big operators
 
haftmann 
parents: 
69221 
diff
changeset
 | 
1373  | 
  then have "(SUP i\<in>{N<..}. u i) \<le> (SUP n. (u o r) n)" using SUP_least by blast
 | 
| 
66456
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1374  | 
then have "limsup u \<le> (SUP n. (u o r) n)" unfolding Limsup_def  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1375  | 
by (metis (mono_tags, lifting) INF_lower2 atLeast_Suc_greaterThan atLeast_def eventually_ge_at_top mem_Collect_eq)  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1376  | 
then have "limsup u = (SUP n. (u o r) n)" using \<open>(SUP n. (u o r) n) \<le> limsup u\<close> by simp  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1377  | 
then have "(u o r) \<longlonglongrightarrow> limsup u" using \<open>(u o r) \<longlonglongrightarrow> (SUP n. (u o r) n)\<close> by simp  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1378  | 
then show ?thesis using \<open>strict_mono r\<close> by auto  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1379  | 
qed  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1380  | 
|
| 
69681
 
689997a8a582
redo tagging-related changes from a06b204527e6, 0f4d4a13dc16, and a8faf6f15da7
 
immler 
parents: 
69680 
diff
changeset
 | 
1381  | 
lemma liminf_subseq_lim:  | 
| 
66456
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1382  | 
  fixes u::"nat \<Rightarrow> 'a :: {complete_linorder, linorder_topology}"
 | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1383  | 
shows "\<exists>r::nat\<Rightarrow>nat. strict_mono r \<and> (u o r) \<longlonglongrightarrow> liminf u"  | 
| 
69681
 
689997a8a582
redo tagging-related changes from a06b204527e6, 0f4d4a13dc16, and a8faf6f15da7
 
immler 
parents: 
69680 
diff
changeset
 | 
1384  | 
proof (cases)  | 
| 
66456
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1385  | 
assume "\<forall>n. \<exists>p>n. \<forall>m\<ge>p. u m \<ge> u p"  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1386  | 
then have "\<exists>r. \<forall>n. (\<forall>m\<ge>r n. u m \<ge> u (r n)) \<and> r n < r (Suc n)"  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1387  | 
by (intro dependent_nat_choice) (auto simp: conj_commute)  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1388  | 
then obtain r :: "nat \<Rightarrow> nat" where "strict_mono r" and mono: "\<And>n m. r n \<le> m \<Longrightarrow> u m \<ge> u (r n)"  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1389  | 
by (auto simp: strict_mono_Suc_iff)  | 
| 
69260
 
0a9688695a1b
removed relics of ASCII syntax for indexed big operators
 
haftmann 
parents: 
69221 
diff
changeset
 | 
1390  | 
  define umin where "umin = (\<lambda>n. (INF m\<in>{n..}. u m))"
 | 
| 
66456
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1391  | 
have "incseq umin" unfolding umin_def by (simp add: INF_superset_mono incseq_def)  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1392  | 
then have "umin \<longlonglongrightarrow> liminf u" unfolding umin_def by (metis LIMSEQ_SUP liminf_SUP_INF)  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1393  | 
then have *: "(umin o r) \<longlonglongrightarrow> liminf u" by (simp add: LIMSEQ_subseq_LIMSEQ \<open>strict_mono r\<close>)  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1394  | 
have "\<And>n. umin(r n) = u(r n)" unfolding umin_def using mono  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1395  | 
by (metis le_INF_iff antisym atLeast_def mem_Collect_eq order_refl)  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1396  | 
then have "umin o r = u o r" unfolding o_def by simp  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1397  | 
then have "(u o r) \<longlonglongrightarrow> liminf u" using * by simp  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1398  | 
then show ?thesis using \<open>strict_mono r\<close> by blast  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1399  | 
next  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1400  | 
assume "\<not> (\<forall>n. \<exists>p>n. (\<forall>m\<ge>p. u m \<ge> u p))"  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1401  | 
then obtain N where N: "\<And>p. p > N \<Longrightarrow> \<exists>m>p. u p > u m" by (force simp: not_le le_less)  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1402  | 
  have "\<exists>r. \<forall>n. N < r n \<and> r n < r (Suc n) \<and> (\<forall>i\<in> {N<..r (Suc n)}. u i \<ge> u (r (Suc n)))"
 | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1403  | 
proof (rule dependent_nat_choice)  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1404  | 
fix x assume "N < x"  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1405  | 
    then have a: "finite {N<..x}" "{N<..x} \<noteq> {}" by simp_all
 | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1406  | 
    have "Min {u i |i. i \<in> {N<..x}} \<in> {u i |i. i \<in> {N<..x}}" apply (rule Min_in) using a by (auto)
 | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1407  | 
    then obtain p where "p \<in> {N<..x}" and upmin: "u p = Min{u i |i. i \<in> {N<..x}}" by auto
 | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1408  | 
    define U where "U = {m. m > p \<and> u p > u m}"
 | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1409  | 
    have "U \<noteq> {}" unfolding U_def using N[of p] \<open>p \<in> {N<..x}\<close> by auto
 | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1410  | 
define y where "y = Inf U"  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1411  | 
    then have "y \<in> U" using \<open>U \<noteq> {}\<close> by (simp add: Inf_nat_def1)
 | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1412  | 
    have a: "\<And>i. i \<in> {N<..x} \<Longrightarrow> u i \<ge> u p"
 | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1413  | 
proof -  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1414  | 
      fix i assume "i \<in> {N<..x}"
 | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1415  | 
      then have "u i \<in> {u i |i. i \<in> {N<..x}}" by blast
 | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1416  | 
then show "u i \<ge> u p" using upmin by simp  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1417  | 
qed  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1418  | 
moreover have "u p > u y" using \<open>y \<in> U\<close> U_def by auto  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1419  | 
    ultimately have "y \<notin> {N<..x}" using not_le by blast
 | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1420  | 
    moreover have "y > N" using \<open>y \<in> U\<close> U_def \<open>p \<in> {N<..x}\<close> by auto
 | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1421  | 
ultimately have "y > x" by auto  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1422  | 
|
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1423  | 
    have "\<And>i. i \<in> {N<..y} \<Longrightarrow> u i \<ge> u y"
 | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1424  | 
proof -  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1425  | 
      fix i assume "i \<in> {N<..y}" show "u i \<ge> u y"
 | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1426  | 
proof (cases)  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1427  | 
assume "i = y"  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1428  | 
then show ?thesis by simp  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1429  | 
next  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1430  | 
assume "\<not>(i=y)"  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1431  | 
        then have i:"i \<in> {N<..<y}" using \<open>i \<in> {N<..y}\<close> by simp
 | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1432  | 
have "u i \<ge> u p"  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1433  | 
proof (cases)  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1434  | 
assume "i \<le> x"  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1435  | 
          then have "i \<in> {N<..x}" using i by simp
 | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1436  | 
then show ?thesis using a by simp  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1437  | 
next  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1438  | 
assume "\<not>(i \<le> x)"  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1439  | 
then have "i > x" by simp  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1440  | 
          then have *: "i > p" using \<open>p \<in> {N<..x}\<close> by simp
 | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1441  | 
have "i < Inf U" using i y_def by simp  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1442  | 
then have "i \<notin> U" using Inf_nat_def not_less_Least by auto  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1443  | 
then show ?thesis using U_def * by auto  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1444  | 
qed  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1445  | 
then show "u i \<ge> u y" using \<open>u p > u y\<close> by auto  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1446  | 
qed  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1447  | 
qed  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1448  | 
    then have "N < y \<and> x < y \<and> (\<forall>i\<in>{N<..y}. u i \<ge> u y)" using \<open>y > x\<close> \<open>y > N\<close> by auto
 | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1449  | 
    then show "\<exists>y>N. x < y \<and> (\<forall>i\<in>{N<..y}. u i \<ge> u y)" by auto
 | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1450  | 
qed (auto)  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1451  | 
then obtain r :: "nat \<Rightarrow> nat"  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1452  | 
    where r: "\<forall>n. N < r n \<and> r n < r (Suc n) \<and> (\<forall>i\<in> {N<..r (Suc n)}. u i \<ge> u (r (Suc n)))" by auto
 | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1453  | 
have "strict_mono r" using r by (auto simp: strict_mono_Suc_iff)  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1454  | 
have "decseq (u o r)" unfolding o_def using r by (simp add: decseq_SucI order.strict_implies_order)  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1455  | 
then have "(u o r) \<longlonglongrightarrow> (INF n. (u o r) n)" using LIMSEQ_INF by blast  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1456  | 
then have "liminf (u o r) = (INF n. (u o r) n)" by (simp add: lim_imp_Liminf)  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1457  | 
moreover have "liminf (u o r) \<ge> liminf u" using \<open>strict_mono r\<close> by (simp add: liminf_subseq_mono)  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1458  | 
ultimately have "(INF n. (u o r) n) \<ge> liminf u" by simp  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1459  | 
|
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1460  | 
  {
 | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1461  | 
    fix i assume i: "i \<in> {N<..}"
 | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1462  | 
obtain n where "i < r (Suc n)" using \<open>strict_mono r\<close> using Suc_le_eq seq_suble by blast  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1463  | 
    then have "i \<in> {N<..r(Suc n)}" using i by simp
 | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1464  | 
then have "u i \<ge> u (r(Suc n))" using r by simp  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1465  | 
then have "u i \<ge> (INF n. (u o r) n)" unfolding o_def by (meson INF_lower2 UNIV_I)  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1466  | 
}  | 
| 
69260
 
0a9688695a1b
removed relics of ASCII syntax for indexed big operators
 
haftmann 
parents: 
69221 
diff
changeset
 | 
1467  | 
  then have "(INF i\<in>{N<..}. u i) \<ge> (INF n. (u o r) n)" using INF_greatest by blast
 | 
| 
66456
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1468  | 
then have "liminf u \<ge> (INF n. (u o r) n)" unfolding Liminf_def  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1469  | 
by (metis (mono_tags, lifting) SUP_upper2 atLeast_Suc_greaterThan atLeast_def eventually_ge_at_top mem_Collect_eq)  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1470  | 
then have "liminf u = (INF n. (u o r) n)" using \<open>(INF n. (u o r) n) \<ge> liminf u\<close> by simp  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1471  | 
then have "(u o r) \<longlonglongrightarrow> liminf u" using \<open>(u o r) \<longlonglongrightarrow> (INF n. (u o r) n)\<close> by simp  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1472  | 
then show ?thesis using \<open>strict_mono r\<close> by auto  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1473  | 
qed  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1474  | 
|
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1475  | 
text \<open>The following statement about limsups is reduced to a statement about limits using  | 
| 69566 | 1476  | 
subsequences thanks to \<open>limsup_subseq_lim\<close>. The statement for limits follows for instance from  | 
1477  | 
\<open>tendsto_add_ereal_general\<close>.\<close>  | 
|
| 
66456
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1478  | 
|
| 
69681
 
689997a8a582
redo tagging-related changes from a06b204527e6, 0f4d4a13dc16, and a8faf6f15da7
 
immler 
parents: 
69680 
diff
changeset
 | 
1479  | 
lemma ereal_limsup_add_mono:  | 
| 
66456
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1480  | 
fixes u v::"nat \<Rightarrow> ereal"  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1481  | 
shows "limsup (\<lambda>n. u n + v n) \<le> limsup u + limsup v"  | 
| 
69681
 
689997a8a582
redo tagging-related changes from a06b204527e6, 0f4d4a13dc16, and a8faf6f15da7
 
immler 
parents: 
69680 
diff
changeset
 | 
1482  | 
proof (cases)  | 
| 
66456
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1483  | 
assume "(limsup u = \<infinity>) \<or> (limsup v = \<infinity>)"  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1484  | 
then have "limsup u + limsup v = \<infinity>" by simp  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1485  | 
then show ?thesis by auto  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1486  | 
next  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1487  | 
assume "\<not>((limsup u = \<infinity>) \<or> (limsup v = \<infinity>))"  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1488  | 
then have "limsup u < \<infinity>" "limsup v < \<infinity>" by auto  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1489  | 
|
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1490  | 
define w where "w = (\<lambda>n. u n + v n)"  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1491  | 
obtain r where r: "strict_mono r" "(w o r) \<longlonglongrightarrow> limsup w" using limsup_subseq_lim by auto  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1492  | 
obtain s where s: "strict_mono s" "(u o r o s) \<longlonglongrightarrow> limsup (u o r)" using limsup_subseq_lim by auto  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1493  | 
obtain t where t: "strict_mono t" "(v o r o s o t) \<longlonglongrightarrow> limsup (v o r o s)" using limsup_subseq_lim by auto  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1494  | 
|
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1495  | 
define a where "a = r o s o t"  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1496  | 
have "strict_mono a" using r s t by (simp add: a_def strict_mono_o)  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1497  | 
have l:"(w o a) \<longlonglongrightarrow> limsup w"  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1498  | 
"(u o a) \<longlonglongrightarrow> limsup (u o r)"  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1499  | 
"(v o a) \<longlonglongrightarrow> limsup (v o r o s)"  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1500  | 
apply (metis (no_types, lifting) r(2) s(1) t(1) LIMSEQ_subseq_LIMSEQ a_def comp_assoc)  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1501  | 
apply (metis (no_types, lifting) s(2) t(1) LIMSEQ_subseq_LIMSEQ a_def comp_assoc)  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1502  | 
apply (metis (no_types, lifting) t(2) a_def comp_assoc)  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1503  | 
done  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1504  | 
|
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1505  | 
have "limsup (u o r) \<le> limsup u" by (simp add: limsup_subseq_mono r(1))  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1506  | 
then have a: "limsup (u o r) \<noteq> \<infinity>" using \<open>limsup u < \<infinity>\<close> by auto  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1507  | 
have "limsup (v o r o s) \<le> limsup v"  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1508  | 
by (simp add: comp_assoc limsup_subseq_mono r(1) s(1) strict_mono_o)  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1509  | 
then have b: "limsup (v o r o s) \<noteq> \<infinity>" using \<open>limsup v < \<infinity>\<close> by auto  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1510  | 
|
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1511  | 
have "(\<lambda>n. (u o a) n + (v o a) n) \<longlonglongrightarrow> limsup (u o r) + limsup (v o r o s)"  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1512  | 
using l tendsto_add_ereal_general a b by fastforce  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1513  | 
moreover have "(\<lambda>n. (u o a) n + (v o a) n) = (w o a)" unfolding w_def by auto  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1514  | 
ultimately have "(w o a) \<longlonglongrightarrow> limsup (u o r) + limsup (v o r o s)" by simp  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1515  | 
then have "limsup w = limsup (u o r) + limsup (v o r o s)" using l(1) LIMSEQ_unique by blast  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1516  | 
then have "limsup w \<le> limsup u + limsup v"  | 
| 68752 | 1517  | 
using \<open>limsup (u o r) \<le> limsup u\<close> \<open>limsup (v o r o s) \<le> limsup v\<close> add_mono by simp  | 
| 
66456
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1518  | 
then show ?thesis unfolding w_def by simp  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1519  | 
qed  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1520  | 
|
| 69566 | 1521  | 
text \<open>There is an asymmetry between liminfs and limsups in \<open>ereal\<close>, as \<open>\<infinity> + (-\<infinity>) = \<infinity>\<close>.  | 
| 
66456
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1522  | 
This explains why there are more assumptions in the next lemma dealing with liminfs that in the  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1523  | 
previous one about limsups.\<close>  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1524  | 
|
| 
69681
 
689997a8a582
redo tagging-related changes from a06b204527e6, 0f4d4a13dc16, and a8faf6f15da7
 
immler 
parents: 
69680 
diff
changeset
 | 
1525  | 
lemma ereal_liminf_add_mono:  | 
| 
66456
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1526  | 
fixes u v::"nat \<Rightarrow> ereal"  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1527  | 
assumes "\<not>((liminf u = \<infinity> \<and> liminf v = -\<infinity>) \<or> (liminf u = -\<infinity> \<and> liminf v = \<infinity>))"  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1528  | 
shows "liminf (\<lambda>n. u n + v n) \<ge> liminf u + liminf v"  | 
| 
69681
 
689997a8a582
redo tagging-related changes from a06b204527e6, 0f4d4a13dc16, and a8faf6f15da7
 
immler 
parents: 
69680 
diff
changeset
 | 
1529  | 
proof (cases)  | 
| 
66456
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1530  | 
assume "(liminf u = -\<infinity>) \<or> (liminf v = -\<infinity>)"  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1531  | 
then have *: "liminf u + liminf v = -\<infinity>" using assms by auto  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1532  | 
show ?thesis by (simp add: *)  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1533  | 
next  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1534  | 
assume "\<not>((liminf u = -\<infinity>) \<or> (liminf v = -\<infinity>))"  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1535  | 
then have "liminf u > -\<infinity>" "liminf v > -\<infinity>" by auto  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1536  | 
|
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1537  | 
define w where "w = (\<lambda>n. u n + v n)"  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1538  | 
obtain r where r: "strict_mono r" "(w o r) \<longlonglongrightarrow> liminf w" using liminf_subseq_lim by auto  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1539  | 
obtain s where s: "strict_mono s" "(u o r o s) \<longlonglongrightarrow> liminf (u o r)" using liminf_subseq_lim by auto  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1540  | 
obtain t where t: "strict_mono t" "(v o r o s o t) \<longlonglongrightarrow> liminf (v o r o s)" using liminf_subseq_lim by auto  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1541  | 
|
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1542  | 
define a where "a = r o s o t"  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1543  | 
have "strict_mono a" using r s t by (simp add: a_def strict_mono_o)  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1544  | 
have l:"(w o a) \<longlonglongrightarrow> liminf w"  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1545  | 
"(u o a) \<longlonglongrightarrow> liminf (u o r)"  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1546  | 
"(v o a) \<longlonglongrightarrow> liminf (v o r o s)"  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1547  | 
apply (metis (no_types, lifting) r(2) s(1) t(1) LIMSEQ_subseq_LIMSEQ a_def comp_assoc)  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1548  | 
apply (metis (no_types, lifting) s(2) t(1) LIMSEQ_subseq_LIMSEQ a_def comp_assoc)  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1549  | 
apply (metis (no_types, lifting) t(2) a_def comp_assoc)  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1550  | 
done  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1551  | 
|
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1552  | 
have "liminf (u o r) \<ge> liminf u" by (simp add: liminf_subseq_mono r(1))  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1553  | 
then have a: "liminf (u o r) \<noteq> -\<infinity>" using \<open>liminf u > -\<infinity>\<close> by auto  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1554  | 
have "liminf (v o r o s) \<ge> liminf v"  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1555  | 
by (simp add: comp_assoc liminf_subseq_mono r(1) s(1) strict_mono_o)  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1556  | 
then have b: "liminf (v o r o s) \<noteq> -\<infinity>" using \<open>liminf v > -\<infinity>\<close> by auto  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1557  | 
|
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1558  | 
have "(\<lambda>n. (u o a) n + (v o a) n) \<longlonglongrightarrow> liminf (u o r) + liminf (v o r o s)"  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1559  | 
using l tendsto_add_ereal_general a b by fastforce  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1560  | 
moreover have "(\<lambda>n. (u o a) n + (v o a) n) = (w o a)" unfolding w_def by auto  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1561  | 
ultimately have "(w o a) \<longlonglongrightarrow> liminf (u o r) + liminf (v o r o s)" by simp  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1562  | 
then have "liminf w = liminf (u o r) + liminf (v o r o s)" using l(1) LIMSEQ_unique by blast  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1563  | 
then have "liminf w \<ge> liminf u + liminf v"  | 
| 68752 | 1564  | 
using \<open>liminf (u o r) \<ge> liminf u\<close> \<open>liminf (v o r o s) \<ge> liminf v\<close> add_mono by simp  | 
| 
66456
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1565  | 
then show ?thesis unfolding w_def by simp  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1566  | 
qed  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1567  | 
|
| 
69681
 
689997a8a582
redo tagging-related changes from a06b204527e6, 0f4d4a13dc16, and a8faf6f15da7
 
immler 
parents: 
69680 
diff
changeset
 | 
1568  | 
lemma ereal_limsup_lim_add:  | 
| 
66456
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1569  | 
fixes u v::"nat \<Rightarrow> ereal"  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1570  | 
assumes "u \<longlonglongrightarrow> a" "abs(a) \<noteq> \<infinity>"  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1571  | 
shows "limsup (\<lambda>n. u n + v n) = a + limsup v"  | 
| 
69681
 
689997a8a582
redo tagging-related changes from a06b204527e6, 0f4d4a13dc16, and a8faf6f15da7
 
immler 
parents: 
69680 
diff
changeset
 | 
1572  | 
proof -  | 
| 
66456
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1573  | 
have "limsup u = a" using assms(1) using tendsto_iff_Liminf_eq_Limsup trivial_limit_at_top_linorder by blast  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1574  | 
have "(\<lambda>n. -u n) \<longlonglongrightarrow> -a" using assms(1) by auto  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1575  | 
then have "limsup (\<lambda>n. -u n) = -a" using tendsto_iff_Liminf_eq_Limsup trivial_limit_at_top_linorder by blast  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1576  | 
|
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1577  | 
have "limsup (\<lambda>n. u n + v n) \<le> limsup u + limsup v"  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1578  | 
by (rule ereal_limsup_add_mono)  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1579  | 
then have up: "limsup (\<lambda>n. u n + v n) \<le> a + limsup v" using \<open>limsup u = a\<close> by simp  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1580  | 
|
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1581  | 
have a: "limsup (\<lambda>n. (u n + v n) + (-u n)) \<le> limsup (\<lambda>n. u n + v n) + limsup (\<lambda>n. -u n)"  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1582  | 
by (rule ereal_limsup_add_mono)  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1583  | 
have "eventually (\<lambda>n. u n = ereal(real_of_ereal(u n))) sequentially" using assms  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1584  | 
real_lim_then_eventually_real by auto  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1585  | 
moreover have "\<And>x. x = ereal(real_of_ereal(x)) \<Longrightarrow> x + (-x) = 0"  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1586  | 
by (metis plus_ereal.simps(1) right_minus uminus_ereal.simps(1) zero_ereal_def)  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1587  | 
ultimately have "eventually (\<lambda>n. u n + (-u n) = 0) sequentially"  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1588  | 
by (metis (mono_tags, lifting) eventually_mono)  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1589  | 
moreover have "\<And>n. u n + (-u n) = 0 \<Longrightarrow> u n + v n + (-u n) = v n"  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1590  | 
by (metis add.commute add.left_commute add.left_neutral)  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1591  | 
ultimately have "eventually (\<lambda>n. u n + v n + (-u n) = v n) sequentially"  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1592  | 
using eventually_mono by force  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1593  | 
then have "limsup v = limsup (\<lambda>n. u n + v n + (-u n))" using Limsup_eq by force  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1594  | 
then have "limsup v \<le> limsup (\<lambda>n. u n + v n) -a" using a \<open>limsup (\<lambda>n. -u n) = -a\<close> by (simp add: minus_ereal_def)  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1595  | 
then have "limsup (\<lambda>n. u n + v n) \<ge> a + limsup v" using assms(2) by (metis add.commute ereal_le_minus)  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1596  | 
then show ?thesis using up by simp  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1597  | 
qed  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1598  | 
|
| 
69681
 
689997a8a582
redo tagging-related changes from a06b204527e6, 0f4d4a13dc16, and a8faf6f15da7
 
immler 
parents: 
69680 
diff
changeset
 | 
1599  | 
lemma ereal_limsup_lim_mult:  | 
| 
66456
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1600  | 
fixes u v::"nat \<Rightarrow> ereal"  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1601  | 
assumes "u \<longlonglongrightarrow> a" "a>0" "a \<noteq> \<infinity>"  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1602  | 
shows "limsup (\<lambda>n. u n * v n) = a * limsup v"  | 
| 
69681
 
689997a8a582
redo tagging-related changes from a06b204527e6, 0f4d4a13dc16, and a8faf6f15da7
 
immler 
parents: 
69680 
diff
changeset
 | 
1603  | 
proof -  | 
| 
66456
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1604  | 
define w where "w = (\<lambda>n. u n * v n)"  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1605  | 
obtain r where r: "strict_mono r" "(v o r) \<longlonglongrightarrow> limsup v" using limsup_subseq_lim by auto  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1606  | 
have "(u o r) \<longlonglongrightarrow> a" using assms(1) LIMSEQ_subseq_LIMSEQ r by auto  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1607  | 
with tendsto_mult_ereal[OF this r(2)] have "(\<lambda>n. (u o r) n * (v o r) n) \<longlonglongrightarrow> a * limsup v" using assms(2) assms(3) by auto  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1608  | 
moreover have "\<And>n. (w o r) n = (u o r) n * (v o r) n" unfolding w_def by auto  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1609  | 
ultimately have "(w o r) \<longlonglongrightarrow> a * limsup v" unfolding w_def by presburger  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1610  | 
then have "limsup (w o r) = a * limsup v" by (simp add: tendsto_iff_Liminf_eq_Limsup)  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1611  | 
then have I: "limsup w \<ge> a * limsup v" by (metis limsup_subseq_mono r(1))  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1612  | 
|
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1613  | 
obtain s where s: "strict_mono s" "(w o s) \<longlonglongrightarrow> limsup w" using limsup_subseq_lim by auto  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1614  | 
have *: "(u o s) \<longlonglongrightarrow> a" using assms(1) LIMSEQ_subseq_LIMSEQ s by auto  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1615  | 
have "eventually (\<lambda>n. (u o s) n > 0) sequentially" using assms(2) * order_tendsto_iff by blast  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1616  | 
moreover have "eventually (\<lambda>n. (u o s) n < \<infinity>) sequentially" using assms(3) * order_tendsto_iff by blast  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1617  | 
moreover have "(w o s) n / (u o s) n = (v o s) n" if "(u o s) n > 0" "(u o s) n < \<infinity>" for n  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1618  | 
unfolding w_def using that by (auto simp add: ereal_divide_eq)  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1619  | 
ultimately have "eventually (\<lambda>n. (w o s) n / (u o s) n = (v o s) n) sequentially" using eventually_elim2 by force  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1620  | 
moreover have "(\<lambda>n. (w o s) n / (u o s) n) \<longlonglongrightarrow> (limsup w) / a"  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1621  | 
apply (rule tendsto_divide_ereal[OF s(2) *]) using assms(2) assms(3) by auto  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1622  | 
ultimately have "(v o s) \<longlonglongrightarrow> (limsup w) / a" using Lim_transform_eventually by fastforce  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1623  | 
then have "limsup (v o s) = (limsup w) / a" by (simp add: tendsto_iff_Liminf_eq_Limsup)  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1624  | 
then have "limsup v \<ge> (limsup w) / a" by (metis limsup_subseq_mono s(1))  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1625  | 
then have "a * limsup v \<ge> limsup w" using assms(2) assms(3) by (simp add: ereal_divide_le_pos)  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1626  | 
then show ?thesis using I unfolding w_def by auto  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1627  | 
qed  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1628  | 
|
| 
69681
 
689997a8a582
redo tagging-related changes from a06b204527e6, 0f4d4a13dc16, and a8faf6f15da7
 
immler 
parents: 
69680 
diff
changeset
 | 
1629  | 
lemma ereal_liminf_lim_mult:  | 
| 
66456
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1630  | 
fixes u v::"nat \<Rightarrow> ereal"  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1631  | 
assumes "u \<longlonglongrightarrow> a" "a>0" "a \<noteq> \<infinity>"  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1632  | 
shows "liminf (\<lambda>n. u n * v n) = a * liminf v"  | 
| 
69681
 
689997a8a582
redo tagging-related changes from a06b204527e6, 0f4d4a13dc16, and a8faf6f15da7
 
immler 
parents: 
69680 
diff
changeset
 | 
1633  | 
proof -  | 
| 
66456
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1634  | 
define w where "w = (\<lambda>n. u n * v n)"  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1635  | 
obtain r where r: "strict_mono r" "(v o r) \<longlonglongrightarrow> liminf v" using liminf_subseq_lim by auto  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1636  | 
have "(u o r) \<longlonglongrightarrow> a" using assms(1) LIMSEQ_subseq_LIMSEQ r by auto  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1637  | 
with tendsto_mult_ereal[OF this r(2)] have "(\<lambda>n. (u o r) n * (v o r) n) \<longlonglongrightarrow> a * liminf v" using assms(2) assms(3) by auto  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1638  | 
moreover have "\<And>n. (w o r) n = (u o r) n * (v o r) n" unfolding w_def by auto  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1639  | 
ultimately have "(w o r) \<longlonglongrightarrow> a * liminf v" unfolding w_def by presburger  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1640  | 
then have "liminf (w o r) = a * liminf v" by (simp add: tendsto_iff_Liminf_eq_Limsup)  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1641  | 
then have I: "liminf w \<le> a * liminf v" by (metis liminf_subseq_mono r(1))  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1642  | 
|
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1643  | 
obtain s where s: "strict_mono s" "(w o s) \<longlonglongrightarrow> liminf w" using liminf_subseq_lim by auto  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1644  | 
have *: "(u o s) \<longlonglongrightarrow> a" using assms(1) LIMSEQ_subseq_LIMSEQ s by auto  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1645  | 
have "eventually (\<lambda>n. (u o s) n > 0) sequentially" using assms(2) * order_tendsto_iff by blast  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1646  | 
moreover have "eventually (\<lambda>n. (u o s) n < \<infinity>) sequentially" using assms(3) * order_tendsto_iff by blast  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1647  | 
moreover have "(w o s) n / (u o s) n = (v o s) n" if "(u o s) n > 0" "(u o s) n < \<infinity>" for n  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1648  | 
unfolding w_def using that by (auto simp add: ereal_divide_eq)  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1649  | 
ultimately have "eventually (\<lambda>n. (w o s) n / (u o s) n = (v o s) n) sequentially" using eventually_elim2 by force  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1650  | 
moreover have "(\<lambda>n. (w o s) n / (u o s) n) \<longlonglongrightarrow> (liminf w) / a"  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1651  | 
apply (rule tendsto_divide_ereal[OF s(2) *]) using assms(2) assms(3) by auto  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1652  | 
ultimately have "(v o s) \<longlonglongrightarrow> (liminf w) / a" using Lim_transform_eventually by fastforce  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1653  | 
then have "liminf (v o s) = (liminf w) / a" by (simp add: tendsto_iff_Liminf_eq_Limsup)  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1654  | 
then have "liminf v \<le> (liminf w) / a" by (metis liminf_subseq_mono s(1))  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1655  | 
then have "a * liminf v \<le> liminf w" using assms(2) assms(3) by (simp add: ereal_le_divide_pos)  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1656  | 
then show ?thesis using I unfolding w_def by auto  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1657  | 
qed  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1658  | 
|
| 
69681
 
689997a8a582
redo tagging-related changes from a06b204527e6, 0f4d4a13dc16, and a8faf6f15da7
 
immler 
parents: 
69680 
diff
changeset
 | 
1659  | 
lemma ereal_liminf_lim_add:  | 
| 
66456
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1660  | 
fixes u v::"nat \<Rightarrow> ereal"  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1661  | 
assumes "u \<longlonglongrightarrow> a" "abs(a) \<noteq> \<infinity>"  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1662  | 
shows "liminf (\<lambda>n. u n + v n) = a + liminf v"  | 
| 
69681
 
689997a8a582
redo tagging-related changes from a06b204527e6, 0f4d4a13dc16, and a8faf6f15da7
 
immler 
parents: 
69680 
diff
changeset
 | 
1663  | 
proof -  | 
| 
66456
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1664  | 
have "liminf u = a" using assms(1) tendsto_iff_Liminf_eq_Limsup trivial_limit_at_top_linorder by blast  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1665  | 
then have *: "abs(liminf u) \<noteq> \<infinity>" using assms(2) by auto  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1666  | 
have "(\<lambda>n. -u n) \<longlonglongrightarrow> -a" using assms(1) by auto  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1667  | 
then have "liminf (\<lambda>n. -u n) = -a" using tendsto_iff_Liminf_eq_Limsup trivial_limit_at_top_linorder by blast  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1668  | 
then have **: "abs(liminf (\<lambda>n. -u n)) \<noteq> \<infinity>" using assms(2) by auto  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1669  | 
|
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1670  | 
have "liminf (\<lambda>n. u n + v n) \<ge> liminf u + liminf v"  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1671  | 
apply (rule ereal_liminf_add_mono) using * by auto  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1672  | 
then have up: "liminf (\<lambda>n. u n + v n) \<ge> a + liminf v" using \<open>liminf u = a\<close> by simp  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1673  | 
|
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1674  | 
have a: "liminf (\<lambda>n. (u n + v n) + (-u n)) \<ge> liminf (\<lambda>n. u n + v n) + liminf (\<lambda>n. -u n)"  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1675  | 
apply (rule ereal_liminf_add_mono) using ** by auto  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1676  | 
have "eventually (\<lambda>n. u n = ereal(real_of_ereal(u n))) sequentially" using assms  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1677  | 
real_lim_then_eventually_real by auto  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1678  | 
moreover have "\<And>x. x = ereal(real_of_ereal(x)) \<Longrightarrow> x + (-x) = 0"  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1679  | 
by (metis plus_ereal.simps(1) right_minus uminus_ereal.simps(1) zero_ereal_def)  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1680  | 
ultimately have "eventually (\<lambda>n. u n + (-u n) = 0) sequentially"  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1681  | 
by (metis (mono_tags, lifting) eventually_mono)  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1682  | 
moreover have "\<And>n. u n + (-u n) = 0 \<Longrightarrow> u n + v n + (-u n) = v n"  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1683  | 
by (metis add.commute add.left_commute add.left_neutral)  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1684  | 
ultimately have "eventually (\<lambda>n. u n + v n + (-u n) = v n) sequentially"  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1685  | 
using eventually_mono by force  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1686  | 
then have "liminf v = liminf (\<lambda>n. u n + v n + (-u n))" using Liminf_eq by force  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1687  | 
then have "liminf v \<ge> liminf (\<lambda>n. u n + v n) -a" using a \<open>liminf (\<lambda>n. -u n) = -a\<close> by (simp add: minus_ereal_def)  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1688  | 
then have "liminf (\<lambda>n. u n + v n) \<le> a + liminf v" using assms(2) by (metis add.commute ereal_minus_le)  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1689  | 
then show ?thesis using up by simp  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1690  | 
qed  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1691  | 
|
| 
69681
 
689997a8a582
redo tagging-related changes from a06b204527e6, 0f4d4a13dc16, and a8faf6f15da7
 
immler 
parents: 
69680 
diff
changeset
 | 
1692  | 
lemma ereal_liminf_limsup_add:  | 
| 
66456
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1693  | 
fixes u v::"nat \<Rightarrow> ereal"  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1694  | 
shows "liminf (\<lambda>n. u n + v n) \<le> liminf u + limsup v"  | 
| 
69681
 
689997a8a582
redo tagging-related changes from a06b204527e6, 0f4d4a13dc16, and a8faf6f15da7
 
immler 
parents: 
69680 
diff
changeset
 | 
1695  | 
proof (cases)  | 
| 
66456
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1696  | 
assume "limsup v = \<infinity> \<or> liminf u = \<infinity>"  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1697  | 
then show ?thesis by auto  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1698  | 
next  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1699  | 
assume "\<not>(limsup v = \<infinity> \<or> liminf u = \<infinity>)"  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1700  | 
then have "limsup v < \<infinity>" "liminf u < \<infinity>" by auto  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1701  | 
|
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1702  | 
define w where "w = (\<lambda>n. u n + v n)"  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1703  | 
obtain r where r: "strict_mono r" "(u o r) \<longlonglongrightarrow> liminf u" using liminf_subseq_lim by auto  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1704  | 
obtain s where s: "strict_mono s" "(w o r o s) \<longlonglongrightarrow> liminf (w o r)" using liminf_subseq_lim by auto  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1705  | 
obtain t where t: "strict_mono t" "(v o r o s o t) \<longlonglongrightarrow> limsup (v o r o s)" using limsup_subseq_lim by auto  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1706  | 
|
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1707  | 
define a where "a = r o s o t"  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1708  | 
have "strict_mono a" using r s t by (simp add: a_def strict_mono_o)  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1709  | 
have l:"(u o a) \<longlonglongrightarrow> liminf u"  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1710  | 
"(w o a) \<longlonglongrightarrow> liminf (w o r)"  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1711  | 
"(v o a) \<longlonglongrightarrow> limsup (v o r o s)"  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1712  | 
apply (metis (no_types, lifting) r(2) s(1) t(1) LIMSEQ_subseq_LIMSEQ a_def comp_assoc)  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1713  | 
apply (metis (no_types, lifting) s(2) t(1) LIMSEQ_subseq_LIMSEQ a_def comp_assoc)  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1714  | 
apply (metis (no_types, lifting) t(2) a_def comp_assoc)  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1715  | 
done  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1716  | 
|
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1717  | 
have "liminf (w o r) \<ge> liminf w" by (simp add: liminf_subseq_mono r(1))  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1718  | 
have "limsup (v o r o s) \<le> limsup v"  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1719  | 
by (simp add: comp_assoc limsup_subseq_mono r(1) s(1) strict_mono_o)  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1720  | 
then have b: "limsup (v o r o s) < \<infinity>" using \<open>limsup v < \<infinity>\<close> by auto  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1721  | 
|
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1722  | 
have "(\<lambda>n. (u o a) n + (v o a) n) \<longlonglongrightarrow> liminf u + limsup (v o r o s)"  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1723  | 
apply (rule tendsto_add_ereal_general) using b \<open>liminf u < \<infinity>\<close> l(1) l(3) by force+  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1724  | 
moreover have "(\<lambda>n. (u o a) n + (v o a) n) = (w o a)" unfolding w_def by auto  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1725  | 
ultimately have "(w o a) \<longlonglongrightarrow> liminf u + limsup (v o r o s)" by simp  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1726  | 
then have "liminf (w o r) = liminf u + limsup (v o r o s)" using l(2) using LIMSEQ_unique by blast  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1727  | 
then have "liminf w \<le> liminf u + limsup v"  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1728  | 
using \<open>liminf (w o r) \<ge> liminf w\<close> \<open>limsup (v o r o s) \<le> limsup v\<close>  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1729  | 
by (metis add_mono_thms_linordered_semiring(2) le_less_trans not_less)  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1730  | 
then show ?thesis unfolding w_def by simp  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1731  | 
qed  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1732  | 
|
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1733  | 
lemma ereal_liminf_limsup_minus:  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1734  | 
fixes u v::"nat \<Rightarrow> ereal"  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1735  | 
shows "liminf (\<lambda>n. u n - v n) \<le> limsup u - limsup v"  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1736  | 
unfolding minus_ereal_def  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1737  | 
apply (subst add.commute)  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1738  | 
apply (rule order_trans[OF ereal_liminf_limsup_add])  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1739  | 
using ereal_Limsup_uminus[of sequentially "\<lambda>n. - v n"]  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1740  | 
apply (simp add: add.commute)  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1741  | 
done  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1742  | 
|
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1743  | 
|
| 
69681
 
689997a8a582
redo tagging-related changes from a06b204527e6, 0f4d4a13dc16, and a8faf6f15da7
 
immler 
parents: 
69680 
diff
changeset
 | 
1744  | 
lemma liminf_minus_ennreal:  | 
| 
66456
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1745  | 
fixes u v::"nat \<Rightarrow> ennreal"  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1746  | 
shows "(\<And>n. v n \<le> u n) \<Longrightarrow> liminf (\<lambda>n. u n - v n) \<le> limsup u - limsup v"  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1747  | 
unfolding liminf_SUP_INF limsup_INF_SUP  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1748  | 
including ennreal.lifting  | 
| 
69681
 
689997a8a582
redo tagging-related changes from a06b204527e6, 0f4d4a13dc16, and a8faf6f15da7
 
immler 
parents: 
69680 
diff
changeset
 | 
1749  | 
proof (transfer, clarsimp)  | 
| 
66456
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1750  | 
fix v u :: "nat \<Rightarrow> ereal" assume *: "\<forall>x. 0 \<le> v x" "\<forall>x. 0 \<le> u x" "\<And>n. v n \<le> u n"  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1751  | 
moreover have "0 \<le> limsup u - limsup v"  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1752  | 
using * by (intro ereal_diff_positive Limsup_mono always_eventually) simp  | 
| 69313 | 1753  | 
  moreover have "0 \<le> Sup (u ` {x..})" for x
 | 
| 
66456
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1754  | 
using * by (intro SUP_upper2[of x]) auto  | 
| 69313 | 1755  | 
  moreover have "0 \<le> Sup (v ` {x..})" for x
 | 
| 
66456
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1756  | 
using * by (intro SUP_upper2[of x]) auto  | 
| 
69260
 
0a9688695a1b
removed relics of ASCII syntax for indexed big operators
 
haftmann 
parents: 
69221 
diff
changeset
 | 
1757  | 
  ultimately show "(SUP n. INF n\<in>{n..}. max 0 (u n - v n))
 | 
| 69313 | 1758  | 
            \<le> max 0 ((INF x. max 0 (Sup (u ` {x..}))) - (INF x. max 0 (Sup (v ` {x..}))))"
 | 
| 
66456
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1759  | 
by (auto simp: * ereal_diff_positive max.absorb2 liminf_SUP_INF[symmetric] limsup_INF_SUP[symmetric] ereal_liminf_limsup_minus)  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1760  | 
qed  | 
| 
 
621897f47fab
Various lemmas for HOL-Analysis
 
Manuel Eberl <eberlm@in.tum.de> 
parents: 
66453 
diff
changeset
 | 
1761  | 
|
| 69683 | 1762  | 
subsection "Relate extended reals and the indicator function"  | 
| 
57446
 
06e195515deb
some lemmas about the indicator function; removed lemma sums_def2
 
hoelzl 
parents: 
57418 
diff
changeset
 | 
1763  | 
|
| 59000 | 1764  | 
lemma ereal_indicator_le_0: "(indicator S x::ereal) \<le> 0 \<longleftrightarrow> x \<notin> S"  | 
1765  | 
by (auto split: split_indicator simp: one_ereal_def)  | 
|
1766  | 
||
| 
57446
 
06e195515deb
some lemmas about the indicator function; removed lemma sums_def2
 
hoelzl 
parents: 
57418 
diff
changeset
 | 
1767  | 
lemma ereal_indicator: "ereal (indicator A x) = indicator A x"  | 
| 
 
06e195515deb
some lemmas about the indicator function; removed lemma sums_def2
 
hoelzl 
parents: 
57418 
diff
changeset
 | 
1768  | 
by (auto simp: indicator_def one_ereal_def)  | 
| 
 
06e195515deb
some lemmas about the indicator function; removed lemma sums_def2
 
hoelzl 
parents: 
57418 
diff
changeset
 | 
1769  | 
|
| 
 
06e195515deb
some lemmas about the indicator function; removed lemma sums_def2
 
hoelzl 
parents: 
57418 
diff
changeset
 | 
1770  | 
lemma ereal_mult_indicator: "ereal (x * indicator A y) = ereal x * indicator A y"  | 
| 
 
06e195515deb
some lemmas about the indicator function; removed lemma sums_def2
 
hoelzl 
parents: 
57418 
diff
changeset
 | 
1771  | 
by (simp split: split_indicator)  | 
| 
 
06e195515deb
some lemmas about the indicator function; removed lemma sums_def2
 
hoelzl 
parents: 
57418 
diff
changeset
 | 
1772  | 
|
| 
 
06e195515deb
some lemmas about the indicator function; removed lemma sums_def2
 
hoelzl 
parents: 
57418 
diff
changeset
 | 
1773  | 
lemma ereal_indicator_mult: "ereal (indicator A y * x) = indicator A y * ereal x"  | 
| 
 
06e195515deb
some lemmas about the indicator function; removed lemma sums_def2
 
hoelzl 
parents: 
57418 
diff
changeset
 | 
1774  | 
by (simp split: split_indicator)  | 
| 
 
06e195515deb
some lemmas about the indicator function; removed lemma sums_def2
 
hoelzl 
parents: 
57418 
diff
changeset
 | 
1775  | 
|
| 
 
06e195515deb
some lemmas about the indicator function; removed lemma sums_def2
 
hoelzl 
parents: 
57418 
diff
changeset
 | 
1776  | 
lemma ereal_indicator_nonneg[simp, intro]: "0 \<le> (indicator A x ::ereal)"  | 
| 
 
06e195515deb
some lemmas about the indicator function; removed lemma sums_def2
 
hoelzl 
parents: 
57418 
diff
changeset
 | 
1777  | 
unfolding indicator_def by auto  | 
| 
 
06e195515deb
some lemmas about the indicator function; removed lemma sums_def2
 
hoelzl 
parents: 
57418 
diff
changeset
 | 
1778  | 
|
| 59425 | 1779  | 
lemma indicator_inter_arith_ereal: "indicator A x * indicator B x = (indicator (A \<inter> B) x :: ereal)"  | 
1780  | 
by (simp split: split_indicator)  | 
|
1781  | 
||
| 44125 | 1782  | 
end  |