src/HOL/Limits.thy
changeset 77221 0cdb384bf56a
parent 77102 780161d4b55c
child 77943 ffdad62bc235
equal deleted inserted replaced
77200:8f2e6186408f 77221:0cdb384bf56a
  1268   fixes f :: "'a::topological_space \<Rightarrow> 'b::real_normed_div_algebra"
  1268   fixes f :: "'a::topological_space \<Rightarrow> 'b::real_normed_div_algebra"
  1269   assumes "continuous_on s f" and "\<forall>x\<in>s. f x \<noteq> 0"
  1269   assumes "continuous_on s f" and "\<forall>x\<in>s. f x \<noteq> 0"
  1270   shows "continuous_on s (\<lambda>x. power_int (f x) n)"
  1270   shows "continuous_on s (\<lambda>x. power_int (f x) n)"
  1271   using assms unfolding continuous_on_def by (blast intro: tendsto_power_int)
  1271   using assms unfolding continuous_on_def by (blast intro: tendsto_power_int)
  1272 
  1272 
       
  1273 lemma tendsto_power_int' [tendsto_intros]:
       
  1274   fixes a :: "'a::real_normed_div_algebra"
       
  1275   assumes f: "(f \<longlongrightarrow> a) F"
       
  1276     and a: "a \<noteq> 0 \<or> n \<ge> 0"
       
  1277   shows "((\<lambda>x. power_int (f x) n) \<longlongrightarrow> power_int a n) F"
       
  1278   using assms by (cases n rule: int_cases4) (auto intro!: tendsto_intros simp: power_int_minus)
       
  1279 
  1273 lemma tendsto_sgn [tendsto_intros]: "(f \<longlongrightarrow> l) F \<Longrightarrow> l \<noteq> 0 \<Longrightarrow> ((\<lambda>x. sgn (f x)) \<longlongrightarrow> sgn l) F"
  1280 lemma tendsto_sgn [tendsto_intros]: "(f \<longlongrightarrow> l) F \<Longrightarrow> l \<noteq> 0 \<Longrightarrow> ((\<lambda>x. sgn (f x)) \<longlongrightarrow> sgn l) F"
  1274   for l :: "'a::real_normed_vector"
  1281   for l :: "'a::real_normed_vector"
  1275   unfolding sgn_div_norm by (simp add: tendsto_intros)
  1282   unfolding sgn_div_norm by (simp add: tendsto_intros)
  1276 
  1283 
  1277 lemma continuous_sgn:
  1284 lemma continuous_sgn:
  1780     by (auto intro: filterlim_at_infinity_imp_eventually_ne tendsto_imp_eventually_ne eventually_conj)
  1787     by (auto intro: filterlim_at_infinity_imp_eventually_ne tendsto_imp_eventually_ne eventually_conj)
  1781   then show ?thesis
  1788   then show ?thesis
  1782     by (subst filterlim_inverse_at_iff[symmetric]) simp_all
  1789     by (subst filterlim_inverse_at_iff[symmetric]) simp_all
  1783 qed
  1790 qed
  1784 
  1791 
       
  1792 lemma filterlim_power_int_neg_at_infinity:
       
  1793   fixes f :: "_ \<Rightarrow> 'a::{real_normed_div_algebra, division_ring}"
       
  1794   assumes "n < 0" and lim: "(f \<longlongrightarrow> 0) F" and ev: "eventually (\<lambda>x. f x \<noteq> 0) F"
       
  1795   shows   "filterlim (\<lambda>x. f x powi n) at_infinity F"
       
  1796 proof -
       
  1797   have lim': "((\<lambda>x. f x ^ nat (- n)) \<longlongrightarrow> 0) F"
       
  1798     by (rule tendsto_eq_intros lim)+ (use \<open>n < 0\<close> in auto)
       
  1799   have ev': "eventually (\<lambda>x. f x ^ nat (-n) \<noteq> 0) F"
       
  1800     using ev by eventually_elim (use \<open>n < 0\<close> in auto)
       
  1801   have "filterlim (\<lambda>x. inverse (f x ^ nat (-n))) at_infinity F"
       
  1802     by (intro filterlim_compose[OF filterlim_inverse_at_infinity])
       
  1803        (use lim' ev' in \<open>auto simp: filterlim_at\<close>)
       
  1804   thus ?thesis
       
  1805     using \<open>n < 0\<close> by (simp add: power_int_def power_inverse)
       
  1806 qed
       
  1807   
  1785 lemma tendsto_inverse_0_at_top: "LIM x F. f x :> at_top \<Longrightarrow> ((\<lambda>x. inverse (f x) :: real) \<longlongrightarrow> 0) F"
  1808 lemma tendsto_inverse_0_at_top: "LIM x F. f x :> at_top \<Longrightarrow> ((\<lambda>x. inverse (f x) :: real) \<longlongrightarrow> 0) F"
  1786   by (metis filterlim_at filterlim_mono[OF _ at_top_le_at_infinity order_refl] filterlim_inverse_at_iff)
  1809   by (metis filterlim_at filterlim_mono[OF _ at_top_le_at_infinity order_refl] filterlim_inverse_at_iff)
  1787 
  1810 
  1788 lemma filterlim_inverse_at_top_iff:
  1811 lemma filterlim_inverse_at_top_iff:
  1789   "eventually (\<lambda>x. 0 < f x) F \<Longrightarrow> (LIM x F. inverse (f x) :> at_top) \<longleftrightarrow> (f \<longlongrightarrow> (0 :: real)) F"
  1812   "eventually (\<lambda>x. 0 < f x) F \<Longrightarrow> (LIM x F. inverse (f x) :> at_top) \<longleftrightarrow> (f \<longlongrightarrow> (0 :: real)) F"
  1934   fixes c :: real
  1957   fixes c :: real
  1935   assumes c: "(f \<longlongrightarrow> c) F" "c < 0" and g: "filterlim g at_top F"
  1958   assumes c: "(f \<longlongrightarrow> c) F" "c < 0" and g: "filterlim g at_top F"
  1936   shows "LIM x F. f x * g x :> at_bot"
  1959   shows "LIM x F. f x * g x :> at_bot"
  1937   using c filterlim_tendsto_pos_mult_at_top[of "\<lambda>x. - f x" "- c" F, OF _ _ g]
  1960   using c filterlim_tendsto_pos_mult_at_top[of "\<lambda>x. - f x" "- c" F, OF _ _ g]
  1938   unfolding filterlim_uminus_at_bot tendsto_minus_cancel_left by simp
  1961   unfolding filterlim_uminus_at_bot tendsto_minus_cancel_left by simp
       
  1962 
       
  1963 
       
  1964 lemma filterlim_cmult_at_bot_at_top:
       
  1965   assumes "filterlim (h :: _ \<Rightarrow> real) at_top F" "c \<noteq> 0" "G = (if c > 0 then at_top else at_bot)"
       
  1966   shows   "filterlim (\<lambda>x. c * h x) G F"
       
  1967   using assms filterlim_tendsto_pos_mult_at_top[OF tendsto_const[of c], of h F]
       
  1968               filterlim_tendsto_neg_mult_at_bot[OF tendsto_const[of c], of h F] by simp
  1939 
  1969 
  1940 lemma filterlim_pow_at_top:
  1970 lemma filterlim_pow_at_top:
  1941   fixes f :: "'a \<Rightarrow> real"
  1971   fixes f :: "'a \<Rightarrow> real"
  1942   assumes "0 < n"
  1972   assumes "0 < n"
  1943     and f: "LIM x F. f x :> at_top"
  1973     and f: "LIM x F. f x :> at_top"
  2686 lemma LIMSEQ_realpow_zero:
  2716 lemma LIMSEQ_realpow_zero:
  2687   fixes x :: real
  2717   fixes x :: real
  2688   assumes "0 \<le> x" "x < 1"
  2718   assumes "0 \<le> x" "x < 1"
  2689   shows "(\<lambda>n. x ^ n) \<longlonglongrightarrow> 0"
  2719   shows "(\<lambda>n. x ^ n) \<longlonglongrightarrow> 0"
  2690 proof (cases "x = 0")
  2720 proof (cases "x = 0")
  2691   case False
  2721   case False 
  2692   with \<open>0 \<le> x\<close> have x0: "0 < x" by simp
  2722   with \<open>0 \<le> x\<close> have "1 < inverse x"
  2693   then have "1 < inverse x"
  2723     using \<open>x < 1\<close> by (simp add: one_less_inverse)
  2694     using \<open>x < 1\<close> by (rule one_less_inverse)
       
  2695   then have "(\<lambda>n. inverse (inverse x ^ n)) \<longlonglongrightarrow> 0"
  2724   then have "(\<lambda>n. inverse (inverse x ^ n)) \<longlonglongrightarrow> 0"
  2696     by (rule LIMSEQ_inverse_realpow_zero)
  2725     by (rule LIMSEQ_inverse_realpow_zero)
  2697   then show ?thesis by (simp add: power_inverse)
  2726   then show ?thesis by (simp add: power_inverse)
  2698 next
  2727 next
  2699   case True
  2728   case True