src/HOL/Archimedean_Field.thy
changeset 61649 268d88ec9087
parent 61531 ab2e862263e7
child 61738 c4f6031f1310
equal deleted inserted replaced
61644:b1c24adc1581 61649:268d88ec9087
   150 lemma floor_unique_iff:
   150 lemma floor_unique_iff:
   151   fixes x :: "'a::floor_ceiling"
   151   fixes x :: "'a::floor_ceiling"
   152   shows  "\<lfloor>x\<rfloor> = a \<longleftrightarrow> of_int a \<le> x \<and> x < of_int a + 1"
   152   shows  "\<lfloor>x\<rfloor> = a \<longleftrightarrow> of_int a \<le> x \<and> x < of_int a + 1"
   153 using floor_correct floor_unique by auto
   153 using floor_correct floor_unique by auto
   154 
   154 
   155 lemma of_int_floor_le: "of_int (floor x) \<le> x"
   155 lemma of_int_floor_le [simp]: "of_int (floor x) \<le> x"
   156   using floor_correct ..
   156   using floor_correct ..
   157 
   157 
   158 lemma le_floor_iff: "z \<le> floor x \<longleftrightarrow> of_int z \<le> x"
   158 lemma le_floor_iff: "z \<le> floor x \<longleftrightarrow> of_int z \<le> x"
   159 proof
   159 proof
   160   assume "z \<le> floor x"
   160   assume "z \<le> floor x"
   379 
   379 
   380 notation (xsymbols)
   380 notation (xsymbols)
   381   ceiling  ("\<lceil>_\<rceil>")
   381   ceiling  ("\<lceil>_\<rceil>")
   382 
   382 
   383 lemma ceiling_correct: "of_int (ceiling x) - 1 < x \<and> x \<le> of_int (ceiling x)"
   383 lemma ceiling_correct: "of_int (ceiling x) - 1 < x \<and> x \<le> of_int (ceiling x)"
   384   unfolding ceiling_def using floor_correct [of "- x"] by simp
   384   unfolding ceiling_def using floor_correct [of "- x"] by (simp add: le_minus_iff) 
   385 
   385 
   386 lemma ceiling_unique: "\<lbrakk>of_int z - 1 < x; x \<le> of_int z\<rbrakk> \<Longrightarrow> ceiling x = z"
   386 lemma ceiling_unique: "\<lbrakk>of_int z - 1 < x; x \<le> of_int z\<rbrakk> \<Longrightarrow> ceiling x = z"
   387   unfolding ceiling_def using floor_unique [of "- z" "- x"] by simp
   387   unfolding ceiling_def using floor_unique [of "- z" "- x"] by simp
   388 
   388 
   389 lemma le_of_int_ceiling: "x \<le> of_int (ceiling x)"
   389 lemma le_of_int_ceiling [simp]: "x \<le> of_int (ceiling x)"
   390   using ceiling_correct ..
   390   using ceiling_correct ..
   391 
   391 
   392 lemma ceiling_le_iff: "ceiling x \<le> z \<longleftrightarrow> x \<le> of_int z"
   392 lemma ceiling_le_iff: "ceiling x \<le> z \<longleftrightarrow> x \<le> of_int z"
   393   unfolding ceiling_def using le_floor_iff [of "- z" "- x"] by auto
   393   unfolding ceiling_def using le_floor_iff [of "- z" "- x"] by auto
   394 
   394 
   492 lemma floor_le_ceiling [simp]: "floor x \<le> ceiling x" by (simp add: ceiling_altdef)
   492 lemma floor_le_ceiling [simp]: "floor x \<le> ceiling x" by (simp add: ceiling_altdef)
   493 
   493 
   494 text \<open>Addition and subtraction of integers\<close>
   494 text \<open>Addition and subtraction of integers\<close>
   495 
   495 
   496 lemma ceiling_add_of_int [simp]: "ceiling (x + of_int z) = ceiling x + z"
   496 lemma ceiling_add_of_int [simp]: "ceiling (x + of_int z) = ceiling x + z"
   497   using ceiling_correct [of x] by (simp add: ceiling_unique)
   497   using ceiling_correct [of x] by (simp add: ceiling_def)
   498 
   498 
   499 lemma ceiling_add_numeral [simp]:
   499 lemma ceiling_add_numeral [simp]:
   500     "ceiling (x + numeral v) = ceiling x + numeral v"
   500     "ceiling (x + numeral v) = ceiling x + numeral v"
   501   using ceiling_add_of_int [of x "numeral v"] by simp
   501   using ceiling_add_of_int [of x "numeral v"] by simp
   502 
   502