src/HOL/Limits.thy
changeset 61810 3c5040d5694a
parent 61806 d2e62ae01cd8
child 61916 7950ae6d3266
equal deleted inserted replaced
61809:81d34cf268d8 61810:3c5040d5694a
    81 unfolding Bfun_def
    81 unfolding Bfun_def
    82 proof (intro exI conjI allI)
    82 proof (intro exI conjI allI)
    83   show "0 < max K 1" by simp
    83   show "0 < max K 1" by simp
    84 next
    84 next
    85   show "eventually (\<lambda>x. norm (f x) \<le> max K 1) F"
    85   show "eventually (\<lambda>x. norm (f x) \<le> max K 1) F"
    86     using K by (rule eventually_elim1, simp)
    86     using K by (rule eventually_mono, simp)
    87 qed
    87 qed
    88 
    88 
    89 lemma BfunE:
    89 lemma BfunE:
    90   assumes "Bfun f F"
    90   assumes "Bfun f F"
    91   obtains B where "0 < B" and "eventually (\<lambda>x. norm (f x) \<le> B) F"
    91   obtains B where "0 < B" and "eventually (\<lambda>x. norm (f x) \<le> B) F"
   895 proof -
   895 proof -
   896   from a have "0 < norm a" by simp
   896   from a have "0 < norm a" by simp
   897   with f have "eventually (\<lambda>x. dist (f x) a < norm a) F"
   897   with f have "eventually (\<lambda>x. dist (f x) a < norm a) F"
   898     by (rule tendstoD)
   898     by (rule tendstoD)
   899   then have "eventually (\<lambda>x. f x \<noteq> 0) F"
   899   then have "eventually (\<lambda>x. f x \<noteq> 0) F"
   900     unfolding dist_norm by (auto elim!: eventually_elim1)
   900     unfolding dist_norm by (auto elim!: eventually_mono)
   901   with a have "eventually (\<lambda>x. inverse (f x) - inverse a =
   901   with a have "eventually (\<lambda>x. inverse (f x) - inverse a =
   902     - (inverse (f x) * (f x - a) * inverse a)) F"
   902     - (inverse (f x) * (f x - a) * inverse a)) F"
   903     by (auto elim!: eventually_elim1 simp: inverse_diff_inverse)
   903     by (auto elim!: eventually_mono simp: inverse_diff_inverse)
   904   moreover have "Zfun (\<lambda>x. - (inverse (f x) * (f x - a) * inverse a)) F"
   904   moreover have "Zfun (\<lambda>x. - (inverse (f x) * (f x - a) * inverse a)) F"
   905     by (intro Zfun_minus Zfun_mult_left
   905     by (intro Zfun_minus Zfun_mult_left
   906       bounded_bilinear.Bfun_prod_Zfun [OF bounded_bilinear_mult]
   906       bounded_bilinear.Bfun_prod_Zfun [OF bounded_bilinear_mult]
   907       Bfun_inverse [OF f a] f [unfolded tendsto_Zfun_iff])
   907       Bfun_inverse [OF f a] f [unfolded tendsto_Zfun_iff])
   908   ultimately show ?thesis
   908   ultimately show ?thesis
  1147 proof safe
  1147 proof safe
  1148   fix Z :: real assume [arith]: "0 < Z"
  1148   fix Z :: real assume [arith]: "0 < Z"
  1149   then have "eventually (\<lambda>x. x < inverse Z) (nhds 0)"
  1149   then have "eventually (\<lambda>x. x < inverse Z) (nhds 0)"
  1150     by (auto simp add: eventually_nhds_metric dist_real_def intro!: exI[of _ "\<bar>inverse Z\<bar>"])
  1150     by (auto simp add: eventually_nhds_metric dist_real_def intro!: exI[of _ "\<bar>inverse Z\<bar>"])
  1151   then show "eventually (\<lambda>x. x \<noteq> 0 \<longrightarrow> x \<in> {0<..} \<longrightarrow> Z \<le> inverse x) (nhds 0)"
  1151   then show "eventually (\<lambda>x. x \<noteq> 0 \<longrightarrow> x \<in> {0<..} \<longrightarrow> Z \<le> inverse x) (nhds 0)"
  1152     by (auto elim!: eventually_elim1 simp: inverse_eq_divide field_simps)
  1152     by (auto elim!: eventually_mono simp: inverse_eq_divide field_simps)
  1153 qed
  1153 qed
  1154 
  1154 
  1155 lemma tendsto_inverse_0:
  1155 lemma tendsto_inverse_0:
  1156   fixes x :: "_ \<Rightarrow> 'a::real_normed_div_algebra"
  1156   fixes x :: "_ \<Rightarrow> 'a::real_normed_div_algebra"
  1157   shows "(inverse ---> (0::'a)) at_infinity"
  1157   shows "(inverse ---> (0::'a)) at_infinity"
  1200      (metis tendsto_inverse_0 filterlim_mono at_top_le_at_infinity order_refl)
  1200      (metis tendsto_inverse_0 filterlim_mono at_top_le_at_infinity order_refl)
  1201 
  1201 
  1202 lemma filterlim_inverse_at_top:
  1202 lemma filterlim_inverse_at_top:
  1203   "(f ---> (0 :: real)) F \<Longrightarrow> eventually (\<lambda>x. 0 < f x) F \<Longrightarrow> LIM x F. inverse (f x) :> at_top"
  1203   "(f ---> (0 :: real)) F \<Longrightarrow> eventually (\<lambda>x. 0 < f x) F \<Longrightarrow> LIM x F. inverse (f x) :> at_top"
  1204   by (intro filterlim_compose[OF filterlim_inverse_at_top_right])
  1204   by (intro filterlim_compose[OF filterlim_inverse_at_top_right])
  1205      (simp add: filterlim_def eventually_filtermap eventually_elim1 at_within_def le_principal)
  1205      (simp add: filterlim_def eventually_filtermap eventually_mono at_within_def le_principal)
  1206 
  1206 
  1207 lemma filterlim_inverse_at_bot_neg:
  1207 lemma filterlim_inverse_at_bot_neg:
  1208   "LIM x (at_left (0::real)). inverse x :> at_bot"
  1208   "LIM x (at_left (0::real)). inverse x :> at_bot"
  1209   by (simp add: filterlim_inverse_at_top_right filterlim_uminus_at_bot filterlim_at_left_to_right)
  1209   by (simp add: filterlim_inverse_at_top_right filterlim_uminus_at_bot filterlim_at_left_to_right)
  1210 
  1210 
  1333   shows "LIM x F. (f x * g x :: real) :> at_top"
  1333   shows "LIM x F. (f x * g x :: real) :> at_top"
  1334   unfolding filterlim_at_top_gt[where c=0]
  1334   unfolding filterlim_at_top_gt[where c=0]
  1335 proof safe
  1335 proof safe
  1336   fix Z :: real assume "0 < Z"
  1336   fix Z :: real assume "0 < Z"
  1337   from f \<open>0 < c\<close> have "eventually (\<lambda>x. c / 2 < f x) F"
  1337   from f \<open>0 < c\<close> have "eventually (\<lambda>x. c / 2 < f x) F"
  1338     by (auto dest!: tendstoD[where e="c / 2"] elim!: eventually_elim1
  1338     by (auto dest!: tendstoD[where e="c / 2"] elim!: eventually_mono
  1339              simp: dist_real_def abs_real_def split: split_if_asm)
  1339              simp: dist_real_def abs_real_def split: split_if_asm)
  1340   moreover from g have "eventually (\<lambda>x. (Z / c * 2) \<le> g x) F"
  1340   moreover from g have "eventually (\<lambda>x. (Z / c * 2) \<le> g x) F"
  1341     unfolding filterlim_at_top by auto
  1341     unfolding filterlim_at_top by auto
  1342   ultimately show "eventually (\<lambda>x. Z \<le> f x * g x) F"
  1342   ultimately show "eventually (\<lambda>x. Z \<le> f x * g x) F"
  1343   proof eventually_elim
  1343   proof eventually_elim
  1407   shows "LIM x F. (f x + g x :: real) :> at_top"
  1407   shows "LIM x F. (f x + g x :: real) :> at_top"
  1408   unfolding filterlim_at_top_gt[where c=0]
  1408   unfolding filterlim_at_top_gt[where c=0]
  1409 proof safe
  1409 proof safe
  1410   fix Z :: real assume "0 < Z"
  1410   fix Z :: real assume "0 < Z"
  1411   from f have "eventually (\<lambda>x. c - 1 < f x) F"
  1411   from f have "eventually (\<lambda>x. c - 1 < f x) F"
  1412     by (auto dest!: tendstoD[where e=1] elim!: eventually_elim1 simp: dist_real_def)
  1412     by (auto dest!: tendstoD[where e=1] elim!: eventually_mono simp: dist_real_def)
  1413   moreover from g have "eventually (\<lambda>x. Z - (c - 1) \<le> g x) F"
  1413   moreover from g have "eventually (\<lambda>x. Z - (c - 1) \<le> g x) F"
  1414     unfolding filterlim_at_top by auto
  1414     unfolding filterlim_at_top by auto
  1415   ultimately show "eventually (\<lambda>x. Z \<le> f x + g x) F"
  1415   ultimately show "eventually (\<lambda>x. Z \<le> f x + g x) F"
  1416     by eventually_elim simp
  1416     by eventually_elim simp
  1417 qed
  1417 qed