src/HOL/Multivariate_Analysis/Extended_Real_Limits.thy
author wenzelm
Thu, 30 Oct 2014 22:45:19 +0100
changeset 58839 ccda99401bc8
parent 57865 dcfb33c26f50
child 58877 262572d90bc6
permissions -rw-r--r--
eliminated aliases;
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
41983
2dc6e382a58b standardized headers;
wenzelm
parents: 41981
diff changeset
     1
(*  Title:      HOL/Multivariate_Analysis/Extended_Real_Limits.thy
2dc6e382a58b standardized headers;
wenzelm
parents: 41981
diff changeset
     2
    Author:     Johannes Hölzl, TU München
2dc6e382a58b standardized headers;
wenzelm
parents: 41981
diff changeset
     3
    Author:     Robert Himmelmann, TU München
2dc6e382a58b standardized headers;
wenzelm
parents: 41981
diff changeset
     4
    Author:     Armin Heller, TU München
2dc6e382a58b standardized headers;
wenzelm
parents: 41981
diff changeset
     5
    Author:     Bogdan Grechuk, University of Edinburgh
2dc6e382a58b standardized headers;
wenzelm
parents: 41981
diff changeset
     6
*)
41980
28b51effc5ed split Extended_Reals into parts for Library and Multivariate_Analysis
hoelzl
parents:
diff changeset
     7
28b51effc5ed split Extended_Reals into parts for Library and Multivariate_Analysis
hoelzl
parents:
diff changeset
     8
header {* Limits on the Extended real number line *}
28b51effc5ed split Extended_Reals into parts for Library and Multivariate_Analysis
hoelzl
parents:
diff changeset
     9
28b51effc5ed split Extended_Reals into parts for Library and Multivariate_Analysis
hoelzl
parents:
diff changeset
    10
theory Extended_Real_Limits
57446
06e195515deb some lemmas about the indicator function; removed lemma sums_def2
hoelzl
parents: 57418
diff changeset
    11
  imports Topology_Euclidean_Space "~~/src/HOL/Library/Extended_Real" "~~/src/HOL/Library/Indicator_Function"
41980
28b51effc5ed split Extended_Reals into parts for Library and Multivariate_Analysis
hoelzl
parents:
diff changeset
    12
begin
28b51effc5ed split Extended_Reals into parts for Library and Multivariate_Analysis
hoelzl
parents:
diff changeset
    13
51351
dd1dd470690b generalized lemmas in Extended_Real_Limits
hoelzl
parents: 51340
diff changeset
    14
lemma convergent_limsup_cl:
53788
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
    15
  fixes X :: "nat \<Rightarrow> 'a::{complete_linorder,linorder_topology}"
51351
dd1dd470690b generalized lemmas in Extended_Real_Limits
hoelzl
parents: 51340
diff changeset
    16
  shows "convergent X \<Longrightarrow> limsup X = lim X"
dd1dd470690b generalized lemmas in Extended_Real_Limits
hoelzl
parents: 51340
diff changeset
    17
  by (auto simp: convergent_def limI lim_imp_Limsup)
dd1dd470690b generalized lemmas in Extended_Real_Limits
hoelzl
parents: 51340
diff changeset
    18
dd1dd470690b generalized lemmas in Extended_Real_Limits
hoelzl
parents: 51340
diff changeset
    19
lemma lim_increasing_cl:
dd1dd470690b generalized lemmas in Extended_Real_Limits
hoelzl
parents: 51340
diff changeset
    20
  assumes "\<And>n m. n \<ge> m \<Longrightarrow> f n \<ge> f m"
53788
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
    21
  obtains l where "f ----> (l::'a::{complete_linorder,linorder_topology})"
51351
dd1dd470690b generalized lemmas in Extended_Real_Limits
hoelzl
parents: 51340
diff changeset
    22
proof
dd1dd470690b generalized lemmas in Extended_Real_Limits
hoelzl
parents: 51340
diff changeset
    23
  show "f ----> (SUP n. f n)"
dd1dd470690b generalized lemmas in Extended_Real_Limits
hoelzl
parents: 51340
diff changeset
    24
    using assms
dd1dd470690b generalized lemmas in Extended_Real_Limits
hoelzl
parents: 51340
diff changeset
    25
    by (intro increasing_tendsto)
dd1dd470690b generalized lemmas in Extended_Real_Limits
hoelzl
parents: 51340
diff changeset
    26
       (auto simp: SUP_upper eventually_sequentially less_SUP_iff intro: less_le_trans)
dd1dd470690b generalized lemmas in Extended_Real_Limits
hoelzl
parents: 51340
diff changeset
    27
qed
dd1dd470690b generalized lemmas in Extended_Real_Limits
hoelzl
parents: 51340
diff changeset
    28
dd1dd470690b generalized lemmas in Extended_Real_Limits
hoelzl
parents: 51340
diff changeset
    29
lemma lim_decreasing_cl:
dd1dd470690b generalized lemmas in Extended_Real_Limits
hoelzl
parents: 51340
diff changeset
    30
  assumes "\<And>n m. n \<ge> m \<Longrightarrow> f n \<le> f m"
53788
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
    31
  obtains l where "f ----> (l::'a::{complete_linorder,linorder_topology})"
51351
dd1dd470690b generalized lemmas in Extended_Real_Limits
hoelzl
parents: 51340
diff changeset
    32
proof
dd1dd470690b generalized lemmas in Extended_Real_Limits
hoelzl
parents: 51340
diff changeset
    33
  show "f ----> (INF n. f n)"
dd1dd470690b generalized lemmas in Extended_Real_Limits
hoelzl
parents: 51340
diff changeset
    34
    using assms
dd1dd470690b generalized lemmas in Extended_Real_Limits
hoelzl
parents: 51340
diff changeset
    35
    by (intro decreasing_tendsto)
dd1dd470690b generalized lemmas in Extended_Real_Limits
hoelzl
parents: 51340
diff changeset
    36
       (auto simp: INF_lower eventually_sequentially INF_less_iff intro: le_less_trans)
dd1dd470690b generalized lemmas in Extended_Real_Limits
hoelzl
parents: 51340
diff changeset
    37
qed
dd1dd470690b generalized lemmas in Extended_Real_Limits
hoelzl
parents: 51340
diff changeset
    38
dd1dd470690b generalized lemmas in Extended_Real_Limits
hoelzl
parents: 51340
diff changeset
    39
lemma compact_complete_linorder:
53788
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
    40
  fixes X :: "nat \<Rightarrow> 'a::{complete_linorder,linorder_topology}"
51351
dd1dd470690b generalized lemmas in Extended_Real_Limits
hoelzl
parents: 51340
diff changeset
    41
  shows "\<exists>l r. subseq r \<and> (X \<circ> r) ----> l"
dd1dd470690b generalized lemmas in Extended_Real_Limits
hoelzl
parents: 51340
diff changeset
    42
proof -
dd1dd470690b generalized lemmas in Extended_Real_Limits
hoelzl
parents: 51340
diff changeset
    43
  obtain r where "subseq r" and mono: "monoseq (X \<circ> r)"
53788
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
    44
    using seq_monosub[of X]
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
    45
    unfolding comp_def
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
    46
    by auto
51351
dd1dd470690b generalized lemmas in Extended_Real_Limits
hoelzl
parents: 51340
diff changeset
    47
  then have "(\<forall>n m. m \<le> n \<longrightarrow> (X \<circ> r) m \<le> (X \<circ> r) n) \<or> (\<forall>n m. m \<le> n \<longrightarrow> (X \<circ> r) n \<le> (X \<circ> r) m)"
dd1dd470690b generalized lemmas in Extended_Real_Limits
hoelzl
parents: 51340
diff changeset
    48
    by (auto simp add: monoseq_def)
53788
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
    49
  then obtain l where "(X \<circ> r) ----> l"
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
    50
     using lim_increasing_cl[of "X \<circ> r"] lim_decreasing_cl[of "X \<circ> r"]
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
    51
     by auto
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
    52
  then show ?thesis
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
    53
    using `subseq r` by auto
51351
dd1dd470690b generalized lemmas in Extended_Real_Limits
hoelzl
parents: 51340
diff changeset
    54
qed
dd1dd470690b generalized lemmas in Extended_Real_Limits
hoelzl
parents: 51340
diff changeset
    55
53788
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
    56
lemma compact_UNIV:
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
    57
  "compact (UNIV :: 'a::{complete_linorder,linorder_topology,second_countable_topology} set)"
51351
dd1dd470690b generalized lemmas in Extended_Real_Limits
hoelzl
parents: 51340
diff changeset
    58
  using compact_complete_linorder
dd1dd470690b generalized lemmas in Extended_Real_Limits
hoelzl
parents: 51340
diff changeset
    59
  by (auto simp: seq_compact_eq_compact[symmetric] seq_compact_def)
dd1dd470690b generalized lemmas in Extended_Real_Limits
hoelzl
parents: 51340
diff changeset
    60
dd1dd470690b generalized lemmas in Extended_Real_Limits
hoelzl
parents: 51340
diff changeset
    61
lemma compact_eq_closed:
53788
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
    62
  fixes S :: "'a::{complete_linorder,linorder_topology,second_countable_topology} set"
51351
dd1dd470690b generalized lemmas in Extended_Real_Limits
hoelzl
parents: 51340
diff changeset
    63
  shows "compact S \<longleftrightarrow> closed S"
53788
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
    64
  using closed_inter_compact[of S, OF _ compact_UNIV] compact_imp_closed
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
    65
  by auto
51351
dd1dd470690b generalized lemmas in Extended_Real_Limits
hoelzl
parents: 51340
diff changeset
    66
dd1dd470690b generalized lemmas in Extended_Real_Limits
hoelzl
parents: 51340
diff changeset
    67
lemma closed_contains_Sup_cl:
53788
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
    68
  fixes S :: "'a::{complete_linorder,linorder_topology,second_countable_topology} set"
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
    69
  assumes "closed S"
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
    70
    and "S \<noteq> {}"
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
    71
  shows "Sup S \<in> S"
51351
dd1dd470690b generalized lemmas in Extended_Real_Limits
hoelzl
parents: 51340
diff changeset
    72
proof -
dd1dd470690b generalized lemmas in Extended_Real_Limits
hoelzl
parents: 51340
diff changeset
    73
  from compact_eq_closed[of S] compact_attains_sup[of S] assms
53788
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
    74
  obtain s where S: "s \<in> S" "\<forall>t\<in>S. t \<le> s"
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
    75
    by auto
53374
a14d2a854c02 tuned proofs -- clarified flow of facts wrt. calculation;
wenzelm
parents: 51641
diff changeset
    76
  then have "Sup S = s"
51351
dd1dd470690b generalized lemmas in Extended_Real_Limits
hoelzl
parents: 51340
diff changeset
    77
    by (auto intro!: Sup_eqI)
53374
a14d2a854c02 tuned proofs -- clarified flow of facts wrt. calculation;
wenzelm
parents: 51641
diff changeset
    78
  with S show ?thesis
51351
dd1dd470690b generalized lemmas in Extended_Real_Limits
hoelzl
parents: 51340
diff changeset
    79
    by simp
dd1dd470690b generalized lemmas in Extended_Real_Limits
hoelzl
parents: 51340
diff changeset
    80
qed
dd1dd470690b generalized lemmas in Extended_Real_Limits
hoelzl
parents: 51340
diff changeset
    81
dd1dd470690b generalized lemmas in Extended_Real_Limits
hoelzl
parents: 51340
diff changeset
    82
lemma closed_contains_Inf_cl:
53788
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
    83
  fixes S :: "'a::{complete_linorder,linorder_topology,second_countable_topology} set"
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
    84
  assumes "closed S"
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
    85
    and "S \<noteq> {}"
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
    86
  shows "Inf S \<in> S"
51351
dd1dd470690b generalized lemmas in Extended_Real_Limits
hoelzl
parents: 51340
diff changeset
    87
proof -
dd1dd470690b generalized lemmas in Extended_Real_Limits
hoelzl
parents: 51340
diff changeset
    88
  from compact_eq_closed[of S] compact_attains_inf[of S] assms
53788
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
    89
  obtain s where S: "s \<in> S" "\<forall>t\<in>S. s \<le> t"
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
    90
    by auto
53374
a14d2a854c02 tuned proofs -- clarified flow of facts wrt. calculation;
wenzelm
parents: 51641
diff changeset
    91
  then have "Inf S = s"
51351
dd1dd470690b generalized lemmas in Extended_Real_Limits
hoelzl
parents: 51340
diff changeset
    92
    by (auto intro!: Inf_eqI)
53374
a14d2a854c02 tuned proofs -- clarified flow of facts wrt. calculation;
wenzelm
parents: 51641
diff changeset
    93
  with S show ?thesis
51351
dd1dd470690b generalized lemmas in Extended_Real_Limits
hoelzl
parents: 51340
diff changeset
    94
    by simp
dd1dd470690b generalized lemmas in Extended_Real_Limits
hoelzl
parents: 51340
diff changeset
    95
qed
dd1dd470690b generalized lemmas in Extended_Real_Limits
hoelzl
parents: 51340
diff changeset
    96
53788
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
    97
lemma ereal_dense3:
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
    98
  fixes x y :: ereal
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
    99
  shows "x < y \<Longrightarrow> \<exists>r::rat. x < real_of_rat r \<and> real_of_rat r < y"
51351
dd1dd470690b generalized lemmas in Extended_Real_Limits
hoelzl
parents: 51340
diff changeset
   100
proof (cases x y rule: ereal2_cases, simp_all)
53788
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
   101
  fix r q :: real
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
   102
  assume "r < q"
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
   103
  from Rats_dense_in_real[OF this] show "\<exists>x. r < real_of_rat x \<and> real_of_rat x < q"
51351
dd1dd470690b generalized lemmas in Extended_Real_Limits
hoelzl
parents: 51340
diff changeset
   104
    by (fastforce simp: Rats_def)
dd1dd470690b generalized lemmas in Extended_Real_Limits
hoelzl
parents: 51340
diff changeset
   105
next
53788
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
   106
  fix r :: real
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
   107
  show "\<exists>x. r < real_of_rat x" "\<exists>x. real_of_rat x < r"
51351
dd1dd470690b generalized lemmas in Extended_Real_Limits
hoelzl
parents: 51340
diff changeset
   108
    using gt_ex[of r] lt_ex[of r] Rats_dense_in_real
dd1dd470690b generalized lemmas in Extended_Real_Limits
hoelzl
parents: 51340
diff changeset
   109
    by (auto simp: Rats_def)
dd1dd470690b generalized lemmas in Extended_Real_Limits
hoelzl
parents: 51340
diff changeset
   110
qed
dd1dd470690b generalized lemmas in Extended_Real_Limits
hoelzl
parents: 51340
diff changeset
   111
dd1dd470690b generalized lemmas in Extended_Real_Limits
hoelzl
parents: 51340
diff changeset
   112
instance ereal :: second_countable_topology
dd1dd470690b generalized lemmas in Extended_Real_Limits
hoelzl
parents: 51340
diff changeset
   113
proof (default, intro exI conjI)
dd1dd470690b generalized lemmas in Extended_Real_Limits
hoelzl
parents: 51340
diff changeset
   114
  let ?B = "(\<Union>r\<in>\<rat>. {{..< r}, {r <..}} :: ereal set set)"
53788
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
   115
  show "countable ?B"
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
   116
    by (auto intro: countable_rat)
51351
dd1dd470690b generalized lemmas in Extended_Real_Limits
hoelzl
parents: 51340
diff changeset
   117
  show "open = generate_topology ?B"
dd1dd470690b generalized lemmas in Extended_Real_Limits
hoelzl
parents: 51340
diff changeset
   118
  proof (intro ext iffI)
53788
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
   119
    fix S :: "ereal set"
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
   120
    assume "open S"
51351
dd1dd470690b generalized lemmas in Extended_Real_Limits
hoelzl
parents: 51340
diff changeset
   121
    then show "generate_topology ?B S"
dd1dd470690b generalized lemmas in Extended_Real_Limits
hoelzl
parents: 51340
diff changeset
   122
      unfolding open_generated_order
dd1dd470690b generalized lemmas in Extended_Real_Limits
hoelzl
parents: 51340
diff changeset
   123
    proof induct
dd1dd470690b generalized lemmas in Extended_Real_Limits
hoelzl
parents: 51340
diff changeset
   124
      case (Basis b)
53788
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
   125
      then obtain e where "b = {..<e} \<or> b = {e<..}"
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
   126
        by auto
51351
dd1dd470690b generalized lemmas in Extended_Real_Limits
hoelzl
parents: 51340
diff changeset
   127
      moreover have "{..<e} = \<Union>{{..<x}|x. x \<in> \<rat> \<and> x < e}" "{e<..} = \<Union>{{x<..}|x. x \<in> \<rat> \<and> e < x}"
dd1dd470690b generalized lemmas in Extended_Real_Limits
hoelzl
parents: 51340
diff changeset
   128
        by (auto dest: ereal_dense3
dd1dd470690b generalized lemmas in Extended_Real_Limits
hoelzl
parents: 51340
diff changeset
   129
                 simp del: ex_simps
dd1dd470690b generalized lemmas in Extended_Real_Limits
hoelzl
parents: 51340
diff changeset
   130
                 simp add: ex_simps[symmetric] conj_commute Rats_def image_iff)
dd1dd470690b generalized lemmas in Extended_Real_Limits
hoelzl
parents: 51340
diff changeset
   131
      ultimately show ?case
dd1dd470690b generalized lemmas in Extended_Real_Limits
hoelzl
parents: 51340
diff changeset
   132
        by (auto intro: generate_topology.intros)
dd1dd470690b generalized lemmas in Extended_Real_Limits
hoelzl
parents: 51340
diff changeset
   133
    qed (auto intro: generate_topology.intros)
dd1dd470690b generalized lemmas in Extended_Real_Limits
hoelzl
parents: 51340
diff changeset
   134
  next
53788
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
   135
    fix S
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
   136
    assume "generate_topology ?B S"
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
   137
    then show "open S"
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
   138
      by induct auto
51351
dd1dd470690b generalized lemmas in Extended_Real_Limits
hoelzl
parents: 51340
diff changeset
   139
  qed
dd1dd470690b generalized lemmas in Extended_Real_Limits
hoelzl
parents: 51340
diff changeset
   140
qed
dd1dd470690b generalized lemmas in Extended_Real_Limits
hoelzl
parents: 51340
diff changeset
   141
43920
cedb5cb948fd Rename extreal => ereal
hoelzl
parents: 42950
diff changeset
   142
lemma continuous_on_ereal[intro, simp]: "continuous_on A ereal"
53788
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
   143
  unfolding continuous_on_topological open_ereal_def
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
   144
  by auto
41980
28b51effc5ed split Extended_Reals into parts for Library and Multivariate_Analysis
hoelzl
parents:
diff changeset
   145
43920
cedb5cb948fd Rename extreal => ereal
hoelzl
parents: 42950
diff changeset
   146
lemma continuous_at_ereal[intro, simp]: "continuous (at x) ereal"
53788
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
   147
  using continuous_on_eq_continuous_at[of UNIV]
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
   148
  by auto
41980
28b51effc5ed split Extended_Reals into parts for Library and Multivariate_Analysis
hoelzl
parents:
diff changeset
   149
43920
cedb5cb948fd Rename extreal => ereal
hoelzl
parents: 42950
diff changeset
   150
lemma continuous_within_ereal[intro, simp]: "x \<in> A \<Longrightarrow> continuous (at x within A) ereal"
53788
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
   151
  using continuous_on_eq_continuous_within[of A]
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
   152
  by auto
41980
28b51effc5ed split Extended_Reals into parts for Library and Multivariate_Analysis
hoelzl
parents:
diff changeset
   153
43920
cedb5cb948fd Rename extreal => ereal
hoelzl
parents: 42950
diff changeset
   154
lemma ereal_open_uminus:
cedb5cb948fd Rename extreal => ereal
hoelzl
parents: 42950
diff changeset
   155
  fixes S :: "ereal set"
53788
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
   156
  assumes "open S"
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
   157
  shows "open (uminus ` S)"
51340
5e6296afe08d move Liminf / Limsup lemmas on complete_lattices to its own file
hoelzl
parents: 51329
diff changeset
   158
  using `open S`[unfolded open_generated_order]
5e6296afe08d move Liminf / Limsup lemmas on complete_lattices to its own file
hoelzl
parents: 51329
diff changeset
   159
proof induct
5e6296afe08d move Liminf / Limsup lemmas on complete_lattices to its own file
hoelzl
parents: 51329
diff changeset
   160
  have "range uminus = (UNIV :: ereal set)"
5e6296afe08d move Liminf / Limsup lemmas on complete_lattices to its own file
hoelzl
parents: 51329
diff changeset
   161
    by (auto simp: image_iff ereal_uminus_eq_reorder)
53788
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
   162
  then show "open (range uminus :: ereal set)"
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
   163
    by simp
51340
5e6296afe08d move Liminf / Limsup lemmas on complete_lattices to its own file
hoelzl
parents: 51329
diff changeset
   164
qed (auto simp add: image_Union image_Int)
41980
28b51effc5ed split Extended_Reals into parts for Library and Multivariate_Analysis
hoelzl
parents:
diff changeset
   165
43920
cedb5cb948fd Rename extreal => ereal
hoelzl
parents: 42950
diff changeset
   166
lemma ereal_uminus_complement:
cedb5cb948fd Rename extreal => ereal
hoelzl
parents: 42950
diff changeset
   167
  fixes S :: "ereal set"
41980
28b51effc5ed split Extended_Reals into parts for Library and Multivariate_Analysis
hoelzl
parents:
diff changeset
   168
  shows "uminus ` (- S) = - uminus ` S"
28b51effc5ed split Extended_Reals into parts for Library and Multivariate_Analysis
hoelzl
parents:
diff changeset
   169
  by (auto intro!: bij_image_Compl_eq surjI[of _ uminus] simp: bij_betw_def)
28b51effc5ed split Extended_Reals into parts for Library and Multivariate_Analysis
hoelzl
parents:
diff changeset
   170
43920
cedb5cb948fd Rename extreal => ereal
hoelzl
parents: 42950
diff changeset
   171
