diff --git a/src/HOL/Library/Rounded_Division.thy b/src/HOL/Library/Rounded_Division.thy --- a/src/HOL/Library/Rounded_Division.thy +++ b/src/HOL/Library/Rounded_Division.thy @@ -1,84 +1,84 @@ (* Author: Florian Haftmann, TU Muenchen *) -subsection \Rounded division: modulus centered towars zero.\ +subsection \Rounded division: modulus centered towards zero.\ theory Rounded_Division imports Main begin definition rounded_divide :: \int \ int \ int\ (infixl \rdiv\ 70) where \k rdiv l = (k + l div 2 + of_bool (l < 0)) div l\ definition rounded_modulo :: \int \ int \ int\ (infixl \rmod\ 70) where \k rmod l = k - k rdiv l * l\ lemma rdiv_mult_rmod_eq: \k rdiv l * l + k rmod l = k\ by (simp add: rounded_divide_def rounded_modulo_def) lemma mult_rdiv_rmod_eq: \l * (k rdiv l) + k rmod l = k\ using rdiv_mult_rmod_eq [of k l] by (simp add: ac_simps) lemma rmod_rdiv_mult_eq: \k rmod l + k rdiv l * l = k\ using rdiv_mult_rmod_eq [of k l] by (simp add: ac_simps) lemma rmod_mult_rdiv_eq: \k rmod l + l * (k rdiv l) = k\ using rdiv_mult_rmod_eq [of k l] by (simp add: ac_simps) lemma minus_rdiv_mult_eq_rmod: \k - k rdiv l * l = k rmod l\ by (rule add_implies_diff [symmetric]) (fact rmod_rdiv_mult_eq) lemma minus_mult_rdiv_eq_rmod: \k - l * (k rdiv l) = k rmod l\ by (rule add_implies_diff [symmetric]) (fact rmod_mult_rdiv_eq) lemma minus_rmod_eq_rdiv_mult: \k - k rmod l = k rdiv l * l\ by (rule add_implies_diff [symmetric]) (fact rdiv_mult_rmod_eq) lemma minus_rmod_eq_mult_rdiv: \k - k rmod l = l * (k rdiv l)\ by (rule add_implies_diff [symmetric]) (fact mult_rdiv_rmod_eq) lemma rdiv_0_eq [simp]: \k rdiv 0 = 0\ by (simp add: rounded_divide_def) lemma rmod_0_eq [simp]: \k rmod 0 = k\ by (simp add: rounded_modulo_def) lemma rdiv_1_eq [simp]: \k rdiv 1 = k\ by (simp add: rounded_divide_def) lemma rmod_1_eq [simp]: \k rmod 1 = 0\ by (simp add: rounded_modulo_def) lemma zero_rdiv_eq [simp]: \0 rdiv k = 0\ by (auto simp add: rounded_divide_def not_less zdiv_eq_0_iff) lemma zero_rmod_eq [simp]: \0 rmod k = 0\ by (simp add: rounded_modulo_def) lemma nonzero_mult_rdiv_cancel_right: \k * l rdiv l = k\ if \l \ 0\ using that by (auto simp add: rounded_divide_def ac_simps) lemma rdiv_self_eq [simp]: \k rdiv k = 1\ if \k \ 0\ using that nonzero_mult_rdiv_cancel_right [of k 1] by simp lemma rmod_self_eq [simp]: \k rmod k = 0\ by (cases \k = 0\) (simp_all add: rounded_modulo_def) end