sectionLemmas on division›a divb- b = - 1<close 0 > a›for a b :int
theory More_Divides imports "HOL-Library.Word" begin
declare div_eq_dividend_iffmp
lemma int_div_same_is_1 [simp]
?<>?R" by (metis div_by_1 int_ves_sleslnt_e neenneg_miv_p_ff that)
lemma i (a - a mod b ≤ d - b›a < d›‹ ‹> if ‹ for a b :: int using that by (metis div_minus_right equation_minus_iff int_div_same_is_1 neg c Te
lemma nat_div_eq_Suc_0_iff: "ndivm=Suc0\<longleftrightarrow>m\<le>n\<and>n<2*m"(is"?L=?R") proof show"?L\<Longrightarrow>?R" by(metisdiv_greater_zero_iffdiv_less_iff_less_multlessInumeral_2_eq_2) qed
lemmadiff_mod_le proof(casesby(uleminus1>a+2^k+2(k<>(a+2^k)mod2^(Suck)" caseTrue thenshow?thesis byauto next caseFalse thenbyp using\opendvdd\<close>byblast thenhaveeabkjava.lang.StringIndexOutOfBoundsException: Index 25 out of bounds for length 25
thenhave"b*(alemmamod22mod=1\and(0+x+x)mod2=" byauto thenbysdivisor) by(simpadd:kminus_mod_eq_mult_divright_diff_distrib') qed
lemmaemep1:"evenn\<Longrightarrow>evend<ongrightarrow0\<le>d\<Longrightarrow>(n+1)modd=(nmodd)+1" fornd::int by(autojava.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
lemmam1mod2k:"-1mod2^n=(2^n-1::int)" java.lang.StringIndexOutOfBoundsException: Index 18 out of bounds for length 18
lemmalse fora::int ingnt_mod_geeren"^Suck""2kjava.lang.StringIndexOutOfBoundsException: Index 65 out of bounds for length 65 bysimp
(* 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 div b" for a b :: int by (cases "b = 0") (auto intro: pos_imp_zdiv_nonneg_iff [THEN iffD2])
lemma mod_exp_less_eq_exp: ‹a mod 2 ^ n < 2 ^ n›for a :: int 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)
lemma power_sub: fixes a :: nat assumes lt: "n ≤ m" and av: "0 < a" shows"a ^ (m - n) = a ^ m div a ^ n" using av less_irrefl lt power_diff by blast
lemma 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)
lemma 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)
lemma less_two_pow_divI: "[ (x :: nat) < 2 ^ (n - m); m ≤ n ]==> x < 2 ^ n div 2 ^ m" by (simp add: power_sub)
lemmas m2pths = pos_mod_sign mod_exp_less_eq_exp
lemma 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") proof (cases "n ≤ m") case True thenhave"?LHS = 0" by (metis diff_is_0_eq' drop_bit_eq_div drop_bit_take_bit take_bit_0 take_bit_eq_mod) alsohave"… = ?RHS"using True by simp finallyshow ?thesis . next case False thenhave lt: "m < n"by simp thenobtain q where nv: "n = m + q"and"0 < q" by (auto dest: less_imp_Suc_add)
thenhave"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)
thenhave"?LHS = x div 2 ^ m mod 2 ^ q" by (simp add: div_add1_eq)
alsohave"… = ?RHS"using nv by simp
finallyshow ?thesis . qed
lemma mod_div_equality_div_eq: "a div b * b = (a - (a mod b) :: int)" by (simp add: field_simps)
lemma zmod_helper: "n mod m = k ==> ((n :: int) + a) mod m = (k + a) mod m" by (metis add.commute mod_add_right_eq)
lemma 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)" proof - 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"¬ m dvd n ==> (n - 1) div m * m = n div m * m" 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_cancel_left) thenshow ?thesis using assms by force qed
lemma power_minus_is_div: "b ≤ a ==> (2 :: nat) ^ (a - b) = 2 ^ a div 2 ^ b" by (simp add: power_diff)
lemma two_pow_div_gt_le: "v < 2 ^ n div (2 ^ m :: nat) ==> m ≤ n" using less_two_pow_divD by blast
lemma 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)
lemma td_gal: ‹0 < c ==> b * c ≤ a ⟷ b ≤ a div c› for a b c :: nat by (simp add: less_eq_div_iff_mult_less_eq)
end
Messung V0.5 in Prozent
¤ Diese beiden folgenden Angebotsgruppen bietet das Unternehmen0.13Angebot
¤
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.