src/HOL/NumberTheory/IntPrimes.thy
changeset 30034 60f64f112174
parent 29948 cdf12a1cb963
child 30042 31039ee583fa
equal deleted inserted replaced
30031:bd786c37af84 30034:60f64f112174
   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]