lemma ereal_closed_uminus:
cedb5cb948fd Rename extreal => ereal
hoelzl
parents: 42950
diff changeset
   172
  fixes S :: "ereal set"
41980
28b51effc5ed split Extended_Reals into parts for Library and Multivariate_Analysis
hoelzl
parents:
diff changeset
   173
  assumes "closed S"
28b51effc5ed split Extended_Reals into parts for Library and Multivariate_Analysis
hoelzl
parents:
diff changeset
   174
  shows "closed (uminus ` S)"
53788
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
   175
  using assms
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
   176
  unfolding closed_def ereal_uminus_complement[symmetric]
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
   177
  by (rule ereal_open_uminus)
41980
28b51effc5ed split Extended_Reals into parts for Library and Multivariate_Analysis
hoelzl
parents:
diff changeset
   178
43920
cedb5cb948fd Rename extreal => ereal
hoelzl
parents: 42950
diff changeset
   179
lemma ereal_open_closed_aux:
cedb5cb948fd Rename extreal => ereal
hoelzl
parents: 42950
diff changeset
   180
  fixes S :: "ereal set"
53788
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
   181
  assumes "open S"
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
   182
    and "closed S"
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
   183
    and S: "(-\<infinity>) \<notin> S"
41980
28b51effc5ed split Extended_Reals into parts for Library and Multivariate_Analysis
hoelzl
parents:
diff changeset
   184
  shows "S = {}"
49664
f099b8006a3c tuned proofs;
wenzelm
parents: 47761
diff changeset
   185
proof (rule ccontr)
53788
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
   186
  assume "\<not> ?thesis"
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
   187
  then have *: "Inf S \<in> S"
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
   188
    by (metis assms(2) closed_contains_Inf_cl)
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
   189
  {
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
   190
    assume "Inf S = -\<infinity>"
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
   191
    then have False
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
   192
      using * assms(3) by auto
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
   193
  }
41980
28b51effc5ed split Extended_Reals into parts for Library and Multivariate_Analysis
hoelzl
parents:
diff changeset
   194
  moreover
53788
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
   195
  {
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
   196
    assume "Inf S = \<infinity>"
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
   197
    then have "S = {\<infinity>}"
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
   198
      by (metis Inf_eq_PInfty `S \<noteq> {}`)
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
   199
    then have False
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
   200
      by (metis assms(1) not_open_singleton)
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
   201
  }
41980
28b51effc5ed split Extended_Reals into parts for Library and Multivariate_Analysis
hoelzl
parents:
diff changeset
   202
  moreover
53788
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
   203
  {
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
   204
    assume fin: "\<bar>Inf S\<bar> \<noteq> \<infinity>"
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
   205
    from ereal_open_cont_interval[OF assms(1) * fin]
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
   206
    obtain e where e: "e > 0" "{Inf S - e<..<Inf S + e} \<subseteq> S" .
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
   207
    then obtain b where b: "Inf S - e < b" "b < Inf S"
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
   208
      using fin ereal_between[of "Inf S" e] dense[of "Inf S - e"]
44918
6a80fbc4e72c tune simpset for Complete_Lattices
noschinl
parents: 44571
diff changeset
   209
      by auto
53788
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
   210
    then have "b: {Inf S - e <..< Inf S + e}"
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
   211
      using e fin ereal_between[of "Inf S" e]
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
   212
      by auto
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
   213
    then have "b \<in> S"
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
   214
      using e by auto
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
   215
    then have False
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
   216
      using b by (metis complete_lattice_class.Inf_lower leD)
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
   217
  }
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
   218
  ultimately show False
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
   219
    by auto
41980
28b51effc5ed split Extended_Reals into parts for Library and Multivariate_Analysis
hoelzl
parents:
diff changeset
   220
qed
28b51effc5ed split Extended_Reals into parts for Library and Multivariate_Analysis
hoelzl
parents:
diff changeset
   221
43920
cedb5cb948fd Rename extreal => ereal
hoelzl
parents: 42950
diff changeset
   222
lemma ereal_open_closed:
cedb5cb948fd Rename extreal => ereal
hoelzl
parents: 42950
diff changeset
   223
  fixes S :: "ereal set"
53788
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
   224
  shows "open S \<and> closed S \<longleftrightarrow> S = {} \<or> S = UNIV"
49664
f099b8006a3c tuned proofs;
wenzelm
parents: 47761
diff changeset
   225
proof -
53788
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
   226
  {
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
   227
    assume lhs: "open S \<and> closed S"
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
   228
    {
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
   229
      assume "-\<infinity> \<notin> S"
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
   230
      then have "S = {}"
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
   231
        using lhs ereal_open_closed_aux by auto
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
   232
    }
49664
f099b8006a3c tuned proofs;
wenzelm
parents: 47761
diff changeset
   233
    moreover
53788
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
   234
    {
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
   235
      assume "-\<infinity> \<in> S"
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
   236
      then have "- S = {}"
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
   237
        using lhs ereal_open_closed_aux[of "-S"] by auto
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
   238
    }
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
   239
    ultimately have "S = {} \<or> S = UNIV"
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
   240
      by auto
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
   241
  }
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
   242
  then show ?thesis
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
   243
    by auto
41980
28b51effc5ed split Extended_Reals into parts for Library and Multivariate_Analysis
hoelzl
parents:
diff changeset
   244
qed
28b51effc5ed split Extended_Reals into parts for Library and Multivariate_Analysis
hoelzl
parents:
diff changeset
   245
43920
cedb5cb948fd Rename extreal => ereal
hoelzl
parents: 42950
diff changeset
   246
lemma ereal_open_affinity_pos:
43923
ab93d0190a5d add ereal to typeclass infinity
hoelzl
parents: 43920
diff changeset
   247
  fixes S :: "ereal set"
53788
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
   248
  assumes "open S"
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
   249
    and m: "m \<noteq> \<infinity>" "0 < m"
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
   250
    and t: "\<bar>t\<bar> \<noteq> \<infinity>"
41980
28b51effc5ed split Extended_Reals into parts for Library and Multivariate_Analysis
hoelzl
parents:
diff changeset
   251
  shows "open ((\<lambda>x. m * x + t) ` S)"
28b51effc5ed split Extended_Reals into parts for Library and Multivariate_Analysis
hoelzl
parents:
diff changeset
   252
proof -
53788
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
   253
  obtain r where r[simp]: "m = ereal r"
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
   254
    using m by (cases m) auto
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
   255
  obtain p where p[simp]: "t = ereal p"
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
   256
    using t by auto
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
   257
  have "r \<noteq> 0" "0 < r" and m': "m \<noteq> \<infinity>" "m \<noteq> -\<infinity>" "m \<noteq> 0"
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
   258
    using m by auto
55522
23d2cbac6dce tuned proofs;
wenzelm
parents: 54260
diff changeset
   259
  from `open S` [THEN ereal_openE]
23d2cbac6dce tuned proofs;
wenzelm
parents: 54260
diff changeset
   260
  obtain l u where T:
23d2cbac6dce tuned proofs;
wenzelm
parents: 54260
diff changeset
   261
      "open (ereal -` S)"
23d2cbac6dce tuned proofs;
wenzelm
parents: 54260
diff changeset
   262
      "\<infinity> \<in> S \<Longrightarrow> {ereal l<..} \<subseteq> S"
23d2cbac6dce tuned proofs;
wenzelm
parents: 54260
diff changeset
   263
      "- \<infinity> \<in> S \<Longrightarrow> {..<ereal u} \<subseteq> S"
23d2cbac6dce tuned proofs;
wenzelm
parents: 54260
diff changeset
   264
    by blast
41980
28b51effc5ed split Extended_Reals into parts for Library and Multivariate_Analysis
hoelzl
parents:
diff changeset
   265
  let ?f = "(\<lambda>x. m * x + t)"
49664
f099b8006a3c tuned proofs;
wenzelm
parents: 47761
diff changeset
   266
  show ?thesis
f099b8006a3c tuned proofs;
wenzelm
parents: 47761
diff changeset
   267
    unfolding open_ereal_def
41980
28b51effc5ed split Extended_Reals into parts for Library and Multivariate_Analysis
hoelzl
parents:
diff changeset
   268
  proof (intro conjI impI exI subsetI)
43920
cedb5cb948fd Rename extreal => ereal
hoelzl
parents: 42950
diff changeset
   269
    have "ereal -` ?f ` S = (\<lambda>x. r * x + p) ` (ereal -` S)"
41980
28b51effc5ed split Extended_Reals into parts for Library and Multivariate_Analysis
hoelzl
parents:
diff changeset
   270
    proof safe
49664
f099b8006a3c tuned proofs;
wenzelm
parents: 47761
diff changeset
   271
      fix x y
f099b8006a3c tuned proofs;
wenzelm
parents: 47761
diff changeset
   272
      assume "ereal y = m * x + t" "x \<in> S"
43920
cedb5cb948fd Rename extreal => ereal
hoelzl
parents: 42950
diff changeset
   273
      then show "y \<in> (\<lambda>x. r * x + p) ` ereal -` S"
41980
28b51effc5ed split Extended_Reals into parts for Library and Multivariate_Analysis
hoelzl
parents:
diff changeset
   274
        using `r \<noteq> 0` by (cases x) (auto intro!: image_eqI[of _ _ "real x"] split: split_if_asm)
28b51effc5ed split Extended_Reals into parts for Library and Multivariate_Analysis
hoelzl
parents:
diff changeset
   275
    qed force
43920
cedb5cb948fd Rename extreal => ereal
hoelzl
parents: 42950
diff changeset
   276
    then show "open (ereal -` ?f ` S)"
53788
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
   277
      using open_affinity[OF T(1) `r \<noteq> 0`]
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
   278
      by (auto simp: ac_simps)
41980
28b51effc5ed split Extended_Reals into parts for Library and Multivariate_Analysis
hoelzl
parents:
diff changeset
   279
  next
49664
f099b8006a3c tuned proofs;
wenzelm
parents: 47761
diff changeset
   280
    assume "\<infinity> \<in> ?f`S"
53788
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
   281
    with `0 < r` have "\<infinity> \<in> S"
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
   282
      by auto
49664
f099b8006a3c tuned proofs;
wenzelm
parents: 47761
diff changeset
   283
    fix x
f099b8006a3c tuned proofs;
wenzelm
parents: 47761
diff changeset
   284
    assume "x \<in> {ereal (r * l + p)<..}"
53788
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
   285
    then have [simp]: "ereal (r * l + p) < x"
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
   286
      by auto
41980
28b51effc5ed split Extended_Reals into parts for Library and Multivariate_Analysis
hoelzl
parents:
diff changeset
   287
    show "x \<in> ?f`S"
28b51effc5ed split Extended_Reals into parts for Library and Multivariate_Analysis
hoelzl
parents:
diff changeset
   288
    proof (rule image_eqI)
28b51effc5ed split Extended_Reals into parts for Library and Multivariate_Analysis
hoelzl
parents:
diff changeset
   289
      show "x = m * ((x - t) / m) + t"
53788
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
   290
        using m t
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
   291
        by (cases rule: ereal3_cases[of m x t]) auto
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
   292
      have "ereal l < (x - t) / m"
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
   293
        using m t
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
   294
        by (simp add: ereal_less_divide_pos ereal_less_minus)
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
   295
      then show "(x - t) / m \<in> S"
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
   296
        using T(2)[OF `\<infinity> \<in> S`] 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
  next
53788
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
   299
    assume "-\<infinity> \<in> ?f ` S"
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
   300
    with `0 < r` have "-\<infinity> \<in> S"
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
   301
      by auto
43920
cedb5cb948fd Rename extreal => ereal
hoelzl
parents: 42950
diff changeset
   302
    fix x assume "x \<in> {..<ereal (r * u + p)}"
53788
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
   303
    then have [simp]: "x < ereal (r * u + p)"
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
   304
      by auto
41980
28b51effc5ed split Extended_Reals into parts for Library and Multivariate_Analysis
hoelzl
parents:
diff changeset
   305
    show "x \<in> ?f`S"
28b51effc5ed split Extended_Reals into parts for Library and Multivariate_Analysis
hoelzl
parents:
diff changeset
   306
    proof (rule image_eqI)
28b51effc5ed split Extended_Reals into parts for Library and Multivariate_Analysis
hoelzl
parents:
diff changeset
   307
      show "x = m * ((x - t) / m) + t"
53788
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
   308
        using m t
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
   309
        by (cases rule: ereal3_cases[of m x t]) auto
43920
cedb5cb948fd Rename extreal => ereal
hoelzl
parents: 42950
diff changeset
   310
      have "(x - t)/m < ereal u"
53788
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
   311
        using m t
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
   312
        by (simp add: ereal_divide_less_pos ereal_minus_less)
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
   313
      then show "(x - t)/m \<in> S"
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
   314
        using T(3)[OF `-\<infinity> \<in> S`]
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
   315
        by auto
41980
28b51effc5ed split Extended_Reals into parts for Library and Multivariate_Analysis
hoelzl
parents:
diff changeset
   316
    qed
28b51effc5ed split Extended_Reals into parts for Library and Multivariate_Analysis
hoelzl
parents:
diff changeset
   317
  qed
28b51effc5ed split Extended_Reals into parts for Library and Multivariate_Analysis
hoelzl
parents:
diff changeset
   318
qed
28b51effc5ed split Extended_Reals into parts for Library and Multivariate_Analysis
hoelzl
parents:
diff changeset
   319
43920
cedb5cb948fd Rename extreal => ereal
hoelzl
parents: 42950
diff changeset
   320
lemma ereal_open_affinity:
43923
ab93d0190a5d add ereal to typeclass infinity
hoelzl
parents: 43920
diff changeset
   321
  fixes S :: "ereal set"
49664
f099b8006a3c tuned proofs;
wenzelm
parents: 47761
diff changeset
   322
  assumes "open S"
f099b8006a3c tuned proofs;
wenzelm
parents: 47761
diff changeset
   323
    and m: "\<bar>m\<bar> \<noteq> \<infinity>" "m \<noteq> 0"
f099b8006a3c tuned proofs;
wenzelm
parents: 47761
diff changeset
   324
    and t: "\<bar>t\<bar> \<noteq> \<infinity>"
41980
28b51effc5ed split Extended_Reals into parts for Library and Multivariate_Analysis
hoelzl
parents:
diff changeset
   325
  shows "open ((\<lambda>x. m * x + t) ` S)"
28b51effc5ed split Extended_Reals into parts for Library and Multivariate_Analysis
hoelzl
parents:
diff changeset
   326
proof cases
49664
f099b8006a3c tuned proofs;
wenzelm
parents: 47761
diff changeset
   327
  assume "0 < m"
f099b8006a3c tuned proofs;
wenzelm
parents: 47761
diff changeset
   328
  then show ?thesis
53788
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
   329
    using ereal_open_affinity_pos[OF `open S` _ _ t, of m] m
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
   330
    by auto
41980
28b51effc5ed split Extended_Reals into parts for Library and Multivariate_Analysis
hoelzl
parents:
diff changeset
   331
next
28b51effc5ed split Extended_Reals into parts for Library and Multivariate_Analysis
hoelzl
parents:
diff changeset
   332
  assume "\<not> 0 < m" then
53788
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
   333
  have "0 < -m"
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
   334
    using `m \<noteq> 0`
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
   335
    by (cases m) auto
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
   336
  then have m: "-m \<noteq> \<infinity>" "0 < -m"
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
   337
    using `\<bar>m\<bar> \<noteq> \<infinity>`
43920
cedb5cb948fd Rename extreal => ereal
hoelzl
parents: 42950
diff changeset
   338
    by (auto simp: ereal_uminus_eq_reorder)
53788
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
   339
  from ereal_open_affinity_pos[OF ereal_open_uminus[OF `open S`] m t] show ?thesis
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
   340
    unfolding image_image by simp
41980
28b51effc5ed split Extended_Reals into parts for Library and Multivariate_Analysis
hoelzl
parents:
diff changeset
   341
qed
28b51effc5ed split Extended_Reals into parts for Library and Multivariate_Analysis
hoelzl
parents:
diff changeset
   342
43920
cedb5cb948fd Rename extreal => ereal
hoelzl
parents: 42950
diff changeset
   343
lemma ereal_lim_mult:
cedb5cb948fd Rename extreal => ereal
hoelzl
parents: 42950
diff changeset
   344
  fixes X :: "'a \<Rightarrow> ereal"
49664
f099b8006a3c tuned proofs;
wenzelm
parents: 47761
diff changeset
   345
  assumes lim: "(X ---> L) net"
f099b8006a3c tuned proofs;
wenzelm
parents: 47761
diff changeset
   346
    and a: "\<bar>a\<bar> \<noteq> \<infinity>"
41980
28b51effc5ed split Extended_Reals into parts for Library and Multivariate_Analysis
hoelzl
parents:
diff changeset
   347
  shows "((\<lambda>i. a * X i) ---> a * L) net"
28b51effc5ed split Extended_Reals into parts for Library and Multivariate_Analysis
hoelzl
parents:
diff changeset
   348
proof cases
28b51effc5ed split Extended_Reals into parts for Library and Multivariate_Analysis
hoelzl
parents:
diff changeset
   349
  assume "a \<noteq> 0"
28b51effc5ed split Extended_Reals into parts for Library and Multivariate_Analysis
hoelzl
parents:
diff changeset
   350
  show ?thesis
28b51effc5ed split Extended_Reals into parts for Library and Multivariate_Analysis
hoelzl
parents:
diff changeset
   351
  proof (rule topological_tendstoI)
49664
f099b8006a3c tuned proofs;
wenzelm
parents: 47761
diff changeset
   352
    fix S
53788
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
   353
    assume "open S" and "a * L \<in> S"
41980
28b51effc5ed split Extended_Reals into parts for Library and Multivariate_Analysis
hoelzl
parents:
diff changeset
   354
    have "a * L / a = L"
53788
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
   355
      using `a \<noteq> 0` a
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
   356
      by (cases rule: ereal2_cases[of a L]) auto
41980
28b51effc5ed split Extended_Reals into parts for Library and Multivariate_Analysis
hoelzl
parents:
diff changeset
   357
    then have L: "L \<in> ((\<lambda>x. x / a) ` S)"
53788
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
   358
      using `a * L \<in> S`
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
   359
      by (force simp: image_iff)
41980
28b51effc5ed split Extended_Reals into parts for Library and Multivariate_Analysis
hoelzl
parents:
diff changeset
   360
    moreover have "open ((\<lambda>x. x / a) ` S)"
43920
cedb5cb948fd Rename extreal => ereal
hoelzl
parents: 42950
diff changeset
   361
      using ereal_open_affinity[OF `open S`, of "inverse a" 0] `a \<noteq> 0` a
cedb5cb948fd Rename extreal => ereal
hoelzl
parents: 42950
diff changeset
   362
      by (auto simp: ereal_divide_eq ereal_inverse_eq_0 divide_ereal_def ac_simps)
41980
28b51effc5ed split Extended_Reals into parts for Library and Multivariate_Analysis
hoelzl
parents:
diff changeset
   363
    note * = lim[THEN topological_tendstoD, OF this L]
53788
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
   364
    {
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
   365
      fix x
49664
f099b8006a3c tuned proofs;
wenzelm
parents: 47761
diff changeset
   366
      from a `a \<noteq> 0` have "a * (x / a) = x"
53788
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
   367
        by (cases rule: ereal2_cases[of a x]) auto
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
   368
    }
41980
28b51effc5ed split Extended_Reals into parts for Library and Multivariate_Analysis
hoelzl
parents:
diff changeset
   369
    note this[simp]
28b51effc5ed split Extended_Reals into parts for Library and Multivariate_Analysis
hoelzl
parents:
diff changeset
   370
    show "eventually (\<lambda>x. a * X x \<in> S) net"
28b51effc5ed split Extended_Reals into parts for Library and Multivariate_Analysis
hoelzl
parents:
diff changeset
   371
      by (rule eventually_mono[OF _ *]) auto
28b51effc5ed split Extended_Reals into parts for Library and Multivariate_Analysis
hoelzl
parents:
diff changeset
   372
  qed
44918
6a80fbc4e72c tune simpset for Complete_Lattices
noschinl
parents: 44571
diff changeset
   373
qed auto
41980
28b51effc5ed split Extended_Reals into parts for Library and Multivariate_Analysis
hoelzl
parents:
diff changeset
   374
43920
cedb5cb948fd Rename extreal => ereal
hoelzl
parents: 42950
diff changeset
   375
lemma ereal_lim_uminus:
49664
f099b8006a3c tuned proofs;
wenzelm
parents: 47761
diff changeset
   376
  fixes X :: "'a \<Rightarrow> ereal"
53788
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
   377
  shows "((\<lambda>i. - X i) ---> - L) net \<longleftrightarrow> (X ---> L) net"
43920
cedb5cb948fd Rename extreal => ereal
hoelzl
parents: 42950
diff changeset
   378
  using ereal_lim_mult[of X L net "ereal (-1)"]
49664
f099b8006a3c tuned proofs;
wenzelm
parents: 47761
diff changeset
   379
    ereal_lim_mult[of "(\<lambda>i. - X i)" "-L" net "ereal (-1)"]
41980
28b51effc5ed split Extended_Reals into parts for Library and Multivariate_Analysis
hoelzl
parents:
diff changeset
   380
  by (auto simp add: algebra_simps)
28b51effc5ed split Extended_Reals into parts for Library and Multivariate_Analysis
hoelzl
parents:
diff changeset
   381
53788
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
   382
lemma ereal_open_atLeast:
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
   383
  fixes x :: ereal
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
   384
  shows "open {x..} \<longleftrightarrow> x = -\<infinity>"
41980
28b51effc5ed split Extended_Reals into parts for Library and Multivariate_Analysis
hoelzl
parents:
diff changeset
   385
proof
53788
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
   386
  assume "x = -\<infinity>"
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
   387
  then have "{x..} = UNIV"
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
   388
    by auto
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
   389
  then show "open {x..}"
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
   390
    by auto
41980
28b51effc5ed split Extended_Reals into parts for Library and Multivariate_Analysis
hoelzl
parents:
diff changeset
   391
next
28b51effc5ed split Extended_Reals into parts for Library and Multivariate_Analysis
hoelzl
parents:
diff changeset
   392
  assume "open {x..}"
