src/HOL/Analysis/Uniform_Limit.thy
author paulson <lp15@cam.ac.uk>
Tue, 21 Feb 2017 15:04:01 +0000
changeset 65036 ab7e11730ad8
parent 64267 b9a1486e79be
child 65037 2cf841ff23be
permissions -rw-r--r--
Some new lemmas. Existing lemmas modified to use uniform_limit rather than its expansion
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
63627
6ddb43c6b711 rename HOL-Multivariate_Analysis to HOL-Analysis.
hoelzl
parents: 63594
diff changeset
     1
(*  Title:      HOL/Analysis/Uniform_Limit.thy
60812
8fff64349793 added theory Uniform_Limit
immler
parents:
diff changeset
     2
    Author:     Christoph Traut, TU München
8fff64349793 added theory Uniform_Limit
immler
parents:
diff changeset
     3
    Author:     Fabian Immler, TU München
8fff64349793 added theory Uniform_Limit
immler
parents:
diff changeset
     4
*)
8fff64349793 added theory Uniform_Limit
immler
parents:
diff changeset
     5
8fff64349793 added theory Uniform_Limit
immler
parents:
diff changeset
     6
section \<open>Uniform Limit and Uniform Convergence\<close>
8fff64349793 added theory Uniform_Limit
immler
parents:
diff changeset
     7
8fff64349793 added theory Uniform_Limit
immler
parents:
diff changeset
     8
theory Uniform_Limit
63594
bd218a9320b5 HOL-Multivariate_Analysis: rename theories for more descriptive names
hoelzl
parents: 63040
diff changeset
     9
imports Topology_Euclidean_Space Summation_Tests
60812
8fff64349793 added theory Uniform_Limit
immler
parents:
diff changeset
    10
begin
8fff64349793 added theory Uniform_Limit
immler
parents:
diff changeset
    11
8fff64349793 added theory Uniform_Limit
immler
parents:
diff changeset
    12
definition uniformly_on :: "'a set \<Rightarrow> ('a \<Rightarrow> 'b::metric_space) \<Rightarrow> ('a \<Rightarrow> 'b) filter"
8fff64349793 added theory Uniform_Limit
immler
parents:
diff changeset
    13
  where "uniformly_on S l = (INF e:{0 <..}. principal {f. \<forall>x\<in>S. dist (f x) (l x) < e})"
8fff64349793 added theory Uniform_Limit
immler
parents:
diff changeset
    14
8fff64349793 added theory Uniform_Limit
immler
parents:
diff changeset
    15
abbreviation
8fff64349793 added theory Uniform_Limit
immler
parents:
diff changeset
    16
  "uniform_limit S f l \<equiv> filterlim f (uniformly_on S l)"
8fff64349793 added theory Uniform_Limit
immler
parents:
diff changeset
    17
61531
ab2e862263e7 Rounding function, uniform limits, cotangent, binomial identities
eberlm
parents: 61222
diff changeset
    18
definition uniformly_convergent_on where
ab2e862263e7 Rounding function, uniform limits, cotangent, binomial identities
eberlm
parents: 61222
diff changeset
    19
  "uniformly_convergent_on X f \<longleftrightarrow> (\<exists>l. uniform_limit X f l sequentially)"
ab2e862263e7 Rounding function, uniform limits, cotangent, binomial identities
eberlm
parents: 61222
diff changeset
    20
63594
bd218a9320b5 HOL-Multivariate_Analysis: rename theories for more descriptive names
hoelzl
parents: 63040
diff changeset
    21
definition uniformly_Cauchy_on where
61531
ab2e862263e7 Rounding function, uniform limits, cotangent, binomial identities
eberlm
parents: 61222
diff changeset
    22
  "uniformly_Cauchy_on X f \<longleftrightarrow> (\<forall>e>0. \<exists>M. \<forall>x\<in>X. \<forall>(m::nat)\<ge>M. \<forall>n\<ge>M. dist (f m x) (f n x) < e)"
63594
bd218a9320b5 HOL-Multivariate_Analysis: rename theories for more descriptive names
hoelzl
parents: 63040
diff changeset
    23
60812
8fff64349793 added theory Uniform_Limit
immler
parents:
diff changeset
    24
lemma uniform_limit_iff:
8fff64349793 added theory Uniform_Limit
immler
parents:
diff changeset
    25
  "uniform_limit S f l F \<longleftrightarrow> (\<forall>e>0. \<forall>\<^sub>F n in F. \<forall>x\<in>S. dist (f n x) (l x) < e)"
8fff64349793 added theory Uniform_Limit
immler
parents:
diff changeset
    26
  unfolding filterlim_iff uniformly_on_def
8fff64349793 added theory Uniform_Limit
immler
parents:
diff changeset
    27
  by (subst eventually_INF_base)
8fff64349793 added theory Uniform_Limit
immler
parents:
diff changeset
    28
    (fastforce
8fff64349793 added theory Uniform_Limit
immler
parents:
diff changeset
    29
      simp: eventually_principal uniformly_on_def
8fff64349793 added theory Uniform_Limit
immler
parents:
diff changeset
    30
      intro: bexI[where x="min a b" for a b]
61810
3c5040d5694a sorted out eventually_mono
paulson <lp15@cam.ac.uk>
parents: 61808
diff changeset
    31
      elim: eventually_mono)+
60812
8fff64349793 added theory Uniform_Limit
immler
parents:
diff changeset
    32
8fff64349793 added theory Uniform_Limit
immler
parents:
diff changeset
    33
lemma uniform_limitD:
8fff64349793 added theory Uniform_Limit
immler
parents:
diff changeset
    34
  "uniform_limit S f l F \<Longrightarrow> e > 0 \<Longrightarrow> \<forall>\<^sub>F n in F. \<forall>x\<in>S. dist (f n x) (l x) < e"
8fff64349793 added theory Uniform_Limit
immler
parents:
diff changeset
    35
  by (simp add: uniform_limit_iff)
8fff64349793 added theory Uniform_Limit
immler
parents:
diff changeset
    36
8fff64349793 added theory Uniform_Limit
immler
parents:
diff changeset
    37
lemma uniform_limitI:
8fff64349793 added theory Uniform_Limit
immler
parents:
diff changeset
    38
  "(\<And>e. e > 0 \<Longrightarrow> \<forall>\<^sub>F n in F. \<forall>x\<in>S. dist (f n x) (l x) < e) \<Longrightarrow> uniform_limit S f l F"
8fff64349793 added theory Uniform_Limit
immler
parents:
diff changeset
    39
  by (simp add: uniform_limit_iff)
8fff64349793 added theory Uniform_Limit
immler
parents:
diff changeset
    40
8fff64349793 added theory Uniform_Limit
immler
parents:
diff changeset
    41
lemma uniform_limit_sequentially_iff:
8fff64349793 added theory Uniform_Limit
immler
parents:
diff changeset
    42
  "uniform_limit S f l sequentially \<longleftrightarrow> (\<forall>e>0. \<exists>N. \<forall>n\<ge>N. \<forall>x \<in> S. dist (f n x) (l x) < e)"
8fff64349793 added theory Uniform_Limit
immler
parents:
diff changeset
    43
  unfolding uniform_limit_iff eventually_sequentially ..
8fff64349793 added theory Uniform_Limit
immler
parents:
diff changeset
    44
8fff64349793 added theory Uniform_Limit
immler
parents:
diff changeset
    45
lemma uniform_limit_at_iff:
8fff64349793 added theory Uniform_Limit
immler
parents:
diff changeset
    46
  "uniform_limit S f l (at x) \<longleftrightarrow>
8fff64349793 added theory Uniform_Limit
immler
parents:
diff changeset
    47
    (\<forall>e>0. \<exists>d>0. \<forall>z. 0 < dist z x \<and> dist z x < d \<longrightarrow> (\<forall>x\<in>S. dist (f z x) (l x) < e))"
62381
a6479cb85944 New and revised material for (multivariate) analysis
paulson <lp15@cam.ac.uk>
parents: 62175
diff changeset
    48
  unfolding uniform_limit_iff eventually_at by simp
60812
8fff64349793 added theory Uniform_Limit
immler
parents:
diff changeset
    49
8fff64349793 added theory Uniform_Limit
immler
parents:
diff changeset
    50
lemma uniform_limit_at_le_iff:
8fff64349793 added theory Uniform_Limit
immler
parents:
diff changeset
    51
  "uniform_limit S f l (at x) \<longleftrightarrow>
8fff64349793 added theory Uniform_Limit
immler
parents:
diff changeset
    52
    (\<forall>e>0. \<exists>d>0. \<forall>z. 0 < dist z x \<and> dist z x < d \<longrightarrow> (\<forall>x\<in>S. dist (f z x) (l x) \<le> e))"
62381
a6479cb85944 New and revised material for (multivariate) analysis
paulson <lp15@cam.ac.uk>
parents: 62175
diff changeset
    53
  unfolding uniform_limit_iff eventually_at
60812
8fff64349793 added theory Uniform_Limit
immler
parents:
diff changeset
    54
  by (fastforce dest: spec[where x = "e / 2" for e])
8fff64349793 added theory Uniform_Limit
immler
parents:
diff changeset
    55
62949
f36a54da47a4 added derivative of scaling in exponential function
immler
parents: 62393
diff changeset
    56
lemma metric_uniform_limit_imp_uniform_limit:
f36a54da47a4 added derivative of scaling in exponential function
immler
parents: 62393
diff changeset
    57
  assumes f: "uniform_limit S f a F"
f36a54da47a4 added derivative of scaling in exponential function
immler
parents: 62393
diff changeset
    58
  assumes le: "eventually (\<lambda>x. \<forall>y\<in>S. dist (g x y) (b y) \<le> dist (f x y) (a y)) F"
f36a54da47a4 added derivative of scaling in exponential function
immler
parents: 62393
diff changeset
    59
  shows "uniform_limit S g b F"
f36a54da47a4 added derivative of scaling in exponential function
immler
parents: 62393
diff changeset
    60
proof (rule uniform_limitI)
f36a54da47a4 added derivative of scaling in exponential function
immler
parents: 62393
diff changeset
    61
  fix e :: real assume "0 < e"
f36a54da47a4 added derivative of scaling in exponential function
immler
parents: 62393
diff changeset
    62
  from uniform_limitD[OF f this] le
f36a54da47a4 added derivative of scaling in exponential function
immler
parents: 62393
diff changeset
    63
  show "\<forall>\<^sub>F x in F. \<forall>y\<in>S. dist (g x y) (b y) < e"
f36a54da47a4 added derivative of scaling in exponential function
immler
parents: 62393
diff changeset
    64
    by eventually_elim force
f36a54da47a4 added derivative of scaling in exponential function
immler
parents: 62393
diff changeset
    65
qed
f36a54da47a4 added derivative of scaling in exponential function
immler
parents: 62393
diff changeset
    66
60812
8fff64349793 added theory Uniform_Limit
immler
parents:
diff changeset
    67
lemma swap_uniform_limit:
61973
0c7e865fa7cb more symbols;
wenzelm
parents: 61969
diff changeset
    68
  assumes f: "\<forall>\<^sub>F n in F. (f n \<longlongrightarrow> g n) (at x within S)"
0c7e865fa7cb more symbols;
wenzelm
parents: 61969
diff changeset
    69
  assumes g: "(g \<longlongrightarrow> l) F"
60812
8fff64349793 added theory Uniform_Limit
immler
parents:
diff changeset
    70
  assumes uc: "uniform_limit S f h F"
8fff64349793 added theory Uniform_Limit
immler
parents:
diff changeset
    71
  assumes "\<not>trivial_limit F"
61973
0c7e865fa7cb more symbols;
wenzelm
parents: 61969
diff changeset
    72
  shows "(h \<longlongrightarrow> l) (at x within S)"
60812
8fff64349793 added theory Uniform_Limit
immler
parents:
diff changeset
    73
proof (rule tendstoI)
8fff64349793 added theory Uniform_Limit
immler
parents:
diff changeset
    74
  fix e :: real
63040
eb4ddd18d635 eliminated old 'def';
wenzelm
parents: 62949
diff changeset
    75
  define e' where "e' = e/3"
60812
8fff64349793 added theory Uniform_Limit
immler
parents:
diff changeset
    76
  assume "0 < e"
