src/HOL/Ring_and_Field.thy
changeset 30240 5b25fee0362c
parent 29949 20a506b8256d
child 30242 aea5d7fa7ef5
equal deleted inserted replaced
30239:179ff9cb160b 30240:5b25fee0362c
   145 qed
   145 qed
   146 
   146 
   147 lemma one_dvd [simp]: "1 dvd a"
   147 lemma one_dvd [simp]: "1 dvd a"
   148 by (auto intro!: dvdI)
   148 by (auto intro!: dvdI)
   149 
   149 
   150 lemma dvd_mult: "a dvd c \<Longrightarrow> a dvd (b * c)"
   150 lemma dvd_mult[simp]: "a dvd c \<Longrightarrow> a dvd (b * c)"
   151 by (auto intro!: mult_left_commute dvdI elim!: dvdE)
   151 by (auto intro!: mult_left_commute dvdI elim!: dvdE)
   152 
   152 
   153 lemma dvd_mult2: "a dvd b \<Longrightarrow> a dvd (b * c)"
   153 lemma dvd_mult2[simp]: "a dvd b \<Longrightarrow> a dvd (b * c)"
   154   apply (subst mult_commute)
   154   apply (subst mult_commute)
   155   apply (erule dvd_mult)
   155   apply (erule dvd_mult)
   156   done
   156   done
   157 
   157 
   158 lemma dvd_triv_right [simp]: "a dvd b * a"
   158 lemma dvd_triv_right [simp]: "a dvd b * a"
   160 
   160 
   161 lemma dvd_triv_left [simp]: "a dvd a * b"
   161 lemma dvd_triv_left [simp]: "a dvd a * b"
   162 by (rule dvd_mult2) (rule dvd_refl)
   162 by (rule dvd_mult2) (rule dvd_refl)
   163 
   163 
   164 lemma mult_dvd_mono:
   164 lemma mult_dvd_mono:
   165   assumes ab: "a dvd b"
   165   assumes "a dvd b"
   166     and "cd": "c dvd d"
   166     and "c dvd d"
   167   shows "a * c dvd b * d"
   167   shows "a * c dvd b * d"
   168 proof -
   168 proof -
   169   from ab obtain b' where "b = a * b'" ..
   169   from `a dvd b` obtain b' where "b = a * b'" ..
   170   moreover from "cd" obtain d' where "d = c * d'" ..
   170   moreover from `c dvd d` obtain d' where "d = c * d'" ..
   171   ultimately have "b * d = (a * c) * (b' * d')" by (simp add: mult_ac)
   171   ultimately have "b * d = (a * c) * (b' * d')" by (simp add: mult_ac)
   172   then show ?thesis ..
   172   then show ?thesis ..
   173 qed
   173 qed
   174 
   174 
   175 lemma dvd_mult_left: "a * b dvd c \<Longrightarrow> a dvd c"
   175 lemma dvd_mult_left: "a * b dvd c \<Longrightarrow> a dvd c"
   308   then obtain k where "y = x * k" ..
   308   then obtain k where "y = x * k" ..
   309   then have "y = - x * - k" by simp
   309   then have "y = - x * - k" by simp
   310   then show "- x dvd y" ..
   310   then show "- x dvd y" ..
   311 qed
   311 qed
   312 
   312 
   313 lemma dvd_diff: "x dvd y \<Longrightarrow> x dvd z \<Longrightarrow> x dvd (y - z)"
   313 lemma dvd_diff[simp]: "x dvd y \<Longrightarrow> x dvd z \<Longrightarrow> x dvd (y - z)"
   314 by (simp add: diff_minus dvd_add dvd_minus_iff)
   314 by (simp add: diff_minus dvd_minus_iff)
   315 
   315 
   316 end
   316 end
   317 
   317 
   318 class ring_no_zero_divisors = ring + no_zero_divisors
   318 class ring_no_zero_divisors = ring + no_zero_divisors
   319 begin
   319 begin
   380   then show "a = b \<or> a = - b"
   380   then show "a = b \<or> a = - b"
   381     by (simp add: right_minus_eq eq_neg_iff_add_eq_0)
   381     by (simp add: right_minus_eq eq_neg_iff_add_eq_0)
   382 next
   382 next
   383   assume "a = b \<or> a = - b"
   383   assume "a = b \<or> a = - b"
   384   then show "a * a = b * b" by auto
   384   then show "a * a = b * b" by auto
       
   385 qed
       
   386 
       
   387 lemma dvd_mult_cancel_right [simp]:
       
   388   "a * c dvd b * c \<longleftrightarrow> c = 0 \<or> a dvd b"
       
   389 proof -
       
   390   have "a * c dvd b * c \<longleftrightarrow> (\<exists>k. b * c = (a * k) * c)"
       
   391     unfolding dvd_def by (simp add: mult_ac)
       
   392   also have "(\<exists>k. b * c = (a * k) * c) \<longleftrightarrow> c = 0 \<or> a dvd b"
       
   393     unfolding dvd_def by simp
       
   394   finally show ?thesis .
       
   395 qed
       
   396 
       
   397 lemma dvd_mult_cancel_left [simp]:
       
   398   "c * a dvd c * b \<longleftrightarrow> c = 0 \<or> a dvd b"
       
   399 proof -
       
   400   have "c * a dvd c * b \<longleftrightarrow> (\<exists>k. b * c = (a * k) * c)"
       
   401     unfolding dvd_def by (simp add: mult_ac)
       
   402   also have "(\<exists>k. b * c = (a * k) * c) \<longleftrightarrow> c = 0 \<or> a dvd b"
       
   403     unfolding dvd_def by simp
       
   404   finally show ?thesis .
   385 qed
   405 qed
   386 
   406 
   387 end
   407 end
   388 
   408 
   389 class division_ring = ring_1 + inverse +
   409 class division_ring = ring_1 + inverse +