53788
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
   393
  then have "open {x..} \<and> closed {x..}"
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
   394
    by auto
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
   395
  then have "{x..} = UNIV"
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
   396
    unfolding ereal_open_closed by auto
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
   397
  then show "x = -\<infinity>"
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
   398
    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
   399
qed
28b51effc5ed split Extended_Reals into parts for Library and Multivariate_Analysis
hoelzl
parents:
diff changeset
   400
53788
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
   401
lemma open_uminus_iff:
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
   402
  fixes S :: "ereal set"
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
   403
  shows "open (uminus ` S) \<longleftrightarrow> open S"
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
   404
  using ereal_open_uminus[of S] ereal_open_uminus[of "uminus ` S"]
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
   405
  by auto
41980
28b51effc5ed split Extended_Reals into parts for Library and Multivariate_Analysis
hoelzl
parents:
diff changeset
   406
43920
cedb5cb948fd Rename extreal => ereal
hoelzl
parents: 42950
diff changeset
   407
lemma ereal_Liminf_uminus:
53788
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
   408
  fixes f :: "'a \<Rightarrow> ereal"
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
   409
  shows "Liminf net (\<lambda>x. - (f x)) = - Limsup net f"
43920
cedb5cb948fd Rename extreal => ereal
hoelzl
parents: 42950
diff changeset
   410
  using ereal_Limsup_uminus[of _ "(\<lambda>x. - (f x))"] by auto
41980
28b51effc5ed split Extended_Reals into parts for Library and Multivariate_Analysis
hoelzl
parents:
diff changeset
   411
43920
cedb5cb948fd Rename extreal => ereal
hoelzl
parents: 42950
diff changeset
   412
lemma ereal_Lim_uminus:
49664
f099b8006a3c tuned proofs;
wenzelm
parents: 47761
diff changeset
   413
  fixes f :: "'a \<Rightarrow> ereal"
f099b8006a3c tuned proofs;
wenzelm
parents: 47761
diff changeset
   414
  shows "(f ---> f0) net \<longleftrightarrow> ((\<lambda>x. - f x) ---> - f0) net"
41980
28b51effc5ed split Extended_Reals into parts for Library and Multivariate_Analysis
hoelzl
parents:
diff changeset
   415
  using
43920
cedb5cb948fd Rename extreal => ereal
hoelzl
parents: 42950
diff changeset
   416
    ereal_lim_mult[of f f0 net "- 1"]
cedb5cb948fd Rename extreal => ereal
hoelzl
parents: 42950
diff changeset
   417
    ereal_lim_mult[of "\<lambda>x. - (f x)" "-f0" net "- 1"]
cedb5cb948fd Rename extreal => ereal
hoelzl
parents: 42950
diff changeset
   418
  by (auto simp: ereal_uminus_reorder)
41980
28b51effc5ed split Extended_Reals into parts for Library and Multivariate_Analysis
hoelzl
parents:
diff changeset
   419
28b51effc5ed split Extended_Reals into parts for Library and Multivariate_Analysis
hoelzl
parents:
diff changeset
   420
lemma Liminf_PInfty:
43920
cedb5cb948fd Rename extreal => ereal
hoelzl
parents: 42950
diff changeset
   421
  fixes f :: "'a \<Rightarrow> ereal"
41980
28b51effc5ed split Extended_Reals into parts for Library and Multivariate_Analysis
hoelzl
parents:
diff changeset
   422
  assumes "\<not> trivial_limit net"
28b51effc5ed split Extended_Reals into parts for Library and Multivariate_Analysis
hoelzl
parents:
diff changeset
   423
  shows "(f ---> \<infinity>) net \<longleftrightarrow> Liminf net f = \<infinity>"
53788
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
   424
  unfolding tendsto_iff_Liminf_eq_Limsup[OF assms]
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
   425
  using Liminf_le_Limsup[OF assms, of f]
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
   426
  by auto
41980
28b51effc5ed split Extended_Reals into parts for Library and Multivariate_Analysis
hoelzl
parents:
diff changeset
   427
28b51effc5ed split Extended_Reals into parts for Library and Multivariate_Analysis
hoelzl
parents:
diff changeset
   428
lemma Limsup_MInfty:
43920
cedb5cb948fd Rename extreal => ereal
hoelzl
parents: 42950
diff changeset
   429
  fixes f :: "'a \<Rightarrow> ereal"
41980
28b51effc5ed split Extended_Reals into parts for Library and Multivariate_Analysis
hoelzl
parents:
diff changeset
   430
  assumes "\<not> trivial_limit net"
28b51effc5ed split Extended_Reals into parts for Library and Multivariate_Analysis
hoelzl
parents:
diff changeset
   431
  shows "(f ---> -\<infinity>) net \<longleftrightarrow> Limsup net f = -\<infinity>"
53788
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
   432
  unfolding tendsto_iff_Liminf_eq_Limsup[OF assms]
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
   433
  using Liminf_le_Limsup[OF assms, of f]
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
   434
  by auto
41980
28b51effc5ed split Extended_Reals into parts for Library and Multivariate_Analysis
hoelzl
parents:
diff changeset
   435
50104
de19856feb54 move theorems to be more generally useable
hoelzl
parents: 49664
diff changeset
   436
lemma convergent_ereal:
53788
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
   437
  fixes X :: "nat \<Rightarrow> 'a :: {complete_linorder,linorder_topology}"
50104
de19856feb54 move theorems to be more generally useable
hoelzl
parents: 49664
diff changeset
   438
  shows "convergent X \<longleftrightarrow> limsup X = liminf X"
51340
5e6296afe08d move Liminf / Limsup lemmas on complete_lattices to its own file
hoelzl
parents: 51329
diff changeset
   439
  using tendsto_iff_Liminf_eq_Limsup[of sequentially]
50104
de19856feb54 move theorems to be more generally useable
hoelzl
parents: 49664
diff changeset
   440
  by (auto simp: convergent_def)
de19856feb54 move theorems to be more generally useable
hoelzl
parents: 49664
diff changeset
   441
57447
87429bdecad5 import more stuff from the CLT proof; base the lborel measure on interval_measure; remove lebesgue measure
hoelzl
parents: 57446
diff changeset
   442
lemma limsup_le_liminf_real:
87429bdecad5 import more stuff from the CLT proof; base the lborel measure on interval_measure; remove lebesgue measure
hoelzl
parents: 57446
diff changeset
   443
  fixes X :: "nat \<Rightarrow> real" and L :: real
87429bdecad5 import more stuff from the CLT proof; base the lborel measure on interval_measure; remove lebesgue measure
hoelzl
parents: 57446
diff changeset
   444
  assumes 1: "limsup X \<le> L" and 2: "L \<le> liminf X"
87429bdecad5 import more stuff from the CLT proof; base the lborel measure on interval_measure; remove lebesgue measure
hoelzl
parents: 57446
diff changeset
   445
  shows "X ----> L"
87429bdecad5 import more stuff from the CLT proof; base the lborel measure on interval_measure; remove lebesgue measure
hoelzl
parents: 57446
diff changeset
   446
proof -
87429bdecad5 import more stuff from the CLT proof; base the lborel measure on interval_measure; remove lebesgue measure
hoelzl
parents: 57446
diff changeset
   447
  from 1 2 have "limsup X \<le> liminf X" by auto
87429bdecad5 import more stuff from the CLT proof; base the lborel measure on interval_measure; remove lebesgue measure
hoelzl
parents: 57446
diff changeset
   448
  hence 3: "limsup X = liminf X"  
87429bdecad5 import more stuff from the CLT proof; base the lborel measure on interval_measure; remove lebesgue measure
hoelzl
parents: 57446
diff changeset
   449
    apply (subst eq_iff, rule conjI)
87429bdecad5 import more stuff from the CLT proof; base the lborel measure on interval_measure; remove lebesgue measure
hoelzl
parents: 57446
diff changeset
   450
    by (rule Liminf_le_Limsup, auto)
87429bdecad5 import more stuff from the CLT proof; base the lborel measure on interval_measure; remove lebesgue measure
hoelzl
parents: 57446
diff changeset
   451
  hence 4: "convergent (\<lambda>n. ereal (X n))"
87429bdecad5 import more stuff from the CLT proof; base the lborel measure on interval_measure; remove lebesgue measure
hoelzl
parents: 57446
diff changeset
   452
    by (subst convergent_ereal)
87429bdecad5 import more stuff from the CLT proof; base the lborel measure on interval_measure; remove lebesgue measure
hoelzl
parents: 57446
diff changeset
   453
  hence "limsup X = lim (\<lambda>n. ereal(X n))"
87429bdecad5 import more stuff from the CLT proof; base the lborel measure on interval_measure; remove lebesgue measure
hoelzl
parents: 57446
diff changeset
   454
    by (rule convergent_limsup_cl)
87429bdecad5 import more stuff from the CLT proof; base the lborel measure on interval_measure; remove lebesgue measure
hoelzl
parents: 57446
diff changeset
   455
  also from 1 2 3 have "limsup X = L" by auto
87429bdecad5 import more stuff from the CLT proof; base the lborel measure on interval_measure; remove lebesgue measure
hoelzl
parents: 57446
diff changeset
   456
  finally have "lim (\<lambda>n. ereal(X n)) = L" ..
87429bdecad5 import more stuff from the CLT proof; base the lborel measure on interval_measure; remove lebesgue measure
hoelzl
parents: 57446
diff changeset
   457
  hence "(\<lambda>n. ereal (X n)) ----> L"
87429bdecad5 import more stuff from the CLT proof; base the lborel measure on interval_measure; remove lebesgue measure
hoelzl
parents: 57446
diff changeset
   458
    apply (elim subst)
87429bdecad5 import more stuff from the CLT proof; base the lborel measure on interval_measure; remove lebesgue measure
hoelzl
parents: 57446
diff changeset
   459
    by (subst convergent_LIMSEQ_iff [symmetric], rule 4) 
87429bdecad5 import more stuff from the CLT proof; base the lborel measure on interval_measure; remove lebesgue measure
hoelzl
parents: 57446
diff changeset
   460
  thus ?thesis by simp
87429bdecad5 import more stuff from the CLT proof; base the lborel measure on interval_measure; remove lebesgue measure
hoelzl
parents: 57446
diff changeset
   461
qed
87429bdecad5 import more stuff from the CLT proof; base the lborel measure on interval_measure; remove lebesgue measure
hoelzl
parents: 57446
diff changeset
   462
41980
28b51effc5ed split Extended_Reals into parts for Library and Multivariate_Analysis
hoelzl
parents:
diff changeset
   463
lemma liminf_PInfty:
51351
dd1dd470690b generalized lemmas in Extended_Real_Limits
hoelzl
parents: 51340
diff changeset
   464
  fixes X :: "nat \<Rightarrow> ereal"
dd1dd470690b generalized lemmas in Extended_Real_Limits
hoelzl
parents: 51340
diff changeset
   465
  shows "X ----> \<infinity> \<longleftrightarrow> liminf X = \<infinity>"
49664
f099b8006a3c tuned proofs;
wenzelm
parents: 47761
diff changeset
   466
  by (metis Liminf_PInfty trivial_limit_sequentially)
41980
28b51effc5ed split Extended_Reals into parts for Library and Multivariate_Analysis
hoelzl
parents:
diff changeset
   467
28b51effc5ed split Extended_Reals into parts for Library and Multivariate_Analysis
hoelzl
parents:
diff changeset
   468
lemma limsup_MInfty:
51351
dd1dd470690b generalized lemmas in Extended_Real_Limits
hoelzl
parents: 51340
diff changeset
   469
  fixes X :: "nat \<Rightarrow> ereal"
dd1dd470690b generalized lemmas in Extended_Real_Limits
hoelzl
parents: 51340
diff changeset
   470
  shows "X ----> -\<infinity> \<longleftrightarrow> limsup X = -\<infinity>"
49664
f099b8006a3c tuned proofs;
wenzelm
parents: 47761
diff changeset
   471
  by (metis Limsup_MInfty trivial_limit_sequentially)
41980
28b51effc5ed split Extended_Reals into parts for Library and Multivariate_Analysis
hoelzl
parents:
diff changeset
   472
43920
cedb5cb948fd Rename extreal => ereal
hoelzl
parents: 42950
diff changeset
   473
lemma ereal_lim_mono:
53788
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
   474
  fixes X Y :: "nat \<Rightarrow> 'a::linorder_topology"
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
   475
  assumes "\<And>n. N \<le> n \<Longrightarrow> X n \<le> Y n"
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
   476
    and "X ----> x"
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
   477
    and "Y ----> y"
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
   478
  shows "x \<le> y"
51000
c9adb50f74ad use order topology for extended reals
hoelzl
parents: 50104
diff changeset
   479
  using assms(1) by (intro LIMSEQ_le[OF assms(2,3)]) auto
41980
28b51effc5ed split Extended_Reals into parts for Library and Multivariate_Analysis
hoelzl
parents:
diff changeset
   480
43920
cedb5cb948fd Rename extreal => ereal
hoelzl
parents: 42950
diff changeset
   481
lemma incseq_le_ereal:
51351
dd1dd470690b generalized lemmas in Extended_Real_Limits
hoelzl
parents: 51340
diff changeset
   482
  fixes X :: "nat \<Rightarrow> 'a::linorder_topology"
53788
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
   483
  assumes inc: "incseq X"
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
   484
    and lim: "X ----> L"
41980
28b51effc5ed split Extended_Reals into parts for Library and Multivariate_Analysis
hoelzl
parents:
diff changeset
   485
  shows "X N \<le> L"
53788
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
   486
  using inc
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
   487
  by (intro ereal_lim_mono[of N, OF _ tendsto_const lim]) (simp add: incseq_def)
41980
28b51effc5ed split Extended_Reals into parts for Library and Multivariate_Analysis
hoelzl
parents:
diff changeset
   488
49664
f099b8006a3c tuned proofs;
wenzelm
parents: 47761
diff changeset
   489
lemma decseq_ge_ereal:
f099b8006a3c tuned proofs;
wenzelm
parents: 47761
diff changeset
   490
  assumes dec: "decseq X"
51351
dd1dd470690b generalized lemmas in Extended_Real_Limits
hoelzl
parents: 51340
diff changeset
   491
    and lim: "X ----> (L::'a::linorder_topology)"
53788
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
   492
  shows "X N \<ge> L"
49664
f099b8006a3c tuned proofs;
wenzelm
parents: 47761
diff changeset
   493
  using dec by (intro ereal_lim_mono[of N, OF _ lim tendsto_const]) (simp add: decseq_def)
41980
28b51effc5ed split Extended_Reals into parts for Library and Multivariate_Analysis
hoelzl
parents:
diff changeset
   494
28b51effc5ed split Extended_Reals into parts for Library and Multivariate_Analysis
hoelzl
parents:
diff changeset
   495
lemma bounded_abs:
53788
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
   496
  fixes a :: real
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
   497
  assumes "a \<le> x"
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
   498
    and "x \<le> b"
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
   499
  shows "abs x \<le> max (abs a) (abs b)"
49664
f099b8006a3c tuned proofs;
wenzelm
parents: 47761
diff changeset
   500
  by (metis abs_less_iff assms leI le_max_iff_disj
f099b8006a3c tuned proofs;
wenzelm
parents: 47761
diff changeset
   501
    less_eq_real_def less_le_not_le less_minus_iff minus_minus)
41980
28b51effc5ed split Extended_Reals into parts for Library and Multivariate_Analysis
hoelzl
parents:
diff changeset
   502
43920
cedb5cb948fd Rename extreal => ereal
hoelzl
parents: 42950
diff changeset
   503
lemma ereal_Sup_lim:
53788
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
   504
  fixes a :: "'a::{complete_linorder,linorder_topology}"
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
   505
  assumes "\<And>n. b n \<in> s"
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
   506
    and "b ----> a"
41980
28b51effc5ed split Extended_Reals into parts for Library and Multivariate_Analysis
hoelzl
parents:
diff changeset
   507
  shows "a \<le> Sup s"
49664
f099b8006a3c tuned proofs;
wenzelm
parents: 47761
diff changeset
   508
  by (metis Lim_bounded_ereal assms complete_lattice_class.Sup_upper)
41980
28b51effc5ed split Extended_Reals into parts for Library and Multivariate_Analysis
hoelzl
parents:
diff changeset
   509
43920
cedb5cb948fd Rename extreal => ereal
hoelzl
parents: 42950
diff changeset
   510
lemma ereal_Inf_lim:
53788
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
   511
  fixes a :: "'a::{complete_linorder,linorder_topology}"
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
   512
  assumes "\<And>n. b n \<in> s"
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
   513
    and "b ----> a"
41980
28b51effc5ed split Extended_Reals into parts for Library and Multivariate_Analysis
hoelzl
parents:
diff changeset
   514
  shows "Inf s \<le> a"
49664
f099b8006a3c tuned proofs;
wenzelm
parents: 47761
diff changeset
   515
  by (metis Lim_bounded2_ereal assms complete_lattice_class.Inf_lower)
41980
28b51effc5ed split Extended_Reals into parts for Library and Multivariate_Analysis
hoelzl
parents:
diff changeset
   516
43920
cedb5cb948fd Rename extreal => ereal
hoelzl
parents: 42950
diff changeset
   517
lemma SUP_Lim_ereal:
53788
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
   518
  fixes X :: "nat \<Rightarrow> 'a::{complete_linorder,linorder_topology}"
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
   519
  assumes inc: "incseq X"
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
   520
    and l: "X ----> l"
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
   521
  shows "(SUP n. X n) = l"
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
   522
  using LIMSEQ_SUP[OF inc] tendsto_unique[OF trivial_limit_sequentially l]
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
   523
  by simp
41980
28b51effc5ed split Extended_Reals into parts for Library and Multivariate_Analysis
hoelzl
parents:
diff changeset
   524
51351
dd1dd470690b generalized lemmas in Extended_Real_Limits
hoelzl
parents: 51340
diff changeset
   525
lemma INF_Lim_ereal:
53788
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
   526
  fixes X :: "nat \<Rightarrow> 'a::{complete_linorder,linorder_topology}"
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
   527
  assumes dec: "decseq X"
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
   528
    and l: "X ----> l"
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
   529
  shows "(INF n. X n) = l"
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
   530
  using LIMSEQ_INF[OF dec] tendsto_unique[OF trivial_limit_sequentially l]
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
   531
  by simp
41980
28b51effc5ed split Extended_Reals into parts for Library and Multivariate_Analysis
hoelzl
parents:
diff changeset
   532
28b51effc5ed split Extended_Reals into parts for Library and Multivariate_Analysis
hoelzl
parents:
diff changeset
   533
lemma SUP_eq_LIMSEQ:
28b51effc5ed split Extended_Reals into parts for Library and Multivariate_Analysis
hoelzl
parents:
diff changeset
   534
  assumes "mono f"
43920
cedb5cb948fd Rename extreal => ereal
hoelzl
parents: 42950
diff changeset
   535
  shows "(SUP n. ereal (f n)) = ereal x \<longleftrightarrow> f ----> x"
41980
28b51effc5ed split Extended_Reals into parts for Library and Multivariate_Analysis
hoelzl
parents:
diff changeset
   536
proof
43920
cedb5cb948fd Rename extreal => ereal
hoelzl
parents: 42950
diff changeset
   537
  have inc: "incseq (\<lambda>i. ereal (f i))"
41980
28b51effc5ed split Extended_Reals into parts for Library and Multivariate_Analysis
hoelzl
parents:
diff changeset
   538
    using `mono f` unfolding mono_def incseq_def by auto
53788
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
   539
  {
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
   540
    assume "f ----> x"
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
   541
    then have "(\<lambda>i. ereal (f i)) ----> ereal x"
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
   542
      by auto
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
   543
    from SUP_Lim_ereal[OF inc this] show "(SUP n. ereal (f n)) = ereal x" .
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
   544
  next
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
   545
    assume "(SUP n. ereal (f n)) = ereal x"
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
   546
    with LIMSEQ_SUP[OF inc] show "f ----> x" by auto
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
   547
  }
41980
28b51effc5ed split Extended_Reals into parts for Library and Multivariate_Analysis
hoelzl
parents:
diff changeset
   548
qed
28b51effc5ed split Extended_Reals into parts for Library and Multivariate_Analysis
hoelzl
parents:
diff changeset
   549
43920
cedb5cb948fd Rename extreal => ereal
hoelzl
parents: 42950
diff changeset
   550
lemma liminf_ereal_cminus:
49664
f099b8006a3c tuned proofs;
wenzelm
parents: 47761
diff changeset
   551
  fixes f :: "nat \<Rightarrow> ereal"
f099b8006a3c tuned proofs;
wenzelm
parents: 47761
diff changeset
   552
  assumes "c \<noteq> -\<infinity>"
42950
6e5c2a3c69da move lemmas to Extended_Reals and Extended_Real_Limits
hoelzl
parents: 41983
diff changeset
   553
  shows "liminf (\<lambda>x. c - f x) = c - limsup f"
6e5c2a3c69da move lemmas to Extended_Reals and Extended_Real_Limits
hoelzl
parents: 41983
diff changeset
   554
proof (cases c)
49664
f099b8006a3c tuned proofs;
wenzelm
parents: 47761
diff changeset
   555
  case PInf
53788
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
   556
  then show ?thesis
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
   557
    by (simp add: Liminf_const)
42950
6e5c2a3c69da move lemmas to Extended_Reals and Extended_Real_Limits
hoelzl
parents: 41983
diff changeset
   558
next
49664
f099b8006a3c tuned proofs;
wenzelm
parents: 47761
diff changeset
   559
  case (real r)
f099b8006a3c tuned proofs;
wenzelm
parents: 47761
diff changeset
   560
  then show ?thesis
56212
3253aaf73a01 consolidated theorem names containing INFI and SUPR: have INF and SUP instead uniformly
haftmann
parents: 56166
diff changeset
   561
    unfolding liminf_SUP_INF limsup_INF_SUP
3253aaf73a01 consolidated theorem names containing INFI and SUPR: have INF and SUP instead uniformly
haftmann
parents: 56166
diff changeset
   562
    apply (subst INF_ereal_cminus)
42950
6e5c2a3c69da move lemmas to Extended_Reals and Extended_Real_Limits
hoelzl
parents: 41983
diff changeset
   563
    apply auto
