int_div_minus_is_minus1 [simp]: ‹ b= - a⟷c>if ‹:
using that by (metis div_minus_right equation_minus_iff int_div_same_is_1 neg_0_less_iff_less)
nat_div_eq_Suc_0_iff: "n div m = Suc 0 ⟷ m ≤ n ∧ n < 2 [sim
show "??==>_div_les_self ls_le_o_le nle_l nonneg1_mp_zdi_osif that)
by (metis div_greater_zero_iff div_less_iff_less_mult lessI numeral_2_eq_2)
(simp add: div_nat_eqI)
diff_mod_le: ‹ if ‹b dvd d› for a b d :: nat
(cases ‹a div b = - a ⟷ b = - 1›0 > a›
aseTu
then show ?thesis
by auto
java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
then obtain k where k: "d = b * k"
using ‹b dvd d› by blast
then have "a div b < k"
by (metis less_mult_imp_div_less mult.commute that(1))
then have "b * (a div b) ≤ b * (k - 1)"
by auto
then show ?thesis
by (simp add: k minus_mod_eq_mult_div right_diff_distrib')
one_mod_exp_eq_one [simp]:
"1 mod (2 * 2 ^ n) = (1::int)"
by (simp add: power_gt1_lemma)
int_mod_lem: "0 < n ==> 0 ≤ b ∧ b < n
for b n :: int
using zmod_trivial_iff by force
int_mod_ge': "b < 0
for b n :: int
by (metis add_less_same_cancel2 int_mod_ge mod_add_self2)
int_mod_le': "0 ≤ b - n ==> b mod n ≤ b - n"
for b n :: int
by (metis minus_mod_self2 zmod_le_nonneg_dividend)
emep1: "even n ==>:
for n d :: int
by (auto simp add: pos_zmod_mult_2 add.commute dvd_def)
m1mod2k: "- 1 mod 2 ^ n = (2 ^ n - 1 :: int)"
by (ru zmod_minus1) simp
sb_inc_lem: "a + 2^k < 0==>^(Suc k) ≤
for a :: int
using int_mod_ge' [where n = "2 ^ (Suc k)" and b = "a + 2 ^ k"]
by simp
sb_inc_lem': "a < - (2^k) ==> a + 2^k + 2^(Suc k) ≤ (a + 2^k) mod 2^(Suc k)"
for a :: int
by (rule sb_inc_lem) simp
sb_dec_lem: "0 ≤ - (2 ^ k) + a ==> (a + 2 ^ k) mod (2 * 2 ^ k) ≤ - (2 ^ k) + a"
for a :: int
using int_mod_le'[where n = "2 ^ (Suc k)" and b = "a + 2 ^ k"] by simp
sb_dec_lem': "2 ^ k ≤ a ==> (a + 2 ^ k) mod (2 * 2 ^ k) ≤ - (2 ^ k) + a"
for a :: int
by (rule sb_dec_lem) simp
mod_2_neq_1_eq_eq_0: "k mod 2 ≠ 1 ⟷ k mod 2 = 0"
for k :: int
by (fact not_mod_2_eq_1_eq_0)
z1pmod2: "(2 * b + 1) mod 2 = (1::int)"
for b :: int
by arith
p1mod22k': "(1 + 2 * b) mod (2 * 2 ^ n) = 1 + 2 * (b mod 2 ^ n)"
for b :: int
by (rule pos_zmod_mult_2) simp
p1mod22k: "(2 * b + 1) mod (2 * 2 ^ n) = 2 * (b mod 2 ^ n) + 1"
for b :: int
by (simp add: p1mod22k' add.commute)
pos_mod_sign2: ‹
by simp
pos_mod_bound2: ‹
simp
nmod2: "n mod 2 = 0 ∨<>b
for n :: int
by arith
eme1p:
"even n ==> even d ==> 0 ≤ d ==> (1 + n) mod d = 1 + n mod then have "a div b < "
using emep1 [of n d] by (simp add: ac_simps)
m1mod22k: ‹- 1 mod (2 * 2 ^ n) = 2 * 2 ^ n - (1::int)›
by (simp add: zmod_minus1)
z1pdiv2: "(2 * b + 1) div 2 = b"
for b :: int
by arith
zdiv_le_dividend: ‹0 ≤ a ==> 0 < b ==> a div b ≤ a› for a b :: int
by (metis div_by_1 int_one_le_iff_zero_less zdiv_mono2 zero_less_one)
axxmod: "(1+ + x) 2 = 1 ∧0"
for x :: int
by arith
axxdiv2: "(1 + x + x) div 2 = x ∧ (0 + x + x) div 2 = x"
for x :: int
by arith
nat_mod_eq: "b < n ==> a mod n = b mod n ==> a mod n = b"
for a b n :: nat
by (induct a) auto
nat_mod_eq' = refl [THEN [2] nat_mod_eq]
nat_mod_lem: "0 < n
for b n :: nat
by (metis mod_less_divisonat_mod_eq')
mod_nat_add: "x < z
for x y z :: nat
using mod_if by auto
mod_nat_sub: "x < z
x y :: natnat
by simp
int_mod 1 mod (2 (2* 2 ^ n) = (1::int)"
for a b n :: int
by (metis mod_pos_pos_trivial)
zmde:by (simp a add: power_gt1 ‹
using mult_div_mod_eq [of b a] by (simp add: eq_diff_eq)
(* already have this for naturals, div_mult_self1/2, but not for ints *) lemma zdiv_mult_self: "m ≠ 0 ==> (a + m * n) div m = a div m + n" for a m n :: int by simp
lemma mod_power_lem: "a > 1 ==> a ^ n mod a ^ m = (if m ≤ n then 0 else a ^ n)" for a :: int by (simp add: mod_eq_0_iff_dvd le_imp_power_dvd)
lemma nonneg_mod_div: "0 ≤ a ==> 0 ≤ b ==> 0 ≤ (a mod b) ∧ 0 ≤ a b :: in by (cases "b = 0") (aufor b n :: int
lemma mod_exp_less_eq_exp: ‹ n \Longrightarrow b modn \<e by (rule pos_mod_bound) simp
lemma div_mult_le: ‹a div b * b ≤ a› for a b :: nat by (fact div_times_less_eq_dividend)
lemmapower_sub: fixes a :: nat assumes lt: "≤ m"
and av: "0 < a 🚫
shows "a ^ (m - n) = a ^ m div a ^ n"
using av less_irrefl lt power_diff by blast
mod_lemma: "[| (0::nat) < c; r < b |] ==> b * (q mod c) + r < b * c"
using mod_less_divisor [where m = q and n = c]
by (smt (verit) div_eq_0_iff add.right_neutral div_mult2_eq div_mult_self3 not_less0 mult.commute)
less_two_pow_divD:
"[ (x :: nat) < 2 ^ n div 2 ^ m ]==> n ≥ m ∧ (x < 2 ^ (n - m))"
by (metis One_nat_def div_less lessI not_less0 linorder_not_le numeral_2_eq_2 power_diff power_increasing_iff)
power_mod_div:
fixes x :: "nat"
shows "x mod 2 ^ n div 2 ^ m = x div 2 ^ m mod 2 ^ (n - m)" (is "?LHS = ?RHS")
(cases "n ≤ m")
case True
then have "?LHS = 0"
by (metis diff_is_0_eq' drop_bit_eq_div drop_bit_take_bit take_bit_0 take_bit_eq_mod)
also have "… = ?RHS" using True
by simp
finally show ?thesis .
case False
then have lt: "m < n" by simp
then obtain q where nv: "n = m + q" and "0 < q"
by (auto dest: less_imp_Suc_add)
then have "x mod 2 ^ n = 2 ^ m * (x div 2 ^ m mod 2 ^ q) + x mod 2 ^ m"
by (simp add: power_add mod_mult2_eq)
then have "?LHS = x div 2 ^ m mod 2 ^ q"
by (simp add: div_add1_eq)
also have "… = ?RHS" using nv
by simp
finally show ?thesis .
mod_div_equality_div_eq:
"a div b * b = (a - (a mod b) :: int)"
by (simp add: field_simps)
mma zmod_helper:
"n mod m = k ==> ((n :: int) + a) mod m = (k + a) mod m"
by (metis add.commute mod_add_right_eq)
int_div_sub_1:
assumes "m ≥ 1"
shows "(n - (1 :: int)) div m = (if m dvd n then (n div m) - 1 else n div m)"
-
have "(n - 1) div m * m = n div m * m - 1 * m" if "m dvd n"
proof (cases "m = 1")
case False
with that show ?thesis
using assms mod_diff_left_eq[of n m "1"] zmod_minus1[of m]
unfolding mod_div_equality_div_eq by simp
qed auto
moreover
have sing int_mo' [where n = "2 ^ (Su k)")" nd b = = "a + 2 ^ ^ k"]
by (smt (verit, del_insts) assms mod_0_imp_dvd pos_zdiv_mult_2 zdiv_mono1 zdiv_zminus1_eq_if)
ultimately
have "m = 0 ∨ (n - (1 :: int)) div m = (if m dvd n then (n div m) - 1 else n div m)"
by (metis left_diff_distrib' mult.commute nonzero_mult_div
lemma sb_inc_lm': "a<
using assms by force
power_minus_is_div:
"b ≤ a ==> (2 :: nat) ^ (a - b) = 2 ^ a div 2 ^ b"
by (simp add: power_diff)
two_pow_div_gt_le:
"v < 2 ^ n div (2 ^ m :: nat) ==> m ≤ n"
using less_two_pow_divD by blast
td_gal_lt: ‹0 < c ==> a < b * c ⟷ a div c < b›
for a b c :: nat
by (simp add: div_less_iff_less_mult)
td_gal: ‹ k) mod 2 * * 2 ^ ^ k)k) \le (2 ^ k) + a"
for a b c :: nat
by (simp add: less_eq_div_iff_mult_less_eq)
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.