equal
deleted
inserted
replaced
125 moreover from assms obtain w where "c = b * w" by (auto elim!: dvdE) |
125 moreover from assms obtain w where "c = b * w" by (auto elim!: dvdE) |
126 ultimately have "c = a * (v * w)" by (simp add: mult_assoc) |
126 ultimately have "c = a * (v * w)" by (simp add: mult_assoc) |
127 then show ?thesis .. |
127 then show ?thesis .. |
128 qed |
128 qed |
129 |
129 |
130 lemma dvd_0_left_iff [noatp, simp]: "0 dvd a \<longleftrightarrow> a = 0" |
130 lemma dvd_0_left_iff [no_atp, simp]: "0 dvd a \<longleftrightarrow> a = 0" |
131 by (auto intro: dvd_refl elim!: dvdE) |
131 by (auto intro: dvd_refl elim!: dvdE) |
132 |
132 |
133 lemma dvd_0_right [iff]: "a dvd 0" |
133 lemma dvd_0_right [iff]: "a dvd 0" |
134 proof |
134 proof |
135 show "0 = a * 0" by simp |
135 show "0 = a * 0" by simp |
219 |
219 |
220 lemma minus_mult_right: "- (a * b) = a * - b" |
220 lemma minus_mult_right: "- (a * b) = a * - b" |
221 by (rule minus_unique) (simp add: right_distrib [symmetric]) |
221 by (rule minus_unique) (simp add: right_distrib [symmetric]) |
222 |
222 |
223 text{*Extract signs from products*} |
223 text{*Extract signs from products*} |
224 lemmas mult_minus_left [simp, noatp] = minus_mult_left [symmetric] |
224 lemmas mult_minus_left [simp, no_atp] = minus_mult_left [symmetric] |
225 lemmas mult_minus_right [simp,noatp] = minus_mult_right [symmetric] |
225 lemmas mult_minus_right [simp,no_atp] = minus_mult_right [symmetric] |
226 |
226 |
227 lemma minus_mult_minus [simp]: "- a * - b = a * b" |
227 lemma minus_mult_minus [simp]: "- a * - b = a * b" |
228 by simp |
228 by simp |
229 |
229 |
230 lemma minus_mult_commute: "- a * b = a * - b" |
230 lemma minus_mult_commute: "- a * b = a * - b" |
234 by (simp add: right_distrib diff_minus) |
234 by (simp add: right_distrib diff_minus) |
235 |
235 |
236 lemma left_diff_distrib[algebra_simps]: "(a - b) * c = a * c - b * c" |
236 lemma left_diff_distrib[algebra_simps]: "(a - b) * c = a * c - b * c" |
237 by (simp add: left_distrib diff_minus) |
237 by (simp add: left_distrib diff_minus) |
238 |
238 |
239 lemmas ring_distribs[noatp] = |
239 lemmas ring_distribs[no_atp] = |
240 right_distrib left_distrib left_diff_distrib right_diff_distrib |
240 right_distrib left_distrib left_diff_distrib right_diff_distrib |
241 |
241 |
242 text{*Legacy - use @{text algebra_simps} *} |
242 text{*Legacy - use @{text algebra_simps} *} |
243 lemmas ring_simps[noatp] = algebra_simps |
243 lemmas ring_simps[no_atp] = algebra_simps |
244 |
244 |
245 lemma eq_add_iff1: |
245 lemma eq_add_iff1: |
246 "a * e + c = b * e + d \<longleftrightarrow> (a - b) * e + c = d" |
246 "a * e + c = b * e + d \<longleftrightarrow> (a - b) * e + c = d" |
247 by (simp add: algebra_simps) |
247 by (simp add: algebra_simps) |
248 |
248 |
250 "a * e + c = b * e + d \<longleftrightarrow> c = (b - a) * e + d" |
250 "a * e + c = b * e + d \<longleftrightarrow> c = (b - a) * e + d" |
251 by (simp add: algebra_simps) |
251 by (simp add: algebra_simps) |
252 |
252 |
253 end |
253 end |
254 |
254 |
255 lemmas ring_distribs[noatp] = |
255 lemmas ring_distribs[no_atp] = |
256 right_distrib left_distrib left_diff_distrib right_diff_distrib |
256 right_distrib left_distrib left_diff_distrib right_diff_distrib |
257 |
257 |
258 class comm_ring = comm_semiring + ab_group_add |
258 class comm_ring = comm_semiring + ab_group_add |
259 begin |
259 begin |
260 |
260 |
317 next |
317 next |
318 case True then show ?thesis by auto |
318 case True then show ?thesis by auto |
319 qed |
319 qed |
320 |
320 |
321 text{*Cancellation of equalities with a common factor*} |
321 text{*Cancellation of equalities with a common factor*} |
322 lemma mult_cancel_right [simp, noatp]: |
322 lemma mult_cancel_right [simp, no_atp]: |
323 "a * c = b * c \<longleftrightarrow> c = 0 \<or> a = b" |
323 "a * c = b * c \<longleftrightarrow> c = 0 \<or> a = b" |
324 proof - |
324 proof - |
325 have "(a * c = b * c) = ((a - b) * c = 0)" |
325 have "(a * c = b * c) = ((a - b) * c = 0)" |
326 by (simp add: algebra_simps) |
326 by (simp add: algebra_simps) |
327 thus ?thesis by (simp add: disj_commute) |
327 thus ?thesis by (simp add: disj_commute) |
328 qed |
328 qed |
329 |
329 |
330 lemma mult_cancel_left [simp, noatp]: |
330 lemma mult_cancel_left [simp, no_atp]: |
331 "c * a = c * b \<longleftrightarrow> c = 0 \<or> a = b" |
331 "c * a = c * b \<longleftrightarrow> c = 0 \<or> a = b" |
332 proof - |
332 proof - |
333 have "(c * a = c * b) = (c * (a - b) = 0)" |
333 have "(c * a = c * b) = (c * (a - b) = 0)" |
334 by (simp add: algebra_simps) |
334 by (simp add: algebra_simps) |
335 thus ?thesis by simp |
335 thus ?thesis by simp |
741 begin |
741 begin |
742 |
742 |
743 subclass ordered_ab_group_add .. |
743 subclass ordered_ab_group_add .. |
744 |
744 |
745 text{*Legacy - use @{text algebra_simps} *} |
745 text{*Legacy - use @{text algebra_simps} *} |
746 lemmas ring_simps[noatp] = algebra_simps |
746 lemmas ring_simps[no_atp] = algebra_simps |
747 |
747 |
748 lemma less_add_iff1: |
748 lemma less_add_iff1: |
749 "a * e + c < b * e + d \<longleftrightarrow> (a - b) * e + c < d" |
749 "a * e + c < b * e + d \<longleftrightarrow> (a - b) * e + c < d" |
750 by (simp add: algebra_simps) |
750 by (simp add: algebra_simps) |
751 |
751 |
948 by (auto simp: mult_less_cancel_left) |
948 by (auto simp: mult_less_cancel_left) |
949 |
949 |
950 end |
950 end |
951 |
951 |
952 text{*Legacy - use @{text algebra_simps} *} |
952 text{*Legacy - use @{text algebra_simps} *} |
953 lemmas ring_simps[noatp] = algebra_simps |
953 lemmas ring_simps[no_atp] = algebra_simps |
954 |
954 |
955 lemmas mult_sign_intros = |
955 lemmas mult_sign_intros = |
956 mult_nonneg_nonneg mult_nonneg_nonpos |
956 mult_nonneg_nonneg mult_nonneg_nonpos |
957 mult_nonpos_nonneg mult_nonpos_nonpos |
957 mult_nonpos_nonneg mult_nonpos_nonpos |
958 mult_pos_pos mult_pos_neg |
958 mult_pos_pos mult_pos_neg |
1097 |
1097 |
1098 end |
1098 end |
1099 |
1099 |
1100 text {* Simprules for comparisons where common factors can be cancelled. *} |
1100 text {* Simprules for comparisons where common factors can be cancelled. *} |
1101 |
1101 |
1102 lemmas mult_compare_simps[noatp] = |
1102 lemmas mult_compare_simps[no_atp] = |
1103 mult_le_cancel_right mult_le_cancel_left |
1103 mult_le_cancel_right mult_le_cancel_left |
1104 mult_le_cancel_right1 mult_le_cancel_right2 |
1104 mult_le_cancel_right1 mult_le_cancel_right2 |
1105 mult_le_cancel_left1 mult_le_cancel_left2 |
1105 mult_le_cancel_left1 mult_le_cancel_left2 |
1106 mult_less_cancel_right mult_less_cancel_left |
1106 mult_less_cancel_right mult_less_cancel_left |
1107 mult_less_cancel_right1 mult_less_cancel_right2 |
1107 mult_less_cancel_right1 mult_less_cancel_right2 |
1178 hence cpos: "0<c" by (blast intro: order_le_less_trans abs_ge_zero) |
1178 hence cpos: "0<c" by (blast intro: order_le_less_trans abs_ge_zero) |
1179 assume "abs b < d" |
1179 assume "abs b < d" |
1180 thus ?thesis by (simp add: ac cpos mult_strict_mono) |
1180 thus ?thesis by (simp add: ac cpos mult_strict_mono) |
1181 qed |
1181 qed |
1182 |
1182 |
1183 lemmas eq_minus_self_iff[noatp] = equal_neg_zero |
1183 lemmas eq_minus_self_iff[no_atp] = equal_neg_zero |
1184 |
1184 |
1185 lemma less_minus_self_iff: "(a < -a) = (a < (0::'a::linordered_idom))" |
1185 lemma less_minus_self_iff: "(a < -a) = (a < (0::'a::linordered_idom))" |
1186 unfolding order_less_le less_eq_neg_nonpos equal_neg_zero .. |
1186 unfolding order_less_le less_eq_neg_nonpos equal_neg_zero .. |
1187 |
1187 |
1188 lemma abs_less_iff: "(abs a < b) = (a < b & -a < (b::'a::linordered_idom))" |
1188 lemma abs_less_iff: "(abs a < b) = (a < b & -a < (b::'a::linordered_idom))" |