56212
3253aaf73a01 consolidated theorem names containing INFI and SUPR: have INF and SUP instead uniformly
haftmann
parents: 56166
diff changeset
   564
    apply (subst SUP_ereal_cminus)
42950
6e5c2a3c69da move lemmas to Extended_Reals and Extended_Real_Limits
hoelzl
parents: 41983
diff changeset
   565
    apply auto
6e5c2a3c69da move lemmas to Extended_Reals and Extended_Real_Limits
hoelzl
parents: 41983
diff changeset
   566
    done
6e5c2a3c69da move lemmas to Extended_Reals and Extended_Real_Limits
hoelzl
parents: 41983
diff changeset
   567
qed (insert `c \<noteq> -\<infinity>`, simp)
6e5c2a3c69da move lemmas to Extended_Reals and Extended_Real_Limits
hoelzl
parents: 41983
diff changeset
   568
49664
f099b8006a3c tuned proofs;
wenzelm
parents: 47761
diff changeset
   569
41980
28b51effc5ed split Extended_Reals into parts for Library and Multivariate_Analysis
hoelzl
parents:
diff changeset
   570
subsubsection {* Continuity *}
28b51effc5ed split Extended_Reals into parts for Library and Multivariate_Analysis
hoelzl
parents:
diff changeset
   571
43920
cedb5cb948fd Rename extreal => ereal
hoelzl
parents: 42950
diff changeset
   572
lemma continuous_at_of_ereal:
cedb5cb948fd Rename extreal => ereal
hoelzl
parents: 42950
diff changeset
   573
  fixes x0 :: ereal
41980
28b51effc5ed split Extended_Reals into parts for Library and Multivariate_Analysis
hoelzl
parents:
diff changeset
   574
  assumes "\<bar>x0\<bar> \<noteq> \<infinity>"
28b51effc5ed split Extended_Reals into parts for Library and Multivariate_Analysis
hoelzl
parents:
diff changeset
   575
  shows "continuous (at x0) real"
49664
f099b8006a3c tuned proofs;
wenzelm
parents: 47761
diff changeset
   576
proof -
53788
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
   577
  {
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
   578
    fix T
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
   579
    assume T: "open T" "real x0 \<in> T"
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
   580
    def S \<equiv> "ereal ` T"
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
   581
    then have "ereal (real x0) \<in> S"
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
   582
      using T by auto
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
   583
    then have "x0 \<in> S"
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
   584
      using assms ereal_real by auto
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
   585
    moreover have "open S"
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
   586
      using open_ereal S_def T by auto
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
   587
    moreover have "\<forall>y\<in>S. real y \<in> T"
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
   588
      using S_def T by auto
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
   589
    ultimately have "\<exists>S. x0 \<in> S \<and> open S \<and> (\<forall>y\<in>S. real y \<in> T)"
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
   590
      by auto
49664
f099b8006a3c tuned proofs;
wenzelm
parents: 47761
diff changeset
   591
  }
53788
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
   592
  then show ?thesis
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
   593
    unfolding continuous_at_open by blast
41980
28b51effc5ed split Extended_Reals into parts for Library and Multivariate_Analysis
hoelzl
parents:
diff changeset
   594
qed
28b51effc5ed split Extended_Reals into parts for Library and Multivariate_Analysis
hoelzl
parents:
diff changeset
   595
57447
87429bdecad5 import more stuff from the CLT proof; base the lborel measure on interval_measure; remove lebesgue measure
hoelzl
parents: 57446
diff changeset
   596
lemma nhds_ereal: "nhds (ereal r) = filtermap ereal (nhds r)"
87429bdecad5 import more stuff from the CLT proof; base the lborel measure on interval_measure; remove lebesgue measure
hoelzl
parents: 57446
diff changeset
   597
  by (simp add: filtermap_nhds_open_map open_ereal continuous_at_of_ereal)
87429bdecad5 import more stuff from the CLT proof; base the lborel measure on interval_measure; remove lebesgue measure
hoelzl
parents: 57446
diff changeset
   598
87429bdecad5 import more stuff from the CLT proof; base the lborel measure on interval_measure; remove lebesgue measure
hoelzl
parents: 57446
diff changeset
   599
lemma at_ereal: "at (ereal r) = filtermap ereal (at r)"
87429bdecad5 import more stuff from the CLT proof; base the lborel measure on interval_measure; remove lebesgue measure
hoelzl
parents: 57446
diff changeset
   600
  by (simp add: filter_eq_iff eventually_at_filter nhds_ereal eventually_filtermap)
87429bdecad5 import more stuff from the CLT proof; base the lborel measure on interval_measure; remove lebesgue measure
hoelzl
parents: 57446
diff changeset
   601
87429bdecad5 import more stuff from the CLT proof; base the lborel measure on interval_measure; remove lebesgue measure
hoelzl
parents: 57446
diff changeset
   602
lemma at_left_ereal: "at_left (ereal r) = filtermap ereal (at_left r)"
87429bdecad5 import more stuff from the CLT proof; base the lborel measure on interval_measure; remove lebesgue measure
hoelzl
parents: 57446
diff changeset
   603
  by (simp add: filter_eq_iff eventually_at_filter nhds_ereal eventually_filtermap)
87429bdecad5 import more stuff from the CLT proof; base the lborel measure on interval_measure; remove lebesgue measure
hoelzl
parents: 57446
diff changeset
   604
87429bdecad5 import more stuff from the CLT proof; base the lborel measure on interval_measure; remove lebesgue measure
hoelzl
parents: 57446
diff changeset
   605
lemma at_right_ereal: "at_right (ereal r) = filtermap ereal (at_right r)"
87429bdecad5 import more stuff from the CLT proof; base the lborel measure on interval_measure; remove lebesgue measure
hoelzl
parents: 57446
diff changeset
   606
  by (simp add: filter_eq_iff eventually_at_filter nhds_ereal eventually_filtermap)
87429bdecad5 import more stuff from the CLT proof; base the lborel measure on interval_measure; remove lebesgue measure
hoelzl
parents: 57446
diff changeset
   607
87429bdecad5 import more stuff from the CLT proof; base the lborel measure on interval_measure; remove lebesgue measure
hoelzl
parents: 57446
diff changeset
   608
lemma
87429bdecad5 import more stuff from the CLT proof; base the lborel measure on interval_measure; remove lebesgue measure
hoelzl
parents: 57446
diff changeset
   609
  shows at_left_PInf: "at_left \<infinity> = filtermap ereal at_top"
87429bdecad5 import more stuff from the CLT proof; base the lborel measure on interval_measure; remove lebesgue measure
hoelzl
parents: 57446
diff changeset
   610
    and at_right_MInf: "at_right (-\<infinity>) = filtermap ereal at_bot"
87429bdecad5 import more stuff from the CLT proof; base the lborel measure on interval_measure; remove lebesgue measure
hoelzl
parents: 57446
diff changeset
   611
  unfolding filter_eq_iff eventually_filtermap eventually_at_top_dense eventually_at_bot_dense
87429bdecad5 import more stuff from the CLT proof; base the lborel measure on interval_measure; remove lebesgue measure
hoelzl
parents: 57446
diff changeset
   612
    eventually_at_left[OF ereal_less(5)] eventually_at_right[OF ereal_less(6)]
87429bdecad5 import more stuff from the CLT proof; base the lborel measure on interval_measure; remove lebesgue measure
hoelzl
parents: 57446
diff changeset
   613
  by (auto simp add: ereal_all_split ereal_ex_split)
87429bdecad5 import more stuff from the CLT proof; base the lborel measure on interval_measure; remove lebesgue measure
hoelzl
parents: 57446
diff changeset
   614
87429bdecad5 import more stuff from the CLT proof; base the lborel measure on interval_measure; remove lebesgue measure
hoelzl
parents: 57446
diff changeset
   615
lemma ereal_tendsto_simps1:
87429bdecad5 import more stuff from the CLT proof; base the lborel measure on interval_measure; remove lebesgue measure
hoelzl
parents: 57446
diff changeset
   616
  "((f \<circ> real) ---> y) (at_left (ereal x)) \<longleftrightarrow> (f ---> y) (at_left x)"
87429bdecad5 import more stuff from the CLT proof; base the lborel measure on interval_measure; remove lebesgue measure
hoelzl
parents: 57446
diff changeset
   617
  "((f \<circ> real) ---> y) (at_right (ereal x)) \<longleftrightarrow> (f ---> y) (at_right x)"
87429bdecad5 import more stuff from the CLT proof; base the lborel measure on interval_measure; remove lebesgue measure
hoelzl
parents: 57446
diff changeset
   618
  "((f \<circ> real) ---> y) (at_left (\<infinity>::ereal)) \<longleftrightarrow> (f ---> y) at_top"
87429bdecad5 import more stuff from the CLT proof; base the lborel measure on interval_measure; remove lebesgue measure
hoelzl
parents: 57446
diff changeset
   619
  "((f \<circ> real) ---> y) (at_right (-\<infinity>::ereal)) \<longleftrightarrow> (f ---> y) at_bot"
87429bdecad5 import more stuff from the CLT proof; base the lborel measure on interval_measure; remove lebesgue measure
hoelzl
parents: 57446
diff changeset
   620
  unfolding tendsto_compose_filtermap at_left_ereal at_right_ereal at_left_PInf at_right_MInf
87429bdecad5 import more stuff from the CLT proof; base the lborel measure on interval_measure; remove lebesgue measure
hoelzl
parents: 57446
diff changeset
   621
  by (auto simp: filtermap_filtermap filtermap_ident)
87429bdecad5 import more stuff from the CLT proof; base the lborel measure on interval_measure; remove lebesgue measure
hoelzl
parents: 57446
diff changeset
   622
87429bdecad5 import more stuff from the CLT proof; base the lborel measure on interval_measure; remove lebesgue measure
hoelzl
parents: 57446
diff changeset
   623
lemma ereal_tendsto_simps2:
87429bdecad5 import more stuff from the CLT proof; base the lborel measure on interval_measure; remove lebesgue measure
hoelzl
parents: 57446
diff changeset
   624
  "((ereal \<circ> f) ---> ereal a) F \<longleftrightarrow> (f ---> a) F"
87429bdecad5 import more stuff from the CLT proof; base the lborel measure on interval_measure; remove lebesgue measure
hoelzl
parents: 57446
diff changeset
   625
  "((ereal \<circ> f) ---> \<infinity>) F \<longleftrightarrow> (LIM x F. f x :> at_top)"
87429bdecad5 import more stuff from the CLT proof; base the lborel measure on interval_measure; remove lebesgue measure
hoelzl
parents: 57446
diff changeset
   626
  "((ereal \<circ> f) ---> -\<infinity>) F \<longleftrightarrow> (LIM x F. f x :> at_bot)"
87429bdecad5 import more stuff from the CLT proof; base the lborel measure on interval_measure; remove lebesgue measure
hoelzl
parents: 57446
diff changeset
   627
  unfolding tendsto_PInfty filterlim_at_top_dense tendsto_MInfty filterlim_at_bot_dense
87429bdecad5 import more stuff from the CLT proof; base the lborel measure on interval_measure; remove lebesgue measure
hoelzl
parents: 57446
diff changeset
   628
  using lim_ereal by (simp_all add: comp_def)
87429bdecad5 import more stuff from the CLT proof; base the lborel measure on interval_measure; remove lebesgue measure
hoelzl
parents: 57446
diff changeset
   629
87429bdecad5 import more stuff from the CLT proof; base the lborel measure on interval_measure; remove lebesgue measure
hoelzl
parents: 57446
diff changeset
   630
lemmas ereal_tendsto_simps = ereal_tendsto_simps1 ereal_tendsto_simps2
87429bdecad5 import more stuff from the CLT proof; base the lborel measure on interval_measure; remove lebesgue measure
hoelzl
parents: 57446
diff changeset
   631
43920
cedb5cb948fd Rename extreal => ereal
hoelzl
parents: 42950
diff changeset
   632
lemma continuous_at_iff_ereal:
53788
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
   633
  fixes f :: "'a::t2_space \<Rightarrow> real"
57447
87429bdecad5 import more stuff from the CLT proof; base the lborel measure on interval_measure; remove lebesgue measure
hoelzl
parents: 57446
diff changeset
   634
  shows "continuous (at x0 within s) f \<longleftrightarrow> continuous (at x0 within s) (ereal \<circ> f)"
87429bdecad5 import more stuff from the CLT proof; base the lborel measure on interval_measure; remove lebesgue measure
hoelzl
parents: 57446
diff changeset
   635
  unfolding continuous_within comp_def lim_ereal ..
41980
28b51effc5ed split Extended_Reals into parts for Library and Multivariate_Analysis
hoelzl
parents:
diff changeset
   636
43920
cedb5cb948fd Rename extreal => ereal
hoelzl
parents: 42950
diff changeset
   637
lemma continuous_on_iff_ereal:
49664
f099b8006a3c tuned proofs;
wenzelm
parents: 47761
diff changeset
   638
  fixes f :: "'a::t2_space => real"
53788
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
   639
  assumes "open A"
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
   640
  shows "continuous_on A f \<longleftrightarrow> continuous_on A (ereal \<circ> f)"
57447
87429bdecad5 import more stuff from the CLT proof; base the lborel measure on interval_measure; remove lebesgue measure
hoelzl
parents: 57446
diff changeset
   641
  unfolding continuous_on_def comp_def lim_ereal ..
41980
28b51effc5ed split Extended_Reals into parts for Library and Multivariate_Analysis
hoelzl
parents:
diff changeset
   642
53788
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
   643
lemma continuous_on_real: "continuous_on (UNIV - {\<infinity>, -\<infinity>::ereal}) real"
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
   644
  using continuous_at_of_ereal continuous_on_eq_continuous_at open_image_ereal
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
   645
  by auto
41980
28b51effc5ed split Extended_Reals into parts for Library and Multivariate_Analysis
hoelzl
parents:
diff changeset
   646
28b51effc5ed split Extended_Reals into parts for Library and Multivariate_Analysis
hoelzl
parents:
diff changeset
   647
lemma continuous_on_iff_real:
53788
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
   648
  fixes f :: "'a::t2_space \<Rightarrow> ereal"
57447
87429bdecad5 import more stuff from the CLT proof; base the lborel measure on interval_measure; remove lebesgue measure
hoelzl
parents: 57446
diff changeset
   649
  assumes *: "\<And>x. x \<in> A \<Longrightarrow> \<bar>f x\<bar> \<noteq> \<infinity>"
41980
28b51effc5ed split Extended_Reals into parts for Library and Multivariate_Analysis
hoelzl
parents:
diff changeset
   650
  shows "continuous_on A f \<longleftrightarrow> continuous_on A (real \<circ> f)"
49664
f099b8006a3c tuned proofs;
wenzelm
parents: 47761
diff changeset
   651
proof -
53788
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
   652
  have "f ` A \<subseteq> UNIV - {\<infinity>, -\<infinity>}"
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
   653
    using assms by force
49664
f099b8006a3c tuned proofs;
wenzelm
parents: 47761
diff changeset
   654
  then have *: "continuous_on (f ` A) real"
f099b8006a3c tuned proofs;
wenzelm
parents: 47761
diff changeset
   655
    using continuous_on_real by (simp add: continuous_on_subset)
53788
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
   656
  have **: "continuous_on ((real \<circ> f) ` A) ereal"
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
   657
    using continuous_on_ereal continuous_on_subset[of "UNIV" "ereal" "(real \<circ> f) ` A"]
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
   658
    by blast
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
   659
  {
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
   660
    assume "continuous_on A f"
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
   661
    then have "continuous_on A (real \<circ> f)"
49664
f099b8006a3c tuned proofs;
wenzelm
parents: 47761
diff changeset
   662
      apply (subst continuous_on_compose)
53788
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
   663
      using *
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
   664
      apply auto
49664
f099b8006a3c tuned proofs;
wenzelm
parents: 47761
diff changeset
   665
      done
f099b8006a3c tuned proofs;
wenzelm
parents: 47761
diff changeset
   666
  }
f099b8006a3c tuned proofs;
wenzelm
parents: 47761
diff changeset
   667
  moreover
53788
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
   668
  {
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
   669
    assume "continuous_on A (real \<circ> f)"
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
   670
    then have "continuous_on A (ereal \<circ> (real \<circ> f))"
49664
f099b8006a3c tuned proofs;
wenzelm
parents: 47761
diff changeset
   671
      apply (subst continuous_on_compose)
53788
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
   672
      using **
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
   673
      apply auto
49664
f099b8006a3c tuned proofs;
wenzelm
parents: 47761
diff changeset
   674
      done
f099b8006a3c tuned proofs;
wenzelm
parents: 47761
diff changeset
   675
    then have "continuous_on A f"
53788
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
   676
      apply (subst continuous_on_eq[of A "ereal \<circ> (real \<circ> f)" f])
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
   677
      using assms ereal_real
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
   678
      apply auto
49664
f099b8006a3c tuned proofs;
wenzelm
parents: 47761
diff changeset
   679
      done
f099b8006a3c tuned proofs;
wenzelm
parents: 47761
diff changeset
   680
  }
53788
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
   681
  ultimately show ?thesis
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
   682
    by auto
41980
28b51effc5ed split Extended_Reals into parts for Library and Multivariate_Analysis
hoelzl
parents:
diff changeset
   683
qed
28b51effc5ed split Extended_Reals into parts for Library and Multivariate_Analysis
hoelzl
parents:
diff changeset
   684
28b51effc5ed split Extended_Reals into parts for Library and Multivariate_Analysis
hoelzl
parents:
diff changeset
   685
lemma continuous_at_const:
53788
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
   686
  fixes f :: "'a::t2_space \<Rightarrow> ereal"
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
   687
  assumes "\<forall>x. f x = C"
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
   688
  shows "\<forall>x. continuous (at x) f"
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
   689
  unfolding continuous_at_open
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
   690
  using assms t1_space
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
   691
  by auto
41980
28b51effc5ed split Extended_Reals into parts for Library and Multivariate_Analysis
hoelzl
parents:
diff changeset
   692
28b51effc5ed split Extended_Reals into parts for Library and Multivariate_Analysis
hoelzl
parents:
diff changeset
   693
lemma mono_closed_real:
28b51effc5ed split Extended_Reals into parts for Library and Multivariate_Analysis
hoelzl
parents:
diff changeset
   694
  fixes S :: "real set"
53788
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
   695
  assumes mono: "\<forall>y z. y \<in> S \<and> y \<le> z \<longrightarrow> z \<in> S"
49664
f099b8006a3c tuned proofs;
wenzelm
parents: 47761
diff changeset
   696
    and "closed S"
53788
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
   697
  shows "S = {} \<or> S = UNIV \<or> (\<exists>a. S = {a..})"
49664
f099b8006a3c tuned proofs;
wenzelm
parents: 47761
diff changeset
   698
proof -
53788
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
   699
  {
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
   700
    assume "S \<noteq> {}"
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
   701
    { assume ex: "\<exists>B. \<forall>x\<in>S. B \<le> x"
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
   702
      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
   703
        using cInf_lower[of _ S] ex by (metis bdd_below_def)
53788
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
   704
      then have "Inf S \<in> S"
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
   705
        apply (subst closed_contains_Inf)
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
   706
        using ex `S \<noteq> {}` `closed S`
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
   707
        apply auto
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
   708
        done
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
   709
      then have "\<forall>x. Inf S \<le> x \<longleftrightarrow> x \<in> S"
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
   710
        using mono[rule_format, of "Inf S"] *
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
   711
        by auto
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
   712
      then have "S = {Inf S ..}"
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
   713
        by auto
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
   714
      then have "\<exists>a. S = {a ..}"
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
   715
        by auto
49664
f099b8006a3c tuned proofs;
wenzelm
parents: 47761
diff changeset
   716
    }
f099b8006a3c tuned proofs;
wenzelm
parents: 47761
diff changeset
   717
    moreover
53788
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
   718
    {
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
   719
      assume "\<not> (\<exists>B. \<forall>x\<in>S. B \<le> x)"
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
   720
      then have nex: "\<forall>B. \<exists>x\<in>S. x < B"
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
   721
        by (simp add: not_le)
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
   722
      {
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
   723
        fix y
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
   724
        obtain x where "x\<in>S" and "x < y"
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
   725
          using nex by auto
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
   726
        then have "y \<in> S"
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
   727
          using mono[rule_format, of x y] by auto
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
   728
      }
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
   729
      then have "S = UNIV"
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
   730
        by auto
49664
f099b8006a3c tuned proofs;
wenzelm
parents: 47761
diff changeset
   731
    }
53788
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
   732
    ultimately have "S = UNIV \<or> (\<exists>a. S = {a ..})"
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
   733
      by blast
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
   734
  }
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
   735
  then show ?thesis
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
   736
    by blast
41980
28b51effc5ed split Extended_Reals into parts for Library and Multivariate_Analysis
hoelzl
parents:
diff changeset
   737
qed
28b51effc5ed split Extended_Reals into parts for Library and Multivariate_Analysis
hoelzl
parents:
diff changeset
   738
43920
cedb5cb948fd Rename extreal => ereal
hoelzl
parents: 42950
diff changeset
   739
lemma mono_closed_ereal:
41980
28b51effc5ed split Extended_Reals into parts for Library and Multivariate_Analysis
hoelzl
parents:
diff changeset
   740
  fixes S :: "real set"
53788
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
   741
  assumes mono: "\<forall>y z. y \<in> S \<and> y \<le> z \<longrightarrow> z \<in> S"
49664
f099b8006a3c tuned proofs;
wenzelm
parents: 47761
diff changeset
   742
    and "closed S"
53788
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
   743
  shows "\<exists>a. S = {x. a \<le> ereal x}"
49664
f099b8006a3c tuned proofs;
wenzelm
parents: 47761
diff changeset
   744
proof -
53788
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
   745
  {
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
   746
    assume "S = {}"
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
   747
    then have ?thesis
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
   748
      apply (rule_tac x=PInfty in exI)
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
   749
      apply auto
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
   750
      done
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
   751
  }
49664
f099b8006a3c tuned proofs;
wenzelm
parents: 47761
diff changeset
   752
  moreover
