equal
deleted
inserted
replaced
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)" |