src/HOL/Limits.thy
changeset 56371 fb9ae0727548
parent 56366 0362c3bb4d02
child 56536 aefb4a8da31f
equal deleted inserted replaced
56370:7c717ba55a0b 56371:fb9ae0727548
   434 lemma continuous_dist[continuous_intros]:
   434 lemma continuous_dist[continuous_intros]:
   435   fixes f g :: "_ \<Rightarrow> 'a :: metric_space"
   435   fixes f g :: "_ \<Rightarrow> 'a :: metric_space"
   436   shows "continuous F f \<Longrightarrow> continuous F g \<Longrightarrow> continuous F (\<lambda>x. dist (f x) (g x))"
   436   shows "continuous F f \<Longrightarrow> continuous F g \<Longrightarrow> continuous F (\<lambda>x. dist (f x) (g x))"
   437   unfolding continuous_def by (rule tendsto_dist)
   437   unfolding continuous_def by (rule tendsto_dist)
   438 
   438 
   439 lemma continuous_on_dist[continuous_on_intros]:
   439 lemma continuous_on_dist[continuous_intros]:
   440   fixes f g :: "_ \<Rightarrow> 'a :: metric_space"
   440   fixes f g :: "_ \<Rightarrow> 'a :: metric_space"
   441   shows "continuous_on s f \<Longrightarrow> continuous_on s g \<Longrightarrow> continuous_on s (\<lambda>x. dist (f x) (g x))"
   441   shows "continuous_on s f \<Longrightarrow> continuous_on s g \<Longrightarrow> continuous_on s (\<lambda>x. dist (f x) (g x))"
   442   unfolding continuous_on_def by (auto intro: tendsto_dist)
   442   unfolding continuous_on_def by (auto intro: tendsto_dist)
   443 
   443 
   444 lemma tendsto_norm [tendsto_intros]:
   444 lemma tendsto_norm [tendsto_intros]:
   447 
   447 
   448 lemma continuous_norm [continuous_intros]:
   448 lemma continuous_norm [continuous_intros]:
   449   "continuous F f \<Longrightarrow> continuous F (\<lambda>x. norm (f x))"
   449   "continuous F f \<Longrightarrow> continuous F (\<lambda>x. norm (f x))"
   450   unfolding continuous_def by (rule tendsto_norm)
   450   unfolding continuous_def by (rule tendsto_norm)
   451 
   451 
   452 lemma continuous_on_norm [continuous_on_intros]:
   452 lemma continuous_on_norm [continuous_intros]:
   453   "continuous_on s f \<Longrightarrow> continuous_on s (\<lambda>x. norm (f x))"
   453   "continuous_on s f \<Longrightarrow> continuous_on s (\<lambda>x. norm (f x))"
   454   unfolding continuous_on_def by (auto intro: tendsto_norm)
   454   unfolding continuous_on_def by (auto intro: tendsto_norm)
   455 
   455 
   456 lemma tendsto_norm_zero:
   456 lemma tendsto_norm_zero:
   457   "(f ---> 0) F \<Longrightarrow> ((\<lambda>x. norm (f x)) ---> 0) F"
   457   "(f ---> 0) F \<Longrightarrow> ((\<lambda>x. norm (f x)) ---> 0) F"
   471 
   471 
   472 lemma continuous_rabs [continuous_intros]:
   472 lemma continuous_rabs [continuous_intros]:
   473   "continuous F f \<Longrightarrow> continuous F (\<lambda>x. \<bar>f x :: real\<bar>)"
   473   "continuous F f \<Longrightarrow> continuous F (\<lambda>x. \<bar>f x :: real\<bar>)"
   474   unfolding real_norm_def[symmetric] by (rule continuous_norm)
   474   unfolding real_norm_def[symmetric] by (rule continuous_norm)
   475 
   475 
   476 lemma continuous_on_rabs [continuous_on_intros]:
   476 lemma continuous_on_rabs [continuous_intros]:
   477   "continuous_on s f \<Longrightarrow> continuous_on s (\<lambda>x. \<bar>f x :: real\<bar>)"
   477   "continuous_on s f \<Longrightarrow> continuous_on s (\<lambda>x. \<bar>f x :: real\<bar>)"
   478   unfolding real_norm_def[symmetric] by (rule continuous_on_norm)
   478   unfolding real_norm_def[symmetric] by (rule continuous_on_norm)
   479 
   479 
   480 lemma tendsto_rabs_zero:
   480 lemma tendsto_rabs_zero:
   481   "(f ---> (0::real)) F \<Longrightarrow> ((\<lambda>x. \<bar>f x\<bar>) ---> 0) F"
   481   "(f ---> (0::real)) F \<Longrightarrow> ((\<lambda>x. \<bar>f x\<bar>) ---> 0) F"
   499 lemma continuous_add [continuous_intros]:
   499 lemma continuous_add [continuous_intros]:
   500   fixes f g :: "'a::t2_space \<Rightarrow> 'b::real_normed_vector"
   500   fixes f g :: "'a::t2_space \<Rightarrow> 'b::real_normed_vector"
   501   shows "continuous F f \<Longrightarrow> continuous F g \<Longrightarrow> continuous F (\<lambda>x. f x + g x)"
   501   shows "continuous F f \<Longrightarrow> continuous F g \<Longrightarrow> continuous F (\<lambda>x. f x + g x)"
   502   unfolding continuous_def by (rule tendsto_add)
   502   unfolding continuous_def by (rule tendsto_add)
   503 
   503 
   504 lemma continuous_on_add [continuous_on_intros]:
   504 lemma continuous_on_add [continuous_intros]:
   505   fixes f g :: "_ \<Rightarrow> 'b::real_normed_vector"
   505   fixes f g :: "_ \<Rightarrow> 'b::real_normed_vector"
   506   shows "continuous_on s f \<Longrightarrow> continuous_on s g \<Longrightarrow> continuous_on s (\<lambda>x. f x + g x)"
   506   shows "continuous_on s f \<Longrightarrow> continuous_on s g \<Longrightarrow> continuous_on s (\<lambda>x. f x + g x)"
   507   unfolding continuous_on_def by (auto intro: tendsto_add)
   507   unfolding continuous_on_def by (auto intro: tendsto_add)
   508 
   508 
   509 lemma tendsto_add_zero:
   509 lemma tendsto_add_zero:
   519 lemma continuous_minus [continuous_intros]:
   519 lemma continuous_minus [continuous_intros]:
   520   fixes f :: "'a::t2_space \<Rightarrow> 'b::real_normed_vector"
   520   fixes f :: "'a::t2_space \<Rightarrow> 'b::real_normed_vector"
   521   shows "continuous F f \<Longrightarrow> continuous F (\<lambda>x. - f x)"
   521   shows "continuous F f \<Longrightarrow> continuous F (\<lambda>x. - f x)"
   522   unfolding continuous_def by (rule tendsto_minus)
   522   unfolding continuous_def by (rule tendsto_minus)
   523 
   523 
   524 lemma continuous_on_minus [continuous_on_intros]:
   524 lemma continuous_on_minus [continuous_intros]:
   525   fixes f :: "_ \<Rightarrow> 'b::real_normed_vector"
   525   fixes f :: "_ \<Rightarrow> 'b::real_normed_vector"
   526   shows "continuous_on s f \<Longrightarrow> continuous_on s (\<lambda>x. - f x)"
   526   shows "continuous_on s f \<Longrightarrow> continuous_on s (\<lambda>x. - f x)"
   527   unfolding continuous_on_def by (auto intro: tendsto_minus)
   527   unfolding continuous_on_def by (auto intro: tendsto_minus)
   528 
   528 
   529 lemma tendsto_minus_cancel:
   529 lemma tendsto_minus_cancel:
   544 lemma continuous_diff [continuous_intros]:
   544 lemma continuous_diff [continuous_intros]:
   545   fixes f g :: "'a::t2_space \<Rightarrow> 'b::real_normed_vector"
   545   fixes f g :: "'a::t2_space \<Rightarrow> 'b::real_normed_vector"
   546   shows "continuous F f \<Longrightarrow> continuous F g \<Longrightarrow> continuous F (\<lambda>x. f x - g x)"
   546   shows "continuous F f \<Longrightarrow> continuous F g \<Longrightarrow> continuous F (\<lambda>x. f x - g x)"
   547   unfolding continuous_def by (rule tendsto_diff)
   547   unfolding continuous_def by (rule tendsto_diff)
   548 
   548 
   549 lemma continuous_on_diff [continuous_on_intros]:
   549 lemma continuous_on_diff [continuous_intros]:
   550   fixes f g :: "'a::t2_space \<Rightarrow> 'b::real_normed_vector"
   550   fixes f g :: "'a::t2_space \<Rightarrow> 'b::real_normed_vector"
   551   shows "continuous_on s f \<Longrightarrow> continuous_on s g \<Longrightarrow> continuous_on s (\<lambda>x. f x - g x)"
   551   shows "continuous_on s f \<Longrightarrow> continuous_on s g \<Longrightarrow> continuous_on s (\<lambda>x. f x - g x)"
   552   unfolding continuous_on_def by (auto intro: tendsto_diff)
   552   unfolding continuous_on_def by (auto intro: tendsto_diff)
   553 
   553 
   554 lemma tendsto_setsum [tendsto_intros]:
   554 lemma tendsto_setsum [tendsto_intros]:
   636   bounded_bilinear.continuous [OF bounded_bilinear_scaleR]
   636   bounded_bilinear.continuous [OF bounded_bilinear_scaleR]
   637 
   637 
   638 lemmas continuous_mult [continuous_intros] =
   638 lemmas continuous_mult [continuous_intros] =
   639   bounded_bilinear.continuous [OF bounded_bilinear_mult]
   639   bounded_bilinear.continuous [OF bounded_bilinear_mult]
   640 
   640 
   641 lemmas continuous_on_of_real [continuous_on_intros] =
   641 lemmas continuous_on_of_real [continuous_intros] =
   642   bounded_linear.continuous_on [OF bounded_linear_of_real]
   642   bounded_linear.continuous_on [OF bounded_linear_of_real]
   643 
   643 
   644 lemmas continuous_on_scaleR [continuous_on_intros] =
   644 lemmas continuous_on_scaleR [continuous_intros] =
   645   bounded_bilinear.continuous_on [OF bounded_bilinear_scaleR]
   645   bounded_bilinear.continuous_on [OF bounded_bilinear_scaleR]
   646 
   646 
   647 lemmas continuous_on_mult [continuous_on_intros] =
   647 lemmas continuous_on_mult [continuous_intros] =
   648   bounded_bilinear.continuous_on [OF bounded_bilinear_mult]
   648   bounded_bilinear.continuous_on [OF bounded_bilinear_mult]
   649 
   649 
   650 lemmas tendsto_mult_zero =
   650 lemmas tendsto_mult_zero =
   651   bounded_bilinear.tendsto_zero [OF bounded_bilinear_mult]
   651   bounded_bilinear.tendsto_zero [OF bounded_bilinear_mult]
   652 
   652 
   664 lemma continuous_power [continuous_intros]:
   664 lemma continuous_power [continuous_intros]:
   665   fixes f :: "'a::t2_space \<Rightarrow> 'b::{power,real_normed_algebra}"
   665   fixes f :: "'a::t2_space \<Rightarrow> 'b::{power,real_normed_algebra}"
   666   shows "continuous F f \<Longrightarrow> continuous F (\<lambda>x. (f x)^n)"
   666   shows "continuous F f \<Longrightarrow> continuous F (\<lambda>x. (f x)^n)"
   667   unfolding continuous_def by (rule tendsto_power)
   667   unfolding continuous_def by (rule tendsto_power)
   668 
   668 
   669 lemma continuous_on_power [continuous_on_intros]:
   669 lemma continuous_on_power [continuous_intros]:
   670   fixes f :: "_ \<Rightarrow> 'b::{power,real_normed_algebra}"
   670   fixes f :: "_ \<Rightarrow> 'b::{power,real_normed_algebra}"
   671   shows "continuous_on s f \<Longrightarrow> continuous_on s (\<lambda>x. (f x)^n)"
   671   shows "continuous_on s f \<Longrightarrow> continuous_on s (\<lambda>x. (f x)^n)"
   672   unfolding continuous_on_def by (auto intro: tendsto_power)
   672   unfolding continuous_on_def by (auto intro: tendsto_power)
   673 
   673 
   674 lemma tendsto_setprod [tendsto_intros]:
   674 lemma tendsto_setprod [tendsto_intros]:
   818   fixes f :: "'a::t2_space \<Rightarrow> 'b::real_normed_div_algebra"
   818   fixes f :: "'a::t2_space \<Rightarrow> 'b::real_normed_div_algebra"
   819   assumes "isCont f a" and "f a \<noteq> 0"
   819   assumes "isCont f a" and "f a \<noteq> 0"
   820   shows "isCont (\<lambda>x. inverse (f x)) a"
   820   shows "isCont (\<lambda>x. inverse (f x)) a"
   821   using assms unfolding continuous_at by (rule tendsto_inverse)
   821   using assms unfolding continuous_at by (rule tendsto_inverse)
   822 
   822 
   823 lemma continuous_on_inverse[continuous_on_intros]:
   823 lemma continuous_on_inverse[continuous_intros]:
   824   fixes f :: "'a::topological_space \<Rightarrow> 'b::real_normed_div_algebra"
   824   fixes f :: "'a::topological_space \<Rightarrow> 'b::real_normed_div_algebra"
   825   assumes "continuous_on s f" and "\<forall>x\<in>s. f x \<noteq> 0"
   825   assumes "continuous_on s f" and "\<forall>x\<in>s. f x \<noteq> 0"
   826   shows "continuous_on s (\<lambda>x. inverse (f x))"
   826   shows "continuous_on s (\<lambda>x. inverse (f x))"
   827   using assms unfolding continuous_on_def by (fast intro: tendsto_inverse)
   827   using assms unfolding continuous_on_def by (fast intro: tendsto_inverse)
   828 
   828 
   848   fixes f g :: "'a::t2_space \<Rightarrow> 'b::real_normed_field"
   848   fixes f g :: "'a::t2_space \<Rightarrow> 'b::real_normed_field"
   849   assumes "isCont f a" "isCont g a" "g a \<noteq> 0"
   849   assumes "isCont f a" "isCont g a" "g a \<noteq> 0"
   850   shows "isCont (\<lambda>x. (f x) / g x) a"
   850   shows "isCont (\<lambda>x. (f x) / g x) a"
   851   using assms unfolding continuous_at by (rule tendsto_divide)
   851   using assms unfolding continuous_at by (rule tendsto_divide)
   852 
   852 
   853 lemma continuous_on_divide[continuous_on_intros]:
   853 lemma continuous_on_divide[continuous_intros]:
   854   fixes f :: "'a::topological_space \<Rightarrow> 'b::real_normed_field"
   854   fixes f :: "'a::topological_space \<Rightarrow> 'b::real_normed_field"
   855   assumes "continuous_on s f" "continuous_on s g" and "\<forall>x\<in>s. g x \<noteq> 0"
   855   assumes "continuous_on s f" "continuous_on s g" and "\<forall>x\<in>s. g x \<noteq> 0"
   856   shows "continuous_on s (\<lambda>x. (f x) / (g x))"
   856   shows "continuous_on s (\<lambda>x. (f x) / (g x))"
   857   using assms unfolding continuous_on_def by (fast intro: tendsto_divide)
   857   using assms unfolding continuous_on_def by (fast intro: tendsto_divide)
   858 
   858 
   877   fixes f :: "'a::t2_space \<Rightarrow> 'b::real_normed_vector"
   877   fixes f :: "'a::t2_space \<Rightarrow> 'b::real_normed_vector"
   878   assumes "isCont f a" and "f a \<noteq> 0"
   878   assumes "isCont f a" and "f a \<noteq> 0"
   879   shows "isCont (\<lambda>x. sgn (f x)) a"
   879   shows "isCont (\<lambda>x. sgn (f x)) a"
   880   using assms unfolding continuous_at by (rule tendsto_sgn)
   880   using assms unfolding continuous_at by (rule tendsto_sgn)
   881 
   881 
   882 lemma continuous_on_sgn[continuous_on_intros]:
   882 lemma continuous_on_sgn[continuous_intros]:
   883   fixes f :: "'a::topological_space \<Rightarrow> 'b::real_normed_vector"
   883   fixes f :: "'a::topological_space \<Rightarrow> 'b::real_normed_vector"
   884   assumes "continuous_on s f" and "\<forall>x\<in>s. f x \<noteq> 0"
   884   assumes "continuous_on s f" and "\<forall>x\<in>s. f x \<noteq> 0"
   885   shows "continuous_on s (\<lambda>x. sgn (f x))"
   885   shows "continuous_on s (\<lambda>x. sgn (f x))"
   886   using assms unfolding continuous_on_def by (fast intro: tendsto_sgn)
   886   using assms unfolding continuous_on_def by (fast intro: tendsto_sgn)
   887 
   887 
  1682 
  1682 
  1683 lemma isCont_setsum [simp]:
  1683 lemma isCont_setsum [simp]:
  1684   fixes f :: "'a \<Rightarrow> 'b::t2_space \<Rightarrow> 'c::real_normed_vector"
  1684   fixes f :: "'a \<Rightarrow> 'b::t2_space \<Rightarrow> 'c::real_normed_vector"
  1685   shows "\<forall>i\<in>A. isCont (f i) a \<Longrightarrow> isCont (\<lambda>x. \<Sum>i\<in>A. f i x) a"
  1685   shows "\<forall>i\<in>A. isCont (f i) a \<Longrightarrow> isCont (\<lambda>x. \<Sum>i\<in>A. f i x) a"
  1686   by (auto intro: continuous_setsum)
  1686   by (auto intro: continuous_setsum)
  1687 
       
  1688 lemmas isCont_intros =
       
  1689   isCont_ident isCont_const isCont_norm isCont_rabs isCont_add isCont_minus
       
  1690   isCont_diff isCont_mult isCont_inverse isCont_divide isCont_scaleR
       
  1691   isCont_of_real isCont_power isCont_sgn isCont_setsum
       
  1692 
  1687 
  1693 subsection {* Uniform Continuity *}
  1688 subsection {* Uniform Continuity *}
  1694 
  1689 
  1695 definition
  1690 definition
  1696   isUCont :: "['a::metric_space \<Rightarrow> 'b::metric_space] \<Rightarrow> bool" where
  1691   isUCont :: "['a::metric_space \<Rightarrow> 'b::metric_space] \<Rightarrow> bool" where