src/HOL/RealDef.thy
changeset 47901 25a6ca50fe14
parent 47598 d20bdee675dc
child 47902 34a9e81e5bfd
equal deleted inserted replaced
47900:6440a74b2f62 47901:25a6ca50fe14
   299     finally show "\<bar>inverse (X m) - inverse (X n)\<bar> < r" unfolding r .
   299     finally show "\<bar>inverse (X m) - inverse (X n)\<bar> < r" unfolding r .
   300   qed
   300   qed
   301   thus "\<exists>k. \<forall>m\<ge>k. \<forall>n\<ge>k. \<bar>inverse (X m) - inverse (X n)\<bar> < r" ..
   301   thus "\<exists>k. \<forall>m\<ge>k. \<forall>n\<ge>k. \<bar>inverse (X m) - inverse (X n)\<bar> < r" ..
   302 qed
   302 qed
   303 
   303 
       
   304 lemma vanishes_diff_inverse:
       
   305   assumes X: "cauchy X" "\<not> vanishes X"
       
   306   assumes Y: "cauchy Y" "\<not> vanishes Y"
       
   307   assumes XY: "vanishes (\<lambda>n. X n - Y n)"
       
   308   shows "vanishes (\<lambda>n. inverse (X n) - inverse (Y n))"
       
   309 proof (rule vanishesI)
       
   310   fix r :: rat assume r: "0 < r"
       
   311   obtain a i where a: "0 < a" and i: "\<forall>n\<ge>i. a < \<bar>X n\<bar>"
       
   312     using cauchy_not_vanishes [OF X] by fast
       
   313   obtain b j where b: "0 < b" and j: "\<forall>n\<ge>j. b < \<bar>Y n\<bar>"
       
   314     using cauchy_not_vanishes [OF Y] by fast
       
   315   obtain s where s: "0 < s" and "inverse a * s * inverse b = r"
       
   316   proof
       
   317     show "0 < a * r * b"
       
   318       using a r b by (simp add: mult_pos_pos)
       
   319     show "inverse a * (a * r * b) * inverse b = r"
       
   320       using a r b by simp
       
   321   qed
       
   322   obtain k where k: "\<forall>n\<ge>k. \<bar>X n - Y n\<bar> < s"
       
   323     using vanishesD [OF XY s] ..
       
   324   have "\<forall>n\<ge>max (max i j) k. \<bar>inverse (X n) - inverse (Y n)\<bar> < r"
       
   325   proof (clarsimp)
       
   326     fix n assume n: "i \<le> n" "j \<le> n" "k \<le> n"
       
   327     have "X n \<noteq> 0" and "Y n \<noteq> 0"
       
   328       using i j a b n by auto
       
   329     hence "\<bar>inverse (X n) - inverse (Y n)\<bar> =
       
   330         inverse \<bar>X n\<bar> * \<bar>X n - Y n\<bar> * inverse \<bar>Y n\<bar>"
       
   331       by (simp add: inverse_diff_inverse abs_mult)
       
   332     also have "\<dots> < inverse a * s * inverse b"
       
   333       apply (intro mult_strict_mono' less_imp_inverse_less)
       
   334       apply (simp_all add: a b i j k n mult_nonneg_nonneg)
       
   335       done
       
   336     also note `inverse a * s * inverse b = r`
       
   337     finally show "\<bar>inverse (X n) - inverse (Y n)\<bar> < r" .
       
   338   qed
       
   339   thus "\<exists>k. \<forall>n\<ge>k. \<bar>inverse (X n) - inverse (Y n)\<bar> < r" ..
       
   340 qed
       
   341 
   304 subsection {* Equivalence relation on Cauchy sequences *}
   342 subsection {* Equivalence relation on Cauchy sequences *}
   305 
   343 
   306 definition
   344 definition
   307   realrel :: "((nat \<Rightarrow> rat) \<times> (nat \<Rightarrow> rat)) set"
   345   realrel :: "((nat \<Rightarrow> rat) \<times> (nat \<Rightarrow> rat)) set"
   308 where
   346 where
   447     have "vanishes (\<lambda>n. X n * (Y n - Z n))"
   485     have "vanishes (\<lambda>n. X n * (Y n - Z n))"
   448       by (intro vanishes_mult_bounded cauchy_imp_bounded X YZ)
   486       by (intro vanishes_mult_bounded cauchy_imp_bounded X YZ)
   449     thus "vanishes (\<lambda>n. X n * Y n - X n * Z n)"
   487     thus "vanishes (\<lambda>n. X n * Y n - X n * Z n)"
   450       by (simp add: right_diff_distrib)
   488       by (simp add: right_diff_distrib)
   451   qed
   489   qed
   452 qed
       
   453 
       
   454 lemma vanishes_diff_inverse:
       
   455   assumes X: "cauchy X" "\<not> vanishes X"
       
   456   assumes Y: "cauchy Y" "\<not> vanishes Y"
       
   457   assumes XY: "vanishes (\<lambda>n. X n - Y n)"
       
   458   shows "vanishes (\<lambda>n. inverse (X n) - inverse (Y n))"
       
   459 proof (rule vanishesI)
       
   460   fix r :: rat assume r: "0 < r"
       
   461   obtain a i where a: "0 < a" and i: "\<forall>n\<ge>i. a < \<bar>X n\<bar>"
       
   462     using cauchy_not_vanishes [OF X] by fast
       
   463   obtain b j where b: "0 < b" and j: "\<forall>n\<ge>j. b < \<bar>Y n\<bar>"
       
   464     using cauchy_not_vanishes [OF Y] by fast
       
   465   obtain s where s: "0 < s" and "inverse a * s * inverse b = r"
       
   466   proof
       
   467     show "0 < a * r * b"
       
   468       using a r b by (simp add: mult_pos_pos)
       
   469     show "inverse a * (a * r * b) * inverse b = r"
       
   470       using a r b by simp
       
   471   qed
       
   472   obtain k where k: "\<forall>n\<ge>k. \<bar>X n - Y n\<bar> < s"
       
   473     using vanishesD [OF XY s] ..
       
   474   have "\<forall>n\<ge>max (max i j) k. \<bar>inverse (X n) - inverse (Y n)\<bar> < r"
       
   475   proof (clarsimp)
       
   476     fix n assume n: "i \<le> n" "j \<le> n" "k \<le> n"
       
   477     have "X n \<noteq> 0" and "Y n \<noteq> 0"
       
   478       using i j a b n by auto
       
   479     hence "\<bar>inverse (X n) - inverse (Y n)\<bar> =
       
   480         inverse \<bar>X n\<bar> * \<bar>X n - Y n\<bar> * inverse \<bar>Y n\<bar>"
       
   481       by (simp add: inverse_diff_inverse abs_mult)
       
   482     also have "\<dots> < inverse a * s * inverse b"
       
   483       apply (intro mult_strict_mono' less_imp_inverse_less)
       
   484       apply (simp_all add: a b i j k n mult_nonneg_nonneg)
       
   485       done
       
   486     also note `inverse a * s * inverse b = r`
       
   487     finally show "\<bar>inverse (X n) - inverse (Y n)\<bar> < r" .
       
   488   qed
       
   489   thus "\<exists>k. \<forall>n\<ge>k. \<bar>inverse (X n) - inverse (Y n)\<bar> < r" ..
       
   490 qed
   490 qed
   491 
   491 
   492 lemma inverse_respects_realrel:
   492 lemma inverse_respects_realrel:
   493   "(\<lambda>X. if vanishes X then c else Real (\<lambda>n. inverse (X n))) respects realrel"
   493   "(\<lambda>X. if vanishes X then c else Real (\<lambda>n. inverse (X n))) respects realrel"
   494     (is "?inv respects realrel")
   494     (is "?inv respects realrel")