equal
deleted
inserted
replaced
215 lemma zcong_zless_imp_eq: |
215 lemma zcong_zless_imp_eq: |
216 "0 \<le> a ==> |
216 "0 \<le> a ==> |
217 a < m ==> 0 \<le> b ==> b < m ==> [a = b] (mod m) ==> a = b" |
217 a < m ==> 0 \<le> b ==> b < m ==> [a = b] (mod m) ==> a = b" |
218 apply (unfold zcong_def dvd_def, auto) |
218 apply (unfold zcong_def dvd_def, auto) |
219 apply (drule_tac f = "\<lambda>z. z mod m" in arg_cong) |
219 apply (drule_tac f = "\<lambda>z. z mod m" in arg_cong) |
220 apply (metis diff_add_cancel mod_pos_pos_trivial zadd_0 zadd_commute zmod_eq_0_iff zmod_zadd_right_eq) |
220 apply (metis diff_add_cancel mod_pos_pos_trivial zadd_0 zadd_commute zmod_eq_0_iff mod_add_right_eq) |
221 done |
221 done |
222 |
222 |
223 lemma zcong_square_zless: |
223 lemma zcong_square_zless: |
224 "zprime p ==> 0 < a ==> a < p ==> |
224 "zprime p ==> 0 < a ==> a < p ==> |
225 [a * a = 1] (mod p) ==> a = 1 \<or> a = p - 1" |
225 [a * a = 1] (mod p) ==> a = 1 \<or> a = p - 1" |
235 done |
235 done |
236 |
236 |
237 lemma zcong_zless_0: |
237 lemma zcong_zless_0: |
238 "0 \<le> a ==> a < m ==> [a = 0] (mod m) ==> a = 0" |
238 "0 \<le> a ==> a < m ==> [a = 0] (mod m) ==> a = 0" |
239 apply (unfold zcong_def dvd_def, auto) |
239 apply (unfold zcong_def dvd_def, auto) |
240 apply (metis div_pos_pos_trivial linorder_not_less zdiv_zmult_self2 zle_refl zle_trans) |
240 apply (metis div_pos_pos_trivial linorder_not_less div_mult_self1_is_id zle_refl zle_trans) |
241 done |
241 done |
242 |
242 |
243 lemma zcong_zless_unique: |
243 lemma zcong_zless_unique: |
244 "0 < m ==> (\<exists>!b. 0 \<le> b \<and> b < m \<and> [a = b] (mod m))" |
244 "0 < m ==> (\<exists>!b. 0 \<le> b \<and> b < m \<and> [a = b] (mod m))" |
245 apply auto |
245 apply auto |
300 |
300 |
301 subsection {* Modulo *} |
301 subsection {* Modulo *} |
302 |
302 |
303 lemma zmod_zdvd_zmod: |
303 lemma zmod_zdvd_zmod: |
304 "0 < (m::int) ==> m dvd b ==> (a mod b mod m) = (a mod m)" |
304 "0 < (m::int) ==> m dvd b ==> (a mod b mod m) = (a mod m)" |
305 by (rule zmod_zmod_cancel) |
305 by (rule mod_mod_cancel) |
306 |
306 |
307 |
307 |
308 subsection {* Extended GCD *} |
308 subsection {* Extended GCD *} |
309 |
309 |
310 declare xzgcda.simps [simp del] |
310 declare xzgcda.simps [simp del] |