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") |