206 apply (rule equals_zero_I) |
206 apply (rule equals_zero_I) |
207 apply (simp add: right_distrib [symmetric]) |
207 apply (simp add: right_distrib [symmetric]) |
208 done |
208 done |
209 |
209 |
210 lemma minus_mult_minus [simp]: "(- a) * (- b) = a * (b::'a::ring)" |
210 lemma minus_mult_minus [simp]: "(- a) * (- b) = a * (b::'a::ring)" |
|
211 by (simp add: minus_mult_left [symmetric] minus_mult_right [symmetric]) |
|
212 |
|
213 lemma minus_mult_commute: "(- a) * b = a * (- b::'a::ring)" |
211 by (simp add: minus_mult_left [symmetric] minus_mult_right [symmetric]) |
214 by (simp add: minus_mult_left [symmetric] minus_mult_right [symmetric]) |
212 |
215 |
213 lemma right_diff_distrib: "a * (b - c) = a * b - a * (c::'a::ring)" |
216 lemma right_diff_distrib: "a * (b - c) = a * b - a * (c::'a::ring)" |
214 by (simp add: right_distrib diff_minus |
217 by (simp add: right_distrib diff_minus |
215 minus_mult_left [symmetric] minus_mult_right [symmetric]) |
218 minus_mult_left [symmetric] minus_mult_right [symmetric]) |
886 ==> inverse a + inverse b = (a+b) * inverse a * inverse (b::'a::field)" |
889 ==> inverse a + inverse b = (a+b) * inverse a * inverse (b::'a::field)" |
887 apply (simp add: left_distrib mult_assoc) |
890 apply (simp add: left_distrib mult_assoc) |
888 apply (simp add: mult_commute [of "inverse a"]) |
891 apply (simp add: mult_commute [of "inverse a"]) |
889 apply (simp add: mult_assoc [symmetric] add_commute) |
892 apply (simp add: mult_assoc [symmetric] add_commute) |
890 done |
893 done |
|
894 |
|
895 lemma inverse_divide [simp]: |
|
896 "inverse (a/b) = b / (a::'a::{field,division_by_zero})" |
|
897 by (simp add: divide_inverse_zero mult_commute) |
891 |
898 |
892 lemma nonzero_mult_divide_cancel_left: |
899 lemma nonzero_mult_divide_cancel_left: |
893 assumes [simp]: "b\<noteq>0" and [simp]: "c\<noteq>0" |
900 assumes [simp]: "b\<noteq>0" and [simp]: "c\<noteq>0" |
894 shows "(c*a)/(c*b) = a/(b::'a::field)" |
901 shows "(c*a)/(c*b) = a/(b::'a::field)" |
895 proof - |
902 proof - |
1137 "[|a < 0; b < 0|] |
1144 "[|a < 0; b < 0|] |
1138 ==> (inverse a \<le> inverse b) = (b \<le> (a::'a::ordered_field))" |
1145 ==> (inverse a \<le> inverse b) = (b \<le> (a::'a::ordered_field))" |
1139 by (blast intro: le_imp_inverse_le_neg dest: inverse_le_imp_le_neg) |
1146 by (blast intro: le_imp_inverse_le_neg dest: inverse_le_imp_le_neg) |
1140 |
1147 |
1141 |
1148 |
|
1149 subsection{*Inverses and the Number One*} |
|
1150 |
|
1151 lemma one_less_inverse_iff: |
|
1152 "(1 < inverse x) = (0 < x & x < (1::'a::{ordered_field,division_by_zero}))"proof cases |
|
1153 assume "0 < x" |
|
1154 with inverse_less_iff_less [OF zero_less_one, of x] |
|
1155 show ?thesis by simp |
|
1156 next |
|
1157 assume notless: "~ (0 < x)" |
|
1158 have "~ (1 < inverse x)" |
|
1159 proof |
|
1160 assume "1 < inverse x" |
|
1161 also with notless have "... \<le> 0" by (simp add: linorder_not_less) |
|
1162 also have "... < 1" by (rule zero_less_one) |
|
1163 finally show False by auto |
|
1164 qed |
|
1165 with notless show ?thesis by simp |
|
1166 qed |
|
1167 |
|
1168 lemma inverse_eq_1_iff [simp]: |
|
1169 "(inverse x = 1) = (x = (1::'a::{field,division_by_zero}))" |
|
1170 by (insert inverse_eq_iff_eq [of x 1], simp) |
|
1171 |
|
1172 lemma one_le_inverse_iff: |
|
1173 "(1 \<le> inverse x) = (0 < x & x \<le> (1::'a::{ordered_field,division_by_zero}))" |
|
1174 by (force simp add: order_le_less one_less_inverse_iff zero_less_one |
|
1175 eq_commute [of 1]) |
|
1176 |
|
1177 lemma inverse_less_1_iff: |
|
1178 "(inverse x < 1) = (x \<le> 0 | 1 < (x::'a::{ordered_field,division_by_zero}))" |
|
1179 by (simp add: linorder_not_le [symmetric] one_le_inverse_iff) |
|
1180 |
|
1181 lemma inverse_le_1_iff: |
|
1182 "(inverse x \<le> 1) = (x \<le> 0 | 1 \<le> (x::'a::{ordered_field,division_by_zero}))" |
|
1183 by (simp add: linorder_not_less [symmetric] one_less_inverse_iff) |
|
1184 |
|
1185 |
1142 subsection{*Division and Signs*} |
1186 subsection{*Division and Signs*} |
1143 |
1187 |
1144 lemma zero_less_divide_iff: |
1188 lemma zero_less_divide_iff: |
1145 "((0::'a::{ordered_field,division_by_zero}) < a/b) = (0 < a & 0 < b | a < 0 & b < 0)" |
1189 "((0::'a::{ordered_field,division_by_zero}) < a/b) = (0 < a & 0 < b | a < 0 & b < 0)" |
1146 by (simp add: divide_inverse_zero zero_less_mult_iff) |
1190 by (simp add: divide_inverse_zero zero_less_mult_iff) |
1410 done |
1454 done |
1411 |
1455 |
1412 |
1456 |
1413 subsection {* Ordered Fields are Dense *} |
1457 subsection {* Ordered Fields are Dense *} |
1414 |
1458 |
1415 lemma zero_less_two: "0 < (1+1::'a::ordered_field)" |
1459 lemma less_add_one: "a < (a+1::'a::ordered_semiring)" |
1416 proof - |
1460 proof - |
1417 have "0 + 0 < (1+1::'a::ordered_field)" |
1461 have "a+0 < (a+1::'a::ordered_semiring)" |
1418 by (blast intro: zero_less_one add_strict_mono) |
1462 by (blast intro: zero_less_one add_strict_left_mono) |
1419 thus ?thesis by simp |
1463 thus ?thesis by simp |
1420 qed |
1464 qed |
|
1465 |
|
1466 lemma zero_less_two: "0 < (1+1::'a::ordered_semiring)" |
|
1467 by (blast intro: order_less_trans zero_less_one less_add_one) |
1421 |
1468 |
1422 lemma less_half_sum: "a < b ==> a < (a+b) / (1+1::'a::ordered_field)" |
1469 lemma less_half_sum: "a < b ==> a < (a+b) / (1+1::'a::ordered_field)" |
1423 by (simp add: zero_less_two pos_less_divide_eq right_distrib) |
1470 by (simp add: zero_less_two pos_less_divide_eq right_distrib) |
1424 |
1471 |
1425 lemma gt_half_sum: "a < b ==> (a+b)/(1+1::'a::ordered_field) < b" |
1472 lemma gt_half_sum: "a < b ==> (a+b)/(1+1::'a::ordered_field) < b" |
1608 val combine_common_factor = thm"combine_common_factor"; |
1655 val combine_common_factor = thm"combine_common_factor"; |
1609 val minus_add_distrib = thm"minus_add_distrib"; |
1656 val minus_add_distrib = thm"minus_add_distrib"; |
1610 val minus_mult_left = thm"minus_mult_left"; |
1657 val minus_mult_left = thm"minus_mult_left"; |
1611 val minus_mult_right = thm"minus_mult_right"; |
1658 val minus_mult_right = thm"minus_mult_right"; |
1612 val minus_mult_minus = thm"minus_mult_minus"; |
1659 val minus_mult_minus = thm"minus_mult_minus"; |
|
1660 val minus_mult_commute = thm"minus_mult_commute"; |
1613 val right_diff_distrib = thm"right_diff_distrib"; |
1661 val right_diff_distrib = thm"right_diff_distrib"; |
1614 val left_diff_distrib = thm"left_diff_distrib"; |
1662 val left_diff_distrib = thm"left_diff_distrib"; |
1615 val minus_diff_eq = thm"minus_diff_eq"; |
1663 val minus_diff_eq = thm"minus_diff_eq"; |
1616 val add_left_mono = thm"add_left_mono"; |
1664 val add_left_mono = thm"add_left_mono"; |
1617 val add_right_mono = thm"add_right_mono"; |
1665 val add_right_mono = thm"add_right_mono"; |
1698 val right_inverse = thm"right_inverse"; |
1746 val right_inverse = thm"right_inverse"; |
1699 val right_inverse_eq = thm"right_inverse_eq"; |
1747 val right_inverse_eq = thm"right_inverse_eq"; |
1700 val nonzero_inverse_eq_divide = thm"nonzero_inverse_eq_divide"; |
1748 val nonzero_inverse_eq_divide = thm"nonzero_inverse_eq_divide"; |
1701 val divide_self = thm"divide_self"; |
1749 val divide_self = thm"divide_self"; |
1702 val divide_inverse_zero = thm"divide_inverse_zero"; |
1750 val divide_inverse_zero = thm"divide_inverse_zero"; |
|
1751 val inverse_divide = thm"inverse_divide"; |
1703 val divide_zero_left = thm"divide_zero_left"; |
1752 val divide_zero_left = thm"divide_zero_left"; |
1704 val inverse_eq_divide = thm"inverse_eq_divide"; |
1753 val inverse_eq_divide = thm"inverse_eq_divide"; |
1705 val nonzero_add_divide_distrib = thm"nonzero_add_divide_distrib"; |
1754 val nonzero_add_divide_distrib = thm"nonzero_add_divide_distrib"; |
1706 val add_divide_distrib = thm"add_divide_distrib"; |
1755 val add_divide_distrib = thm"add_divide_distrib"; |
1707 val field_mult_eq_0_iff = thm"field_mult_eq_0_iff"; |
1756 val field_mult_eq_0_iff = thm"field_mult_eq_0_iff"; |