53788
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
   753
  {
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
   754
    assume "S = UNIV"
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
   755
    then have ?thesis
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
   756
      apply (rule_tac x="-\<infinity>" in exI)
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
   757
      apply auto
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
   758
      done
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
   759
  }
49664
f099b8006a3c tuned proofs;
wenzelm
parents: 47761
diff changeset
   760
  moreover
53788
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
   761
  {
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
   762
    assume "\<exists>a. S = {a ..}"
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
   763
    then obtain a where "S = {a ..}"
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
   764
      by auto
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
   765
    then have ?thesis
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
   766
      apply (rule_tac x="ereal a" in exI)
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
   767
      apply auto
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
   768
      done
49664
f099b8006a3c tuned proofs;
wenzelm
parents: 47761
diff changeset
   769
  }
53788
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
   770
  ultimately show ?thesis
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
   771
    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
   772
qed
28b51effc5ed split Extended_Reals into parts for Library and Multivariate_Analysis
hoelzl
parents:
diff changeset
   773
53788
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
   774
41980
28b51effc5ed split Extended_Reals into parts for Library and Multivariate_Analysis
hoelzl
parents:
diff changeset
   775
subsection {* Sums *}
28b51effc5ed split Extended_Reals into parts for Library and Multivariate_Analysis
hoelzl
parents:
diff changeset
   776
49664
f099b8006a3c tuned proofs;
wenzelm
parents: 47761
diff changeset
   777
lemma setsum_ereal[simp]: "(\<Sum>x\<in>A. ereal (f x)) = ereal (\<Sum>x\<in>A. f x)"
53788
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
   778
proof (cases "finite A")
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
   779
  case True
49664
f099b8006a3c tuned proofs;
wenzelm
parents: 47761
diff changeset
   780
  then show ?thesis by induct auto
53788
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
   781
next
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
   782
  case False
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
   783
  then show ?thesis by simp
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
   784
qed
41980
28b51effc5ed split Extended_Reals into parts for Library and Multivariate_Analysis
hoelzl
parents:
diff changeset
   785
43923
ab93d0190a5d add ereal to typeclass infinity
hoelzl
parents: 43920
diff changeset
   786
lemma setsum_Pinfty:
ab93d0190a5d add ereal to typeclass infinity
hoelzl
parents: 43920
diff changeset
   787
  fixes f :: "'a \<Rightarrow> ereal"
53788
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
   788
  shows "(\<Sum>x\<in>P. f x) = \<infinity> \<longleftrightarrow> finite P \<and> (\<exists>i\<in>P. f i = \<infinity>)"
41980
28b51effc5ed split Extended_Reals into parts for Library and Multivariate_Analysis
hoelzl
parents:
diff changeset
   789
proof safe
28b51effc5ed split Extended_Reals into parts for Library and Multivariate_Analysis
hoelzl
parents:
diff changeset
   790
  assume *: "setsum f P = \<infinity>"
28b51effc5ed split Extended_Reals into parts for Library and Multivariate_Analysis
hoelzl
parents:
diff changeset
   791
  show "finite P"
53788
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
   792
  proof (rule ccontr)
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
   793
    assume "infinite P"
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
   794
    with * show False
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
   795
      by auto
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
   796
  qed
41980
28b51effc5ed split Extended_Reals into parts for Library and Multivariate_Analysis
hoelzl
parents:
diff changeset
   797
  show "\<exists>i\<in>P. f i = \<infinity>"
28b51effc5ed split Extended_Reals into parts for Library and Multivariate_Analysis
hoelzl
parents:
diff changeset
   798
  proof (rule ccontr)
53788
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
   799
    assume "\<not> ?thesis"
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
   800
    then have "\<And>i. i \<in> P \<Longrightarrow> f i \<noteq> \<infinity>"
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
   801
      by auto
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
   802
    with `finite P` have "setsum f P \<noteq> \<infinity>"
41980
28b51effc5ed split Extended_Reals into parts for Library and Multivariate_Analysis
hoelzl
parents:
diff changeset
   803
      by induct auto
53788
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
   804
    with * show False
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
   805
      by auto
41980
28b51effc5ed split Extended_Reals into parts for Library and Multivariate_Analysis
hoelzl
parents:
diff changeset
   806
  qed
28b51effc5ed split Extended_Reals into parts for Library and Multivariate_Analysis
hoelzl
parents:
diff changeset
   807
next
53788
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
   808
  fix i
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
   809
  assume "finite P" and "i \<in> P" and "f i = \<infinity>"
49664
f099b8006a3c tuned proofs;
wenzelm
parents: 47761
diff changeset
   810
  then show "setsum f P = \<infinity>"
41980
28b51effc5ed split Extended_Reals into parts for Library and Multivariate_Analysis
hoelzl
parents:
diff changeset
   811
  proof induct
28b51effc5ed split Extended_Reals into parts for Library and Multivariate_Analysis
hoelzl
parents:
diff changeset
   812
    case (insert x A)
28b51effc5ed split Extended_Reals into parts for Library and Multivariate_Analysis
hoelzl
parents:
diff changeset
   813
    show ?case using insert by (cases "x = i") auto
28b51effc5ed split Extended_Reals into parts for Library and Multivariate_Analysis
hoelzl
parents:
diff changeset
   814
  qed simp
28b51effc5ed split Extended_Reals into parts for Library and Multivariate_Analysis
hoelzl
parents:
diff changeset
   815
qed
28b51effc5ed split Extended_Reals into parts for Library and Multivariate_Analysis
hoelzl
parents:
diff changeset
   816
28b51effc5ed split Extended_Reals into parts for Library and Multivariate_Analysis
hoelzl
parents:
diff changeset
   817
lemma setsum_Inf:
43923
ab93d0190a5d add ereal to typeclass infinity
hoelzl
parents: 43920
diff changeset
   818
  fixes f :: "'a \<Rightarrow> ereal"
53788
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
   819
  shows "\<bar>setsum f A\<bar> = \<infinity> \<longleftrightarrow> finite A \<and> (\<exists>i\<in>A. \<bar>f i\<bar> = \<infinity>)"
41980
28b51effc5ed split Extended_Reals into parts for Library and Multivariate_Analysis
hoelzl
parents:
diff changeset
   820
proof
28b51effc5ed split Extended_Reals into parts for Library and Multivariate_Analysis
hoelzl
parents:
diff changeset
   821
  assume *: "\<bar>setsum f A\<bar> = \<infinity>"
53788
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
   822
  have "finite A"
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
   823
    by (rule ccontr) (insert *, auto)
41980
28b51effc5ed split Extended_Reals into parts for Library and Multivariate_Analysis
hoelzl
parents:
diff changeset
   824
  moreover have "\<exists>i\<in>A. \<bar>f i\<bar> = \<infinity>"
28b51effc5ed split Extended_Reals into parts for Library and Multivariate_Analysis
hoelzl
parents:
diff changeset
   825
  proof (rule ccontr)
53788
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
   826
    assume "\<not> ?thesis"
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
   827
    then have "\<forall>i\<in>A. \<exists>r. f i = ereal r"
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
   828
      by auto
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
   829
    from bchoice[OF this] obtain r where "\<forall>x\<in>A. f x = ereal (r x)" ..
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
   830
    with * show False
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
   831
      by auto
41980
28b51effc5ed split Extended_Reals into parts for Library and Multivariate_Analysis
hoelzl
parents:
diff changeset
   832
  qed
53788
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
   833
  ultimately show "finite A \<and> (\<exists>i\<in>A. \<bar>f i\<bar> = \<infinity>)"
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
   834
    by auto
41980
28b51effc5ed split Extended_Reals into parts for Library and Multivariate_Analysis
hoelzl
parents:
diff changeset
   835
next
28b51effc5ed split Extended_Reals into parts for Library and Multivariate_Analysis
hoelzl
parents:
diff changeset
   836
  assume "finite A \<and> (\<exists>i\<in>A. \<bar>f i\<bar> = \<infinity>)"
53788
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
   837
  then obtain i where "finite A" "i \<in> A" and "\<bar>f i\<bar> = \<infinity>"
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
   838
    by auto
41980
28b51effc5ed split Extended_Reals into parts for Library and Multivariate_Analysis
hoelzl
parents:
diff changeset
   839
  then show "\<bar>setsum f A\<bar> = \<infinity>"
28b51effc5ed split Extended_Reals into parts for Library and Multivariate_Analysis
hoelzl
parents:
diff changeset
   840
  proof induct
53788
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
   841
    case (insert j A)
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
   842
    then show ?case
43920
cedb5cb948fd Rename extreal => ereal
hoelzl
parents: 42950
diff changeset
   843
      by (cases rule: ereal3_cases[of "f i" "f j" "setsum f A"]) auto
41980
28b51effc5ed split Extended_Reals into parts for Library and Multivariate_Analysis
hoelzl
parents:
diff changeset
   844
  qed simp
28b51effc5ed split Extended_Reals into parts for Library and Multivariate_Analysis
hoelzl
parents:
diff changeset
   845
qed
28b51effc5ed split Extended_Reals into parts for Library and Multivariate_Analysis
hoelzl
parents:
diff changeset
   846
43920
cedb5cb948fd Rename extreal => ereal
hoelzl
parents: 42950
diff changeset
   847
lemma setsum_real_of_ereal:
43923
ab93d0190a5d add ereal to typeclass infinity
hoelzl
parents: 43920
diff changeset
   848
  fixes f :: "'i \<Rightarrow> ereal"
41980
28b51effc5ed split Extended_Reals into parts for Library and Multivariate_Analysis
hoelzl
parents:
diff changeset
   849
  assumes "\<And>x. x \<in> S \<Longrightarrow> \<bar>f x\<bar> \<noteq> \<infinity>"
28b51effc5ed split Extended_Reals into parts for Library and Multivariate_Analysis
hoelzl
parents:
diff changeset
   850
  shows "(\<Sum>x\<in>S. real (f x)) = real (setsum f S)"
28b51effc5ed split Extended_Reals into parts for Library and Multivariate_Analysis
hoelzl
parents:
diff changeset
   851
proof -
43920
cedb5cb948fd Rename extreal => ereal
hoelzl
parents: 42950
diff changeset
   852
  have "\<forall>x\<in>S. \<exists>r. f x = ereal r"
41980
28b51effc5ed split Extended_Reals into parts for Library and Multivariate_Analysis
hoelzl
parents:
diff changeset
   853
  proof
53788
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
   854
    fix x
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
   855
    assume "x \<in> S"
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
   856
    from assms[OF this] show "\<exists>r. f x = ereal r"
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
   857
      by (cases "f x") auto
41980
28b51effc5ed split Extended_Reals into parts for Library and Multivariate_Analysis
hoelzl
parents:
diff changeset
   858
  qed
53788
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
   859
  from bchoice[OF this] obtain r where "\<forall>x\<in>S. f x = ereal (r x)" ..
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
   860
  then show ?thesis
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
   861
    by simp
41980
28b51effc5ed split Extended_Reals into parts for Library and Multivariate_Analysis
hoelzl
parents:
diff changeset
   862
qed
28b51effc5ed split Extended_Reals into parts for Library and Multivariate_Analysis
hoelzl
parents:
diff changeset
   863
43920
cedb5cb948fd Rename extreal => ereal
hoelzl
parents: 42950
diff changeset
   864
lemma setsum_ereal_0:
53788
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
   865
  fixes f :: "'a \<Rightarrow> ereal"
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
   866
  assumes "finite A"
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
   867
    and "\<And>i. i \<in> A \<Longrightarrow> 0 \<le> f i"
41980
28b51effc5ed split Extended_Reals into parts for Library and Multivariate_Analysis
hoelzl
parents:
diff changeset
   868
  shows "(\<Sum>x\<in>A. f x) = 0 \<longleftrightarrow> (\<forall>i\<in>A. f i = 0)"
28b51effc5ed split Extended_Reals into parts for Library and Multivariate_Analysis
hoelzl
parents:
diff changeset
   869
proof
28b51effc5ed split Extended_Reals into parts for Library and Multivariate_Analysis
hoelzl
parents:
diff changeset
   870
  assume *: "(\<Sum>x\<in>A. f x) = 0"
53788
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
   871
  then have "(\<Sum>x\<in>A. f x) \<noteq> \<infinity>"
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
   872
    by auto
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
   873
  then have "\<forall>i\<in>A. \<bar>f i\<bar> \<noteq> \<infinity>"
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
   874
    using assms by (force simp: setsum_Pinfty)
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
   875
  then have "\<forall>i\<in>A. \<exists>r. f i = ereal r"
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
   876
    by auto
41980
28b51effc5ed split Extended_Reals into parts for Library and Multivariate_Analysis
hoelzl
parents:
diff changeset
   877
  from bchoice[OF this] * assms show "\<forall>i\<in>A. f i = 0"
28b51effc5ed split Extended_Reals into parts for Library and Multivariate_Analysis
hoelzl
parents:
diff changeset
   878
    using setsum_nonneg_eq_0_iff[of A "\<lambda>i. real (f i)"] by auto
57418
6ab1c7cb0b8d fact consolidation
haftmann
parents: 57025
diff changeset
   879
qed (rule setsum.neutral)
41980
28b51effc5ed split Extended_Reals into parts for Library and Multivariate_Analysis
hoelzl
parents:
diff changeset
   880
43920
cedb5cb948fd Rename extreal => ereal
hoelzl
parents: 42950
diff changeset
   881
lemma setsum_ereal_right_distrib:
49664
f099b8006a3c tuned proofs;
wenzelm
parents: 47761
diff changeset
   882
  fixes f :: "'a \<Rightarrow> ereal"
f099b8006a3c tuned proofs;
wenzelm
parents: 47761
diff changeset
   883
  assumes "\<And>i. i \<in> A \<Longrightarrow> 0 \<le> f i"
41980
28b51effc5ed split Extended_Reals into parts for Library and Multivariate_Analysis
hoelzl
parents:
diff changeset
   884
  shows "r * setsum f A = (\<Sum>n\<in>A. r * f n)"
28b51effc5ed split Extended_Reals into parts for Library and Multivariate_Analysis
hoelzl
parents:
diff changeset
   885
proof cases
49664
f099b8006a3c tuned proofs;
wenzelm
parents: 47761
diff changeset
   886
  assume "finite A"
f099b8006a3c tuned proofs;
wenzelm
parents: 47761
diff changeset
   887
  then show ?thesis using assms
43920
cedb5cb948fd Rename extreal => ereal
hoelzl
parents: 42950
diff changeset
   888
    by induct (auto simp: ereal_right_distrib setsum_nonneg)
41980
28b51effc5ed split Extended_Reals into parts for Library and Multivariate_Analysis
hoelzl
parents:
diff changeset
   889
qed simp
28b51effc5ed split Extended_Reals into parts for Library and Multivariate_Analysis
hoelzl
parents:
diff changeset
   890
43920
cedb5cb948fd Rename extreal => ereal
hoelzl
parents: 42950
diff changeset
   891
lemma sums_ereal_positive:
49664
f099b8006a3c tuned proofs;
wenzelm
parents: 47761
diff changeset
   892
  fixes f :: "nat \<Rightarrow> ereal"
f099b8006a3c tuned proofs;
wenzelm
parents: 47761
diff changeset
   893
  assumes "\<And>i. 0 \<le> f i"
f099b8006a3c tuned proofs;
wenzelm
parents: 47761
diff changeset
   894
  shows "f sums (SUP n. \<Sum>i<n. f i)"
41980
28b51effc5ed split Extended_Reals into parts for Library and Multivariate_Analysis
hoelzl
parents:
diff changeset
   895
proof -
28b51effc5ed split Extended_Reals into parts for Library and Multivariate_Analysis
hoelzl
parents:
diff changeset
   896
  have "incseq (\<lambda>i. \<Sum>j=0..<i. f j)"
53788
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
   897
    using ereal_add_mono[OF _ assms]
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
   898
    by (auto intro!: incseq_SucI)
51000
c9adb50f74ad use order topology for extended reals
hoelzl
parents: 50104
diff changeset
   899
  from LIMSEQ_SUP[OF this]
53788
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
   900
  show ?thesis unfolding sums_def
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
   901
    by (simp add: atLeast0LessThan)
41980
28b51effc5ed split Extended_Reals into parts for Library and Multivariate_Analysis
hoelzl
parents:
diff changeset
   902
qed
28b51effc5ed split Extended_Reals into parts for Library and Multivariate_Analysis
hoelzl
parents:
diff changeset
   903
43920
cedb5cb948fd Rename extreal => ereal
hoelzl
parents: 42950
diff changeset
   904
lemma summable_ereal_pos:
49664
f099b8006a3c tuned proofs;
wenzelm
parents: 47761
diff changeset
   905
  fixes f :: "nat \<Rightarrow> ereal"
f099b8006a3c tuned proofs;
wenzelm
parents: 47761
diff changeset
   906
  assumes "\<And>i. 0 \<le> f i"
f099b8006a3c tuned proofs;
wenzelm
parents: 47761
diff changeset
   907
  shows "summable f"
53788
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
   908
  using sums_ereal_positive[of f, OF assms]
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
   909
  unfolding summable_def
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
   910
  by auto
41980
28b51effc5ed split Extended_Reals into parts for Library and Multivariate_Analysis
hoelzl
parents:
diff changeset
   911
56212
3253aaf73a01 consolidated theorem names containing INFI and SUPR: have INF and SUP instead uniformly
haftmann
parents: 56166
diff changeset
   912
lemma suminf_ereal_eq_SUP:
49664
f099b8006a3c tuned proofs;
wenzelm
parents: 47761
diff changeset
   913
  fixes f :: "nat \<Rightarrow> ereal"
f099b8006a3c tuned proofs;
wenzelm
parents: 47761
diff changeset
   914
  assumes "\<And>i. 0 \<le> f i"
41980
28b51effc5ed split Extended_Reals into parts for Library and Multivariate_Analysis
hoelzl
parents:
diff changeset
   915
  shows "(\<Sum>x. f x) = (SUP n. \<Sum>i<n. f i)"
53788
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
   916
  using sums_ereal_positive[of f, OF assms, THEN sums_unique]
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
   917
  by simp
41980
28b51effc5ed split Extended_Reals into parts for Library and Multivariate_Analysis
hoelzl
parents:
diff changeset
   918
49664
f099b8006a3c tuned proofs;
wenzelm
parents: 47761
diff changeset
   919
lemma sums_ereal: "(\<lambda>x. ereal (f x)) sums ereal x \<longleftrightarrow> f sums x"
41980
28b51effc5ed split Extended_Reals into parts for Library and Multivariate_Analysis
hoelzl
parents:
diff changeset
   920
  unfolding sums_def by simp
28b51effc5ed split Extended_Reals into parts for Library and Multivariate_Analysis
hoelzl
parents:
diff changeset
   921
28b51effc5ed split Extended_Reals into parts for Library and Multivariate_Analysis
hoelzl
parents:
diff changeset
   922
lemma suminf_bound:
43920
cedb5cb948fd Rename extreal => ereal
hoelzl
parents: 42950
diff changeset
   923
  fixes f :: "nat \<Rightarrow> ereal"
53788
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
   924
  assumes "\<forall>N. (\<Sum>n<N. f n) \<le> x"
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
   925
    and pos: "\<And>n. 0 \<le> f n"
41980
28b51effc5ed split Extended_Reals into parts for Library and Multivariate_Analysis
hoelzl
parents:
diff changeset
   926
  shows "suminf f \<le> x"
43920
cedb5cb948fd Rename extreal => ereal
hoelzl
parents: 42950
diff changeset
   927
proof (rule Lim_bounded_ereal)
cedb5cb948fd Rename extreal => ereal
hoelzl
parents: 42950
diff changeset
   928
  have "summable f" using pos[THEN summable_ereal_pos] .
41980
28b51effc5ed split Extended_Reals into parts for Library and Multivariate_Analysis
hoelzl
parents:
diff changeset
   929
  then show "(\<lambda>N. \<Sum>n<N. f n) ----> suminf f"
28b51effc5ed split Extended_Reals into parts for Library and Multivariate_Analysis
hoelzl
parents:
diff changeset
   930
    by (auto dest!: summable_sums simp: sums_def atLeast0LessThan)
28b51effc5ed split Extended_Reals into parts for Library and Multivariate_Analysis
hoelzl
parents:
diff changeset
   931
  show "\<forall>n\<ge>0. setsum f {..<n} \<le> x"
28b51effc5ed split Extended_Reals into parts for Library and Multivariate_Analysis
hoelzl
parents:
diff changeset
   932
    using assms by auto
28b51effc5ed split Extended_Reals into parts for Library and Multivariate_Analysis
hoelzl
parents:
diff changeset
   933
qed
28b51effc5ed split Extended_Reals into parts for Library and Multivariate_Analysis
hoelzl
parents:
diff changeset
   934
28b51effc5ed split Extended_Reals into parts for Library and Multivariate_Analysis
hoelzl
parents:
diff changeset
   935
lemma suminf_bound_add:
43920
cedb5cb948fd Rename extreal => ereal
hoelzl
parents: 42950
diff changeset
   936
  fixes f :: "nat \<Rightarrow> ereal"
49664
f099b8006a3c tuned proofs;
wenzelm
parents: 47761
diff changeset
   937
  assumes "\<forall>N. (\<Sum>n<N. f n) + y \<le> x"
f099b8006a3c tuned proofs;
wenzelm
parents: 47761
diff changeset
   938
    and pos: "\<And>n. 0 \<le> f n"
f099b8006a3c tuned proofs;
wenzelm
parents: 47761
diff changeset
   939
    and "y \<noteq> -\<infinity>"
41980
28b51effc5ed split Extended_Reals into parts for Library and Multivariate_Analysis
hoelzl
parents:
diff changeset
   940
  shows "suminf f + y \<le> x"
28b51effc5ed split Extended_Reals into parts for Library and Multivariate_Analysis
hoelzl
parents:
diff changeset
   941
proof (cases y)
49664
f099b8006a3c tuned proofs;
wenzelm
parents: 47761
diff changeset
   942
  case (real r)
f099b8006a3c tuned proofs;
wenzelm
parents: 47761
diff changeset
   943
  then have "\<forall>N. (\<Sum>n<N. f n) \<le> x - y"
43920
cedb5cb948fd Rename extreal => ereal
hoelzl
parents: 42950
diff changeset
   944
    using assms by (simp add: ereal_le_minus)
