src/HOL/Number_Theory/Cong.thy
changeset 66837 6ba663ff2b1c
parent 66817 0b12755ccbb2
child 66888 930abfdf8727
equal deleted inserted replaced
66836:4eb431c3f974 66837:6ba663ff2b1c
   316   for a m :: int
   316   for a m :: int
   317   by (auto simp: cong_int_def)  (metis mod_mod_trivial pos_mod_conj)
   317   by (auto simp: cong_int_def)  (metis mod_mod_trivial pos_mod_conj)
   318 
   318 
   319 lemma cong_iff_lin_int: "[a = b] (mod m) \<longleftrightarrow> (\<exists>k. b = a + m * k)"
   319 lemma cong_iff_lin_int: "[a = b] (mod m) \<longleftrightarrow> (\<exists>k. b = a + m * k)"
   320   for a b :: int
   320   for a b :: int
   321   apply (auto simp add: cong_altdef_int dvd_def)
   321   by (auto simp add: cong_altdef_int algebra_simps elim!: dvdE)
   322   apply (rule_tac [!] x = "-k" in exI, auto)
   322     (simp add: distrib_right [symmetric] add_eq_0_iff)
   323   done
       
   324 
   323 
   325 lemma cong_iff_lin_nat: "([a = b] (mod m)) \<longleftrightarrow> (\<exists>k1 k2. b + k1 * m = a + k2 * m)"
   324 lemma cong_iff_lin_nat: "([a = b] (mod m)) \<longleftrightarrow> (\<exists>k1 k2. b + k1 * m = a + k2 * m)"
   326   (is "?lhs = ?rhs")
   325   (is "?lhs = ?rhs")
   327   for a b :: nat
   326   for a b :: nat
   328 proof
   327 proof
   510   by (metis add.right_neutral cong_0_1_nat cong_iff_lin_nat cong_to_1_nat
   509   by (metis add.right_neutral cong_0_1_nat cong_iff_lin_nat cong_to_1_nat
   511       dvd_div_mult_self leI le_add_diff_inverse less_one mult_eq_if)
   510       dvd_div_mult_self leI le_add_diff_inverse less_one mult_eq_if)
   512 
   511 
   513 lemma cong_le_nat: "y \<le> x \<Longrightarrow> [x = y] (mod n) \<longleftrightarrow> (\<exists>q. x = q * n + y)"
   512 lemma cong_le_nat: "y \<le> x \<Longrightarrow> [x = y] (mod n) \<longleftrightarrow> (\<exists>q. x = q * n + y)"
   514   for x y :: nat
   513   for x y :: nat
   515   by (metis cong_altdef_nat Nat.le_imp_diff_is_add dvd_def mult.commute)
   514   by (auto simp add: cong_altdef_nat le_imp_diff_is_add elim!: dvdE)
   516 
   515 
   517 lemma cong_solve_nat:
   516 lemma cong_solve_nat:
   518   fixes a :: nat
   517   fixes a :: nat
   519   assumes "a \<noteq> 0"
   518   assumes "a \<noteq> 0"
   520   shows "\<exists>x. [a * x = gcd a n] (mod n)"
   519   shows "\<exists>x. [a * x = gcd a n] (mod n)"