src/HOL/Multivariate_Analysis/Uniform_Limit.thy
changeset 62949 f36a54da47a4
parent 62393 a620a8756b7c
child 63040 eb4ddd18d635
equal deleted inserted replaced
62948:7700f467892b 62949:f36a54da47a4
    50 lemma uniform_limit_at_le_iff:
    50 lemma uniform_limit_at_le_iff:
    51   "uniform_limit S f l (at x) \<longleftrightarrow>
    51   "uniform_limit S f l (at x) \<longleftrightarrow>
    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))"
    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))"
    53   unfolding uniform_limit_iff eventually_at
    53   unfolding uniform_limit_iff eventually_at
    54   by (fastforce dest: spec[where x = "e / 2" for e])
    54   by (fastforce dest: spec[where x = "e / 2" for e])
       
    55 
       
    56 lemma metric_uniform_limit_imp_uniform_limit:
       
    57   assumes f: "uniform_limit S f a F"
       
    58   assumes le: "eventually (\<lambda>x. \<forall>y\<in>S. dist (g x y) (b y) \<le> dist (f x y) (a y)) F"
       
    59   shows "uniform_limit S g b F"
       
    60 proof (rule uniform_limitI)
       
    61   fix e :: real assume "0 < e"
       
    62   from uniform_limitD[OF f this] le
       
    63   show "\<forall>\<^sub>F x in F. \<forall>y\<in>S. dist (g x y) (b y) < e"
       
    64     by eventually_elim force
       
    65 qed
    55 
    66 
    56 lemma swap_uniform_limit:
    67 lemma swap_uniform_limit:
    57   assumes f: "\<forall>\<^sub>F n in F. (f n \<longlongrightarrow> g n) (at x within S)"
    68   assumes f: "\<forall>\<^sub>F n in F. (f n \<longlongrightarrow> g n) (at x within S)"
    58   assumes g: "(g \<longlongrightarrow> l) F"
    69   assumes g: "(g \<longlongrightarrow> l) F"
    59   assumes uc: "uniform_limit S f h F"
    70   assumes uc: "uniform_limit S f h F"
   350   bounded_linear.uniform_limit[OF bounded_linear_scaleR_left]
   361   bounded_linear.uniform_limit[OF bounded_linear_scaleR_left]
   351 
   362 
   352 lemmas uniform_limit_uminus[uniform_limit_intros] =
   363 lemmas uniform_limit_uminus[uniform_limit_intros] =
   353   bounded_linear.uniform_limit[OF bounded_linear_minus[OF bounded_linear_ident]]
   364   bounded_linear.uniform_limit[OF bounded_linear_minus[OF bounded_linear_ident]]
   354 
   365 
       
   366 lemma uniform_limit_const[uniform_limit_intros]: "uniform_limit S (\<lambda>x y. c) (\<lambda>x. c) f"
       
   367   by (auto intro!: uniform_limitI)
       
   368 
   355 lemma uniform_limit_add[uniform_limit_intros]:
   369 lemma uniform_limit_add[uniform_limit_intros]:
   356   fixes f g::"'a \<Rightarrow> 'b \<Rightarrow> 'c::real_normed_vector"
   370   fixes f g::"'a \<Rightarrow> 'b \<Rightarrow> 'c::real_normed_vector"
   357   assumes "uniform_limit X f l F"
   371   assumes "uniform_limit X f l F"
   358   assumes "uniform_limit X g m F"
   372   assumes "uniform_limit X g m F"
   359   shows "uniform_limit X (\<lambda>a b. f a b + g a b) (\<lambda>a. l a + m a) F"
   373   shows "uniform_limit X (\<lambda>a b. f a b + g a b) (\<lambda>a. l a + m a) F"
   373   assumes "uniform_limit X f l F"
   387   assumes "uniform_limit X f l F"
   374   assumes "uniform_limit X g m F"
   388   assumes "uniform_limit X g m F"
   375   shows "uniform_limit X (\<lambda>a b. f a b - g a b) (\<lambda>a. l a - m a) F"
   389   shows "uniform_limit X (\<lambda>a b. f a b - g a b) (\<lambda>a. l a - m a) F"
   376   unfolding diff_conv_add_uminus
   390   unfolding diff_conv_add_uminus
   377   by (rule uniform_limit_intros assms)+
   391   by (rule uniform_limit_intros assms)+
       
   392 
       
   393 lemma uniform_limit_norm[uniform_limit_intros]:
       
   394   assumes "uniform_limit S g l f"
       
   395   shows "uniform_limit S (\<lambda>x y. norm (g x y)) (\<lambda>x. norm (l x)) f"
       
   396   using assms
       
   397   apply (rule metric_uniform_limit_imp_uniform_limit)
       
   398   apply (rule eventuallyI)
       
   399   by (metis dist_norm norm_triangle_ineq3 real_norm_def)
   378 
   400 
   379 lemma (in bounded_bilinear) bounded_uniform_limit[uniform_limit_intros]:
   401 lemma (in bounded_bilinear) bounded_uniform_limit[uniform_limit_intros]:
   380   assumes "uniform_limit X f l F"
   402   assumes "uniform_limit X f l F"
   381   assumes "uniform_limit X g m F"
   403   assumes "uniform_limit X g m F"
   382   assumes "bounded (m ` X)"
   404   assumes "bounded (m ` X)"
   448 lemmas bounded_bilinear_bounded_uniform_limit_intros[uniform_limit_intros] =
   470 lemmas bounded_bilinear_bounded_uniform_limit_intros[uniform_limit_intros] =
   449   bounded_bilinear.bounded_uniform_limit[OF Inner_Product.bounded_bilinear_inner]
   471   bounded_bilinear.bounded_uniform_limit[OF Inner_Product.bounded_bilinear_inner]
   450   bounded_bilinear.bounded_uniform_limit[OF Real_Vector_Spaces.bounded_bilinear_mult]
   472   bounded_bilinear.bounded_uniform_limit[OF Real_Vector_Spaces.bounded_bilinear_mult]
   451   bounded_bilinear.bounded_uniform_limit[OF Real_Vector_Spaces.bounded_bilinear_scaleR]
   473   bounded_bilinear.bounded_uniform_limit[OF Real_Vector_Spaces.bounded_bilinear_scaleR]
   452 
   474 
   453 lemma metric_uniform_limit_imp_uniform_limit:
       
   454   assumes f: "uniform_limit S f a F"
       
   455   assumes le: "eventually (\<lambda>x. \<forall>y\<in>S. dist (g x y) (b y) \<le> dist (f x y) (a y)) F"
       
   456   shows "uniform_limit S g b F"
       
   457 proof (rule uniform_limitI)
       
   458   fix e :: real assume "0 < e"
       
   459   from uniform_limitD[OF f this] le
       
   460   show "\<forall>\<^sub>F x in F. \<forall>y\<in>S. dist (g x y) (b y) < e"
       
   461     by eventually_elim force
       
   462 qed
       
   463 
       
   464 lemma uniform_limit_null_comparison:
   475 lemma uniform_limit_null_comparison:
   465   assumes "\<forall>\<^sub>F x in F. \<forall>a\<in>S. norm (f x a) \<le> g x a"
   476   assumes "\<forall>\<^sub>F x in F. \<forall>a\<in>S. norm (f x a) \<le> g x a"
   466   assumes "uniform_limit S g (\<lambda>_. 0) F"
   477   assumes "uniform_limit S g (\<lambda>_. 0) F"
   467   shows "uniform_limit S f (\<lambda>_. 0) F"
   478   shows "uniform_limit S f (\<lambda>_. 0) F"
   468   using assms(2)
   479   using assms(2)