53788
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
   945
  then have "(\<Sum> n. f n) \<le> x - y"
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
   946
    using pos by (rule suminf_bound)
41980
28b51effc5ed split Extended_Reals into parts for Library and Multivariate_Analysis
hoelzl
parents:
diff changeset
   947
  then show "(\<Sum> n. f n) + y \<le> x"
43920
cedb5cb948fd Rename extreal => ereal
hoelzl
parents: 42950
diff changeset
   948
    using assms real by (simp add: ereal_le_minus)
41980
28b51effc5ed split Extended_Reals into parts for Library and Multivariate_Analysis
hoelzl
parents:
diff changeset
   949
qed (insert assms, auto)
28b51effc5ed split Extended_Reals into parts for Library and Multivariate_Analysis
hoelzl
parents:
diff changeset
   950
28b51effc5ed split Extended_Reals into parts for Library and Multivariate_Analysis
hoelzl
parents:
diff changeset
   951
lemma suminf_upper:
49664
f099b8006a3c tuned proofs;
wenzelm
parents: 47761
diff changeset
   952
  fixes f :: "nat \<Rightarrow> ereal"
f099b8006a3c tuned proofs;
wenzelm
parents: 47761
diff changeset
   953
  assumes "\<And>n. 0 \<le> f n"
41980
28b51effc5ed split Extended_Reals into parts for Library and Multivariate_Analysis
hoelzl
parents:
diff changeset
   954
  shows "(\<Sum>n<N. f n) \<le> (\<Sum>n. f n)"
56212
3253aaf73a01 consolidated theorem names containing INFI and SUPR: have INF and SUP instead uniformly
haftmann
parents: 56166
diff changeset
   955
  unfolding suminf_ereal_eq_SUP [OF assms]
56166
9a241bc276cd normalising simp rules for compound operators
haftmann
parents: 55522
diff changeset
   956
  by (auto intro: complete_lattice_class.SUP_upper)
41980
28b51effc5ed split Extended_Reals into parts for Library and Multivariate_Analysis
hoelzl
parents:
diff changeset
   957
28b51effc5ed split Extended_Reals into parts for Library and Multivariate_Analysis
hoelzl
parents:
diff changeset
   958
lemma suminf_0_le:
49664
f099b8006a3c tuned proofs;
wenzelm
parents: 47761
diff changeset
   959
  fixes f :: "nat \<Rightarrow> ereal"
f099b8006a3c tuned proofs;
wenzelm
parents: 47761
diff changeset
   960
  assumes "\<And>n. 0 \<le> f n"
41980
28b51effc5ed split Extended_Reals into parts for Library and Multivariate_Analysis
hoelzl
parents:
diff changeset
   961
  shows "0 \<le> (\<Sum>n. f n)"
53788
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
   962
  using suminf_upper[of f 0, OF assms]
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
   963
  by simp
41980
28b51effc5ed split Extended_Reals into parts for Library and Multivariate_Analysis
hoelzl
parents:
diff changeset
   964
28b51effc5ed split Extended_Reals into parts for Library and Multivariate_Analysis
hoelzl
parents:
diff changeset
   965
lemma suminf_le_pos:
43920
cedb5cb948fd Rename extreal => ereal
hoelzl
parents: 42950
diff changeset
   966
  fixes f g :: "nat \<Rightarrow> ereal"
53788
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
   967
  assumes "\<And>N. f N \<le> g N"
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
   968
    and "\<And>N. 0 \<le> f N"
41980
28b51effc5ed split Extended_Reals into parts for Library and Multivariate_Analysis
hoelzl
parents:
diff changeset
   969
  shows "suminf f \<le> suminf g"
28b51effc5ed split Extended_Reals into parts for Library and Multivariate_Analysis
hoelzl
parents:
diff changeset
   970
proof (safe intro!: suminf_bound)
49664
f099b8006a3c tuned proofs;
wenzelm
parents: 47761
diff changeset
   971
  fix n
53788
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
   972
  {
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
   973
    fix N
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
   974
    have "0 \<le> g N"
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
   975
      using assms(2,1)[of N] by auto
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
   976
  }
49664
f099b8006a3c tuned proofs;
wenzelm
parents: 47761
diff changeset
   977
  have "setsum f {..<n} \<le> setsum g {..<n}"
f099b8006a3c tuned proofs;
wenzelm
parents: 47761
diff changeset
   978
    using assms by (auto intro: setsum_mono)
53788
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
   979
  also have "\<dots> \<le> suminf g"
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
   980
    using `\<And>N. 0 \<le> g N`
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
   981
    by (rule suminf_upper)
41980
28b51effc5ed split Extended_Reals into parts for Library and Multivariate_Analysis
hoelzl
parents:
diff changeset
   982
  finally show "setsum f {..<n} \<le> suminf g" .
28b51effc5ed split Extended_Reals into parts for Library and Multivariate_Analysis
hoelzl
parents:
diff changeset
   983
qed (rule assms(2))
28b51effc5ed split Extended_Reals into parts for Library and Multivariate_Analysis
hoelzl
parents:
diff changeset
   984
53788
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
   985
lemma suminf_half_series_ereal: "(\<Sum>n. (1/2 :: ereal) ^ Suc n) = 1"
43920
cedb5cb948fd Rename extreal => ereal
hoelzl
parents: 42950
diff changeset
   986
  using sums_ereal[THEN iffD2, OF power_half_series, THEN sums_unique, symmetric]
cedb5cb948fd Rename extreal => ereal
hoelzl
parents: 42950
diff changeset
   987
  by (simp add: one_ereal_def)
41980
28b51effc5ed split Extended_Reals into parts for Library and Multivariate_Analysis
hoelzl
parents:
diff changeset
   988
43920
cedb5cb948fd Rename extreal => ereal
hoelzl
parents: 42950
diff changeset
   989
lemma suminf_add_ereal:
cedb5cb948fd Rename extreal => ereal
hoelzl
parents: 42950
diff changeset
   990
  fixes f g :: "nat \<Rightarrow> ereal"
53788
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
   991
  assumes "\<And>i. 0 \<le> f i"
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
   992
    and "\<And>i. 0 \<le> g i"
41980
28b51effc5ed split Extended_Reals into parts for Library and Multivariate_Analysis
hoelzl
parents:
diff changeset
   993
  shows "(\<Sum>i. f i + g i) = suminf f + suminf g"
56212
3253aaf73a01 consolidated theorem names containing INFI and SUPR: have INF and SUP instead uniformly
haftmann
parents: 56166
diff changeset
   994
  apply (subst (1 2 3) suminf_ereal_eq_SUP)
57418
6ab1c7cb0b8d fact consolidation
haftmann
parents: 57025
diff changeset
   995
  unfolding setsum.distrib
56212
3253aaf73a01 consolidated theorem names containing INFI and SUPR: have INF and SUP instead uniformly
haftmann
parents: 56166
diff changeset
   996
  apply (intro assms ereal_add_nonneg_nonneg SUP_ereal_add_pos incseq_setsumI setsum_nonneg ballI)+
49664
f099b8006a3c tuned proofs;
wenzelm
parents: 47761
diff changeset
   997
  done
41980
28b51effc5ed split Extended_Reals into parts for Library and Multivariate_Analysis
hoelzl
parents:
diff changeset
   998
43920
cedb5cb948fd Rename extreal => ereal
hoelzl
parents: 42950
diff changeset
   999
lemma suminf_cmult_ereal:
cedb5cb948fd Rename extreal => ereal
hoelzl
parents: 42950
diff changeset
  1000
  fixes f g :: "nat \<Rightarrow> ereal"
53788
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
  1001
  assumes "\<And>i. 0 \<le> f i"
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
  1002
    and "0 \<le> a"
41980
28b51effc5ed split Extended_Reals into parts for Library and Multivariate_Analysis
hoelzl
parents:
diff changeset
  1003
  shows "(\<Sum>i. a * f i) = a * suminf f"
43920
cedb5cb948fd Rename extreal => ereal
hoelzl
parents: 42950
diff changeset
  1004
  by (auto simp: setsum_ereal_right_distrib[symmetric] assms
56212
3253aaf73a01 consolidated theorem names containing INFI and SUPR: have INF and SUP instead uniformly
haftmann
parents: 56166
diff changeset
  1005
       ereal_zero_le_0_iff setsum_nonneg suminf_ereal_eq_SUP
3253aaf73a01 consolidated theorem names containing INFI and SUPR: have INF and SUP instead uniformly
haftmann
parents: 56166
diff changeset
  1006
       intro!: SUP_ereal_cmult)
41980
28b51effc5ed split Extended_Reals into parts for Library and Multivariate_Analysis
hoelzl
parents:
diff changeset
  1007
28b51effc5ed split Extended_Reals into parts for Library and Multivariate_Analysis
hoelzl
parents:
diff changeset
  1008
lemma suminf_PInfty:
43923
ab93d0190a5d add ereal to typeclass infinity
hoelzl
parents: 43920
diff changeset
  1009
  fixes f :: "nat \<Rightarrow> ereal"
53788
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
  1010
  assumes "\<And>i. 0 \<le> f i"
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
  1011
    and "suminf f \<noteq> \<infinity>"
41980
28b51effc5ed split Extended_Reals into parts for Library and Multivariate_Analysis
hoelzl
parents:
diff changeset
  1012
  shows "f i \<noteq> \<infinity>"
28b51effc5ed split Extended_Reals into parts for Library and Multivariate_Analysis
hoelzl
parents:
diff changeset
  1013
proof -
28b51effc5ed split Extended_Reals into parts for Library and Multivariate_Analysis
hoelzl
parents:
diff changeset
  1014
  from suminf_upper[of f "Suc i", OF assms(1)] assms(2)
53788
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
  1015
  have "(\<Sum>i<Suc i. f i) \<noteq> \<infinity>"
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
  1016
    by auto
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
  1017
  then show ?thesis
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
  1018
    unfolding setsum_Pinfty by simp
41980
28b51effc5ed split Extended_Reals into parts for Library and Multivariate_Analysis
hoelzl
parents:
diff changeset
  1019
qed
28b51effc5ed split Extended_Reals into parts for Library and Multivariate_Analysis
hoelzl
parents:
diff changeset
  1020
28b51effc5ed split Extended_Reals into parts for Library and Multivariate_Analysis
hoelzl
parents:
diff changeset
  1021
lemma suminf_PInfty_fun:
53788
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
  1022
  assumes "\<And>i. 0 \<le> f i"
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
  1023
    and "suminf f \<noteq> \<infinity>"
43920
cedb5cb948fd Rename extreal => ereal
hoelzl
parents: 42950
diff changeset
  1024
  shows "\<exists>f'. f = (\<lambda>x. ereal (f' x))"
41980
28b51effc5ed split Extended_Reals into parts for Library and Multivariate_Analysis
hoelzl
parents:
diff changeset
  1025
proof -
43920
cedb5cb948fd Rename extreal => ereal
hoelzl
parents: 42950
diff changeset
  1026
  have "\<forall>i. \<exists>r. f i = ereal r"
41980
28b51effc5ed split Extended_Reals into parts for Library and Multivariate_Analysis
hoelzl
parents:
diff changeset
  1027
  proof
53788
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
  1028
    fix i
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
  1029
    show "\<exists>r. f i = ereal r"
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
  1030
      using suminf_PInfty[OF assms] assms(1)[of i]
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
  1031
      by (cases "f i") auto
41980
28b51effc5ed split Extended_Reals into parts for Library and Multivariate_Analysis
hoelzl
parents:
diff changeset
  1032
  qed
53788
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
  1033
  from choice[OF this] show ?thesis
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
  1034
    by auto
41980
28b51effc5ed split Extended_Reals into parts for Library and Multivariate_Analysis
hoelzl
parents:
diff changeset
  1035
qed
28b51effc5ed split Extended_Reals into parts for Library and Multivariate_Analysis
hoelzl
parents:
diff changeset
  1036
43920
cedb5cb948fd Rename extreal => ereal
hoelzl
parents: 42950
diff changeset
  1037
lemma summable_ereal:
53788
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
  1038
  assumes "\<And>i. 0 \<le> f i"
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
  1039
    and "(\<Sum>i. ereal (f i)) \<noteq> \<infinity>"
41980
28b51effc5ed split Extended_Reals into parts for Library and Multivariate_Analysis
hoelzl
parents:
diff changeset
  1040
  shows "summable f"
28b51effc5ed split Extended_Reals into parts for Library and Multivariate_Analysis
hoelzl
parents:
diff changeset
  1041
proof -
43920
cedb5cb948fd Rename extreal => ereal
hoelzl
parents: 42950
diff changeset
  1042
  have "0 \<le> (\<Sum>i. ereal (f i))"
41980
28b51effc5ed split Extended_Reals into parts for Library and Multivariate_Analysis
hoelzl
parents:
diff changeset
  1043
    using assms by (intro suminf_0_le) auto
43920
cedb5cb948fd Rename extreal => ereal
hoelzl
parents: 42950
diff changeset
  1044
  with assms obtain r where r: "(\<Sum>i. ereal (f i)) = ereal r"
cedb5cb948fd Rename extreal => ereal
hoelzl
parents: 42950
diff changeset
  1045
    by (cases "\<Sum>i. ereal (f i)") auto
cedb5cb948fd Rename extreal => ereal
hoelzl
parents: 42950
diff changeset
  1046
  from summable_ereal_pos[of "\<lambda>x. ereal (f x)"]
53788
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
  1047
  have "summable (\<lambda>x. ereal (f x))"
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
  1048
    using assms by auto
41980
28b51effc5ed split Extended_Reals into parts for Library and Multivariate_Analysis
hoelzl
parents:
diff changeset
  1049
  from summable_sums[OF this]
53788
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
  1050
  have "(\<lambda>x. ereal (f x)) sums (\<Sum>x. ereal (f x))"
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
  1051
    by auto
41980
28b51effc5ed split Extended_Reals into parts for Library and Multivariate_Analysis
hoelzl
parents:
diff changeset
  1052
  then show "summable f"
43920
cedb5cb948fd Rename extreal => ereal
hoelzl
parents: 42950
diff changeset
  1053
    unfolding r sums_ereal summable_def ..
41980
28b51effc5ed split Extended_Reals into parts for Library and Multivariate_Analysis
hoelzl
parents:
diff changeset
  1054
qed
28b51effc5ed split Extended_Reals into parts for Library and Multivariate_Analysis
hoelzl
parents:
diff changeset
  1055
43920
cedb5cb948fd Rename extreal => ereal
hoelzl
parents: 42950
diff changeset
  1056
lemma suminf_ereal:
53788
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
  1057
  assumes "\<And>i. 0 \<le> f i"
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
  1058
    and "(\<Sum>i. ereal (f i)) \<noteq> \<infinity>"
43920
cedb5cb948fd Rename extreal => ereal
hoelzl
parents: 42950
diff changeset
  1059
  shows "(\<Sum>i. ereal (f i)) = ereal (suminf f)"
41980
28b51effc5ed split Extended_Reals into parts for Library and Multivariate_Analysis
hoelzl
parents:
diff changeset
  1060
proof (rule sums_unique[symmetric])
43920
cedb5cb948fd Rename extreal => ereal
hoelzl
parents: 42950
diff changeset
  1061
  from summable_ereal[OF assms]
cedb5cb948fd Rename extreal => ereal
hoelzl
parents: 42950
diff changeset
  1062
  show "(\<lambda>x. ereal (f x)) sums (ereal (suminf f))"
53788
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
  1063
    unfolding sums_ereal
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
  1064
    using assms
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
  1065
    by (intro summable_sums summable_ereal)
41980
28b51effc5ed split Extended_Reals into parts for Library and Multivariate_Analysis
hoelzl
parents:
diff changeset
  1066
qed
28b51effc5ed split Extended_Reals into parts for Library and Multivariate_Analysis
hoelzl
parents:
diff changeset
  1067
43920
cedb5cb948fd Rename extreal => ereal
hoelzl
parents: 42950
diff changeset
  1068
lemma suminf_ereal_minus:
cedb5cb948fd Rename extreal => ereal
hoelzl
parents: 42950
diff changeset
  1069
  fixes f g :: "nat \<Rightarrow> ereal"
53788
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
  1070
  assumes ord: "\<And>i. g i \<le> f i" "\<And>i. 0 \<le> g i"
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
  1071
    and fin: "suminf f \<noteq> \<infinity>" "suminf g \<noteq> \<infinity>"
41980
28b51effc5ed split Extended_Reals into parts for Library and Multivariate_Analysis
hoelzl
parents:
diff changeset
  1072
  shows "(\<Sum>i. f i - g i) = suminf f - suminf g"
28b51effc5ed split Extended_Reals into parts for Library and Multivariate_Analysis
hoelzl
parents:
diff changeset
  1073
proof -
53788
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
  1074
  {
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
  1075
    fix i
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
  1076
    have "0 \<le> f i"
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
  1077
      using ord[of i] by auto
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
  1078
  }
41980
28b51effc5ed split Extended_Reals into parts for Library and Multivariate_Analysis
hoelzl
parents:
diff changeset
  1079
  moreover
53788
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
  1080
  from suminf_PInfty_fun[OF `\<And>i. 0 \<le> f i` fin(1)] obtain f' where [simp]: "f = (\<lambda>x. ereal (f' x))" ..
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
  1081
  from suminf_PInfty_fun[OF `\<And>i. 0 \<le> g i` fin(2)] obtain g' where [simp]: "g = (\<lambda>x. ereal (g' x))" ..
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
  1082
  {
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
  1083
    fix i
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
  1084
    have "0 \<le> f i - g i"
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
  1085
      using ord[of i] by (auto simp: ereal_le_minus_iff)
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
  1086
  }
41980
28b51effc5ed split Extended_Reals into parts for Library and Multivariate_Analysis
hoelzl
parents:
diff changeset
  1087
  moreover
28b51effc5ed split Extended_Reals into parts for Library and Multivariate_Analysis
hoelzl
parents:
diff changeset
  1088
  have "suminf (\<lambda>i. f i - g i) \<le> suminf f"
28b51effc5ed split Extended_Reals into parts for Library and Multivariate_Analysis
hoelzl
parents:
diff changeset
  1089
    using assms by (auto intro!: suminf_le_pos simp: field_simps)
53788
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
  1090
  then have "suminf (\<lambda>i. f i - g i) \<noteq> \<infinity>"
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
  1091
    using fin by auto
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
  1092
  ultimately show ?thesis
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
  1093
    using assms `\<And>i. 0 \<le> f i`
41980
28b51effc5ed split Extended_Reals into parts for Library and Multivariate_Analysis
hoelzl
parents:
diff changeset
  1094
    apply simp
49664
f099b8006a3c tuned proofs;
wenzelm
parents: 47761
diff changeset
  1095
    apply (subst (1 2 3) suminf_ereal)
f099b8006a3c tuned proofs;
wenzelm
parents: 47761
diff changeset
  1096
    apply (auto intro!: suminf_diff[symmetric] summable_ereal)
f099b8006a3c tuned proofs;
wenzelm
parents: 47761
diff changeset
  1097
    done
41980
28b51effc5ed split Extended_Reals into parts for Library and Multivariate_Analysis
hoelzl
parents:
diff changeset
  1098
qed
28b51effc5ed split Extended_Reals into parts for Library and Multivariate_Analysis
hoelzl
parents:
diff changeset
  1099
49664
f099b8006a3c tuned proofs;
wenzelm
parents: 47761
diff changeset
  1100
lemma suminf_ereal_PInf [simp]: "(\<Sum>x. \<infinity>::ereal) = \<infinity>"
41980
28b51effc5ed split Extended_Reals into parts for Library and Multivariate_Analysis
hoelzl
parents:
diff changeset
  1101
proof -
53788
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
  1102
  have "(\<Sum>i<Suc 0. \<infinity>) \<le> (\<Sum>x. \<infinity>::ereal)"
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
  1103
    by (rule suminf_upper) auto
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
  1104
  then show ?thesis
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
  1105
    by simp
41980
28b51effc5ed split Extended_Reals into parts for Library and Multivariate_Analysis
hoelzl
parents:
diff changeset
  1106
qed
28b51effc5ed split Extended_Reals into parts for Library and Multivariate_Analysis
hoelzl
parents:
diff changeset
  1107
43920
cedb5cb948fd Rename extreal => ereal
hoelzl
parents: 42950
diff changeset
  1108
lemma summable_real_of_ereal:
43923
ab93d0190a5d add ereal to typeclass infinity
hoelzl
parents: 43920
diff changeset
  1109
  fixes f :: "nat \<Rightarrow> ereal"
49664
f099b8006a3c tuned proofs;
wenzelm
parents: 47761
diff changeset
  1110
  assumes f: "\<And>i. 0 \<le> f i"
f099b8006a3c tuned proofs;
wenzelm
parents: 47761
diff changeset
  1111
    and fin: "(\<Sum>i. f i) \<noteq> \<infinity>"
41980
28b51effc5ed split Extended_Reals into parts for Library and Multivariate_Analysis
hoelzl
parents:
diff changeset
  1112
  shows "summable (\<lambda>i. real (f i))"
28b51effc5ed split Extended_Reals into parts for Library and Multivariate_Analysis
hoelzl
parents:
diff changeset
  1113
proof (rule summable_def[THEN iffD2])
53788
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
  1114
  have "0 \<le> (\<Sum>i. f i)"
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
  1115
    using assms by (auto intro: suminf_0_le)
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
  1116
  with fin obtain r where r: "ereal r = (\<Sum>i. f i)"
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
  1117
    by (cases "(\<Sum>i. f i)") auto
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
  1118
  {
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
  1119
    fix i
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
  1120
    have "f i \<noteq> \<infinity>"
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
  1121
      using f by (intro suminf_PInfty[OF _ fin]) auto
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
  1122
    then have "\<bar>f i\<bar> \<noteq> \<infinity>"
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
  1123
      using f[of i] by auto
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
  1124
  }
41980
28b51effc5ed split Extended_Reals into parts for Library and Multivariate_Analysis
hoelzl
parents:
diff changeset
  1125
  note fin = this
43920
cedb5cb948fd Rename extreal => ereal
hoelzl
parents: 42950
diff changeset
  1126
  have "(\<lambda>i. ereal (real (f i))) sums (\<Sum>i. ereal (real (f i)))"
