src/HOL/RComplete.thy
changeset 36979 da7c06ab3169
parent 36826 4d4462d644ae
child 37887 2ae085b07f2f
equal deleted inserted replaced
36978:4ec5131c6f46 36979:da7c06ab3169
   115 done
   115 done
   116 
   116 
   117 lemma reals_Archimedean6a: "0 \<le> r ==> \<exists>n. real (n) \<le> r & r < real (Suc n)"
   117 lemma reals_Archimedean6a: "0 \<le> r ==> \<exists>n. real (n) \<le> r & r < real (Suc n)"
   118   by (drule reals_Archimedean6) auto
   118   by (drule reals_Archimedean6) auto
   119 
   119 
       
   120 text {* TODO: delete *}
   120 lemma reals_Archimedean_6b_int:
   121 lemma reals_Archimedean_6b_int:
   121      "0 \<le> r ==> \<exists>n::int. real n \<le> r & r < real (n+1)"
   122      "0 \<le> r ==> \<exists>n::int. real n \<le> r & r < real (n+1)"
   122   unfolding real_of_int_def by (rule floor_exists)
   123   unfolding real_of_int_def by (rule floor_exists)
   123 
   124 
       
   125 text {* TODO: delete *}
   124 lemma reals_Archimedean_6c_int:
   126 lemma reals_Archimedean_6c_int:
   125      "r < 0 ==> \<exists>n::int. real n \<le> r & r < real (n+1)"
   127      "r < 0 ==> \<exists>n::int. real n \<le> r & r < real (n+1)"
   126   unfolding real_of_int_def by (rule floor_exists)
   128   unfolding real_of_int_def by (rule floor_exists)
   127 
   129 
   128 
   130 
   202 
   204 
   203 lemma number_of_le_real_of_int_iff2 [simp]:
   205 lemma number_of_le_real_of_int_iff2 [simp]:
   204      "(real (m::int) \<le> (number_of n)) = (m \<le> number_of n)"
   206      "(real (m::int) \<le> (number_of n)) = (m \<le> number_of n)"
   205 by (simp add: linorder_not_less [symmetric])
   207 by (simp add: linorder_not_less [symmetric])
   206 
   208 
   207 lemma floor_real_of_nat_zero: "floor (real (0::nat)) = 0"
       
   208 by auto (* delete? *)
       
   209 
       
   210 lemma floor_real_of_nat [simp]: "floor (real (n::nat)) = int n"
   209 lemma floor_real_of_nat [simp]: "floor (real (n::nat)) = int n"
   211 unfolding real_of_nat_def by simp
   210 unfolding real_of_nat_def by simp
   212 
   211 
   213 lemma floor_minus_real_of_nat [simp]: "floor (- real (n::nat)) = - int n"
   212 lemma floor_minus_real_of_nat [simp]: "floor (- real (n::nat)) = - int n"
   214 unfolding real_of_nat_def by (simp add: floor_minus)
   213 unfolding real_of_nat_def by (simp add: floor_minus)
   257 lemma floor_eq4: "[| real n \<le> x; x < real (Suc n) |] ==> nat(floor x) = n"
   256 lemma floor_eq4: "[| real n \<le> x; x < real (Suc n) |] ==> nat(floor x) = n"
   258 apply (drule order_le_imp_less_or_eq)
   257 apply (drule order_le_imp_less_or_eq)
   259 apply (auto intro: floor_eq3)
   258 apply (auto intro: floor_eq3)
   260 done
   259 done
   261 
   260 
   262 lemma floor_number_of_eq:
       
   263      "floor(number_of n :: real) = (number_of n :: int)"
       
   264   by (rule floor_number_of) (* already declared [simp] *)
       
   265 
       
   266 lemma real_of_int_floor_ge_diff_one [simp]: "r - 1 \<le> real(floor r)"
   261 lemma real_of_int_floor_ge_diff_one [simp]: "r - 1 \<le> real(floor r)"
   267   unfolding real_of_int_def using floor_correct [of r] by simp
   262   unfolding real_of_int_def using floor_correct [of r] by simp
   268 
   263 
   269 lemma real_of_int_floor_gt_diff_one [simp]: "r - 1 < real(floor r)"
   264 lemma real_of_int_floor_gt_diff_one [simp]: "r - 1 < real(floor r)"
   270   unfolding real_of_int_def using floor_correct [of r] by simp
   265   unfolding real_of_int_def using floor_correct [of r] by simp
   282   unfolding real_of_int_def by (simp add: le_floor_iff)
   277   unfolding real_of_int_def by (simp add: le_floor_iff)
   283 
   278 
   284 lemma le_floor_eq: "(a <= floor x) = (real a <= x)"
   279 lemma le_floor_eq: "(a <= floor x) = (real a <= x)"
   285   unfolding real_of_int_def by (rule le_floor_iff)
   280   unfolding real_of_int_def by (rule le_floor_iff)
   286 
   281 
   287 lemma le_floor_eq_number_of:
       
   288     "(number_of n <= floor x) = (number_of n <= x)"
       
   289   by (rule number_of_le_floor) (* already declared [simp] *)
       
   290 
       
   291 lemma le_floor_eq_zero: "(0 <= floor x) = (0 <= x)"
       
   292   by (rule zero_le_floor) (* already declared [simp] *)
       
   293 
       
   294 lemma le_floor_eq_one: "(1 <= floor x) = (1 <= x)"
       
   295   by (rule one_le_floor) (* already declared [simp] *)
       
   296 
       
   297 lemma floor_less_eq: "(floor x < a) = (x < real a)"
   282 lemma floor_less_eq: "(floor x < a) = (x < real a)"
   298   unfolding real_of_int_def by (rule floor_less_iff)
   283   unfolding real_of_int_def by (rule floor_less_iff)
   299 
   284 
   300 lemma floor_less_eq_number_of:
       
   301     "(floor x < number_of n) = (x < number_of n)"
       
   302   by (rule floor_less_number_of) (* already declared [simp] *)
       
   303 
       
   304 lemma floor_less_eq_zero: "(floor x < 0) = (x < 0)"
       
   305   by (rule floor_less_zero) (* already declared [simp] *)
       
   306 
       
   307 lemma floor_less_eq_one: "(floor x < 1) = (x < 1)"
       
   308   by (rule floor_less_one) (* already declared [simp] *)
       
   309 
       
   310 lemma less_floor_eq: "(a < floor x) = (real a + 1 <= x)"
   285 lemma less_floor_eq: "(a < floor x) = (real a + 1 <= x)"
   311   unfolding real_of_int_def by (rule less_floor_iff)
   286   unfolding real_of_int_def by (rule less_floor_iff)
   312 
   287 
   313 lemma less_floor_eq_number_of:
       
   314     "(number_of n < floor x) = (number_of n + 1 <= x)"
       
   315   by (rule number_of_less_floor) (* already declared [simp] *)
       
   316 
       
   317 lemma less_floor_eq_zero: "(0 < floor x) = (1 <= x)"
       
   318   by (rule zero_less_floor) (* already declared [simp] *)
       
   319 
       
   320 lemma less_floor_eq_one: "(1 < floor x) = (2 <= x)"
       
   321   by (rule one_less_floor) (* already declared [simp] *)
       
   322 
       
   323 lemma floor_le_eq: "(floor x <= a) = (x < real a + 1)"
   288 lemma floor_le_eq: "(floor x <= a) = (x < real a + 1)"
   324   unfolding real_of_int_def by (rule floor_le_iff)
   289   unfolding real_of_int_def by (rule floor_le_iff)
   325 
   290 
   326 lemma floor_le_eq_number_of:
       
   327     "(floor x <= number_of n) = (x < number_of n + 1)"
       
   328   by (rule floor_le_number_of) (* already declared [simp] *)
       
   329 
       
   330 lemma floor_le_eq_zero: "(floor x <= 0) = (x < 1)"
       
   331   by (rule floor_le_zero) (* already declared [simp] *)
       
   332 
       
   333 lemma floor_le_eq_one: "(floor x <= 1) = (x < 2)"
       
   334   by (rule floor_le_one) (* already declared [simp] *)
       
   335 
       
   336 lemma floor_add [simp]: "floor (x + real a) = floor x + a"
   291 lemma floor_add [simp]: "floor (x + real a) = floor x + a"
   337   unfolding real_of_int_def by (rule floor_add_of_int)
   292   unfolding real_of_int_def by (rule floor_add_of_int)
   338 
   293 
   339 lemma floor_subtract [simp]: "floor (x - real a) = floor x - a"
   294 lemma floor_subtract [simp]: "floor (x - real a) = floor x - a"
   340   unfolding real_of_int_def by (rule floor_diff_of_int)
   295   unfolding real_of_int_def by (rule floor_diff_of_int)
   341 
       
   342 lemma floor_subtract_number_of: "floor (x - number_of n) =
       
   343     floor x - number_of n"
       
   344   by (rule floor_diff_number_of) (* already declared [simp] *)
       
   345 
       
   346 lemma floor_subtract_one: "floor (x - 1) = floor x - 1"
       
   347   by (rule floor_diff_one) (* already declared [simp] *)
       
   348 
   296 
   349 lemma le_mult_floor:
   297 lemma le_mult_floor:
   350   assumes "0 \<le> (a :: real)" and "0 \<le> b"
   298   assumes "0 \<le> (a :: real)" and "0 \<le> b"
   351   shows "floor a * floor b \<le> floor (a * b)"
   299   shows "floor a * floor b \<le> floor (a * b)"
   352 proof -
   300 proof -
   359 qed
   307 qed
   360 
   308 
   361 lemma ceiling_real_of_nat [simp]: "ceiling (real (n::nat)) = int n"
   309 lemma ceiling_real_of_nat [simp]: "ceiling (real (n::nat)) = int n"
   362   unfolding real_of_nat_def by simp
   310   unfolding real_of_nat_def by simp
   363 
   311 
   364 lemma ceiling_real_of_nat_zero: "ceiling (real (0::nat)) = 0"
       
   365 by auto (* delete? *)
       
   366 
       
   367 lemma ceiling_floor [simp]: "ceiling (real (floor r)) = floor r"
   312 lemma ceiling_floor [simp]: "ceiling (real (floor r)) = floor r"
   368   unfolding real_of_int_def by simp
   313   unfolding real_of_int_def by simp
   369 
   314 
   370 lemma floor_ceiling [simp]: "floor (real (ceiling r)) = ceiling r"
   315 lemma floor_ceiling [simp]: "floor (real (ceiling r)) = ceiling r"
   371   unfolding real_of_int_def by simp
   316   unfolding real_of_int_def by simp
   387   unfolding real_of_int_def using ceiling_unique [of "n + 1" x] by simp
   332   unfolding real_of_int_def using ceiling_unique [of "n + 1" x] by simp
   388 
   333 
   389 lemma ceiling_eq3: "[| real n - 1 < x; x \<le> real n  |] ==> ceiling x = n"
   334 lemma ceiling_eq3: "[| real n - 1 < x; x \<le> real n  |] ==> ceiling x = n"
   390   unfolding real_of_int_def using ceiling_unique [of n x] by simp
   335   unfolding real_of_int_def using ceiling_unique [of n x] by simp
   391 
   336 
   392 lemma ceiling_number_of_eq:
       
   393      "ceiling (number_of n :: real) = (number_of n)"
       
   394   by (rule ceiling_number_of) (* already declared [simp] *)
       
   395 
       
   396 lemma real_of_int_ceiling_diff_one_le [simp]: "real (ceiling r) - 1 \<le> r"
   337 lemma real_of_int_ceiling_diff_one_le [simp]: "real (ceiling r) - 1 \<le> r"
   397   unfolding real_of_int_def using ceiling_correct [of r] by simp
   338   unfolding real_of_int_def using ceiling_correct [of r] by simp
   398 
   339 
   399 lemma real_of_int_ceiling_le_add_one [simp]: "real (ceiling r) \<le> r + 1"
   340 lemma real_of_int_ceiling_le_add_one [simp]: "real (ceiling r) \<le> r + 1"
   400   unfolding real_of_int_def using ceiling_correct [of r] by simp
   341   unfolding real_of_int_def using ceiling_correct [of r] by simp
   406   unfolding real_of_int_def by (simp add: ceiling_le_iff)
   347   unfolding real_of_int_def by (simp add: ceiling_le_iff)
   407 
   348 
   408 lemma ceiling_le_eq: "(ceiling x <= a) = (x <= real a)"
   349 lemma ceiling_le_eq: "(ceiling x <= a) = (x <= real a)"
   409   unfolding real_of_int_def by (rule ceiling_le_iff)
   350   unfolding real_of_int_def by (rule ceiling_le_iff)
   410 
   351 
   411 lemma ceiling_le_eq_number_of:
       
   412     "(ceiling x <= number_of n) = (x <= number_of n)"
       
   413   by (rule ceiling_le_number_of) (* already declared [simp] *)
       
   414 
       
   415 lemma ceiling_le_zero_eq: "(ceiling x <= 0) = (x <= 0)"
       
   416   by (rule ceiling_le_zero) (* already declared [simp] *)
       
   417 
       
   418 lemma ceiling_le_eq_one: "(ceiling x <= 1) = (x <= 1)"
       
   419   by (rule ceiling_le_one) (* already declared [simp] *)
       
   420 
       
   421 lemma less_ceiling_eq: "(a < ceiling x) = (real a < x)"
   352 lemma less_ceiling_eq: "(a < ceiling x) = (real a < x)"
   422   unfolding real_of_int_def by (rule less_ceiling_iff)
   353   unfolding real_of_int_def by (rule less_ceiling_iff)
   423 
   354 
   424 lemma less_ceiling_eq_number_of:
       
   425     "(number_of n < ceiling x) = (number_of n < x)"
       
   426   by (rule number_of_less_ceiling) (* already declared [simp] *)
       
   427 
       
   428 lemma less_ceiling_eq_zero: "(0 < ceiling x) = (0 < x)"
       
   429   by (rule zero_less_ceiling) (* already declared [simp] *)
       
   430 
       
   431 lemma less_ceiling_eq_one: "(1 < ceiling x) = (1 < x)"
       
   432   by (rule one_less_ceiling) (* already declared [simp] *)
       
   433 
       
   434 lemma ceiling_less_eq: "(ceiling x < a) = (x <= real a - 1)"
   355 lemma ceiling_less_eq: "(ceiling x < a) = (x <= real a - 1)"
   435   unfolding real_of_int_def by (rule ceiling_less_iff)
   356   unfolding real_of_int_def by (rule ceiling_less_iff)
   436 
   357 
   437 lemma ceiling_less_eq_number_of:
       
   438     "(ceiling x < number_of n) = (x <= number_of n - 1)"
       
   439   by (rule ceiling_less_number_of) (* already declared [simp] *)
       
   440 
       
   441 lemma ceiling_less_eq_zero: "(ceiling x < 0) = (x <= -1)"
       
   442   by (rule ceiling_less_zero) (* already declared [simp] *)
       
   443 
       
   444 lemma ceiling_less_eq_one: "(ceiling x < 1) = (x <= 0)"
       
   445   by (rule ceiling_less_one) (* already declared [simp] *)
       
   446 
       
   447 lemma le_ceiling_eq: "(a <= ceiling x) = (real a - 1 < x)"
   358 lemma le_ceiling_eq: "(a <= ceiling x) = (real a - 1 < x)"
   448   unfolding real_of_int_def by (rule le_ceiling_iff)
   359   unfolding real_of_int_def by (rule le_ceiling_iff)
   449 
   360 
   450 lemma le_ceiling_eq_number_of:
       
   451     "(number_of n <= ceiling x) = (number_of n - 1 < x)"
       
   452   by (rule number_of_le_ceiling) (* already declared [simp] *)
       
   453 
       
   454 lemma le_ceiling_eq_zero: "(0 <= ceiling x) = (-1 < x)"
       
   455   by (rule zero_le_ceiling) (* already declared [simp] *)
       
   456 
       
   457 lemma le_ceiling_eq_one: "(1 <= ceiling x) = (0 < x)"
       
   458   by (rule one_le_ceiling) (* already declared [simp] *)
       
   459 
       
   460 lemma ceiling_add [simp]: "ceiling (x + real a) = ceiling x + a"
   361 lemma ceiling_add [simp]: "ceiling (x + real a) = ceiling x + a"
   461   unfolding real_of_int_def by (rule ceiling_add_of_int)
   362   unfolding real_of_int_def by (rule ceiling_add_of_int)
   462 
   363 
   463 lemma ceiling_subtract [simp]: "ceiling (x - real a) = ceiling x - a"
   364 lemma ceiling_subtract [simp]: "ceiling (x - real a) = ceiling x - a"
   464   unfolding real_of_int_def by (rule ceiling_diff_of_int)
   365   unfolding real_of_int_def by (rule ceiling_diff_of_int)
   465 
       
   466 lemma ceiling_subtract_number_of: "ceiling (x - number_of n) =
       
   467     ceiling x - number_of n"
       
   468   by (rule ceiling_diff_number_of) (* already declared [simp] *)
       
   469 
       
   470 lemma ceiling_subtract_one: "ceiling (x - 1) = ceiling x - 1"
       
   471   by (rule ceiling_diff_one) (* already declared [simp] *)
       
   472 
   366 
   473 
   367 
   474 subsection {* Versions for the natural numbers *}
   368 subsection {* Versions for the natural numbers *}
   475 
   369 
   476 definition
   370 definition