8fff64349793 added theory Uniform_Limit
immler
parents:
diff changeset
    77
  then have "0 < e'" by (simp add: e'_def)
61222
05d28dc76e5c isabelle update_cartouches;
wenzelm
parents: 60812
diff changeset
    78
  from uniform_limitD[OF uc \<open>0 < e'\<close>]
60812
8fff64349793 added theory Uniform_Limit
immler
parents:
diff changeset
    79
  have "\<forall>\<^sub>F n in F. \<forall>x\<in>S. dist (h x) (f n x) < e'"
8fff64349793 added theory Uniform_Limit
immler
parents:
diff changeset
    80
    by (simp add: dist_commute)
8fff64349793 added theory Uniform_Limit
immler
parents:
diff changeset
    81
  moreover
8fff64349793 added theory Uniform_Limit
immler
parents:
diff changeset
    82
  from f
8fff64349793 added theory Uniform_Limit
immler
parents:
diff changeset
    83
  have "\<forall>\<^sub>F n in F. \<forall>\<^sub>F x in at x within S. dist (g n) (f n x) < e'"
61222
05d28dc76e5c isabelle update_cartouches;
wenzelm
parents: 60812
diff changeset
    84
    by eventually_elim (auto dest!: tendstoD[OF _ \<open>0 < e'\<close>] simp: dist_commute)
60812
8fff64349793 added theory Uniform_Limit
immler
parents:
diff changeset
    85
  moreover
61222
05d28dc76e5c isabelle update_cartouches;
wenzelm
parents: 60812
diff changeset
    86
  from tendstoD[OF g \<open>0 < e'\<close>] have "\<forall>\<^sub>F x in F. dist l (g x) < e'"
60812
8fff64349793 added theory Uniform_Limit
immler
parents:
diff changeset
    87
    by (simp add: dist_commute)
8fff64349793 added theory Uniform_Limit
immler
parents:
diff changeset
    88
  ultimately
8fff64349793 added theory Uniform_Limit
immler
parents:
diff changeset
    89
  have "\<forall>\<^sub>F _ in F. \<forall>\<^sub>F x in at x within S. dist (h x) l < e"
8fff64349793 added theory Uniform_Limit
immler
parents:
diff changeset
    90
  proof eventually_elim
8fff64349793 added theory Uniform_Limit
immler
parents:
diff changeset
    91
    case (elim n)
8fff64349793 added theory Uniform_Limit
immler
parents:
diff changeset
    92
    note fh = elim(1)
8fff64349793 added theory Uniform_Limit
immler
parents:
diff changeset
    93
    note gl = elim(3)
8fff64349793 added theory Uniform_Limit
immler
parents:
diff changeset
    94
    have "\<forall>\<^sub>F x in at x within S. x \<in> S"
8fff64349793 added theory Uniform_Limit
immler
parents:
diff changeset
    95
      by (auto simp: eventually_at_filter)
8fff64349793 added theory Uniform_Limit
immler
parents:
diff changeset
    96
    with elim(2)
8fff64349793 added theory Uniform_Limit
immler
parents:
diff changeset
    97
    show ?case
8fff64349793 added theory Uniform_Limit
immler
parents:
diff changeset
    98
    proof eventually_elim
8fff64349793 added theory Uniform_Limit
immler
parents:
diff changeset
    99
      case (elim x)
61222
05d28dc76e5c isabelle update_cartouches;
wenzelm
parents: 60812
diff changeset
   100
      from fh[rule_format, OF \<open>x \<in> S\<close>] elim(1)
60812
8fff64349793 added theory Uniform_Limit
immler
parents:
diff changeset
   101
      have "dist (h x) (g n) < e' + e'"
8fff64349793 added theory Uniform_Limit
immler
parents:
diff changeset
   102
        by (rule dist_triangle_lt[OF add_strict_mono])
8fff64349793 added theory Uniform_Limit
immler
parents:
diff changeset
   103
      from dist_triangle_lt[OF add_strict_mono, OF this gl]
8fff64349793 added theory Uniform_Limit
immler
parents:
diff changeset
   104
      show ?case by (simp add: e'_def)
8fff64349793 added theory Uniform_Limit
immler
parents:
diff changeset
   105
    qed
8fff64349793 added theory Uniform_Limit
immler
parents:
diff changeset
   106
  qed
8fff64349793 added theory Uniform_Limit
immler
parents:
diff changeset
   107
  thus "\<forall>\<^sub>F x in at x within S. dist (h x) l < e"
61222
05d28dc76e5c isabelle update_cartouches;
wenzelm
parents: 60812
diff changeset
   108
    using eventually_happens by (metis \<open>\<not>trivial_limit F\<close>)
60812
8fff64349793 added theory Uniform_Limit
immler
parents:
diff changeset
   109
qed
8fff64349793 added theory Uniform_Limit
immler
parents:
diff changeset
   110
8fff64349793 added theory Uniform_Limit
immler
parents:
diff changeset
   111
lemma
8fff64349793 added theory Uniform_Limit
immler
parents:
diff changeset
   112
  tendsto_uniform_limitI:
8fff64349793 added theory Uniform_Limit
immler
parents:
diff changeset
   113
  assumes "uniform_limit S f l F"
8fff64349793 added theory Uniform_Limit
immler
parents:
diff changeset
   114
  assumes "x \<in> S"
61973
0c7e865fa7cb more symbols;
wenzelm
parents: 61969
diff changeset
   115
  shows "((\<lambda>y. f y x) \<longlongrightarrow> l x) F"
60812
8fff64349793 added theory Uniform_Limit
immler
parents:
diff changeset
   116
  using assms
61810
3c5040d5694a sorted out eventually_mono
paulson <lp15@cam.ac.uk>
parents: 61808
diff changeset
   117
  by (auto intro!: tendstoI simp: eventually_mono dest!: uniform_limitD)
60812
8fff64349793 added theory Uniform_Limit
immler
parents:
diff changeset
   118
8fff64349793 added theory Uniform_Limit
immler
parents:
diff changeset
   119
lemma uniform_limit_theorem:
8fff64349793 added theory Uniform_Limit
immler
parents:
diff changeset
   120
  assumes c: "\<forall>\<^sub>F n in F. continuous_on A (f n)"
8fff64349793 added theory Uniform_Limit
immler
parents:
diff changeset
   121
  assumes ul: "uniform_limit A f l F"
8fff64349793 added theory Uniform_Limit
immler
parents:
diff changeset
   122
  assumes "\<not> trivial_limit F"
8fff64349793 added theory Uniform_Limit
immler
parents:
diff changeset
   123
  shows "continuous_on A l"
8fff64349793 added theory Uniform_Limit
immler
parents:
diff changeset
   124
  unfolding continuous_on_def
8fff64349793 added theory Uniform_Limit
immler
parents:
diff changeset
   125
proof safe
8fff64349793 added theory Uniform_Limit
immler
parents:
diff changeset
   126
  fix x assume "x \<in> A"
61973
0c7e865fa7cb more symbols;
wenzelm
parents: 61969
diff changeset
   127
  then have "\<forall>\<^sub>F n in F. (f n \<longlongrightarrow> f n x) (at x within A)" "((\<lambda>n. f n x) \<longlongrightarrow> l x) F"
60812
8fff64349793 added theory Uniform_Limit
immler
parents:
diff changeset
   128
    using c ul
61810
3c5040d5694a sorted out eventually_mono
paulson <lp15@cam.ac.uk>
parents: 61808
diff changeset
   129
    by (auto simp: continuous_on_def eventually_mono tendsto_uniform_limitI)
61973
0c7e865fa7cb more symbols;
wenzelm
parents: 61969
diff changeset
   130
  then show "(l \<longlongrightarrow> l x) (at x within A)"
60812
8fff64349793 added theory Uniform_Limit
immler
parents:
diff changeset
   131
    by (rule swap_uniform_limit) fact+
8fff64349793 added theory Uniform_Limit
immler
parents:
diff changeset
   132
qed
8fff64349793 added theory Uniform_Limit
immler
parents:
diff changeset
   133
61531
ab2e862263e7 Rounding function, uniform limits, cotangent, binomial identities
eberlm
parents: 61222
diff changeset
   134
lemma uniformly_Cauchy_onI:
ab2e862263e7 Rounding function, uniform limits, cotangent, binomial identities
eberlm
parents: 61222
diff changeset
   135
  assumes "\<And>e. e > 0 \<Longrightarrow> \<exists>M. \<forall>x\<in>X. \<forall>m\<ge>M. \<forall>n\<ge>M. dist (f m x) (f n x) < e"
ab2e862263e7 Rounding function, uniform limits, cotangent, binomial identities
eberlm
parents: 61222
diff changeset
   136
  shows   "uniformly_Cauchy_on X f"
ab2e862263e7 Rounding function, uniform limits, cotangent, binomial identities
eberlm
parents: 61222
diff changeset
   137
  using assms unfolding uniformly_Cauchy_on_def by blast
ab2e862263e7 Rounding function, uniform limits, cotangent, binomial identities
eberlm
parents: 61222
diff changeset
   138
ab2e862263e7 Rounding function, uniform limits, cotangent, binomial identities
eberlm
parents: 61222
diff changeset
   139
lemma uniformly_Cauchy_onI':
ab2e862263e7 Rounding function, uniform limits, cotangent, binomial identities
eberlm
parents: 61222
diff changeset
   140
  assumes "\<And>e. e > 0 \<Longrightarrow> \<exists>M. \<forall>x\<in>X. \<forall>m\<ge>M. \<forall>n>m. dist (f m x) (f n x) < e"
ab2e862263e7 Rounding function, uniform limits, cotangent, binomial identities
eberlm
parents: 61222
diff changeset
   141
  shows   "uniformly_Cauchy_on X f"
ab2e862263e7 Rounding function, uniform limits, cotangent, binomial identities
eberlm
parents: 61222
diff changeset
   142
proof (rule uniformly_Cauchy_onI)
ab2e862263e7 Rounding function, uniform limits, cotangent, binomial identities
eberlm
parents: 61222
diff changeset
   143
  fix e :: real assume e: "e > 0"
63594
bd218a9320b5 HOL-Multivariate_Analysis: rename theories for more descriptive names
hoelzl
parents: 63040
diff changeset
   144
  from assms[OF this] obtain M
61531
ab2e862263e7 Rounding function, uniform limits, cotangent, binomial identities
eberlm
parents: 61222
diff changeset
   145
    where M: "\<And>x m n. x \<in> X \<Longrightarrow> m \<ge> M \<Longrightarrow> n > m \<Longrightarrow> dist (f m x) (f n x) < e" by fast
ab2e862263e7 Rounding function, uniform limits, cotangent, binomial identities
eberlm
parents: 61222
diff changeset
   146
  {
ab2e862263e7 Rounding function, uniform limits, cotangent, binomial identities
eberlm
parents: 61222
diff changeset
   147
    fix x m n assume x: "x \<in> X" and m: "m \<ge> M" and n: "n \<ge> M"
ab2e862263e7 Rounding function, uniform limits, cotangent, binomial identities
eberlm
parents: 61222
diff changeset
   148
    with M[OF this(1,2), of n] M[OF this(1,3), of m] e have "dist (f m x) (f n x) < e"
ab2e862263e7 Rounding function, uniform limits, cotangent, binomial identities
eberlm
parents: 61222
diff changeset
   149
      by (cases m n rule: linorder_cases) (simp_all add: dist_commute)
ab2e862263e7 Rounding function, uniform limits, cotangent, binomial identities
eberlm
parents: 61222
diff changeset
   150
  }
ab2e862263e7 Rounding function, uniform limits, cotangent, binomial identities
eberlm
parents: 61222
diff changeset
   151
  thus "\<exists>M. \<forall>x\<in>X. \<forall>m\<ge>M. \<forall>n\<ge>M. dist (f m x) (f n x) < e" by fast
ab2e862263e7 Rounding function, uniform limits, cotangent, binomial identities
eberlm
parents: 61222
diff changeset
   152
qed
ab2e862263e7 Rounding function, uniform limits, cotangent, binomial identities
eberlm
parents: 61222
diff changeset
   153
63594
bd218a9320b5 HOL-Multivariate_Analysis: rename theories for more descriptive names
hoelzl
parents: 63040
diff changeset
   154
lemma uniformly_Cauchy_imp_Cauchy:
61531
ab2e862263e7 Rounding function, uniform limits, cotangent, binomial identities
eberlm
parents: 61222
diff changeset
   155
  "uniformly_Cauchy_on X f \<Longrightarrow> x \<in> X \<Longrightarrow> Cauchy (\<lambda>n. f n x)"
ab2e862263e7 Rounding function, uniform limits, cotangent, binomial identities
eberlm
parents: 61222
diff changeset
   156
  unfolding Cauchy_def uniformly_Cauchy_on_def by fast
ab2e862263e7 Rounding function, uniform limits, cotangent, binomial identities
eberlm
parents: 61222
diff changeset
   157
ab2e862263e7 Rounding function, uniform limits, cotangent, binomial identities
eberlm
parents: 61222
diff changeset
   158
lemma uniform_limit_cong:
ab2e862263e7 Rounding function, uniform limits, cotangent, binomial identities
eberlm
parents: 61222
diff changeset
   159
  fixes f g :: "'a \<Rightarrow> 'b \<Rightarrow> ('c :: metric_space)" and h i :: "'b \<Rightarrow> 'c"
ab2e862263e7 Rounding function, uniform limits, cotangent, binomial identities
eberlm
parents: 61222
diff changeset
   160
  assumes "eventually (\<lambda>y. \<forall>x\<in>X. f y x = g y x) F"
ab2e862263e7 Rounding function, uniform limits, cotangent, binomial identities
eberlm
parents: 61222
diff changeset
   161
  assumes "\<And>x. x \<in> X \<Longrightarrow> h x = i x"
ab2e862263e7 Rounding function, uniform limits, cotangent, binomial identities
eberlm
parents: 61222
diff changeset
   162
  shows   "uniform_limit X f h F \<longleftrightarrow> uniform_limit X g i F"
ab2e862263e7 Rounding function, uniform limits, cotangent, binomial identities
eberlm
parents: 61222
diff changeset
   163
proof -
ab2e862263e7 Rounding function, uniform limits, cotangent, binomial identities
eberlm
parents: 61222
diff changeset
   164
  {
ab2e862263e7 Rounding function, uniform limits, cotangent, binomial identities
eberlm
parents: 61222
diff changeset
   165
    fix f g :: "'a \<Rightarrow> 'b \<Rightarrow> 'c" and h i :: "'b \<Rightarrow> 'c"
ab2e862263e7 Rounding function, uniform limits, cotangent, binomial identities
eberlm
parents: 61222
diff changeset
   166
    assume C: "uniform_limit X f h F" and A: "eventually (\<lambda>y. \<forall>x\<in>X. f y x = g y x) F"
ab2e862263e7 Rounding function, uniform limits, cotangent, binomial identities
eberlm
parents: 61222
diff changeset
   167
       and B: "\<And>x. x \<in> X \<Longrightarrow> h x = i x"
ab2e862263e7 Rounding function, uniform limits, cotangent, binomial identities
eberlm
parents: 61222
diff changeset
   168
    {
ab2e862263e7 Rounding function, uniform limits, cotangent, binomial identities
eberlm
parents: 61222
diff changeset
   169
      fix e ::real assume "e > 0"
63594
bd218a9320b5 HOL-Multivariate_Analysis: rename theories for more descriptive names
hoelzl
parents: 63040
diff changeset
   170
      with C have "eventually (\<lambda>y. \<forall>x\<in>X. dist (f y x) (h x) < e) F"
61531
ab2e862263e7 Rounding function, uniform limits, cotangent, binomial identities
eberlm
parents: 61222
diff changeset
   171
        unfolding uniform_limit_iff by blast
ab2e862263e7 Rounding function, uniform limits, cotangent, binomial identities
eberlm
parents: 61222
diff changeset
   172
      with A have "eventually (\<lambda>y. \<forall>x\<in>X. dist (g y x) (i x) < e) F"
ab2e862263e7 Rounding function, uniform limits, cotangent, binomial identities
eberlm
parents: 61222
diff changeset
   173
        by eventually_elim (insert B, simp_all)
ab2e862263e7 Rounding function, uniform limits, cotangent, binomial identities
eberlm
parents: 61222
diff changeset
   174
    }
ab2e862263e7 Rounding function, uniform limits, cotangent, binomial identities
eberlm
parents: 61222
diff changeset
   175
    hence "uniform_limit X g i F" unfolding uniform_limit_iff by blast
ab2e862263e7 Rounding function, uniform limits, cotangent, binomial identities
eberlm
parents: 61222
diff changeset
   176
  } note A = this
ab2e862263e7 Rounding function, uniform limits, cotangent, binomial identities
eberlm
parents: 61222
diff changeset
   177
  show ?thesis by (rule iffI) (erule A; insert assms; simp add: eq_commute)+
ab2e862263e7 Rounding function, uniform limits, cotangent, binomial identities
eberlm
parents: 61222
diff changeset
   178
qed
ab2e862263e7 Rounding function, uniform limits, cotangent, binomial identities
eberlm
parents: 61222
diff changeset
   179
ab2e862263e7 Rounding function, uniform limits, cotangent, binomial identities
eberlm
parents: 61222
diff changeset
   180
lemma uniform_limit_cong':
ab2e862263e7 Rounding function, uniform limits, cotangent, binomial identities
eberlm
parents: 61222
diff changeset
   181
  fixes f g :: "'a \<Rightarrow> 'b \<Rightarrow> ('c :: metric_space)" and h i :: "'b \<Rightarrow> 'c"
ab2e862263e7 Rounding function, uniform limits, cotangent, binomial identities
eberlm
parents: 61222
diff changeset
   182
  assumes "\<And>y x. x \<in> X \<Longrightarrow> f y x = g y x"
ab2e862263e7 Rounding function, uniform limits, cotangent, binomial identities
eberlm
parents: 61222
diff changeset
   183
  assumes "\<And>x. x \<in> X \<Longrightarrow> h x = i x"
ab2e862263e7 Rounding function, uniform limits, cotangent, binomial identities
eberlm
parents: 61222
diff changeset
   184
  shows   "uniform_limit X f h F \<longleftrightarrow> uniform_limit X g i F"
ab2e862263e7 Rounding function, uniform limits, cotangent, binomial identities
eberlm
parents: 61222
diff changeset
   185
  using assms by (intro uniform_limit_cong always_eventually) blast+
ab2e862263e7 Rounding function, uniform limits, cotangent, binomial identities
eberlm
parents: 61222
diff changeset
   186
ab2e862263e7 Rounding function, uniform limits, cotangent, binomial identities
eberlm
parents: 61222
diff changeset
   187
lemma uniformly_convergent_uniform_limit_iff:
ab2e862263e7 Rounding function, uniform limits, cotangent, binomial identities
eberlm
parents: 61222
diff changeset
   188
  "uniformly_convergent_on X f \<longleftrightarrow> uniform_limit X f (\<lambda>x. lim (\<lambda>n. f n x)) sequentially"
ab2e862263e7 Rounding function, uniform limits, cotangent, binomial identities
eberlm
parents: 61222
diff changeset
   189
proof
ab2e862263e7 Rounding function, uniform limits, cotangent, binomial identities
eberlm
parents: 61222
diff changeset
   190
  assume "uniformly_convergent_on X f"
63594
bd218a9320b5 HOL-Multivariate_Analysis: rename theories for more descriptive names
hoelzl
parents: 63040
diff changeset
   191
  then obtain l where l: "uniform_limit X f l sequentially"
61531
ab2e862263e7 Rounding function, uniform limits, cotangent, binomial identities
eberlm
parents: 61222
diff changeset
   192
    unfolding uniformly_convergent_on_def by blast
ab2e862263e7 Rounding function, uniform limits, cotangent, binomial identities
eberlm
parents: 61222
diff changeset
   193
  from l have "uniform_limit X f (\<lambda>x. lim (\<lambda>n. f n x)) sequentially \<longleftrightarrow>
ab2e862263e7 Rounding function, uniform limits, cotangent, binomial identities
eberlm
parents: 61222
diff changeset
   194
                      uniform_limit X f l sequentially"
ab2e862263e7 Rounding function, uniform limits, cotangent, binomial identities
eberlm
parents: 61222
diff changeset
   195
    by (intro uniform_limit_cong' limI tendsto_uniform_limitI[of f X l]) simp_all
ab2e862263e7 Rounding function, uniform limits, cotangent, binomial identities
eberlm
parents: 61222
diff changeset
   196
  also note l
ab2e862263e7 Rounding function, uniform limits, cotangent, binomial identities
eberlm
parents: 61222
diff changeset
   197
  finally show "uniform_limit X f (\<lambda>x. lim (\<lambda>n. f n x)) sequentially" .
ab2e862263e7 Rounding function, uniform limits, cotangent, binomial identities
eberlm
parents: 61222
diff changeset
   198
qed (auto simp: uniformly_convergent_on_def)
ab2e862263e7 Rounding function, uniform limits, cotangent, binomial identities
eberlm
parents: 61222
diff changeset
   199
ab2e862263e7 Rounding function, uniform limits, cotangent, binomial identities
eberlm
parents: 61222
diff changeset
   200
lemma uniformly_convergentI: "uniform_limit X f l sequentially \<Longrightarrow> uniformly_convergent_on X f"
ab2e862263e7 Rounding function, uniform limits, cotangent, binomial identities
eberlm
parents: 61222
diff changeset
   201
  unfolding uniformly_convergent_on_def by blast
ab2e862263e7 Rounding function, uniform limits, cotangent, binomial identities
eberlm
parents: 61222
diff changeset
   202
62381
a6479cb85944 New and revised material for (multivariate) analysis
paulson <lp15@cam.ac.uk>
parents: 62175
diff changeset
   203
lemma uniformly_convergent_on_empty [iff]: "uniformly_convergent_on {} f"
a6479cb85944 New and revised material for (multivariate) analysis
paulson <lp15@cam.ac.uk>
parents: 62175
diff changeset
   204
  by (simp add: uniformly_convergent_on_def uniform_limit_sequentially_iff)
a6479cb85944 New and revised material for (multivariate) analysis
paulson <lp15@cam.ac.uk>
parents: 62175
diff changeset
   205
61531
ab2e862263e7 Rounding function, uniform limits, cotangent, binomial identities
eberlm
parents: 61222
diff changeset
   206
lemma Cauchy_uniformly_convergent:
ab2e862263e7 Rounding function, uniform limits, cotangent, binomial identities
eberlm
parents: 61222
diff changeset
   207
  fixes f :: "nat \<Rightarrow> 'a \<Rightarrow> 'b :: complete_space"
ab2e862263e7 Rounding function, uniform limits, cotangent, binomial identities
eberlm
parents: 61222
diff changeset
   208
  assumes "uniformly_Cauchy_on X f"
ab2e862263e7 Rounding function, uniform limits, cotangent, binomial identities
eberlm
parents: 61222
diff changeset
   209
  shows   "uniformly_convergent_on X f"
ab2e862263e7 Rounding function, uniform limits, cotangent, binomial identities
eberlm
parents: 61222
diff changeset
   210
unfolding uniformly_convergent_uniform_limit_iff uniform_limit_iff
ab2e862263e7 Rounding function, uniform limits, cotangent, binomial identities
eberlm
parents: 61222
diff changeset
   211
proof safe
ab2e862263e7 Rounding function, uniform limits, cotangent, binomial identities
eberlm
parents: 61222
diff changeset
   212
  let ?f = "\<lambda>x. lim (\<lambda>n. f n x)"
ab2e862263e7 Rounding function, uniform limits, cotangent, binomial identities
eberlm
parents: 61222
diff changeset
   213
  fix e :: real assume e: "e > 0"
ab2e862263e7 Rounding function, uniform limits, cotangent, binomial identities
eberlm
parents: 61222
diff changeset
   214
  hence "e/2 > 0" by simp
ab2e862263e7 Rounding function, uniform limits, cotangent, binomial identities
eberlm
parents: 61222
diff changeset
   215
  with assms obtain N where N: "\<And>x m n. x \<in> X \<Longrightarrow> m \<ge> N \<Longrightarrow> n \<ge> N \<Longrightarrow> dist (f m x) (f n x) < e/2"
ab2e862263e7 Rounding function, uniform limits, cotangent, binomial identities
eberlm
parents: 61222
diff changeset
   216
    unfolding uniformly_Cauchy_on_def by fast
ab2e862263e7 Rounding function, uniform limits, cotangent, binomial identities
eberlm
parents: 61222
diff changeset
   217
  show "eventually (\<lambda>n. \<forall>x\<in>X. dist (f n x) (?f x) < e) sequentially"
ab2e862263e7 Rounding function, uniform limits, cotangent, binomial identities
eberlm
parents: 61222
diff changeset
   218
    using eventually_ge_at_top[of N]
ab2e862263e7 Rounding function, uniform limits, cotangent, binomial identities
eberlm
parents: 61222
diff changeset
   219
  proof eventually_elim
ab2e862263e7 Rounding function, uniform limits, cotangent, binomial identities
eberlm
parents: 61222
diff changeset
   220
    fix n assume n: "n \<ge> N"
ab2e862263e7 Rounding function, uniform limits, cotangent, binomial identities
eberlm
parents: 61222
diff changeset
   221
    show "\<forall>x\<in>X. dist (f n x) (?f x) < e"
ab2e862263e7 Rounding function, uniform limits, cotangent, binomial identities
eberlm
parents: 61222
diff changeset
   222
    proof
ab2e862263e7 Rounding function, uniform limits, cotangent, binomial identities
eberlm
parents: 61222
diff changeset
   223
      fix x assume x: "x \<in> X"
63594
bd218a9320b5 HOL-Multivariate_Analysis: rename theories for more descriptive names
hoelzl
parents: 63040
diff changeset
   224
      with assms have "(\<lambda>n. f n x) \<longlonglongrightarrow> ?f x"
61531
ab2e862263e7 Rounding function, uniform limits, cotangent, binomial identities
eberlm
parents: 61222
diff changeset
   225
        by (auto dest!: Cauchy_convergent uniformly_Cauchy_imp_Cauchy simp: convergent_LIMSEQ_iff)
61808
fc1556774cfe isabelle update_cartouches -c -t;
wenzelm
parents: 61806
diff changeset
   226
      with \<open>e/2 > 0\<close> have "eventually (\<lambda>m. m \<ge> N \<and> dist (f m x) (?f x) < e/2) sequentially"
61531
ab2e862263e7 Rounding function, uniform limits, cotangent, binomial identities
eberlm
parents: 61222
diff changeset
   227
        by (intro tendstoD eventually_conj eventually_ge_at_top)
63594
bd218a9320b5 HOL-Multivariate_Analysis: rename theories for more descriptive names
hoelzl
parents: 63040
diff changeset
   228
      then obtain m where m: "m \<ge> N" "dist (f m x) (?f x) < e/2"
61531
ab2e862263e7 Rounding function, uniform limits, cotangent, binomial identities
eberlm
parents: 61222
diff changeset
   229
        unfolding eventually_at_top_linorder by blast
ab2e862263e7 Rounding function, uniform limits, cotangent, binomial identities
eberlm
parents: 61222
diff changeset
   230
      have "dist (f n x) (?f x) \<le> dist (f n x) (f m x) + dist (f m x) (?f x)"
ab2e862263e7 Rounding function, uniform limits, cotangent, binomial identities
eberlm
parents: 61222
diff changeset
   231
          by (rule dist_triangle)
ab2e862263e7 Rounding function, uniform limits, cotangent, binomial identities
eberlm
parents: 61222
diff changeset
   232
      also from x n have "... < e/2 + e/2" by (intro add_strict_mono N m)
ab2e862263e7 Rounding function, uniform limits, cotangent, binomial identities
eberlm
parents: 61222
diff changeset
   233
      finally show "dist (f n x) (?f x) < e" by simp
ab2e862263e7 Rounding function, uniform limits, cotangent, binomial identities
eberlm
parents: 61222
diff changeset
   234
    qed
ab2e862263e7 Rounding function, uniform limits, cotangent, binomial identities
eberlm
parents: 61222
diff changeset
   235
  qed
ab2e862263e7 Rounding function, uniform limits, cotangent, binomial identities
eberlm
parents: 61222
diff changeset
   236
qed
ab2e862263e7 Rounding function, uniform limits, cotangent, binomial identities
eberlm
parents: 61222
diff changeset
   237
ab2e862263e7 Rounding function, uniform limits, cotangent, binomial identities
eberlm
parents: 61222
diff changeset
   238
lemma uniformly_convergent_imp_convergent:
ab2e862263e7 Rounding function, uniform limits, cotangent, binomial identities
eberlm
parents: 61222
diff changeset
   239
  "uniformly_convergent_on X f \<Longrightarrow> x \<in> X \<Longrightarrow> convergent (\<lambda>n. f n x)"
ab2e862263e7 Rounding function, uniform limits, cotangent, binomial identities
eberlm
parents: 61222
diff changeset
   240
  unfolding uniformly_convergent_on_def convergent_def
ab2e862263e7 Rounding function, uniform limits, cotangent, binomial identities
eberlm
parents: 61222
diff changeset
   241
  by (auto dest: tendsto_uniform_limitI)
ab2e862263e7 Rounding function, uniform limits, cotangent, binomial identities
eberlm
parents: 61222
diff changeset
   242
ab2e862263e7 Rounding function, uniform limits, cotangent, binomial identities
eberlm
parents: 61222
diff changeset
   243
lemma weierstrass_m_test_ev:
60812
8fff64349793 added theory Uniform_Limit
immler
parents:
diff changeset
   244
fixes f :: "_ \<Rightarrow> _ \<Rightarrow> _ :: banach"
61531
ab2e862263e7 Rounding function, uniform limits, cotangent, binomial identities
eberlm
parents: 61222
diff changeset
   245
assumes "eventually (\<lambda>n. \<forall>x\<in>A. norm (f n x) \<le> M n) sequentially"
60812
8fff64349793 added theory Uniform_Limit
immler
parents:
diff changeset
   246
assumes "summable M"
8fff64349793 added theory Uniform_Limit
immler
parents:
diff changeset
   247
shows "uniform_limit A (\<lambda>n x. \<Sum>i<n. f i x) (\<lambda>x. suminf (\<lambda>i. f i x)) sequentially"
8fff64349793 added theory Uniform_Limit
immler
parents:
diff changeset
   248
proof (rule uniform_limitI)
8fff64349793 added theory Uniform_Limit
immler
parents:
diff changeset
   249
  fix e :: real
8fff64349793 added theory Uniform_Limit
immler
parents:
diff changeset
   250
  assume "0 < e"
61222
05d28dc76e5c isabelle update_cartouches;
wenzelm
parents: 60812
diff changeset
   251
  from suminf_exist_split[OF \<open>0 < e\<close> \<open>summable M\<close>]
60812
8fff64349793 added theory Uniform_Limit
immler
parents:
diff changeset
   252
  have "\<forall>\<^sub>F k in sequentially. norm (\<Sum>i. M (i + k)) < e"
8fff64349793 added theory Uniform_Limit
immler
parents:
diff changeset
   253
    by (auto simp: eventually_sequentially)
61531
ab2e862263e7 Rounding function, uniform limits, cotangent, binomial identities
eberlm
parents: 61222
diff changeset
   254
  with eventually_all_ge_at_top[OF assms(1)]
ab2e862263e7 Rounding function, uniform limits, cotangent, binomial identities
eberlm
parents: 61222
diff changeset
   255
    show "\<forall>\<^sub>F n in sequentially. \<forall>x\<in>A. dist (\<Sum>i<n. f i x) (\<Sum>i. f i x) < e"
60812
8fff64349793 added theory Uniform_Limit
immler
parents:
diff changeset
   256
  proof eventually_elim
8fff64349793 added theory Uniform_Limit
immler
parents:
diff changeset
   257
    case (elim k)
8fff64349793 added theory Uniform_Limit
immler
parents:
diff changeset
   258
    show ?case
8fff64349793 added theory Uniform_Limit
immler
parents:
diff changeset
   259
    proof safe
8fff64349793 added theory Uniform_Limit
immler
parents:
diff changeset
   260
      fix x assume "x \<in> A"
8fff64349793 added theory Uniform_Limit
immler
parents:
diff changeset
   261
      have "\<exists>N. \<forall>n\<ge>N. norm (f n x) \<le> M n"
61531
ab2e862263e7 Rounding function, uniform limits, cotangent, binomial identities
eberlm
parents: 61222
diff changeset
   262
        using assms(1) \<open>x \<in> A\<close> by (force simp: eventually_at_top_linorder)
60812
8fff64349793 added theory Uniform_Limit
immler
parents:
diff changeset
   263
      hence summable_norm_f: "summable (\<lambda>n. norm (f n x))"
61222
05d28dc76e5c isabelle update_cartouches;
wenzelm
parents: 60812
diff changeset
   264
        by(rule summable_norm_comparison_test[OF _ \<open>summable M\<close>])
60812
8fff64349793 added theory Uniform_Limit
immler
parents:
diff changeset
   265
      have summable_f: "summable (\<lambda>n. f n x)"
8fff64349793 added theory Uniform_Limit
immler
parents:
diff changeset
   266
        using summable_norm_cancel[OF summable_norm_f] .
8fff64349793 added theory Uniform_Limit
immler
parents:
diff changeset
   267
      have summable_norm_f_plus_k: "summable (\<lambda>i. norm (f (i + k) x))"
8fff64349793 added theory Uniform_Limit
immler
parents:
diff changeset
   268
        using summable_ignore_initial_segment[OF summable_norm_f]
8fff64349793 added theory Uniform_Limit
immler
parents:
diff changeset
   269
        by auto
8fff64349793 added theory Uniform_Limit
immler
parents:
diff changeset
   270
      have summable_M_plus_k: "summable (\<lambda>i. M (i + k))"
61222
05d28dc76e5c isabelle update_cartouches;
wenzelm
parents: 60812
diff changeset
   271
        using summable_ignore_initial_segment[OF \<open>summable M\<close>]
60812
8fff64349793 added theory Uniform_Limit
immler
parents:
diff changeset
   272
        by auto
8fff64349793 added theory Uniform_Limit
immler
parents:
diff changeset
   273
8fff64349793 added theory Uniform_Limit
immler
parents:
diff changeset
   274
      have "dist (\<Sum>i<k. f i x) (\<Sum>i. f i x) = norm ((\<Sum>i. f i x) - (\<Sum>i<k. f i x))"
8fff64349793 added theory Uniform_Limit
immler
parents:
diff changeset
   275
        using dist_norm dist_commute by (subst dist_commute)
8fff64349793 added theory Uniform_Limit
immler
parents:
diff changeset
   276
      also have "... = norm (\<Sum>i. f (i + k) x)"
8fff64349793 added theory Uniform_Limit
immler
parents:
diff changeset
   277
        using suminf_minus_initial_segment[OF summable_f, where k=k] by simp
8fff64349793 added theory Uniform_Limit
immler
parents:
diff changeset
   278
      also have "... \<le> (\<Sum>i. norm (f (i + k) x))"
8fff64349793 added theory Uniform_Limit
immler
parents:
diff changeset
   279
        using summable_norm[OF summable_norm_f_plus_k] .
8fff64349793 added theory Uniform_Limit
immler
parents:
diff changeset
   280
      also have "... \<le> (\<Sum>i. M (i + k))"
8fff64349793 added theory Uniform_Limit
immler
parents:
diff changeset
   281
        by (rule suminf_le[OF _ summable_norm_f_plus_k summable_M_plus_k])
61531
ab2e862263e7 Rounding function, uniform limits, cotangent, binomial identities
eberlm
parents: 61222
diff changeset
   282
           (insert elim(1) \<open>x \<in> A\<close>, simp)
60812
8fff64349793 added theory Uniform_Limit
immler
parents:
diff changeset
   283
      finally show "dist (\<Sum>i<k. f i x) (\<Sum>i. f i x) < e"
8fff64349793 added theory Uniform_Limit
immler
parents:
diff changeset
   284
        using elim by auto
8fff64349793 added theory Uniform_Limit
immler
parents:
diff changeset
   285
    qed
8fff64349793 added theory Uniform_Limit
immler
parents:
diff changeset
   286
  qed
8fff64349793 added theory Uniform_Limit
immler
parents:
diff changeset
   287
qed
8fff64349793 added theory Uniform_Limit
immler
parents:
diff changeset
   288
62175
8ffc4d0e652d isabelle update_cartouches -c -t;
wenzelm
parents: 62131
diff changeset
   289
text\<open>Alternative version, formulated as in HOL Light\<close>
62131
1baed43f453e nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
paulson
parents: 61973
diff changeset
   290
corollary series_comparison_uniform:
1baed43f453e nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
paulson
parents: 61973
diff changeset
   291
  fixes f :: "_ \<Rightarrow> nat \<Rightarrow> _ :: banach"
1baed43f453e nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
paulson
parents: 61973
diff changeset
   292
  assumes g: "summable g" and le: "\<And>n x. N \<le> n \<and> x \<in> A \<Longrightarrow> norm(f x n) \<le> g n"
64267
b9a1486e79be setsum -> sum
nipkow
parents: 63627
diff changeset
   293
    shows "\<exists>l. \<forall>e. 0 < e \<longrightarrow> (\<exists>N. \<forall>n x. N \<le> n \<and> x \<in> A \<longrightarrow> dist(sum (f x) {..<n}) (l x) < e)"
62131
1baed43f453e nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
paulson
parents: 61973
diff changeset
   294
proof -
1baed43f453e nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
paulson
parents: 61973
diff changeset
   295
  have 1: "\<forall>\<^sub>F n in sequentially. \<forall>x\<in>A. norm (f x n) \<le> g n"
1baed43f453e nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
paulson
parents: 61973
diff changeset
   296
    using le eventually_sequentially by auto
1baed43f453e nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
paulson
parents: 61973
diff changeset
   297
  show ?thesis
1baed43f453e nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
paulson
parents: 61973
diff changeset
   298
    apply (rule_tac x="(\<lambda>x. \<Sum>i. f x i)" in exI)
1baed43f453e nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
paulson
parents: 61973
diff changeset
   299
    apply (metis (no_types, lifting) eventually_sequentially uniform_limitD [OF weierstrass_m_test_ev [OF 1 g]])
1baed43f453e nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
paulson
parents: 61973
diff changeset
   300
    done
1baed43f453e nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
paulson
parents: 61973
diff changeset
   301
qed
1baed43f453e nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
paulson
parents: 61973
diff changeset
   302
1baed43f453e nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
paulson
parents: 61973
diff changeset
   303
corollary weierstrass_m_test:
1baed43f453e nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
paulson
parents: 61973
diff changeset
   304
  fixes f :: "_ \<Rightarrow> _ \<Rightarrow> _ :: banach"
1baed43f453e nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
paulson
parents: 61973
diff changeset
   305
  assumes "\<And>n x. x \<in> A \<Longrightarrow> norm (f n x) \<le> M n"
1baed43f453e nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
paulson
parents: 61973
diff changeset
   306
  assumes "summable M"
1baed43f453e nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
paulson
parents: 61973
diff changeset
   307
  shows "uniform_limit A (\<lambda>n x. \<Sum>i<n. f i x) (\<lambda>x. suminf (\<lambda>i. f i x)) sequentially"
61531
ab2e862263e7 Rounding function, uniform limits, cotangent, binomial identities
eberlm
parents: 61222
diff changeset
   308
  using assms by (intro weierstrass_m_test_ev always_eventually) auto
63594
bd218a9320b5 HOL-Multivariate_Analysis: rename theories for more descriptive names
hoelzl
parents: 63040
diff changeset
   309
62131
1baed43f453e nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
paulson
parents: 61973
diff changeset
   310
corollary weierstrass_m_test'_ev:
61531
ab2e862263e7 Rounding function, uniform limits, cotangent, binomial identities
eberlm
parents: 61222
diff changeset
   311
  fixes f :: "_ \<Rightarrow> _ \<Rightarrow> _ :: banach"
63594
bd218a9320b5 HOL-Multivariate_Analysis: rename theories for more descriptive names
hoelzl
parents: 63040
diff changeset
   312
  assumes "eventually (\<lambda>n. \<forall>x\<in>A. norm (f n x) \<le> M n) sequentially" "summable M"
61531
ab2e862263e7 Rounding function, uniform limits, cotangent, binomial identities
eberlm
parents: 61222
diff changeset
   313
  shows   "uniformly_convergent_on A (\<lambda>n x. \<Sum>i<n. f i x)"
ab2e862263e7 Rounding function, uniform limits, cotangent, binomial identities
eberlm
parents: 61222
diff changeset
   314
  unfolding uniformly_convergent_on_def by (rule exI, rule weierstrass_m_test_ev[OF assms])
ab2e862263e7 Rounding function, uniform limits, cotangent, binomial identities
eberlm
parents: 61222
diff changeset
   315
62131
1baed43f453e nonneg_Reals, nonpos_Reals, Cauchy integral formula, etc.
paulson
parents: 61973
diff changeset
   316
corollary weierstrass_m_test':
61531
ab2e862263e7 Rounding function, uniform limits, cotangent, binomial identities
eberlm
parents: 61222
diff changeset
   317
  fixes f :: "_ \<Rightarrow> _ \<Rightarrow> _ :: banach"
63594
bd218a9320b5 HOL-Multivariate_Analysis: rename theories for more descriptive names
hoelzl
parents: 63040
diff changeset
   318
  assumes "\<And>n x. x \<in> A \<Longrightarrow> norm (f n x) \<le> M n" "summable M"
61531
ab2e862263e7 Rounding function, uniform limits, cotangent, binomial identities
eberlm
parents: 61222
diff changeset
   319
  shows   "uniformly_convergent_on A (\<lambda>n x. \<Sum>i<n. f i x)"
ab2e862263e7 Rounding function, uniform limits, cotangent, binomial identities
eberlm
parents: 61222
diff changeset
   320
  unfolding uniformly_convergent_on_def by (rule exI, rule weierstrass_m_test[OF assms])
ab2e862263e7 Rounding function, uniform limits, cotangent, binomial identities
eberlm
parents: 61222
diff changeset
   321
60812
8fff64349793 added theory Uniform_Limit
immler
parents:
diff changeset
   322
lemma uniform_limit_eq_rhs: "uniform_limit X f l F \<Longrightarrow> l = m \<Longrightarrow> uniform_limit X f m F"
8fff64349793 added theory Uniform_Limit
immler
parents:
diff changeset
   323
  by simp
8fff64349793 added theory Uniform_Limit
immler
parents:
diff changeset
   324
8fff64349793 added theory Uniform_Limit
immler
parents:
diff changeset
   325
named_theorems uniform_limit_intros "introduction rules for uniform_limit"
61222
05d28dc76e5c isabelle update_cartouches;
wenzelm
parents: 60812
diff changeset
   326
setup \<open>
60812
8fff64349793 added theory Uniform_Limit
immler
parents:
diff changeset
   327
  Global_Theory.add_thms_dynamic (@{binding uniform_limit_eq_intros},
8fff64349793 added theory Uniform_Limit
immler
parents:
diff changeset
   328
    fn context =>
8fff64349793 added theory Uniform_Limit
immler
parents:
diff changeset
   329
      Named_Theorems.get (Context.proof_of context) @{named_theorems uniform_limit_intros}
8fff64349793 added theory Uniform_Limit
immler
parents:
diff changeset
   330
      |> map_filter (try (fn thm => @{thm uniform_limit_eq_rhs} OF [thm])))
61222
05d28dc76e5c isabelle update_cartouches;
wenzelm
parents: 60812
diff changeset
   331
\<close>
60812
8fff64349793 added theory Uniform_Limit
immler
parents:
diff changeset
   332
8fff64349793 added theory Uniform_Limit
immler
parents:
diff changeset
   333
lemma (in bounded_linear) uniform_limit[uniform_limit_intros]:
8fff64349793 added theory Uniform_Limit
immler
parents:
diff changeset
   334
  assumes "uniform_limit X g l F"
8fff64349793 added theory Uniform_Limit
immler
parents:
diff changeset
   335
  shows "uniform_limit X (\<lambda>a b. f (g a b)) (\<lambda>a. f (l a)) F"
8fff64349793 added theory Uniform_Limit
immler
parents:
diff changeset
   336
proof (rule uniform_limitI)
8fff64349793 added theory Uniform_Limit
immler
parents:
diff changeset
   337
  fix e::real
8fff64349793 added theory Uniform_Limit
immler
parents:
diff changeset
   338
  from pos_bounded obtain K
8fff64349793 added theory Uniform_Limit
immler
parents:
diff changeset
   339
    where K: "\<And>x y. dist (f x) (f y) \<le> K * dist x y" "K > 0"
8fff64349793 added theory Uniform_Limit
immler
parents:
diff changeset
   340
    by (auto simp: ac_simps dist_norm diff[symmetric])
61222
05d28dc76e5c isabelle update_cartouches;
wenzelm
parents: 60812
diff changeset
   341
  assume "0 < e" with \<open>K > 0\<close> have "e / K > 0" by simp
60812
8fff64349793 added theory Uniform_Limit
immler
parents:
diff changeset
   342
  from uniform_limitD[OF assms this]
8fff64349793 added theory Uniform_Limit
immler
parents:
diff changeset
   343
  show "\<forall>\<^sub>F n in F. \<forall>x\<in>X. dist (f (g n x)) (f (l x)) < e"
8fff64349793 added theory Uniform_Limit
immler
parents:
diff changeset
   344
    by eventually_elim (metis le_less_trans mult.commute pos_less_divide_eq K)
8fff64349793 added theory Uniform_Limit
immler
parents:
diff changeset
   345
qed
8fff64349793 added theory Uniform_Limit
immler
parents:
diff changeset
   346
8fff64349793 added theory Uniform_Limit
immler
parents:
diff changeset
   347
lemmas bounded_linear_uniform_limit_intros[uniform_limit_intros] =
8fff64349793 added theory Uniform_Limit
immler
parents:
diff changeset
   348
  bounded_linear.uniform_limit[OF bounded_linear_Im]
8fff64349793 added theory Uniform_Limit
immler
parents:
diff changeset
   349
  bounded_linear.uniform_limit[OF bounded_linear_Re]
8fff64349793 added theory Uniform_Limit
immler
parents:
diff changeset
   350
  bounded_linear.uniform_limit[OF bounded_linear_cnj]
8fff64349793 added theory Uniform_Limit
immler
parents:
diff changeset
   351
  bounded_linear.uniform_limit[OF bounded_linear_fst]
8fff64349793 added theory Uniform_Limit
immler
parents:
diff changeset
   352
  bounded_linear.uniform_limit[OF bounded_linear_snd]
8fff64349793 added theory Uniform_Limit
immler
parents:
diff changeset
   353
  bounded_linear.uniform_limit[OF bounded_linear_zero]
8fff64349793 added theory Uniform_Limit
immler
parents:
diff changeset
   354
  bounded_linear.uniform_limit[OF bounded_linear_of_real]
8fff64349793 added theory Uniform_Limit
immler
parents:
diff changeset
   355
  bounded_linear.uniform_limit[OF bounded_linear_inner_left]
8fff64349793 added theory Uniform_Limit
immler
parents:
diff changeset
   356
  bounded_linear.uniform_limit[OF bounded_linear_inner_right]
8fff64349793 added theory Uniform_Limit
immler
parents:
diff changeset
   357
  bounded_linear.uniform_limit[OF bounded_linear_divide]
8fff64349793 added theory Uniform_Limit
immler
parents:
diff changeset
   358
  bounded_linear.uniform_limit[OF bounded_linear_scaleR_right]
8fff64349793 added theory Uniform_Limit
immler
parents:
diff changeset
   359
  bounded_linear.uniform_limit[OF bounded_linear_mult_left]
8fff64349793 added theory Uniform_Limit
immler
parents:
diff changeset
   360
  bounded_linear.uniform_limit[OF bounded_linear_mult_right]
8fff64349793 added theory Uniform_Limit
immler
parents:
diff changeset
   361
  bounded_linear.uniform_limit[OF bounded_linear_scaleR_left]
8fff64349793 added theory Uniform_Limit
immler
parents:
diff changeset
   362
8fff64349793 added theory Uniform_Limit
immler
parents:
diff changeset
   363
lemmas uniform_limit_uminus[uniform_limit_intros] =
8fff64349793 added theory Uniform_Limit
immler
parents:
diff changeset
   364
  bounded_linear.uniform_limit[OF bounded_linear_minus[OF bounded_linear_ident]]
8fff64349793 added theory Uniform_Limit
immler
parents:
diff changeset
   365
62949
f36a54da47a4 added derivative of scaling in exponential function
immler
parents: 62393
diff changeset
   366
lemma uniform_limit_const[uniform_limit_intros]: "uniform_limit S (\<lambda>x y. c) (\<lambda>x. c) f"
f36a54da47a4 added derivative of scaling in exponential function
immler
parents: 62393
diff changeset
   367
  by (auto intro!: uniform_limitI)
f36a54da47a4 added derivative of scaling in exponential function
immler
parents: 62393
diff changeset
   368
60812
8fff64349793 added theory Uniform_Limit
immler
parents:
diff changeset
   369
lemma uniform_limit_add[uniform_limit_intros]:
8fff64349793 added theory Uniform_Limit
immler
parents:
diff changeset
   370
  fixes f g::"'a \<Rightarrow> 'b \<Rightarrow> 'c::real_normed_vector"
8fff64349793 added theory Uniform_Limit
immler
parents:
diff changeset
   371
  assumes "uniform_limit X f l F"
8fff64349793 added theory Uniform_Limit
immler
parents:
diff changeset
   372
  assumes "uniform_limit X g m F"
8fff64349793 added theory Uniform_Limit
immler
parents:
diff changeset
   373
  shows "uniform_limit X (\<lambda>a b. f a b + g a b) (\<lambda>a. l a + m a) F"
8fff64349793 added theory Uniform_Limit
immler
parents:
diff changeset
   374
proof (rule uniform_limitI)
8fff64349793 added theory Uniform_Limit
immler
parents:
diff changeset
   375
  fix e::real
8fff64349793 added theory Uniform_Limit
immler
parents:
diff changeset
   376
  assume "0 < e"
8fff64349793 added theory Uniform_Limit
immler
parents:
diff changeset
   377
  hence "0 < e / 2" by simp
8fff64349793 added theory Uniform_Limit
immler
parents:
diff changeset
   378
  from
8fff64349793 added theory Uniform_Limit
immler
parents:
diff changeset
   379
    uniform_limitD[OF assms(1) this]
8fff64349793 added theory Uniform_Limit
immler
parents:
diff changeset
   380
    uniform_limitD[OF assms(2) this]
8fff64349793 added theory Uniform_Limit
immler
parents:
diff changeset
   381
  show "\<forall>\<^sub>F n in F. \<forall>x\<in>X. dist (f n x + g n x) (l x + m x) < e"
8fff64349793 added theory Uniform_Limit
immler
parents:
diff changeset
   382
    by eventually_elim (simp add: dist_triangle_add_half)
8fff64349793 added theory Uniform_Limit
immler
parents:
diff changeset
   383
qed
8fff64349793 added theory Uniform_Limit
immler
parents:
diff changeset
   384
8fff64349793 added theory Uniform_Limit
immler
parents:
diff changeset
   385
lemma uniform_limit_minus[uniform_limit_intros]:
8fff64349793 added theory Uniform_Limit
immler
parents:
diff changeset
   386
  fixes f g::"'a \<Rightarrow> 'b \<Rightarrow> 'c::real_normed_vector"
8fff64349793 added theory Uniform_Limit
immler
parents:
diff changeset
   387
  assumes "uniform_limit X f l F"
8fff64349793 added theory Uniform_Limit
immler
parents:
diff changeset
   388
  assumes "uniform_limit X g m F"
8fff64349793 added theory Uniform_Limit
immler
parents:
diff changeset
   389
  shows "uniform_limit X (\<lambda>a b. f a b - g a b) (\<lambda>a. l a - m a) F"
8fff64349793 added theory Uniform_Limit
immler
parents:
diff changeset
   390
  unfolding diff_conv_add_uminus
8fff64349793 added theory Uniform_Limit
immler
parents:
diff changeset
   391
  by (rule uniform_limit_intros assms)+
8fff64349793 added theory Uniform_Limit
immler
parents:
diff changeset
   392
62949
f36a54da47a4 added derivative of scaling in exponential function
immler
parents: 62393
diff changeset
   393
lemma uniform_limit_norm[uniform_limit_intros]:
f36a54da47a4 added derivative of scaling in exponential function
immler
parents: 62393
diff changeset
   394
  assumes "uniform_limit S g l f"
f36a54da47a4 added derivative of scaling in exponential function
immler
parents: 62393
diff changeset
   395
  shows "uniform_limit S (\<lambda>x y. norm (g x y)) (\<lambda>x. norm (l x)) f"
f36a54da47a4 added derivative of scaling in exponential function
immler
parents: 62393
diff changeset
   396
  using assms
f36a54da47a4 added derivative of scaling in exponential function
immler
parents: 62393
diff changeset
   397
  apply (rule metric_uniform_limit_imp_uniform_limit)
f36a54da47a4 added derivative of scaling in exponential function
immler
parents: 62393
diff changeset
   398
  apply (rule eventuallyI)
f36a54da47a4 added derivative of scaling in exponential function
immler
parents: 62393
diff changeset
   399
  by (metis dist_norm norm_triangle_ineq3 real_norm_def)
f36a54da47a4 added derivative of scaling in exponential function
immler
parents: 62393
diff changeset
   400
60812
8fff64349793 added theory Uniform_Limit
immler
parents:
diff changeset
   401
lemma (in bounded_bilinear) bounded_uniform_limit[uniform_limit_intros]:
8fff64349793 added theory Uniform_Limit
immler
parents:
diff changeset
   402
  assumes "uniform_limit X f l F"
8fff64349793 added theory Uniform_Limit
immler
parents:
diff changeset
   403
  assumes "uniform_limit X g m F"
8fff64349793 added theory Uniform_Limit
immler
parents:
diff changeset
   404
  assumes "bounded (m ` X)"
8fff64349793 added theory Uniform_Limit
immler
parents:
diff changeset
   405
  assumes "bounded (l ` X)"
8fff64349793 added theory Uniform_Limit
immler
parents:
diff changeset
   406
  shows "uniform_limit X (\<lambda>a b. prod (f a b) (g a b)) (\<lambda>a. prod (l a) (m a)) F"
8fff64349793 added theory Uniform_Limit
immler
parents:
diff changeset
   407
proof (rule uniform_limitI)
8fff64349793 added theory Uniform_Limit
immler
parents:
diff changeset
   408
  fix e::real
8fff64349793 added theory Uniform_Limit
immler
parents:
diff changeset
   409
  from pos_bounded obtain K where K:
8fff64349793 added theory Uniform_Limit
immler
parents:
diff changeset
   410
    "0 < K" "\<And>a b. norm (prod a b) \<le> norm a * norm b * K"
8fff64349793 added theory Uniform_Limit
immler
parents:
diff changeset
   411
    by auto
8fff64349793 added theory Uniform_Limit
immler
parents:
diff changeset
   412
  hence "sqrt (K*4) > 0" by simp
8fff64349793 added theory Uniform_Limit
immler
parents:
diff changeset
   413
8fff64349793 added theory Uniform_Limit
immler
parents:
diff changeset
   414
  from assms obtain Km Kl
8fff64349793 added theory Uniform_Limit
immler
parents:
diff changeset
   415
  where Km: "Km > 0" "\<And>x. x \<in> X \<Longrightarrow> norm (m x) \<le> Km"
8fff64349793 added theory Uniform_Limit
immler
parents:
diff changeset
   416
    and Kl: "Kl > 0" "\<And>x. x \<in> X \<Longrightarrow> norm (l x) \<le> Kl"
8fff64349793 added theory Uniform_Limit
immler
parents:
diff changeset
   417
    by (auto simp: bounded_pos)
8fff64349793 added theory Uniform_Limit
immler
parents:
diff changeset
   418
  hence "K * Km * 4 > 0" "K * Kl * 4 > 0"
61222
05d28dc76e5c isabelle update_cartouches;
wenzelm
parents: 60812
diff changeset
   419
    using \<open>K > 0\<close>
60812
8fff64349793 added theory Uniform_Limit
immler
parents:
diff changeset
   420
    by simp_all
8fff64349793 added theory Uniform_Limit
immler
parents:
diff changeset
   421
  assume "0 < e"
8fff64349793 added theory Uniform_Limit
immler
parents:
diff changeset
   422
8fff64349793 added theory Uniform_Limit
immler
parents:
diff changeset
   423
  hence "sqrt e > 0" by simp
61222
05d28dc76e5c isabelle update_cartouches;
wenzelm
parents: 60812
diff changeset
   424
  from uniform_limitD[OF assms(1) divide_pos_pos[OF this \<open>sqrt (K*4) > 0\<close>]]
05d28dc76e5c isabelle update_cartouches;
wenzelm
parents: 60812
diff changeset
   425
    uniform_limitD[OF assms(2) divide_pos_pos[OF this \<open>sqrt (K*4) > 0\<close>]]
05d28dc76e5c isabelle update_cartouches;
wenzelm
parents: 60812
diff changeset
   426
    uniform_limitD[OF assms(1) divide_pos_pos[OF \<open>e > 0\<close> \<open>K * Km * 4 > 0\<close>]]
05d28dc76e5c isabelle update_cartouches;
wenzelm
parents: 60812
diff changeset
   427
    uniform_limitD[OF assms(2) divide_pos_pos[OF \<open>e > 0\<close> \<open>K * Kl * 4 > 0\<close>]]
60812
8fff64349793 added theory Uniform_Limit
immler
parents:
diff changeset
   428
  show "\<forall>\<^sub>F n in F. \<forall>x\<in>X. dist (prod (f n x) (g n x)) (prod (l x) (m x)) < e"
8fff64349793 added theory Uniform_Limit
immler
parents:
diff changeset
   429
  proof eventually_elim
8fff64349793 added theory Uniform_Limit
immler
parents:
diff changeset
   430
    case (elim n)
8fff64349793 added theory Uniform_Limit
immler
parents:
diff changeset
   431
    show ?case
8fff64349793 added theory Uniform_Limit
immler
parents:
diff changeset
   432
    proof safe
8fff64349793 added theory Uniform_Limit
immler
parents:
diff changeset
   433
      fix x assume "x \<in> X"
8fff64349793 added theory Uniform_Limit
immler
parents:
diff changeset
   434
      have "dist (prod (f n x) (g n x)) (prod (l x) (m x)) \<le>
8fff64349793 added theory Uniform_Limit
immler
parents:
diff changeset
   435
        norm (prod (f n x - l x) (g n x - m x)) +
8fff64349793 added theory Uniform_Limit
immler
parents:
diff changeset
   436
        norm (prod (f n x - l x) (m x)) +
8fff64349793 added theory Uniform_Limit
immler
parents:
diff changeset
   437
        norm (prod (l x) (g n x - m x))"
8fff64349793 added theory Uniform_Limit
immler
parents:
diff changeset
   438
        by (auto simp: dist_norm prod_diff_prod intro: order_trans norm_triangle_ineq add_mono)
8fff64349793 added theory Uniform_Limit
immler
parents:
diff changeset
   439
      also note K(2)[of "f n x - l x" "g n x - m x"]
61222
05d28dc76e5c isabelle update_cartouches;
wenzelm
parents: 60812
diff changeset
   440
      also from elim(1)[THEN bspec, OF \<open>_ \<in> X\<close>, unfolded dist_norm]
60812
8fff64349793 added theory Uniform_Limit
immler
parents:
diff changeset
   441
      have "norm (f n x - l x) \<le> sqrt e / sqrt (K * 4)"
8fff64349793 added theory Uniform_Limit
immler
parents:
diff changeset
   442
        by simp
61222
05d28dc76e5c isabelle update_cartouches;
wenzelm
parents: 60812
diff changeset
   443
      also from elim(2)[THEN bspec, OF \<open>_ \<in> X\<close>, unfolded dist_norm]
60812
8fff64349793 added theory Uniform_Limit
immler
parents:
diff changeset
   444
      have "norm (g n x - m x) \<le> sqrt e / sqrt (K * 4)"
8fff64349793 added theory Uniform_Limit
immler
parents:
diff changeset
   445
        by simp
8fff64349793 added theory Uniform_Limit
immler
parents:
diff changeset
   446
      also have "sqrt e / sqrt (K * 4) * (sqrt e / sqrt (K * 4)) * K = e / 4"
61222
05d28dc76e5c isabelle update_cartouches;
wenzelm
parents: 60812
diff changeset
   447
        using \<open>K > 0\<close> \<open>e > 0\<close> by auto
60812
8fff64349793 added theory Uniform_Limit
immler
parents:
diff changeset
   448
      also note K(2)[of "f n x - l x" "m x"]
8fff64349793 added theory Uniform_Limit
immler
parents:
diff changeset
   449
      also note K(2)[of "l x" "g n x - m x"]
61222
05d28dc76e5c isabelle update_cartouches;
wenzelm
parents: 60812
diff changeset
   450
      also from elim(3)[THEN bspec, OF \<open>_ \<in> X\<close>, unfolded dist_norm]
60812
8fff64349793 added theory Uniform_Limit
immler
parents:
diff changeset
   451
      have "norm (f n x - l x) \<le> e / (K * Km * 4)"
8fff64349793 added theory Uniform_Limit
immler
parents:
diff changeset
   452
        by simp
61222
05d28dc76e5c isabelle update_cartouches;
wenzelm
parents: 60812
diff changeset
   453
      also from elim(4)[THEN bspec, OF \<open>_ \<in> X\<close>, unfolded dist_norm]
60812
8fff64349793 added theory Uniform_Limit
immler
parents:
diff changeset
   454
      have "norm (g n x - m x) \<le> e / (K * Kl * 4)"
8fff64349793 added theory Uniform_Limit
immler
parents:
diff changeset
   455
        by simp
61222
05d28dc76e5c isabelle update_cartouches;
wenzelm
parents: 60812
diff changeset
   456
      also note Kl(2)[OF \<open>_ \<in> X\<close>]
05d28dc76e5c isabelle update_cartouches;
wenzelm
parents: 60812
diff changeset
   457
      also note Km(2)[OF \<open>_ \<in> X\<close>]
60812
8fff64349793 added theory Uniform_Limit
immler
parents:
diff changeset
   458
      also have "e / (K * Km * 4) * Km * K = e / 4"
61222
05d28dc76e5c isabelle update_cartouches;
wenzelm
parents: 60812
diff changeset
   459
        using \<open>K > 0\<close> \<open>Km > 0\<close> by simp
60812
8fff64349793 added theory Uniform_Limit
immler
parents:
diff changeset
   460
      also have " Kl * (e / (K * Kl * 4)) * K = e / 4"
61222
05d28dc76e5c isabelle update_cartouches;
wenzelm
parents: 60812
diff changeset
   461
        using \<open>K > 0\<close> \<open>Kl > 0\<close> by simp
05d28dc76e5c isabelle update_cartouches;
wenzelm
parents: 60812
diff changeset
   462
      also have "e / 4 + e / 4 + e / 4 < e" using \<open>e > 0\<close> by simp
60812
8fff64349793 added theory Uniform_Limit
immler
parents:
diff changeset
   463
      finally show "dist (prod (f n x) (g n x)) (prod (l x) (m x)) < e"
61222
05d28dc76e5c isabelle update_cartouches;
wenzelm
parents: 60812
diff changeset
   464
        using \<open>K > 0\<close> \<open>Kl > 0\<close> \<open>Km > 0\<close> \<open>e > 0\<close>
60812
8fff64349793 added theory Uniform_Limit
immler
parents:
diff changeset
   465
        by (simp add: algebra_simps mult_right_mono divide_right_mono)
8fff64349793 added theory Uniform_Limit
immler
parents:
diff changeset
   466
    qed
8fff64349793 added theory Uniform_Limit
immler
parents:
diff changeset
   467
  qed
8fff64349793 added theory Uniform_Limit
immler
parents:
diff changeset
   468
qed
8fff64349793 added theory Uniform_Limit
immler
parents:
diff changeset
   469
8fff64349793 added theory Uniform_Limit
immler
parents:
diff changeset
   470
lemmas bounded_bilinear_bounded_uniform_limit_intros[uniform_limit_intros] =
8fff64349793 added theory Uniform_Limit
immler
parents:
diff changeset
   471
  bounded_bilinear.bounded_uniform_limit[OF Inner_Product.bounded_bilinear_inner]
8fff64349793 added theory Uniform_Limit
immler
parents:
diff changeset
   472
  bounded_bilinear.bounded_uniform_limit[OF Real_Vector_Spaces.bounded_bilinear_mult]
8fff64349793 added theory Uniform_Limit
immler
parents:
diff changeset
   473
  bounded_bilinear.bounded_uniform_limit[OF Real_Vector_Spaces.bounded_bilinear_scaleR]
8fff64349793 added theory Uniform_Limit
immler
parents:
diff changeset
   474
65036
ab7e11730ad8 Some new lemmas. Existing lemmas modified to use uniform_limit rather than its expansion
paulson <lp15@cam.ac.uk>
parents: 64267
diff changeset
   475
lemma uniform_lim_mult:
ab7e11730ad8 Some new lemmas. Existing lemmas modified to use uniform_limit rather than its expansion
paulson <lp15@cam.ac.uk>
parents: 64267
diff changeset
   476
  fixes f :: "'a \<Rightarrow> 'b \<Rightarrow> 'c::real_normed_algebra"
ab7e11730ad8 Some new lemmas. Existing lemmas modified to use uniform_limit rather than its expansion
paulson <lp15@cam.ac.uk>
parents: 64267
diff changeset
   477
  assumes f: "uniform_limit S f l F"
ab7e11730ad8 Some new lemmas. Existing lemmas modified to use uniform_limit rather than its expansion
paulson <lp15@cam.ac.uk>
parents: 64267
diff changeset
   478
      and g: "uniform_limit S g m F"
ab7e11730ad8 Some new lemmas. Existing lemmas modified to use uniform_limit rather than its expansion
paulson <lp15@cam.ac.uk>
parents: 64267
diff changeset
   479
      and l: "bounded (l ` S)"
ab7e11730ad8 Some new lemmas. Existing lemmas modified to use uniform_limit rather than its expansion
paulson <lp15@cam.ac.uk>
parents: 64267
diff changeset
   480
      and m: "bounded (m ` S)"
ab7e11730ad8 Some new lemmas. Existing lemmas modified to use uniform_limit rather than its expansion
paulson <lp15@cam.ac.uk>
parents: 64267
diff changeset
   481
    shows "uniform_limit S (\<lambda>a b. f a b * g a b) (\<lambda>a. l a * m a) F"
ab7e11730ad8 Some new lemmas. Existing lemmas modified to use uniform_limit rather than its expansion
paulson <lp15@cam.ac.uk>
parents: 64267
diff changeset
   482
  by (intro bounded_bilinear_bounded_uniform_limit_intros assms)
ab7e11730ad8 Some new lemmas. Existing lemmas modified to use uniform_limit rather than its expansion
paulson <lp15@cam.ac.uk>
parents: 64267
diff changeset
   483
ab7e11730ad8 Some new lemmas. Existing lemmas modified to use uniform_limit rather than its expansion
paulson <lp15@cam.ac.uk>
parents: 64267
diff changeset
   484
lemma uniform_lim_inverse:
ab7e11730ad8 Some new lemmas. Existing lemmas modified to use uniform_limit rather than its expansion
paulson <lp15@cam.ac.uk>
parents: 64267
diff changeset
   485
  fixes f :: "'a \<Rightarrow> 'b \<Rightarrow> 'c::real_normed_field"
ab7e11730ad8 Some new lemmas. Existing lemmas modified to use uniform_limit rather than its expansion
paulson <lp15@cam.ac.uk>
parents: 64267
diff changeset
   486
  assumes f: "uniform_limit S f l F"
ab7e11730ad8 Some new lemmas. Existing lemmas modified to use uniform_limit rather than its expansion
paulson <lp15@cam.ac.uk>
parents: 64267
diff changeset
   487
      and b: "\<And>x. x \<in> S \<Longrightarrow> b \<le> norm(l x)"
ab7e11730ad8 Some new lemmas. Existing lemmas modified to use uniform_limit rather than its expansion
paulson <lp15@cam.ac.uk>
parents: 64267
diff changeset
   488
      and "b > 0"
ab7e11730ad8 Some new lemmas. Existing lemmas modified to use uniform_limit rather than its expansion
paulson <lp15@cam.ac.uk>
parents: 64267
diff changeset
   489
    shows "uniform_limit S (\<lambda>x y. inverse (f x y)) (inverse \<circ> l) F"
ab7e11730ad8 Some new lemmas. Existing lemmas modified to use uniform_limit rather than its expansion
paulson <lp15@cam.ac.uk>
parents: 64267
diff changeset
   490
proof (rule uniform_limitI)
ab7e11730ad8 Some new lemmas. Existing lemmas modified to use uniform_limit rather than its expansion
paulson <lp15@cam.ac.uk>
parents: 64267
diff changeset
   491
  fix e::real
ab7e11730ad8 Some new lemmas. Existing lemmas modified to use uniform_limit rather than its expansion
paulson <lp15@cam.ac.uk>
parents: 64267
diff changeset
   492
  assume "e > 0"
ab7e11730ad8 Some new lemmas. Existing lemmas modified to use uniform_limit rather than its expansion
paulson <lp15@cam.ac.uk>
parents: 64267
diff changeset
   493
  have lte: "dist (inverse (f x y)) ((inverse \<circ> l) y) < e"
ab7e11730ad8 Some new lemmas. Existing lemmas modified to use uniform_limit rather than its expansion
paulson <lp15@cam.ac.uk>
parents: 64267
diff changeset
   494
           if "b/2 \<le> norm (f x y)" "norm (f x y - l y) < e * b\<^sup>2 / 2" "y \<in> S"
ab7e11730ad8 Some new lemmas. Existing lemmas modified to use uniform_limit rather than its expansion
paulson <lp15@cam.ac.uk>
parents: 64267
diff changeset
   495
           for x y
ab7e11730ad8 Some new lemmas. Existing lemmas modified to use uniform_limit rather than its expansion
paulson <lp15@cam.ac.uk>
parents: 64267
diff changeset
   496
  proof -
ab7e11730ad8 Some new lemmas. Existing lemmas modified to use uniform_limit rather than its expansion
paulson <lp15@cam.ac.uk>
parents: 64267
diff changeset
   497
    have [simp]: "l y \<noteq> 0" "f x y \<noteq> 0"
ab7e11730ad8 Some new lemmas. Existing lemmas modified to use uniform_limit rather than its expansion
paulson <lp15@cam.ac.uk>
parents: 64267
diff changeset
   498
      using \<open>b > 0\<close> that b [OF \<open>y \<in> S\<close>] by fastforce+
ab7e11730ad8 Some new lemmas. Existing lemmas modified to use uniform_limit rather than its expansion
paulson <lp15@cam.ac.uk>
parents: 64267
diff changeset
   499
    have "norm (l y - f x y) <  e * b\<^sup>2 / 2"
ab7e11730ad8 Some new lemmas. Existing lemmas modified to use uniform_limit rather than its expansion
paulson <lp15@cam.ac.uk>
parents: 64267
diff changeset
   500
      by (metis norm_minus_commute that(2))
ab7e11730ad8 Some new lemmas. Existing lemmas modified to use uniform_limit rather than its expansion
paulson <lp15@cam.ac.uk>
parents: 64267
diff changeset
   501
    also have "... \<le> e * (norm (f x y) * norm (l y))"
ab7e11730ad8 Some new lemmas. Existing lemmas modified to use uniform_limit rather than its expansion
paulson <lp15@cam.ac.uk>
parents: 64267
diff changeset
   502
      using \<open>e > 0\<close> that b [OF \<open>y \<in> S\<close>] apply (simp add: power2_eq_square)
ab7e11730ad8 Some new lemmas. Existing lemmas modified to use uniform_limit rather than its expansion
paulson <lp15@cam.ac.uk>
parents: 64267
diff changeset
   503
      by (metis \<open>b > 0\<close> less_eq_real_def mult.left_commute mult_mono')
ab7e11730ad8 Some new lemmas. Existing lemmas modified to use uniform_limit rather than its expansion
paulson <lp15@cam.ac.uk>
parents: 64267
diff changeset
   504
    finally show ?thesis
ab7e11730ad8 Some new lemmas. Existing lemmas modified to use uniform_limit rather than its expansion
paulson <lp15@cam.ac.uk>
parents: 64267
diff changeset
   505
      by (auto simp: dist_norm divide_simps norm_mult norm_divide)
ab7e11730ad8 Some new lemmas. Existing lemmas modified to use uniform_limit rather than its expansion
paulson <lp15@cam.ac.uk>
parents: 64267
diff changeset
   506
  qed
ab7e11730ad8 Some new lemmas. Existing lemmas modified to use uniform_limit rather than its expansion
paulson <lp15@cam.ac.uk>
parents: 64267
diff changeset
   507
  have "\<forall>\<^sub>F n in F. \<forall>x\<in>S. dist (f n x) (l x) < b/2"
ab7e11730ad8 Some new lemmas. Existing lemmas modified to use uniform_limit rather than its expansion
paulson <lp15@cam.ac.uk>
parents: 64267
diff changeset
   508
    using uniform_limitD [OF f, of "b/2"] by (simp add: \<open>b > 0\<close>)
ab7e11730ad8 Some new lemmas. Existing lemmas modified to use uniform_limit rather than its expansion
paulson <lp15@cam.ac.uk>
parents: 64267
diff changeset
   509
  then have "\<forall>\<^sub>F x in F. \<forall>y\<in>S. b/2 \<le> norm (f x y)"
ab7e11730ad8 Some new lemmas. Existing lemmas modified to use uniform_limit rather than its expansion
paulson <lp15@cam.ac.uk>
parents: 64267
diff changeset
   510
    apply (rule eventually_mono)
ab7e11730ad8 Some new lemmas. Existing lemmas modified to use uniform_limit rather than its expansion
paulson <lp15@cam.ac.uk>
parents: 64267
diff changeset
   511
    using b apply (simp only: dist_norm)
ab7e11730ad8 Some new lemmas. Existing lemmas modified to use uniform_limit rather than its expansion
paulson <lp15@cam.ac.uk>
parents: 64267
diff changeset
   512
    by (metis (no_types, hide_lams) diff_zero dist_commute dist_norm norm_triangle_half_l not_less)
ab7e11730ad8 Some new lemmas. Existing lemmas modified to use uniform_limit rather than its expansion
paulson <lp15@cam.ac.uk>
parents: 64267
diff changeset
   513
  then have "\<forall>\<^sub>F x in F. \<forall>y\<in>S. b/2 \<le> norm (f x y) \<and> norm (f x y - l y) < e * b\<^sup>2 / 2"
ab7e11730ad8 Some new lemmas. Existing lemmas modified to use uniform_limit rather than its expansion
paulson <lp15@cam.ac.uk>
parents: 64267
diff changeset
   514
    apply (simp only: ball_conj_distrib dist_norm [symmetric])
ab7e11730ad8 Some new lemmas. Existing lemmas modified to use uniform_limit rather than its expansion
paulson <lp15@cam.ac.uk>
parents: 64267
diff changeset
   515
    apply (rule eventually_conj, assumption)
ab7e11730ad8 Some new lemmas. Existing lemmas modified to use uniform_limit rather than its expansion
paulson <lp15@cam.ac.uk>
parents: 64267
diff changeset
   516
      apply (rule uniform_limitD [OF f, of "e * b ^ 2 / 2"])
ab7e11730ad8 Some new lemmas. Existing lemmas modified to use uniform_limit rather than its expansion
paulson <lp15@cam.ac.uk>
parents: 64267
diff changeset
   517
    using \<open>b > 0\<close> \<open>e > 0\<close> by auto
ab7e11730ad8 Some new lemmas. Existing lemmas modified to use uniform_limit rather than its expansion
paulson <lp15@cam.ac.uk>
parents: 64267
diff changeset
   518
  then show "\<forall>\<^sub>F x in F. \<forall>y\<in>S. dist (inverse (f x y)) ((inverse \<circ> l) y) < e"
ab7e11730ad8 Some new lemmas. Existing lemmas modified to use uniform_limit rather than its expansion
paulson <lp15@cam.ac.uk>
parents: 64267
diff changeset
   519
    using lte by (force intro: eventually_mono)
ab7e11730ad8 Some new lemmas. Existing lemmas modified to use uniform_limit rather than its expansion
paulson <lp15@cam.ac.uk>
parents: 64267
diff changeset
   520
qed
ab7e11730ad8 Some new lemmas. Existing lemmas modified to use uniform_limit rather than its expansion
paulson <lp15@cam.ac.uk>
parents: 64267
diff changeset
   521
ab7e11730ad8 Some new lemmas. Existing lemmas modified to use uniform_limit rather than its expansion
paulson <lp15@cam.ac.uk>
parents: 64267
diff changeset
   522
lemma uniform_lim_div:
ab7e11730ad8 Some new lemmas. Existing lemmas modified to use uniform_limit rather than its expansion
paulson <lp15@cam.ac.uk>
parents: 64267
diff changeset
   523
  fixes f :: "'a \<Rightarrow> 'b \<Rightarrow> 'c::real_normed_field"
ab7e11730ad8 Some new lemmas. Existing lemmas modified to use uniform_limit rather than its expansion
paulson <lp15@cam.ac.uk>
parents: 64267
diff changeset
   524
  assumes f: "uniform_limit S f l F"
ab7e11730ad8 Some new lemmas. Existing lemmas modified to use uniform_limit rather than its expansion
paulson <lp15@cam.ac.uk>
parents: 64267
diff changeset
   525
      and g: "uniform_limit S g m F"
ab7e11730ad8 Some new lemmas. Existing lemmas modified to use uniform_limit rather than its expansion
paulson <lp15@cam.ac.uk>
parents: 64267
diff changeset
   526
      and l: "bounded (l ` S)"
ab7e11730ad8 Some new lemmas. Existing lemmas modified to use uniform_limit rather than its expansion
paulson <lp15@cam.ac.uk>
parents: 64267
diff changeset
   527
      and b: "\<And>x. x \<in> S \<Longrightarrow> b \<le> norm(m x)"
ab7e11730ad8 Some new lemmas. Existing lemmas modified to use uniform_limit rather than its expansion
paulson <lp15@cam.ac.uk>
parents: 64267
diff changeset
   528
      and "b > 0"
ab7e11730ad8 Some new lemmas. Existing lemmas modified to use uniform_limit rather than its expansion
paulson <lp15@cam.ac.uk>
parents: 64267
diff changeset
   529
    shows "uniform_limit S (\<lambda>a b. f a b / g a b) (\<lambda>a. l a / m a) F"
ab7e11730ad8 Some new lemmas. Existing lemmas modified to use uniform_limit rather than its expansion
paulson <lp15@cam.ac.uk>
parents: 64267
diff changeset
   530
proof -
ab7e11730ad8 Some new lemmas. Existing lemmas modified to use uniform_limit rather than its expansion
paulson <lp15@cam.ac.uk>
parents: 64267
diff changeset
   531
  have m: "bounded ((inverse \<circ> m) ` S)"
ab7e11730ad8 Some new lemmas. Existing lemmas modified to use uniform_limit rather than its expansion
paulson <lp15@cam.ac.uk>
parents: 64267
diff changeset
   532
    using b \<open>b > 0\<close>
ab7e11730ad8 Some new lemmas. Existing lemmas modified to use uniform_limit rather than its expansion
paulson <lp15@cam.ac.uk>
parents: 64267
diff changeset
   533
    apply (simp add: bounded_iff)
ab7e11730ad8 Some new lemmas. Existing lemmas modified to use uniform_limit rather than its expansion
paulson <lp15@cam.ac.uk>
parents: 64267
diff changeset
   534
    by (metis le_imp_inverse_le norm_inverse)
ab7e11730ad8 Some new lemmas. Existing lemmas modified to use uniform_limit rather than its expansion
paulson <lp15@cam.ac.uk>
parents: 64267
diff changeset
   535
  have "uniform_limit S (\<lambda>a b. f a b * inverse (g a b))
ab7e11730ad8 Some new lemmas. Existing lemmas modified to use uniform_limit rather than its expansion
paulson <lp15@cam.ac.uk>
parents: 64267
diff changeset
   536
         (\<lambda>a. l a * (inverse \<circ> m) a) F"
ab7e11730ad8 Some new lemmas. Existing lemmas modified to use uniform_limit rather than its expansion
paulson <lp15@cam.ac.uk>
parents: 64267
diff changeset
   537
    by (rule uniform_lim_mult [OF f uniform_lim_inverse [OF g b \<open>b > 0\<close>] l m])
ab7e11730ad8 Some new lemmas. Existing lemmas modified to use uniform_limit rather than its expansion
paulson <lp15@cam.ac.uk>
parents: 64267
diff changeset
   538
  then show ?thesis
ab7e11730ad8 Some new lemmas. Existing lemmas modified to use uniform_limit rather than its expansion
paulson <lp15@cam.ac.uk>
parents: 64267
diff changeset
   539
    by (simp add: field_class.field_divide_inverse)
ab7e11730ad8 Some new lemmas. Existing lemmas modified to use uniform_limit rather than its expansion
paulson <lp15@cam.ac.uk>
parents: 64267
diff changeset
   540
qed
ab7e11730ad8 Some new lemmas. Existing lemmas modified to use uniform_limit rather than its expansion
paulson <lp15@cam.ac.uk>
parents: 64267
diff changeset
   541
60812
8fff64349793 added theory Uniform_Limit
immler
parents:
diff changeset
   542
lemma uniform_limit_null_comparison:
8fff64349793 added theory Uniform_Limit
immler
parents:
diff changeset
   543
  assumes "\<forall>\<^sub>F x in F. \<forall>a\<in>S. norm (f x a) \<le> g x a"
8fff64349793 added theory Uniform_Limit
immler
parents:
diff changeset
   544
  assumes "uniform_limit S g (\<lambda>_. 0) F"
8fff64349793 added theory Uniform_Limit
immler
parents:
diff changeset
   545
  shows "uniform_limit S f (\<lambda>_. 0) F"
8fff64349793 added theory Uniform_Limit
immler
parents:
diff changeset
   546
  using assms(2)
8fff64349793 added theory Uniform_Limit
immler
parents:
diff changeset
   547
proof (rule metric_uniform_limit_imp_uniform_limit)
8fff64349793 added theory Uniform_Limit
immler
parents:
diff changeset
   548
  show "\<forall>\<^sub>F x in F. \<forall>y\<in>S. dist (f x y) 0 \<le> dist (g x y) 0"
61810
3c5040d5694a sorted out eventually_mono
paulson <lp15@cam.ac.uk>
parents: 61808
diff changeset
   549
    using assms(1) by (rule eventually_mono) (force simp add: dist_norm)
60812
8fff64349793 added theory Uniform_Limit
immler
parents:
diff changeset
   550
qed
8fff64349793 added theory Uniform_Limit
immler
parents:
diff changeset
   551
65036
ab7e11730ad8 Some new lemmas. Existing lemmas modified to use uniform_limit rather than its expansion
paulson <lp15@cam.ac.uk>
parents: 64267
diff changeset
   552
lemma uniform_limit_on_Un:
60812
8fff64349793 added theory Uniform_Limit
immler
parents:
diff changeset
   553
  "uniform_limit I f g F \<Longrightarrow> uniform_limit J f g F \<Longrightarrow> uniform_limit (I \<union> J) f g F"
8fff64349793 added theory Uniform_Limit
immler
parents:
diff changeset
   554
  by (auto intro!: uniform_limitI dest!: uniform_limitD elim: eventually_elim2)
8fff64349793 added theory Uniform_Limit
immler
parents:
diff changeset
   555
62381
a6479cb85944 New and revised material for (multivariate) analysis
paulson <lp15@cam.ac.uk>
parents: 62175
diff changeset
   556
lemma uniform_limit_on_empty [iff]:
60812
8fff64349793 added theory Uniform_Limit
immler
parents:
diff changeset
   557
  "uniform_limit {} f g F"
8fff64349793 added theory Uniform_Limit
immler
parents:
diff changeset
   558
  by (auto intro!: uniform_limitI)
8fff64349793 added theory Uniform_Limit
immler
parents:
diff changeset
   559
8fff64349793 added theory Uniform_Limit
immler
parents:
diff changeset
   560
lemma uniform_limit_on_UNION:
8fff64349793 added theory Uniform_Limit
immler
parents:
diff changeset
   561
  assumes "finite S"
8fff64349793 added theory Uniform_Limit
immler
parents:
diff changeset
   562
  assumes "\<And>s. s \<in> S \<Longrightarrow> uniform_limit (h s) f g F"
8fff64349793 added theory Uniform_Limit
immler
parents:
diff changeset
   563
  shows "uniform_limit (UNION S h) f g F"
8fff64349793 added theory Uniform_Limit
immler
parents:
diff changeset
   564
  using assms
65036
ab7e11730ad8 Some new lemmas. Existing lemmas modified to use uniform_limit rather than its expansion
paulson <lp15@cam.ac.uk>
parents: 64267
diff changeset
   565
  by induct (auto intro: uniform_limit_on_empty uniform_limit_on_Un)
60812
8fff64349793 added theory Uniform_Limit
immler
parents:
diff changeset
   566
8fff64349793 added theory Uniform_Limit
immler
parents:
diff changeset
   567
lemma uniform_limit_on_Union:
8fff64349793 added theory Uniform_Limit
immler
parents:
diff changeset
   568
  assumes "finite I"
8fff64349793 added theory Uniform_Limit
immler
parents:
diff changeset
   569
  assumes "\<And>J. J \<in> I \<Longrightarrow> uniform_limit J f g F"
8fff64349793 added theory Uniform_Limit
immler
parents:
diff changeset
   570
  shows "uniform_limit (Union I) f g F"
8fff64349793 added theory Uniform_Limit
immler
parents:
diff changeset
   571
  by (metis SUP_identity_eq assms uniform_limit_on_UNION)
8fff64349793 added theory Uniform_Limit
immler
parents:
diff changeset
   572
8fff64349793 added theory Uniform_Limit
immler
parents:
diff changeset
   573
lemma uniform_limit_on_subset:
8fff64349793 added theory Uniform_Limit
immler
parents:
diff changeset
   574
  "uniform_limit J f g F \<Longrightarrow> I \<subseteq> J \<Longrightarrow> uniform_limit I f g F"
61810
3c5040d5694a sorted out eventually_mono
paulson <lp15@cam.ac.uk>
parents: 61808
diff changeset
   575
  by (auto intro!: uniform_limitI dest!: uniform_limitD intro: eventually_mono)
61552
980dd46a03fb Added binomial identities to CONTRIBUTORS; small lemmas on of_int/pochhammer
eberlm
parents: 61531
diff changeset
   576
980dd46a03fb Added binomial identities to CONTRIBUTORS; small lemmas on of_int/pochhammer
eberlm
parents: 61531
diff changeset
   577
lemma uniformly_convergent_add:
980dd46a03fb Added binomial identities to CONTRIBUTORS; small lemmas on of_int/pochhammer
eberlm
parents: 61531
diff changeset
   578
  "uniformly_convergent_on A f \<Longrightarrow> uniformly_convergent_on A g\<Longrightarrow>
980dd46a03fb Added binomial identities to CONTRIBUTORS; small lemmas on of_int/pochhammer
eberlm
parents: 61531
diff changeset
   579
      uniformly_convergent_on A (\<lambda>k x. f k x + g k x :: 'a :: {real_normed_algebra})"
980dd46a03fb Added binomial identities to CONTRIBUTORS; small lemmas on of_int/pochhammer
eberlm
parents: 61531
diff changeset
   580
  unfolding uniformly_convergent_on_def by (blast dest: uniform_limit_add)
980dd46a03fb Added binomial identities to CONTRIBUTORS; small lemmas on of_int/pochhammer
eberlm
parents: 61531
diff changeset
   581
980dd46a03fb Added binomial identities to CONTRIBUTORS; small lemmas on of_int/pochhammer
eberlm
parents: 61531
diff changeset
   582
lemma uniformly_convergent_minus:
980dd46a03fb Added binomial identities to CONTRIBUTORS; small lemmas on of_int/pochhammer
eberlm
parents: 61531
diff changeset
   583
  "uniformly_convergent_on A f \<Longrightarrow> uniformly_convergent_on A g\<Longrightarrow>
980dd46a03fb Added binomial identities to CONTRIBUTORS; small lemmas on of_int/pochhammer
eberlm
parents: 61531
diff changeset
   584
      uniformly_convergent_on A (\<lambda>k x. f k x - g k x :: 'a :: {real_normed_algebra})"
980dd46a03fb Added binomial identities to CONTRIBUTORS; small lemmas on of_int/pochhammer
eberlm
parents: 61531
diff changeset
   585
  unfolding uniformly_convergent_on_def by (blast dest: uniform_limit_minus)
980dd46a03fb Added binomial identities to CONTRIBUTORS; small lemmas on of_int/pochhammer
eberlm
parents: 61531
diff changeset
   586
980dd46a03fb Added binomial identities to CONTRIBUTORS; small lemmas on of_int/pochhammer
eberlm
parents: 61531
diff changeset
   587
lemma uniformly_convergent_mult:
63594
bd218a9320b5 HOL-Multivariate_Analysis: rename theories for more descriptive names
hoelzl
parents: 63040
diff changeset
   588
  "uniformly_convergent_on A f \<Longrightarrow>
61552
980dd46a03fb Added binomial identities to CONTRIBUTORS; small lemmas on of_int/pochhammer
eberlm
parents: 61531
diff changeset
   589
      uniformly_convergent_on A (\<lambda>k x. c * f k x :: 'a :: {real_normed_algebra})"
980dd46a03fb Added binomial identities to CONTRIBUTORS; small lemmas on of_int/pochhammer
eberlm
parents: 61531
diff changeset
   590
  unfolding uniformly_convergent_on_def
980dd46a03fb Added binomial identities to CONTRIBUTORS; small lemmas on of_int/pochhammer
eberlm
parents: 61531
diff changeset
   591
  by (blast dest: bounded_linear_uniform_limit_intros(13))
980dd46a03fb Added binomial identities to CONTRIBUTORS; small lemmas on of_int/pochhammer
eberlm
parents: 61531
diff changeset
   592
62381
a6479cb85944 New and revised material for (multivariate) analysis
paulson <lp15@cam.ac.uk>
parents: 62175
diff changeset
   593
subsection\<open>Power series and uniform convergence\<close>
a6479cb85944 New and revised material for (multivariate) analysis
paulson <lp15@cam.ac.uk>
parents: 62175
diff changeset
   594
a6479cb85944 New and revised material for (multivariate) analysis
paulson <lp15@cam.ac.uk>
parents: 62175
diff changeset
   595
proposition powser_uniformly_convergent:
a6479cb85944 New and revised material for (multivariate) analysis
paulson <lp15@cam.ac.uk>
parents: 62175
diff changeset
   596
  fixes a :: "nat \<Rightarrow> 'a::{real_normed_div_algebra,banach}"
a6479cb85944 New and revised material for (multivariate) analysis
paulson <lp15@cam.ac.uk>
parents: 62175
diff changeset
   597
  assumes "r < conv_radius a"
a6479cb85944 New and revised material for (multivariate) analysis
paulson <lp15@cam.ac.uk>
parents: 62175
diff changeset
   598
  shows "uniformly_convergent_on (cball \<xi> r) (\<lambda>n x. \<Sum>i<n. a i * (x - \<xi>) ^ i)"
a6479cb85944 New and revised material for (multivariate) analysis
paulson <lp15@cam.ac.uk>
parents: 62175
diff changeset
   599
proof (cases "0 \<le> r")
a6479cb85944 New and revised material for (multivariate) analysis
paulson <lp15@cam.ac.uk>
parents: 62175
diff changeset
   600
  case True
a6479cb85944 New and revised material for (multivariate) analysis
paulson <lp15@cam.ac.uk>
parents: 62175
diff changeset
   601
  then have *: "summable (\<lambda>n. norm (a n) * r ^ n)"
a6479cb85944 New and revised material for (multivariate) analysis
paulson <lp15@cam.ac.uk>
parents: 62175
diff changeset
   602
    using abs_summable_in_conv_radius [of "of_real r" a] assms
a6479cb85944 New and revised material for (multivariate) analysis
paulson <lp15@cam.ac.uk>
parents: 62175
diff changeset
   603
    by (simp add: norm_mult norm_power)
a6479cb85944 New and revised material for (multivariate) analysis
paulson <lp15@cam.ac.uk>
parents: 62175
diff changeset
   604
  show ?thesis
a6479cb85944 New and revised material for (multivariate) analysis
paulson <lp15@cam.ac.uk>
parents: 62175
diff changeset
   605
    by (simp add: weierstrass_m_test'_ev [OF _ *] norm_mult norm_power
a6479cb85944 New and revised material for (multivariate) analysis
paulson <lp15@cam.ac.uk>
parents: 62175
diff changeset
   606
              mult_left_mono power_mono dist_norm norm_minus_commute)
a6479cb85944 New and revised material for (multivariate) analysis
paulson <lp15@cam.ac.uk>
parents: 62175
diff changeset
   607
next
a6479cb85944 New and revised material for (multivariate) analysis
paulson <lp15@cam.ac.uk>
parents: 62175
diff changeset
   608
  case False then show ?thesis by (simp add: not_le)
a6479cb85944 New and revised material for (multivariate) analysis
paulson <lp15@cam.ac.uk>
parents: 62175
diff changeset
   609
qed
a6479cb85944 New and revised material for (multivariate) analysis
paulson <lp15@cam.ac.uk>
parents: 62175
diff changeset
   610
a6479cb85944 New and revised material for (multivariate) analysis
paulson <lp15@cam.ac.uk>
parents: 62175
diff changeset
   611
lemma powser_uniform_limit:
a6479cb85944 New and revised material for (multivariate) analysis
paulson <lp15@cam.ac.uk>
parents: 62175
diff changeset
   612
  fixes a :: "nat \<Rightarrow> 'a::{real_normed_div_algebra,banach}"
a6479cb85944 New and revised material for (multivariate) analysis
paulson <lp15@cam.ac.uk>
parents: 62175
diff changeset
   613
  assumes "r < conv_radius a"
a6479cb85944 New and revised material for (multivariate) analysis
paulson <lp15@cam.ac.uk>
parents: 62175
diff changeset
   614
  shows "uniform_limit (cball \<xi> r) (\<lambda>n x. \<Sum>i<n. a i * (x - \<xi>) ^ i) (\<lambda>x. suminf (\<lambda>i. a i * (x - \<xi>) ^ i)) sequentially"
a6479cb85944 New and revised material for (multivariate) analysis
paulson <lp15@cam.ac.uk>
parents: 62175
diff changeset
   615
using powser_uniformly_convergent [OF assms]
a6479cb85944 New and revised material for (multivariate) analysis
paulson <lp15@cam.ac.uk>
parents: 62175
diff changeset
   616
by (simp add: Uniform_Limit.uniformly_convergent_uniform_limit_iff Series.suminf_eq_lim)
a6479cb85944 New and revised material for (multivariate) analysis
paulson <lp15@cam.ac.uk>
parents: 62175
diff changeset
   617
a6479cb85944 New and revised material for (multivariate) analysis
paulson <lp15@cam.ac.uk>
parents: 62175
diff changeset
   618
lemma powser_continuous_suminf:
a6479cb85944 New and revised material for (multivariate) analysis
paulson <lp15@cam.ac.uk>
parents: 62175
diff changeset
   619
  fixes a :: "nat \<Rightarrow> 'a::{real_normed_div_algebra,banach}"
a6479cb85944 New and revised material for (multivariate) analysis
paulson <lp15@cam.ac.uk>
parents: 62175
diff changeset
   620
  assumes "r < conv_radius a"
a6479cb85944 New and revised material for (multivariate) analysis
paulson <lp15@cam.ac.uk>
parents: 62175
diff changeset
   621
  shows "continuous_on (cball \<xi> r) (\<lambda>x. suminf (\<lambda>i. a i * (x - \<xi>) ^ i))"
a6479cb85944 New and revised material for (multivariate) analysis
paulson <lp15@cam.ac.uk>
parents: 62175
diff changeset
   622
apply (rule uniform_limit_theorem [OF _ powser_uniform_limit])
a6479cb85944 New and revised material for (multivariate) analysis
paulson <lp15@cam.ac.uk>
parents: 62175
diff changeset
   623
apply (rule eventuallyI continuous_intros assms)+
a6479cb85944 New and revised material for (multivariate) analysis
paulson <lp15@cam.ac.uk>
parents: 62175
diff changeset
   624
apply (simp add:)
a6479cb85944 New and revised material for (multivariate) analysis
paulson <lp15@cam.ac.uk>
parents: 62175
diff changeset
   625
done
a6479cb85944 New and revised material for (multivariate) analysis
paulson <lp15@cam.ac.uk>
parents: 62175
diff changeset
   626
a6479cb85944 New and revised material for (multivariate) analysis
paulson <lp15@cam.ac.uk>
parents: 62175
diff changeset
   627
lemma powser_continuous_sums:
a6479cb85944 New and revised material for (multivariate) analysis
paulson <lp15@cam.ac.uk>
parents: 62175
diff changeset
   628
  fixes a :: "nat \<Rightarrow> 'a::{real_normed_div_algebra,banach}"
a6479cb85944 New and revised material for (multivariate) analysis
paulson <lp15@cam.ac.uk>
parents: 62175
diff changeset
   629
  assumes r: "r < conv_radius a"
a6479cb85944 New and revised material for (multivariate) analysis
paulson <lp15@cam.ac.uk>
parents: 62175
diff changeset
   630
      and sm: "\<And>x. x \<in> cball \<xi> r \<Longrightarrow> (\<lambda>n. a n * (x - \<xi>) ^ n) sums (f x)"
a6479cb85944 New and revised material for (multivariate) analysis
paulson <lp15@cam.ac.uk>
parents: 62175
diff changeset
   631
  shows "continuous_on (cball \<xi> r) f"
a6479cb85944 New and revised material for (multivariate) analysis
paulson <lp15@cam.ac.uk>
parents: 62175
diff changeset
   632
apply (rule continuous_on_cong [THEN iffD1, OF refl _ powser_continuous_suminf [OF r]])
a6479cb85944 New and revised material for (multivariate) analysis
paulson <lp15@cam.ac.uk>
parents: 62175
diff changeset
   633
using sm sums_unique by fastforce
a6479cb85944 New and revised material for (multivariate) analysis
paulson <lp15@cam.ac.uk>
parents: 62175
diff changeset
   634
62390
842917225d56 more canonical names
nipkow
parents: 62175
diff changeset
   635
end
62393
a620a8756b7c resolved conflict
nipkow
parents: 62381 62390
diff changeset
   636