53788
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
  1127
    using f
57865
dcfb33c26f50 tuned proofs -- fewer warnings;
wenzelm
parents: 57447
diff changeset
  1128
    by (auto intro!: summable_ereal_pos simp: ereal_le_real_iff zero_ereal_def)
53788
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
  1129
  also have "\<dots> = ereal r"
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
  1130
    using fin r by (auto simp: ereal_real)
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
  1131
  finally show "\<exists>r. (\<lambda>i. real (f i)) sums r"
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
  1132
    by (auto simp: sums_ereal)
41980
28b51effc5ed split Extended_Reals into parts for Library and Multivariate_Analysis
hoelzl
parents:
diff changeset
  1133
qed
28b51effc5ed split Extended_Reals into parts for Library and Multivariate_Analysis
hoelzl
parents:
diff changeset
  1134
42950
6e5c2a3c69da move lemmas to Extended_Reals and Extended_Real_Limits
hoelzl
parents: 41983
diff changeset
  1135
lemma suminf_SUP_eq:
43920
cedb5cb948fd Rename extreal => ereal
hoelzl
parents: 42950
diff changeset
  1136
  fixes f :: "nat \<Rightarrow> nat \<Rightarrow> ereal"
53788
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
  1137
  assumes "\<And>i. incseq (\<lambda>n. f n i)"
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
  1138
    and "\<And>n i. 0 \<le> f n i"
42950
6e5c2a3c69da move lemmas to Extended_Reals and Extended_Real_Limits
hoelzl
parents: 41983
diff changeset
  1139
  shows "(\<Sum>i. SUP n. f n i) = (SUP n. \<Sum>i. f n i)"
6e5c2a3c69da move lemmas to Extended_Reals and Extended_Real_Limits
hoelzl
parents: 41983
diff changeset
  1140
proof -
53788
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
  1141
  {
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
  1142
    fix n :: nat
42950
6e5c2a3c69da move lemmas to Extended_Reals and Extended_Real_Limits
hoelzl
parents: 41983
diff changeset
  1143
    have "(\<Sum>i<n. SUP k. f k i) = (SUP k. \<Sum>i<n. f k i)"
53788
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
  1144
      using assms
56212
3253aaf73a01 consolidated theorem names containing INFI and SUPR: have INF and SUP instead uniformly
haftmann
parents: 56166
diff changeset
  1145
      by (auto intro!: SUP_ereal_setsum [symmetric])
53788
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
  1146
  }
42950
6e5c2a3c69da move lemmas to Extended_Reals and Extended_Real_Limits
hoelzl
parents: 41983
diff changeset
  1147
  note * = this
53788
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
  1148
  show ?thesis
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
  1149
    using assms
56212
3253aaf73a01 consolidated theorem names containing INFI and SUPR: have INF and SUP instead uniformly
haftmann
parents: 56166
diff changeset
  1150
    apply (subst (1 2) suminf_ereal_eq_SUP)
42950
6e5c2a3c69da move lemmas to Extended_Reals and Extended_Real_Limits
hoelzl
parents: 41983
diff changeset
  1151
    unfolding *
44928
7ef6505bde7f renamed Complete_Lattices lemmas, removed legacy names
hoelzl
parents: 44918
diff changeset
  1152
    apply (auto intro!: SUP_upper2)
49664
f099b8006a3c tuned proofs;
wenzelm
parents: 47761
diff changeset
  1153
    apply (subst SUP_commute)
f099b8006a3c tuned proofs;
wenzelm
parents: 47761
diff changeset
  1154
    apply rule
f099b8006a3c tuned proofs;
wenzelm
parents: 47761
diff changeset
  1155
    done
42950
6e5c2a3c69da move lemmas to Extended_Reals and Extended_Real_Limits
hoelzl
parents: 41983
diff changeset
  1156
qed
6e5c2a3c69da move lemmas to Extended_Reals and Extended_Real_Limits
hoelzl
parents: 41983
diff changeset
  1157
47761
dfe747e72fa8 moved lemmas to appropriate places
hoelzl
parents: 45051
diff changeset
  1158
lemma suminf_setsum_ereal:
dfe747e72fa8 moved lemmas to appropriate places
hoelzl
parents: 45051
diff changeset
  1159
  fixes f :: "_ \<Rightarrow> _ \<Rightarrow> ereal"
dfe747e72fa8 moved lemmas to appropriate places
hoelzl
parents: 45051
diff changeset
  1160
  assumes nonneg: "\<And>i a. a \<in> A \<Longrightarrow> 0 \<le> f i a"
dfe747e72fa8 moved lemmas to appropriate places
hoelzl
parents: 45051
diff changeset
  1161
  shows "(\<Sum>i. \<Sum>a\<in>A. f i a) = (\<Sum>a\<in>A. \<Sum>i. f i a)"
53788
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
  1162
proof (cases "finite A")
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
  1163
  case True
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
  1164
  then show ?thesis
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
  1165
    using nonneg
47761
dfe747e72fa8 moved lemmas to appropriate places
hoelzl
parents: 45051
diff changeset
  1166
    by induct (simp_all add: suminf_add_ereal setsum_nonneg)
53788
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
  1167
next
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
  1168
  case False
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
  1169
  then show ?thesis by simp
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
  1170
qed
47761
dfe747e72fa8 moved lemmas to appropriate places
hoelzl
parents: 45051
diff changeset
  1171
50104
de19856feb54 move theorems to be more generally useable
hoelzl
parents: 49664
diff changeset
  1172
lemma suminf_ereal_eq_0:
de19856feb54 move theorems to be more generally useable
hoelzl
parents: 49664
diff changeset
  1173
  fixes f :: "nat \<Rightarrow> ereal"
de19856feb54 move theorems to be more generally useable
hoelzl
parents: 49664
diff changeset
  1174
  assumes nneg: "\<And>i. 0 \<le> f i"
de19856feb54 move theorems to be more generally useable
hoelzl
parents: 49664
diff changeset
  1175
  shows "(\<Sum>i. f i) = 0 \<longleftrightarrow> (\<forall>i. f i = 0)"
de19856feb54 move theorems to be more generally useable
hoelzl
parents: 49664
diff changeset
  1176
proof
de19856feb54 move theorems to be more generally useable
hoelzl
parents: 49664
diff changeset
  1177
  assume "(\<Sum>i. f i) = 0"
53788
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
  1178
  {
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
  1179
    fix i
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
  1180
    assume "f i \<noteq> 0"
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
  1181
    with nneg have "0 < f i"
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
  1182
      by (auto simp: less_le)
50104
de19856feb54 move theorems to be more generally useable
hoelzl
parents: 49664
diff changeset
  1183
    also have "f i = (\<Sum>j. if j = i then f i else 0)"
de19856feb54 move theorems to be more generally useable
hoelzl
parents: 49664
diff changeset
  1184
      by (subst suminf_finite[where N="{i}"]) auto
de19856feb54 move theorems to be more generally useable
hoelzl
parents: 49664
diff changeset
  1185
    also have "\<dots> \<le> (\<Sum>i. f i)"
53788
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
  1186
      using nneg
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
  1187
      by (auto intro!: suminf_le_pos)
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
  1188
    finally have False
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
  1189
      using `(\<Sum>i. f i) = 0` by auto
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
  1190
  }
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
  1191
  then show "\<forall>i. f i = 0"
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
  1192
    by auto
50104
de19856feb54 move theorems to be more generally useable
hoelzl
parents: 49664
diff changeset
  1193
qed simp
de19856feb54 move theorems to be more generally useable
hoelzl
parents: 49664
diff changeset
  1194
51340
5e6296afe08d move Liminf / Limsup lemmas on complete_lattices to its own file
hoelzl
parents: 51329
diff changeset
  1195
lemma Liminf_within:
5e6296afe08d move Liminf / Limsup lemmas on complete_lattices to its own file
hoelzl
parents: 51329
diff changeset
  1196
  fixes f :: "'a::metric_space \<Rightarrow> 'b::complete_lattice"
5e6296afe08d move Liminf / Limsup lemmas on complete_lattices to its own file
hoelzl
parents: 51329
diff changeset
  1197
  shows "Liminf (at x within S) f = (SUP e:{0<..}. INF y:(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
  1198
  unfolding Liminf_def eventually_at
56212
3253aaf73a01 consolidated theorem names containing INFI and SUPR: have INF and SUP instead uniformly
haftmann
parents: 56166
diff changeset
  1199
proof (rule SUP_eq, simp_all add: Ball_def Bex_def, safe)
53788
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
  1200
  fix P d
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
  1201
  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
  1202
  then have "S \<inter> ball x d - {x} \<subseteq> {x. P x}"
5e6296afe08d move Liminf / Limsup lemmas on complete_lattices to its own file
hoelzl
parents: 51329
diff changeset
  1203
    by (auto simp: zero_less_dist_iff dist_commute)
56218
1c3f1f2431f9 elongated INFI and SUPR, to reduced risk of confusing theorems names in the future while still being consistent with INTER and UNION
haftmann
parents: 56212
diff changeset
  1204
  then show "\<exists>r>0. INFIMUM (Collect P) f \<le> INFIMUM (S \<inter> ball x r - {x}) f"
51340
5e6296afe08d move Liminf / Limsup lemmas on complete_lattices to its own file
hoelzl
parents: 51329
diff changeset
  1205
    by (intro exI[of _ d] INF_mono conjI `0 < d`) auto
5e6296afe08d move Liminf / Limsup lemmas on complete_lattices to its own file
hoelzl
parents: 51329
diff changeset
  1206
next
53788
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
  1207
  fix d :: real
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
  1208
  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
  1209
  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>
56218
1c3f1f2431f9 elongated INFI and SUPR, to reduced risk of confusing theorems names in the future while still being consistent with INTER and UNION
haftmann
parents: 56212
diff changeset
  1210
    INFIMUM (S \<inter> ball x d - {x}) f \<le> INFIMUM (Collect P) f"
