src/HOL/Real/RComplete.thy
changeset 23477 f4b83f03cac9
parent 23389 aaca6a8e5414
child 24355 93d78fdeb55a
equal deleted inserted replaced
23476:839db6346cc8 23477:f4b83f03cac9
   375   hence "inverse (real (Suc n)) * x < 1"
   375   hence "inverse (real (Suc n)) * x < 1"
   376     using x_greater_zero by simp
   376     using x_greater_zero by simp
   377   hence "real (Suc n) * (inverse (real (Suc n)) * x) < real (Suc n) * 1"
   377   hence "real (Suc n) * (inverse (real (Suc n)) * x) < real (Suc n) * 1"
   378     by (rule mult_strict_left_mono) simp
   378     by (rule mult_strict_left_mono) simp
   379   hence "x < real (Suc n)"
   379   hence "x < real (Suc n)"
   380     by (simp add: ring_eq_simps)
   380     by (simp add: ring_simps)
   381   thus "\<exists>(n::nat). x < real n" ..
   381   thus "\<exists>(n::nat). x < real n" ..
   382 qed
   382 qed
   383 
   383 
   384 lemma reals_Archimedean3:
   384 lemma reals_Archimedean3:
   385   assumes x_greater_zero: "0 < x"
   385   assumes x_greater_zero: "0 < x"
   390   obtain n where "y * inverse x < real (n::nat)"
   390   obtain n where "y * inverse x < real (n::nat)"
   391     using reals_Archimedean2 ..
   391     using reals_Archimedean2 ..
   392   hence "y * inverse x * x < real n * x"
   392   hence "y * inverse x * x < real n * x"
   393     using x_greater_zero by (simp add: mult_strict_right_mono)
   393     using x_greater_zero by (simp add: mult_strict_right_mono)
   394   hence "x * inverse x * y < x * real n"
   394   hence "x * inverse x * y < x * real n"
   395     by (simp add: ring_eq_simps)
   395     by (simp add: ring_simps)
   396   hence "y < real (n::nat) * x"
   396   hence "y < real (n::nat) * x"
   397     using x_not_zero by (simp add: ring_eq_simps)
   397     using x_not_zero by (simp add: ring_simps)
   398   thus "\<exists>(n::nat). y < real n * x" ..
   398   thus "\<exists>(n::nat). y < real n * x" ..
   399 qed
   399 qed
   400 
   400 
   401 lemma reals_Archimedean6:
   401 lemma reals_Archimedean6:
   402      "0 \<le> r ==> \<exists>(n::nat). real (n - 1) \<le> r & r < real (n)"
   402      "0 \<le> r ==> \<exists>(n::nat). real (n - 1) \<le> r & r < real (n)"
  1224     by (simp add: a)
  1224     by (simp add: a)
  1225   then have "x / real y = ... / real y"
  1225   then have "x / real y = ... / real y"
  1226     by simp
  1226     by simp
  1227   also have "... = real((natfloor x) div y) + real((natfloor x) mod y) /
  1227   also have "... = real((natfloor x) div y) + real((natfloor x) mod y) /
  1228     real y + (x - real(natfloor x)) / real y"
  1228     real y + (x - real(natfloor x)) / real y"
  1229     by (auto simp add: ring_distrib ring_eq_simps add_divide_distrib
  1229     by (auto simp add: ring_simps add_divide_distrib
  1230       diff_divide_distrib prems)
  1230       diff_divide_distrib prems)
  1231   finally have "natfloor (x / real y) = natfloor(...)" by simp
  1231   finally have "natfloor (x / real y) = natfloor(...)" by simp
  1232   also have "... = natfloor(real((natfloor x) mod y) /
  1232   also have "... = natfloor(real((natfloor x) mod y) /
  1233     real y + (x - real(natfloor x)) / real y + real((natfloor x) div y))"
  1233     real y + (x - real(natfloor x)) / real y + real((natfloor x) div y))"
  1234     by (simp add: add_ac)
  1234     by (simp add: add_ac)