488 shows "divmod m n = (Suc ((m - n) div n), (m - n) mod n)" |
488 shows "divmod m n = (Suc ((m - n) div n), (m - n) mod n)" |
489 proof - |
489 proof - |
490 from divmod_rel have divmod_m_n: "divmod_rel m n (m div n) (m mod n)" . |
490 from divmod_rel have divmod_m_n: "divmod_rel m n (m div n) (m mod n)" . |
491 with assms have m_div_n: "m div n \<ge> 1" |
491 with assms have m_div_n: "m div n \<ge> 1" |
492 by (cases "m div n") (auto simp add: divmod_rel_def) |
492 by (cases "m div n") (auto simp add: divmod_rel_def) |
493 from assms divmod_m_n have "divmod_rel (m - n) n (m div n - 1) (m mod n)" |
493 from assms divmod_m_n have "divmod_rel (m - n) n (m div n - Suc 0) (m mod n)" |
494 by (cases "m div n") (auto simp add: divmod_rel_def) |
494 by (cases "m div n") (auto simp add: divmod_rel_def) |
495 with divmod_eq have "divmod (m - n) n = (m div n - 1, m mod n)" by simp |
495 with divmod_eq have "divmod (m - n) n = (m div n - Suc 0, m mod n)" by simp |
496 moreover from divmod_div_mod have "divmod (m - n) n = ((m - n) div n, (m - n) mod n)" . |
496 moreover from divmod_div_mod have "divmod (m - n) n = ((m - n) div n, (m - n) mod n)" . |
497 ultimately have "m div n = Suc ((m - n) div n)" |
497 ultimately have "m div n = Suc ((m - n) div n)" |
498 and "m mod n = (m - n) mod n" using m_div_n by simp_all |
498 and "m mod n = (m - n) mod n" using m_div_n by simp_all |
499 then show ?thesis using divmod_div_mod by simp |
499 then show ?thesis using divmod_div_mod by simp |
500 qed |
500 qed |
812 |
812 |
813 lemma dvd_1_left [iff]: "Suc 0 dvd k" |
813 lemma dvd_1_left [iff]: "Suc 0 dvd k" |
814 unfolding dvd_def by simp |
814 unfolding dvd_def by simp |
815 |
815 |
816 lemma dvd_1_iff_1 [simp]: "(m dvd Suc 0) = (m = Suc 0)" |
816 lemma dvd_1_iff_1 [simp]: "(m dvd Suc 0) = (m = Suc 0)" |
|
817 by (simp add: dvd_def) |
|
818 |
|
819 lemma nat_dvd_1_iff_1 [simp]: "m dvd (1::nat) \<longleftrightarrow> m = 1" |
817 by (simp add: dvd_def) |
820 by (simp add: dvd_def) |
818 |
821 |
819 lemma dvd_anti_sym: "[| m dvd n; n dvd m |] ==> m = (n::nat)" |
822 lemma dvd_anti_sym: "[| m dvd n; n dvd m |] ==> m = (n::nat)" |
820 unfolding dvd_def |
823 unfolding dvd_def |
821 by (force dest: mult_eq_self_implies_10 simp add: mult_assoc mult_eq_1_iff) |
824 by (force dest: mult_eq_self_implies_10 simp add: mult_assoc mult_eq_1_iff) |