51340
5e6296afe08d move Liminf / Limsup lemmas on complete_lattices to its own file
hoelzl
parents: 51329
diff changeset
  1211
    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
  1212
       (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
  1213
qed
5e6296afe08d move Liminf / Limsup lemmas on complete_lattices to its own file
hoelzl
parents: 51329
diff changeset
  1214
5e6296afe08d move Liminf / Limsup lemmas on complete_lattices to its own file
hoelzl
parents: 51329
diff changeset
  1215
lemma Limsup_within:
53788
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
  1216
  fixes f :: "'a::metric_space \<Rightarrow> 'b::complete_lattice"
51340
5e6296afe08d move Liminf / Limsup lemmas on complete_lattices to its own file
hoelzl
parents: 51329
diff changeset
  1217
  shows "Limsup (at x within S) f = (INF e:{0<..}. SUP y:(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
  1218
  unfolding Limsup_def eventually_at
56212
3253aaf73a01 consolidated theorem names containing INFI and SUPR: have INF and SUP instead uniformly
haftmann
parents: 56166
diff changeset
  1219
proof (rule INF_eq, simp_all add: Ball_def Bex_def, safe)
53788
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
  1220
  fix P d
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
  1221
  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
  1222
  then have "S \<inter> ball x d - {x} \<subseteq> {x. P x}"
5e6296afe08d move Liminf / Limsup lemmas on complete_lattices to its own file
hoelzl
parents: 51329
diff changeset
  1223
    by (auto simp: zero_less_dist_iff dist_commute)
56218
1c3f1f2431f9 elongated INFI and SUPR, to reduced risk of confusing theorems names in the future while still being consistent with INTER and UNION
haftmann
parents: 56212
diff changeset
  1224
  then show "\<exists>r>0. SUPREMUM (S \<inter> ball x r - {x}) f \<le> SUPREMUM (Collect P) f"
51340
5e6296afe08d move Liminf / Limsup lemmas on complete_lattices to its own file
hoelzl
parents: 51329
diff changeset
  1225
    by (intro exI[of _ d] SUP_mono conjI `0 < d`) auto
5e6296afe08d move Liminf / Limsup lemmas on complete_lattices to its own file
hoelzl
parents: 51329
diff changeset
  1226
next
53788
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
  1227
  fix d :: real
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
  1228
  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
  1229
  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>
56218
1c3f1f2431f9 elongated INFI and SUPR, to reduced risk of confusing theorems names in the future while still being consistent with INTER and UNION
haftmann
parents: 56212
diff changeset
  1230
    SUPREMUM (Collect P) f \<le> SUPREMUM (S \<inter> ball x d - {x}) f"
51340
5e6296afe08d move Liminf / Limsup lemmas on complete_lattices to its own file
hoelzl
parents: 51329
diff changeset
  1231
    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
  1232
       (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
  1233
qed
5e6296afe08d move Liminf / Limsup lemmas on complete_lattices to its own file
hoelzl
parents: 51329
diff changeset
  1234
5e6296afe08d move Liminf / Limsup lemmas on complete_lattices to its own file
hoelzl
parents: 51329
diff changeset
  1235
lemma Liminf_at:
54257
5c7a3b6b05a9 generalize SUP and INF to the syntactic type classes Sup and Inf
hoelzl
parents: 53788
diff changeset
  1236
  fixes f :: "'a::metric_space \<Rightarrow> 'b::complete_lattice"
51340
5e6296afe08d move Liminf / Limsup lemmas on complete_lattices to its own file
hoelzl
parents: 51329
diff changeset
  1237
  shows "Liminf (at x) f = (SUP e:{0<..}. INF y:(ball x e - {x}). f y)"
5e6296afe08d move Liminf / Limsup lemmas on complete_lattices to its own file
hoelzl
parents: 51329
diff changeset
  1238
  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
  1239
5e6296afe08d move Liminf / Limsup lemmas on complete_lattices to its own file
hoelzl
parents: 51329
diff changeset
  1240
lemma Limsup_at:
54257
5c7a3b6b05a9 generalize SUP and INF to the syntactic type classes Sup and Inf
hoelzl
parents: 53788
diff changeset
  1241
  fixes f :: "'a::metric_space \<Rightarrow> 'b::complete_lattice"
51340
5e6296afe08d move Liminf / Limsup lemmas on complete_lattices to its own file
hoelzl
parents: 51329
diff changeset
  1242
  shows "Limsup (at x) f = (INF e:{0<..}. SUP y:(ball x e - {x}). f y)"
5e6296afe08d move Liminf / Limsup lemmas on complete_lattices to its own file
hoelzl
parents: 51329
diff changeset
  1243
  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
  1244
5e6296afe08d move Liminf / Limsup lemmas on complete_lattices to its own file
hoelzl
parents: 51329
diff changeset
  1245
lemma min_Liminf_at:
53788
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
  1246
  fixes f :: "'a::metric_space \<Rightarrow> 'b::complete_linorder"
51340
5e6296afe08d move Liminf / Limsup lemmas on complete_lattices to its own file
hoelzl
parents: 51329
diff changeset
  1247
  shows "min (f x) (Liminf (at x) f) = (SUP e:{0<..}. INF y:ball x e. f y)"
5e6296afe08d move Liminf / Limsup lemmas on complete_lattices to its own file
hoelzl
parents: 51329
diff changeset
  1248
  unfolding inf_min[symmetric] Liminf_at
5e6296afe08d move Liminf / Limsup lemmas on complete_lattices to its own file
hoelzl
parents: 51329
diff changeset
  1249
  apply (subst inf_commute)
5e6296afe08d move Liminf / Limsup lemmas on complete_lattices to its own file
hoelzl
parents: 51329
diff changeset
  1250
  apply (subst SUP_inf)
5e6296afe08d move Liminf / Limsup lemmas on complete_lattices to its own file
hoelzl
parents: 51329
diff changeset
  1251
  apply (intro SUP_cong[OF refl])
54260
6a967667fd45 use INF and SUP on conditionally complete lattices in multivariate analysis
hoelzl
parents: 54258
diff changeset
  1252
  apply (cut_tac A="ball x xa - {x}" and B="{x}" and M=f in INF_union)
56166
9a241bc276cd normalising simp rules for compound operators
haftmann
parents: 55522
diff changeset
  1253
  apply (drule sym)
9a241bc276cd normalising simp rules for compound operators
haftmann
parents: 55522
diff changeset
  1254
  apply auto
57865
dcfb33c26f50 tuned proofs -- fewer warnings;
wenzelm
parents: 57447
diff changeset
  1255
  apply (metis INF_absorb centre_in_ball)
dcfb33c26f50 tuned proofs -- fewer warnings;
wenzelm
parents: 57447
diff changeset
  1256
  done
51340
5e6296afe08d move Liminf / Limsup lemmas on complete_lattices to its own file
hoelzl
parents: 51329
diff changeset
  1257
53788
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
  1258
57025
e7fd64f82876 add various lemmas
hoelzl
parents: 56218
diff changeset
  1259
lemma suminf_ereal_offset_le:
e7fd64f82876 add various lemmas
hoelzl
parents: 56218
diff changeset
  1260
  fixes f :: "nat \<Rightarrow> ereal"
e7fd64f82876 add various lemmas
hoelzl
parents: 56218
diff changeset
  1261
  assumes f: "\<And>i. 0 \<le> f i"
e7fd64f82876 add various lemmas
hoelzl
parents: 56218
diff changeset
  1262
  shows "(\<Sum>i. f (i + k)) \<le> suminf f"
e7fd64f82876 add various lemmas
hoelzl
parents: 56218
diff changeset
  1263
proof -
e7fd64f82876 add various lemmas
hoelzl
parents: 56218
diff changeset
  1264
  have "(\<lambda>n. \<Sum>i<n. f (i + k)) ----> (\<Sum>i. f (i + k))"
e7fd64f82876 add various lemmas
hoelzl
parents: 56218
diff changeset
  1265
    using summable_sums[OF summable_ereal_pos] by (simp add: sums_def atLeast0LessThan f)
e7fd64f82876 add various lemmas
hoelzl
parents: 56218
diff changeset
  1266
  moreover have "(\<lambda>n. \<Sum>i<n. f i) ----> (\<Sum>i. f i)"
e7fd64f82876 add various lemmas
hoelzl
parents: 56218
diff changeset
  1267
    using summable_sums[OF summable_ereal_pos] by (simp add: sums_def atLeast0LessThan f)
e7fd64f82876 add various lemmas
hoelzl
parents: 56218
diff changeset
  1268
  then have "(\<lambda>n. \<Sum>i<n + k. f i) ----> (\<Sum>i. f i)"
e7fd64f82876 add various lemmas
hoelzl
parents: 56218
diff changeset
  1269
    by (rule LIMSEQ_ignore_initial_segment)
e7fd64f82876 add various lemmas
hoelzl
parents: 56218
diff changeset
  1270
  ultimately show ?thesis
e7fd64f82876 add various lemmas
hoelzl
parents: 56218
diff changeset
  1271
  proof (rule LIMSEQ_le, safe intro!: exI[of _ k])
e7fd64f82876 add various lemmas
hoelzl
parents: 56218
diff changeset
  1272
    fix n assume "k \<le> n"
e7fd64f82876 add various lemmas
hoelzl
parents: 56218
diff changeset
  1273
    have "(\<Sum>i<n. f (i + k)) = (\<Sum>i<n. (f \<circ> (\<lambda>i. i + k)) i)"
e7fd64f82876 add various lemmas
hoelzl
parents: 56218
diff changeset
  1274
      by simp
e7fd64f82876 add various lemmas
hoelzl
parents: 56218
diff changeset
  1275
    also have "\<dots> = (\<Sum>i\<in>(\<lambda>i. i + k) ` {..<n}. f i)"
57418
6ab1c7cb0b8d fact consolidation
haftmann
parents: 57025
diff changeset
  1276
      by (subst setsum.reindex) auto
57025
e7fd64f82876 add various lemmas
hoelzl
parents: 56218
diff changeset
  1277
    also have "\<dots> \<le> setsum f {..<n + k}"
e7fd64f82876 add various lemmas
hoelzl
parents: 56218
diff changeset
  1278
      by (intro setsum_mono3) (auto simp: f)
e7fd64f82876 add various lemmas
hoelzl
parents: 56218
diff changeset
  1279
    finally show "(\<Sum>i<n. f (i + k)) \<le> setsum f {..<n + k}" .
e7fd64f82876 add various lemmas
hoelzl
parents: 56218
diff changeset
  1280
  qed
e7fd64f82876 add various lemmas
hoelzl
parents: 56218
diff changeset
  1281
qed
e7fd64f82876 add various lemmas
hoelzl
parents: 56218
diff changeset
  1282
e7fd64f82876 add various lemmas
hoelzl
parents: 56218
diff changeset
  1283
lemma sums_suminf_ereal: "f sums x \<Longrightarrow> (\<Sum>i. ereal (f i)) = ereal x"
e7fd64f82876 add various lemmas
hoelzl
parents: 56218
diff changeset
  1284
  by (metis sums_ereal sums_unique)
e7fd64f82876 add various lemmas
hoelzl
parents: 56218
diff changeset
  1285
e7fd64f82876 add various lemmas
hoelzl
parents: 56218
diff changeset
  1286
lemma suminf_ereal': "summable f \<Longrightarrow> (\<Sum>i. ereal (f i)) = ereal (\<Sum>i. f i)"
e7fd64f82876 add various lemmas
hoelzl
parents: 56218
diff changeset
  1287
  by (metis sums_ereal sums_unique summable_def)
e7fd64f82876 add various lemmas
hoelzl
parents: 56218
diff changeset
  1288
e7fd64f82876 add various lemmas
hoelzl
parents: 56218
diff changeset
  1289
lemma suminf_ereal_finite: "summable f \<Longrightarrow> (\<Sum>i. ereal (f i)) \<noteq> \<infinity>"
e7fd64f82876 add various lemmas
hoelzl
parents: 56218
diff changeset
  1290
  by (auto simp: sums_ereal[symmetric] summable_def sums_unique[symmetric])
e7fd64f82876 add various lemmas
hoelzl
parents: 56218
diff changeset
  1291
51340
5e6296afe08d move Liminf / Limsup lemmas on complete_lattices to its own file
hoelzl
parents: 51329
diff changeset
  1292
subsection {* monoset *}
5e6296afe08d move Liminf / Limsup lemmas on complete_lattices to its own file
hoelzl
parents: 51329
diff changeset
  1293
5e6296afe08d move Liminf / Limsup lemmas on complete_lattices to its own file
hoelzl
parents: 51329
diff changeset
  1294
definition (in order) mono_set:
5e6296afe08d move Liminf / Limsup lemmas on complete_lattices to its own file
hoelzl
parents: 51329
diff changeset
  1295
  "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
  1296
5e6296afe08d move Liminf / Limsup lemmas on complete_lattices to its own file
hoelzl
parents: 51329
diff changeset
  1297
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
  1298
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
  1299
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
  1300
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
  1301
5e6296afe08d move Liminf / Limsup lemmas on complete_lattices to its own file
hoelzl
parents: 51329
diff changeset
  1302
lemma (in complete_linorder) mono_set_iff:
5e6296afe08d move Liminf / Limsup lemmas on complete_lattices to its own file
hoelzl
parents: 51329
diff changeset
  1303
  fixes S :: "'a set"
5e6296afe08d move Liminf / Limsup lemmas on complete_lattices to its own file
hoelzl
parents: 51329
diff changeset
  1304
  defines "a \<equiv> Inf S"
53788
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
  1305
  shows "mono_set S \<longleftrightarrow> S = {a <..} \<or> S = {a..}" (is "_ = ?c")
51340
5e6296afe08d move Liminf / Limsup lemmas on complete_lattices to its own file
hoelzl
parents: 51329
diff changeset
  1306
proof
5e6296afe08d move Liminf / Limsup lemmas on complete_lattices to its own file
hoelzl
parents: 51329
diff changeset
  1307
  assume "mono_set S"
53788
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
  1308
  then have mono: "\<And>x y. x \<le> y \<Longrightarrow> x \<in> S \<Longrightarrow> y \<in> S"
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
  1309
    by (auto simp: mono_set)
51340
5e6296afe08d move Liminf / Limsup lemmas on complete_lattices to its own file
hoelzl
parents: 51329
diff changeset
  1310
  show ?c
5e6296afe08d move Liminf / Limsup lemmas on complete_lattices to its own file
hoelzl
parents: 51329
diff changeset
  1311
  proof cases
5e6296afe08d move Liminf / Limsup lemmas on complete_lattices to its own file
hoelzl
parents: 51329
diff changeset
  1312
    assume "a \<in> S"
5e6296afe08d move Liminf / Limsup lemmas on complete_lattices to its own file
hoelzl
parents: 51329
diff changeset
  1313
    show ?c
5e6296afe08d move Liminf / Limsup lemmas on complete_lattices to its own file
hoelzl
parents: 51329
diff changeset
  1314
      using mono[OF _ `a \<in> S`]
5e6296afe08d move Liminf / Limsup lemmas on complete_lattices to its own file
hoelzl
parents: 51329
diff changeset
  1315
      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
  1316
  next
5e6296afe08d move Liminf / Limsup lemmas on complete_lattices to its own file
hoelzl
parents: 51329
diff changeset
  1317
    assume "a \<notin> S"
5e6296afe08d move Liminf / Limsup lemmas on complete_lattices to its own file
hoelzl
parents: 51329
diff changeset
  1318
    have "S = {a <..}"
5e6296afe08d move Liminf / Limsup lemmas on complete_lattices to its own file
hoelzl
parents: 51329
diff changeset
  1319
    proof safe
5e6296afe08d move Liminf / Limsup lemmas on complete_lattices to its own file
hoelzl
parents: 51329
diff changeset
  1320
      fix x assume "x \<in> S"
53788
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
  1321
      then have "a \<le> x"
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
  1322
        unfolding a_def by (rule Inf_lower)
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
  1323
      then show "a < x"
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
  1324
        using `x \<in> S` `a \<notin> S` by (cases "a = x") auto
51340
5e6296afe08d move Liminf / Limsup lemmas on complete_lattices to its own file
hoelzl
parents: 51329
diff changeset
  1325
    next
5e6296afe08d move Liminf / Limsup lemmas on complete_lattices to its own file
hoelzl
parents: 51329
diff changeset
  1326
      fix x assume "a < x"
53788
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
  1327
      then obtain y where "y < x" "y \<in> S"
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
  1328
        unfolding a_def Inf_less_iff ..
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
  1329
      with mono[of y x] show "x \<in> S"
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
  1330
        by auto
51340
5e6296afe08d move Liminf / Limsup lemmas on complete_lattices to its own file
hoelzl
parents: 51329
diff changeset
  1331
    qed
5e6296afe08d move Liminf / Limsup lemmas on complete_lattices to its own file
hoelzl
parents: 51329
diff changeset
  1332
    then show ?c ..
5e6296afe08d move Liminf / Limsup lemmas on complete_lattices to its own file
hoelzl
parents: 51329
diff changeset
  1333
  qed
5e6296afe08d move Liminf / Limsup lemmas on complete_lattices to its own file
hoelzl
parents: 51329
diff changeset
  1334
qed auto
5e6296afe08d move Liminf / Limsup lemmas on complete_lattices to its own file
hoelzl
parents: 51329
diff changeset
  1335
5e6296afe08d move Liminf / Limsup lemmas on complete_lattices to its own file
hoelzl
parents: 51329
diff changeset
  1336
lemma ereal_open_mono_set:
5e6296afe08d move Liminf / Limsup lemmas on complete_lattices to its own file
hoelzl
parents: 51329
diff changeset
  1337
  fixes S :: "ereal set"
53788
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
  1338
  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
  1339
  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
  1340
    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
  1341
5e6296afe08d move Liminf / Limsup lemmas on complete_lattices to its own file
hoelzl
parents: 51329
diff changeset
  1342
lemma ereal_closed_mono_set:
5e6296afe08d move Liminf / Limsup lemmas on complete_lattices to its own file
hoelzl
parents: 51329
diff changeset
  1343
  fixes S :: "ereal set"
53788
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
  1344
  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
  1345
  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
  1346
    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
  1347
5e6296afe08d move Liminf / Limsup lemmas on complete_lattices to its own file
hoelzl
parents: 51329
diff changeset
  1348
lemma ereal_Liminf_Sup_monoset:
53788
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
  1349
  fixes f :: "'a \<Rightarrow> ereal"
51340
5e6296afe08d move Liminf / Limsup lemmas on complete_lattices to its own file
hoelzl
parents: 51329
diff changeset
  1350
  shows "Liminf net f =
5e6296afe08d move Liminf / Limsup lemmas on complete_lattices to its own file
hoelzl
parents: 51329
diff changeset
  1351
    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
  1352
    (is "_ = Sup ?A")
5e6296afe08d move Liminf / Limsup lemmas on complete_lattices to its own file
hoelzl
parents: 51329
diff changeset
  1353
proof (safe intro!: Liminf_eqI complete_lattice_class.Sup_upper complete_lattice_class.Sup_least)
53788
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
  1354
  fix P
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
  1355
  assume P: "eventually P net"
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
  1356
  fix S
56218
1c3f1f2431f9 elongated INFI and SUPR, to reduced risk of confusing theorems names in the future while still being consistent with INTER and UNION
haftmann
parents: 56212
diff changeset
  1357
  assume S: "mono_set S" "INFIMUM (Collect P) f \<in> S"
53788
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
  1358
  {
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
  1359
    fix x
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
  1360
    assume "P x"
56218
1c3f1f2431f9 elongated INFI and SUPR, to reduced risk of confusing theorems names in the future while still being consistent with INTER and UNION
haftmann
parents: 56212
diff changeset
  1361
    then have "INFIMUM (Collect P) f \<le> f x"
51340
5e6296afe08d move Liminf / Limsup lemmas on complete_lattices to its own file
hoelzl
parents: 51329
diff changeset
  1362
      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
  1363
    with S have "f x \<in> S"
53788
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
  1364
      by (simp add: mono_set)
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
  1365
  }
51340
5e6296afe08d move Liminf / Limsup lemmas on complete_lattices to its own file
hoelzl
parents: 51329
diff changeset
  1366
  with P show "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
  1367
    by (auto elim: eventually_elim1)
5e6296afe08d move Liminf / Limsup lemmas on complete_lattices to its own file
hoelzl
parents: 51329
diff changeset
  1368
next
5e6296afe08d move Liminf / Limsup lemmas on complete_lattices to its own file
hoelzl
parents: 51329
diff changeset
  1369
  fix y l
5e6296afe08d move Liminf / Limsup lemmas on complete_lattices to its own file
hoelzl
parents: 51329
diff changeset
  1370
  assume S: "\<forall>S. open S \<longrightarrow> mono_set S \<longrightarrow> l \<in> S \<longrightarrow> eventually  (\<lambda>x. f x \<in> S) net"
56218
1c3f1f2431f9 elongated INFI and SUPR, to reduced risk of confusing theorems names in the future while still being consistent with INTER and UNION
haftmann
parents: 56212
diff changeset
  1371
  assume P: "\<forall>P. eventually P net \<longrightarrow> INFIMUM (Collect P) f \<le> y"
51340
5e6296afe08d move Liminf / Limsup lemmas on complete_lattices to its own file
hoelzl
parents: 51329
diff changeset
  1372
  show "l \<le> y"
5e6296afe08d move Liminf / Limsup lemmas on complete_lattices to its own file
hoelzl
parents: 51329
diff changeset
  1373
  proof (rule dense_le)
53788
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
  1374
    fix B
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
  1375
    assume "B < l"
51340
5e6296afe08d move Liminf / Limsup lemmas on complete_lattices to its own file
hoelzl
parents: 51329
diff changeset
  1376
    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
  1377
      by (intro S[rule_format]) auto
56218
1c3f1f2431f9 elongated INFI and SUPR, to reduced risk of confusing theorems names in the future while still being consistent with INTER and UNION
haftmann
parents: 56212
diff changeset
  1378
    then have "INFIMUM {x. B < f x} f \<le> y"
51340
5e6296afe08d move Liminf / Limsup lemmas on complete_lattices to its own file
hoelzl
parents: 51329
diff changeset
  1379
      using P by auto
56218
1c3f1f2431f9 elongated INFI and SUPR, to reduced risk of confusing theorems names in the future while still being consistent with INTER and UNION
haftmann
parents: 56212
diff changeset
  1380
    moreover have "B \<le> INFIMUM {x. B < f x} f"
51340
5e6296afe08d move Liminf / Limsup lemmas on complete_lattices to its own file
hoelzl
parents: 51329
diff changeset
  1381
      by (intro INF_greatest) auto
5e6296afe08d move Liminf / Limsup lemmas on complete_lattices to its own file
hoelzl
parents: 51329
diff changeset
  1382
    ultimately show "B \<le> y"
5e6296afe08d move Liminf / Limsup lemmas on complete_lattices to its own file
hoelzl
parents: 51329
diff changeset
  1383
      by simp
5e6296afe08d move Liminf / Limsup lemmas on complete_lattices to its own file
hoelzl
parents: 51329
diff changeset
  1384
  qed
5e6296afe08d move Liminf / Limsup lemmas on complete_lattices to its own file
hoelzl
parents: 51329
diff changeset
  1385
qed
5e6296afe08d move Liminf / Limsup lemmas on complete_lattices to its own file
hoelzl
parents: 51329
diff changeset
  1386
5e6296afe08d move Liminf / Limsup lemmas on complete_lattices to its own file
hoelzl
parents: 51329
diff changeset
  1387
lemma ereal_Limsup_Inf_monoset:
53788
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
  1388
  fixes f :: "'a \<Rightarrow> ereal"
51340
5e6296afe08d move Liminf / Limsup lemmas on complete_lattices to its own file
hoelzl
parents: 51329
diff changeset
  1389
  shows "Limsup net f =
5e6296afe08d move Liminf / Limsup lemmas on complete_lattices to its own file
hoelzl
parents: 51329
diff changeset
  1390
    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
  1391
    (is "_ = Inf ?A")
5e6296afe08d move Liminf / Limsup lemmas on complete_lattices to its own file
hoelzl
parents: 51329
diff changeset
  1392
proof (safe intro!: Limsup_eqI complete_lattice_class.Inf_lower complete_lattice_class.Inf_greatest)
53788
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
  1393
  fix P
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
  1394
  assume P: "eventually P net"
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
  1395
  fix S
56218
1c3f1f2431f9 elongated INFI and SUPR, to reduced risk of confusing theorems names in the future while still being consistent with INTER and UNION
haftmann
parents: 56212
diff changeset
  1396
  assume S: "mono_set (uminus`S)" "SUPREMUM (Collect P) f \<in> S"
53788
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
  1397
  {
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
  1398
    fix x
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
  1399
    assume "P x"
56218
1c3f1f2431f9 elongated INFI and SUPR, to reduced risk of confusing theorems names in the future while still being consistent with INTER and UNION
haftmann
parents: 56212
diff changeset
  1400
    then have "f x \<le> SUPREMUM (Collect P) f"
51340
5e6296afe08d move Liminf / Limsup lemmas on complete_lattices to its own file
hoelzl
parents: 51329
diff changeset
  1401
      by (intro complete_lattice_class.SUP_upper) simp
56218
1c3f1f2431f9 elongated INFI and SUPR, to reduced risk of confusing theorems names in the future while still being consistent with INTER and UNION
haftmann
parents: 56212
diff changeset
  1402
    with S(1)[unfolded mono_set, rule_format, of "- SUPREMUM (Collect P) f" "- f x"] S(2)
51340
5e6296afe08d move Liminf / Limsup lemmas on complete_lattices to its own file
hoelzl
parents: 51329
diff changeset
  1403
    have "f x \<in> S"
5e6296afe08d move Liminf / Limsup lemmas on complete_lattices to its own file
hoelzl
parents: 51329
diff changeset
  1404
      by (simp add: inj_image_mem_iff) }
5e6296afe08d move Liminf / Limsup lemmas on complete_lattices to its own file
hoelzl
parents: 51329
diff changeset
  1405
  with P show "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
  1406
    by (auto elim: eventually_elim1)
5e6296afe08d move Liminf / Limsup lemmas on complete_lattices to its own file
hoelzl
parents: 51329
diff changeset
  1407
next
5e6296afe08d move Liminf / Limsup lemmas on complete_lattices to its own file
hoelzl
parents: 51329
diff changeset
  1408
  fix y l
5e6296afe08d move Liminf / Limsup lemmas on complete_lattices to its own file
hoelzl
parents: 51329
diff changeset
  1409
  assume S: "\<forall>S. open S \<longrightarrow> mono_set (uminus ` S) \<longrightarrow> l \<in> S \<longrightarrow> eventually  (\<lambda>x. f x \<in> S) net"
56218
1c3f1f2431f9 elongated INFI and SUPR, to reduced risk of confusing theorems names in the future while still being consistent with INTER and UNION
haftmann
parents: 56212
diff changeset
  1410
  assume P: "\<forall>P. eventually P net \<longrightarrow> y \<le> SUPREMUM (Collect P) f"
51340
5e6296afe08d move Liminf / Limsup lemmas on complete_lattices to its own file
hoelzl
parents: 51329
diff changeset
  1411
  show "y \<le> l"
5e6296afe08d move Liminf / Limsup lemmas on complete_lattices to its own file
hoelzl
parents: 51329
diff changeset
  1412
  proof (rule dense_ge)
53788
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
  1413
    fix B
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
  1414
    assume "l < B"
51340
5e6296afe08d move Liminf / Limsup lemmas on complete_lattices to its own file
hoelzl
parents: 51329
diff changeset
  1415
    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
  1416
      by (intro S[rule_format]) auto
56218
1c3f1f2431f9 elongated INFI and SUPR, to reduced risk of confusing theorems names in the future while still being consistent with INTER and UNION
haftmann
parents: 56212
diff changeset
  1417
    then have "y \<le> SUPREMUM {x. f x < B} f"
51340
5e6296afe08d move Liminf / Limsup lemmas on complete_lattices to its own file
hoelzl
parents: 51329
diff changeset
  1418
      using P by auto
56218
1c3f1f2431f9 elongated INFI and SUPR, to reduced risk of confusing theorems names in the future while still being consistent with INTER and UNION
haftmann
parents: 56212
diff changeset
  1419
    moreover have "SUPREMUM {x. f x < B} f \<le> B"
51340
5e6296afe08d move Liminf / Limsup lemmas on complete_lattices to its own file
hoelzl
parents: 51329
diff changeset
  1420
      by (intro SUP_least) auto
5e6296afe08d move Liminf / Limsup lemmas on complete_lattices to its own file
hoelzl
parents: 51329
diff changeset
  1421
    ultimately show "y \<le> B"
5e6296afe08d move Liminf / Limsup lemmas on complete_lattices to its own file
hoelzl
parents: 51329
diff changeset
  1422
      by simp
5e6296afe08d move Liminf / Limsup lemmas on complete_lattices to its own file
hoelzl
parents: 51329
diff changeset
  1423
  qed
5e6296afe08d move Liminf / Limsup lemmas on complete_lattices to its own file
hoelzl
parents: 51329
diff changeset
  1424
qed
5e6296afe08d move Liminf / Limsup lemmas on complete_lattices to its own file
hoelzl
parents: 51329
diff changeset
  1425
5e6296afe08d move Liminf / Limsup lemmas on complete_lattices to its own file
hoelzl
parents: 51329
diff changeset
  1426
lemma liminf_bounded_open:
5e6296afe08d move Liminf / Limsup lemmas on complete_lattices to its own file
hoelzl
parents: 51329
diff changeset
  1427
  fixes x :: "nat \<Rightarrow> ereal"
5e6296afe08d move Liminf / Limsup lemmas on complete_lattices to its own file
hoelzl
parents: 51329
diff changeset
  1428
  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
  1429
  (is "_ \<longleftrightarrow> ?P x0")
5e6296afe08d move Liminf / Limsup lemmas on complete_lattices to its own file
hoelzl
parents: 51329
diff changeset
  1430
proof
5e6296afe08d move Liminf / Limsup lemmas on complete_lattices to its own file
hoelzl
parents: 51329
diff changeset
  1431
  assume "?P x0"
5e6296afe08d move Liminf / Limsup lemmas on complete_lattices to its own file
hoelzl
parents: 51329
diff changeset
  1432
  then show "x0 \<le> liminf x"
5e6296afe08d move Liminf / Limsup lemmas on complete_lattices to its own file
hoelzl
parents: 51329
diff changeset
  1433
    unfolding ereal_Liminf_Sup_monoset eventually_sequentially
5e6296afe08d move Liminf / Limsup lemmas on complete_lattices to its own file
hoelzl
parents: 51329
diff changeset
  1434
    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
  1435
next
5e6296afe08d move Liminf / Limsup lemmas on complete_lattices to its own file
hoelzl
parents: 51329
diff changeset
  1436
  assume "x0 \<le> liminf x"
53788
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
  1437
  {
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
  1438
    fix S :: "ereal set"
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
  1439
    assume om: "open S" "mono_set S" "x0 \<in> S"
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
  1440
    {
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
  1441
      assume "S = UNIV"
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
  1442
      then have "\<exists>N. \<forall>n\<ge>N. x n \<in> S"
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
  1443
        by auto
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
  1444
    }
51340
5e6296afe08d move Liminf / Limsup lemmas on complete_lattices to its own file
hoelzl
parents: 51329
diff changeset
  1445
    moreover
53788
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
  1446
    {
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
  1447
      assume "S \<noteq> UNIV"
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
  1448
      then obtain B where B: "S = {B<..}"
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
  1449
        using om ereal_open_mono_set by auto
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
  1450
      then have "B < x0"
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
  1451
        using om by auto
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
  1452
      then have "\<exists>N. \<forall>n\<ge>N. x n \<in> S"
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
  1453
        unfolding B
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
  1454
        using `x0 \<le> liminf x` liminf_bounded_iff
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
  1455
        by auto
51340
5e6296afe08d move Liminf / Limsup lemmas on complete_lattices to its own file
hoelzl
parents: 51329
diff changeset
  1456
    }
53788
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
  1457
    ultimately have "\<exists>N. \<forall>n\<ge>N. x n \<in> S"
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
  1458
      by auto
51340
5e6296afe08d move Liminf / Limsup lemmas on complete_lattices to its own file
hoelzl
parents: 51329
diff changeset
  1459
  }
53788
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
  1460
  then show "?P x0"
b319a0c8b8a2 tuned proofs;
wenzelm
parents: 53374
diff changeset
  1461
    by auto
51340
5e6296afe08d move Liminf / Limsup lemmas on complete_lattices to its own file
hoelzl
parents: 51329
diff changeset
  1462
qed
5e6296afe08d move Liminf / Limsup lemmas on complete_lattices to its own file
hoelzl
parents: 51329
diff changeset
  1463
57446
06e195515deb some lemmas about the indicator function; removed lemma sums_def2
hoelzl
parents: 57418
diff changeset
  1464
subsection "Relate extended reals and the indicator function"
06e195515deb some lemmas about the indicator function; removed lemma sums_def2
hoelzl
parents: 57418
diff changeset
  1465
06e195515deb some lemmas about the indicator function; removed lemma sums_def2
hoelzl
parents: 57418
diff changeset
  1466
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
  1467
  by (auto simp: indicator_def one_ereal_def)
06e195515deb some lemmas about the indicator function; removed lemma sums_def2
hoelzl
parents: 57418
diff changeset
  1468
06e195515deb some lemmas about the indicator function; removed lemma sums_def2
hoelzl
parents: 57418
diff changeset
  1469
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
  1470
  by (simp split: split_indicator)
06e195515deb some lemmas about the indicator function; removed lemma sums_def2
hoelzl
parents: 57418
diff changeset
  1471
06e195515deb some lemmas about the indicator function; removed lemma sums_def2
hoelzl
parents: 57418
diff changeset
  1472
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
  1473
  by (simp split: split_indicator)
06e195515deb some lemmas about the indicator function; removed lemma sums_def2
hoelzl
parents: 57418
diff changeset
  1474
06e195515deb some lemmas about the indicator function; removed lemma sums_def2
hoelzl
parents: 57418
diff changeset
  1475
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
  1476
  unfolding indicator_def by auto
06e195515deb some lemmas about the indicator function; removed lemma sums_def2
hoelzl
parents: 57418
diff changeset
  1477
44125
230a8665c919 mark some redundant theorems as legacy
huffman
parents: 43923
diff changeset
  1478
end