729 end |
729 end |
730 |
730 |
731 class idom_divide = idom + semidom_divide |
731 class idom_divide = idom + semidom_divide |
732 begin |
732 begin |
733 |
733 |
734 lemma dvd_neg_div': |
734 lemma dvd_neg_div: |
735 assumes "b dvd a" |
735 assumes "b dvd a" |
736 shows "- a div b = - (a div b)" |
736 shows "- a div b = - (a div b)" |
737 proof (cases "b = 0") |
737 proof (cases "b = 0") |
738 case True |
738 case True |
739 then show ?thesis by simp |
739 then show ?thesis by simp |
740 next |
740 next |
741 case False |
741 case False |
742 from assms obtain c where "a = b * c" .. |
742 from assms obtain c where "a = b * c" .. |
743 moreover from False have "b * - c div b = - (b * c div b)" |
743 then have "- a div b = (b * - c) div b" |
744 using nonzero_mult_div_cancel_left [of b "- c"] |
744 by simp |
745 by simp |
745 from False also have "\<dots> = - c" |
746 ultimately show ?thesis |
746 by (rule nonzero_mult_div_cancel_left) |
|
747 with False \<open>a = b * c\<close> show ?thesis |
|
748 by simp |
|
749 qed |
|
750 |
|
751 lemma dvd_div_neg: |
|
752 assumes "b dvd a" |
|
753 shows "a div - b = - (a div b)" |
|
754 proof (cases "b = 0") |
|
755 case True |
|
756 then show ?thesis by simp |
|
757 next |
|
758 case False |
|
759 then have "- b \<noteq> 0" |
|
760 by simp |
|
761 from assms obtain c where "a = b * c" .. |
|
762 then have "a div - b = (- b * - c) div - b" |
|
763 by simp |
|
764 from \<open>- b \<noteq> 0\<close> also have "\<dots> = - c" |
|
765 by (rule nonzero_mult_div_cancel_left) |
|
766 with False \<open>a = b * c\<close> show ?thesis |
747 by simp |
767 by simp |
748 qed |
768 qed |
749 |
769 |
750 end |
770 end |
751 |
771 |
912 next |
932 next |
913 case False |
933 case False |
914 from \<open>a * c dvd b\<close> obtain d where "b = a * c * d" .. |
934 from \<open>a * c dvd b\<close> obtain d where "b = a * c * d" .. |
915 with False show ?thesis |
935 with False show ?thesis |
916 by (simp add: mult.commute [of a] mult.assoc) |
936 by (simp add: mult.commute [of a] mult.assoc) |
|
937 qed |
|
938 |
|
939 lemma div_div_eq_right: |
|
940 assumes "c dvd b" "b dvd a" |
|
941 shows "a div (b div c) = a div b * c" |
|
942 proof (cases "c = 0 \<or> b = 0") |
|
943 case True |
|
944 then show ?thesis |
|
945 by auto |
|
946 next |
|
947 case False |
|
948 from assms obtain r s where "b = c * r" and "a = c * r * s" |
|
949 by (blast elim: dvdE) |
|
950 moreover with False have "r \<noteq> 0" |
|
951 by auto |
|
952 ultimately show ?thesis using False |
|
953 by simp (simp add: mult.commute [of _ r] mult.assoc mult.commute [of c]) |
|
954 qed |
|
955 |
|
956 lemma div_div_div_same: |
|
957 assumes "d dvd b" "b dvd a" |
|
958 shows "(a div d) div (b div d) = a div b" |
|
959 proof (cases "b = 0 \<or> d = 0") |
|
960 case True |
|
961 with assms show ?thesis |
|
962 by auto |
|
963 next |
|
964 case False |
|
965 from assms obtain r s |
|
966 where "a = d * r * s" and "b = d * r" |
|
967 by (blast elim: dvdE) |
|
968 with False show ?thesis |
|
969 by simp (simp add: ac_simps) |
917 qed |
970 qed |
918 |
971 |
919 |
972 |
920 text \<open>Units: invertible elements in a ring\<close> |
973 text \<open>Units: invertible elements in a ring\<close> |
921 |
974 |