src/HOL/Rings.thy
changeset 64592 7759f1766189
parent 64591 240a39af9ec4
child 64713 9638c07283bc
equal deleted inserted replaced
64591:240a39af9ec4 64592:7759f1766189
   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