158 lemma dvd_trans [trans]: |
158 lemma dvd_trans [trans]: |
159 assumes "a dvd b" and "b dvd c" |
159 assumes "a dvd b" and "b dvd c" |
160 shows "a dvd c" |
160 shows "a dvd c" |
161 proof - |
161 proof - |
162 from assms obtain v where "b = a * v" |
162 from assms obtain v where "b = a * v" |
163 by (auto elim!: dvdE) |
163 by auto |
164 moreover from assms obtain w where "c = b * w" |
164 moreover from assms obtain w where "c = b * w" |
165 by (auto elim!: dvdE) |
165 by auto |
166 ultimately have "c = a * (v * w)" |
166 ultimately have "c = a * (v * w)" |
167 by (simp add: mult.assoc) |
167 by (simp add: mult.assoc) |
168 then show ?thesis .. |
168 then show ?thesis .. |
169 qed |
169 qed |
170 |
170 |
173 |
173 |
174 lemma strict_subset_divisors_dvd: "{c. c dvd a} \<subset> {c. c dvd b} \<longleftrightarrow> a dvd b \<and> \<not> b dvd a" |
174 lemma strict_subset_divisors_dvd: "{c. c dvd a} \<subset> {c. c dvd b} \<longleftrightarrow> a dvd b \<and> \<not> b dvd a" |
175 by (auto simp add: subset_iff intro: dvd_trans) |
175 by (auto simp add: subset_iff intro: dvd_trans) |
176 |
176 |
177 lemma one_dvd [simp]: "1 dvd a" |
177 lemma one_dvd [simp]: "1 dvd a" |
178 by (auto intro!: dvdI) |
178 by (auto intro: dvdI) |
179 |
179 |
180 lemma dvd_mult [simp]: "a dvd c \<Longrightarrow> a dvd (b * c)" |
180 lemma dvd_mult [simp]: "a dvd (b * c)" if "a dvd c" |
181 by (auto intro!: mult.left_commute dvdI elim!: dvdE) |
181 using that by rule (auto intro: mult.left_commute dvdI) |
182 |
182 |
183 lemma dvd_mult2 [simp]: "a dvd b \<Longrightarrow> a dvd (b * c)" |
183 lemma dvd_mult2 [simp]: "a dvd (b * c)" if "a dvd b" |
184 using dvd_mult [of a b c] by (simp add: ac_simps) |
184 using that dvd_mult [of a b c] by (simp add: ac_simps) |
185 |
185 |
186 lemma dvd_triv_right [simp]: "a dvd b * a" |
186 lemma dvd_triv_right [simp]: "a dvd b * a" |
187 by (rule dvd_mult) (rule dvd_refl) |
187 by (rule dvd_mult) (rule dvd_refl) |
188 |
188 |
189 lemma dvd_triv_left [simp]: "a dvd a * b" |
189 lemma dvd_triv_left [simp]: "a dvd a * b" |
373 class comm_ring_1 = comm_ring + zero_neq_one + comm_monoid_mult |
373 class comm_ring_1 = comm_ring + zero_neq_one + comm_monoid_mult |
374 begin |
374 begin |
375 |
375 |
376 subclass ring_1 .. |
376 subclass ring_1 .. |
377 subclass comm_semiring_1_cancel |
377 subclass comm_semiring_1_cancel |
378 by unfold_locales (simp add: algebra_simps) |
378 by standard (simp add: algebra_simps) |
379 |
379 |
380 lemma dvd_minus_iff [simp]: "x dvd - y \<longleftrightarrow> x dvd y" |
380 lemma dvd_minus_iff [simp]: "x dvd - y \<longleftrightarrow> x dvd y" |
381 proof |
381 proof |
382 assume "x dvd - y" |
382 assume "x dvd - y" |
383 then have "x dvd - 1 * - y" by (rule dvd_mult) |
383 then have "x dvd - 1 * - y" by (rule dvd_mult) |
511 |
511 |
512 subclass semidom .. |
512 subclass semidom .. |
513 |
513 |
514 subclass ring_1_no_zero_divisors .. |
514 subclass ring_1_no_zero_divisors .. |
515 |
515 |
516 lemma dvd_mult_cancel_right [simp]: "a * c dvd b * c \<longleftrightarrow> c = 0 \<or> a dvd b" |
516 lemma dvd_mult_cancel_right [simp]: |
|
517 "a * c dvd b * c \<longleftrightarrow> c = 0 \<or> a dvd b" |
517 proof - |
518 proof - |
518 have "a * c dvd b * c \<longleftrightarrow> (\<exists>k. b * c = (a * k) * c)" |
519 have "a * c dvd b * c \<longleftrightarrow> (\<exists>k. b * c = (a * k) * c)" |
519 unfolding dvd_def by (simp add: ac_simps) |
520 by (auto simp add: ac_simps) |
520 also have "(\<exists>k. b * c = (a * k) * c) \<longleftrightarrow> c = 0 \<or> a dvd b" |
521 also have "(\<exists>k. b * c = (a * k) * c) \<longleftrightarrow> c = 0 \<or> a dvd b" |
521 unfolding dvd_def by simp |
522 by auto |
522 finally show ?thesis . |
523 finally show ?thesis . |
523 qed |
524 qed |
524 |
525 |
525 lemma dvd_mult_cancel_left [simp]: "c * a dvd c * b \<longleftrightarrow> c = 0 \<or> a dvd b" |
526 lemma dvd_mult_cancel_left [simp]: |
526 proof - |
527 "c * a dvd c * b \<longleftrightarrow> c = 0 \<or> a dvd b" |
527 have "c * a dvd c * b \<longleftrightarrow> (\<exists>k. b * c = (a * k) * c)" |
528 using dvd_mult_cancel_right [of a c b] by (simp add: ac_simps) |
528 unfolding dvd_def by (simp add: ac_simps) |
|
529 also have "(\<exists>k. b * c = (a * k) * c) \<longleftrightarrow> c = 0 \<or> a dvd b" |
|
530 unfolding dvd_def by simp |
|
531 finally show ?thesis . |
|
532 qed |
|
533 |
529 |
534 lemma square_eq_iff: "a * a = b * b \<longleftrightarrow> a = b \<or> a = - b" |
530 lemma square_eq_iff: "a * a = b * b \<longleftrightarrow> a = b \<or> a = - b" |
535 proof |
531 proof |
536 assume "a * a = b * b" |
532 assume "a * a = b * b" |
537 then have "(a - b) * (a + b) = 0" |
533 then have "(a - b) * (a + b) = 0" |
903 case True |
899 case True |
904 with assms show ?thesis by simp |
900 with assms show ?thesis by simp |
905 next |
901 next |
906 case False |
902 case False |
907 moreover from assms obtain k l where "b = a * k" and "c = a * l" |
903 moreover from assms obtain k l where "b = a * k" and "c = a * l" |
908 by (auto elim!: dvdE) |
904 by blast |
909 ultimately show ?thesis by simp |
905 ultimately show ?thesis by simp |
910 qed |
906 qed |
911 |
907 |
912 lemma div_add [simp]: |
908 lemma div_add [simp]: |
913 assumes "c dvd a" and "c dvd b" |
909 assumes "c dvd a" and "c dvd b" |
916 case True |
912 case True |
917 then show ?thesis by simp |
913 then show ?thesis by simp |
918 next |
914 next |
919 case False |
915 case False |
920 moreover from assms obtain k l where "a = c * k" and "b = c * l" |
916 moreover from assms obtain k l where "a = c * k" and "b = c * l" |
921 by (auto elim!: dvdE) |
917 by blast |
922 moreover have "c * k + c * l = c * (k + l)" |
918 moreover have "c * k + c * l = c * (k + l)" |
923 by (simp add: algebra_simps) |
919 by (simp add: algebra_simps) |
924 ultimately show ?thesis |
920 ultimately show ?thesis |
925 by simp |
921 by simp |
926 qed |
922 qed |
932 case True |
928 case True |
933 with assms show ?thesis by auto |
929 with assms show ?thesis by auto |
934 next |
930 next |
935 case False |
931 case False |
936 moreover from assms obtain k l where "a = b * k" and "c = d * l" |
932 moreover from assms obtain k l where "a = b * k" and "c = d * l" |
937 by (auto elim!: dvdE) |
933 by blast |
938 moreover have "b * k * (d * l) div (b * d) = (b * d) * (k * l) div (b * d)" |
934 moreover have "b * k * (d * l) div (b * d) = (b * d) * (k * l) div (b * d)" |
939 by (simp add: ac_simps) |
935 by (simp add: ac_simps) |
940 ultimately show ?thesis by simp |
936 ultimately show ?thesis by simp |
941 qed |
937 qed |
942 |
938 |
949 then show ?lhs by (simp add: assms) |
945 then show ?lhs by (simp add: assms) |
950 next |
946 next |
951 assume ?lhs |
947 assume ?lhs |
952 then have "b div a * a = c * a" by simp |
948 then have "b div a * a = c * a" by simp |
953 moreover from assms have "b div a * a = b" |
949 moreover from assms have "b div a * a = b" |
954 by (auto elim!: dvdE simp add: ac_simps) |
950 by (auto simp add: ac_simps) |
955 ultimately show ?rhs by simp |
951 ultimately show ?rhs by simp |
956 qed |
952 qed |
957 |
953 |
958 lemma dvd_div_mult_self [simp]: "a dvd b \<Longrightarrow> b div a * a = b" |
954 lemma dvd_div_mult_self [simp]: "a dvd b \<Longrightarrow> b div a * a = b" |
959 by (cases "a = 0") (auto elim: dvdE simp add: ac_simps) |
955 by (cases "a = 0") (auto simp add: ac_simps) |
960 |
956 |
961 lemma dvd_mult_div_cancel [simp]: "a dvd b \<Longrightarrow> a * (b div a) = b" |
957 lemma dvd_mult_div_cancel [simp]: "a dvd b \<Longrightarrow> a * (b div a) = b" |
962 using dvd_div_mult_self [of a b] by (simp add: ac_simps) |
958 using dvd_div_mult_self [of a b] by (simp add: ac_simps) |
963 |
959 |
964 lemma div_mult_swap: |
960 lemma div_mult_swap: |