884 also have "\<dots> \<longleftrightarrow> a * \<bar>d\<bar> * sgn b < c * \<bar>b\<bar> * sgn d" |
884 also have "\<dots> \<longleftrightarrow> a * \<bar>d\<bar> * sgn b < c * \<bar>b\<bar> * sgn d" |
885 by (simp add: abs_sgn mult_ac) |
885 by (simp add: abs_sgn mult_ac) |
886 finally show ?thesis using assms by simp |
886 finally show ?thesis using assms by simp |
887 qed |
887 qed |
888 |
888 |
|
889 lemma (in ordered_idom) sgn_greater [simp]: |
|
890 "0 < sgn a \<longleftrightarrow> 0 < a" |
|
891 unfolding sgn_if by auto |
|
892 |
|
893 lemma (in ordered_idom) sgn_less [simp]: |
|
894 "sgn a < 0 \<longleftrightarrow> a < 0" |
|
895 unfolding sgn_if by auto |
|
896 |
|
897 lemma rat_le_eq_code [code]: |
|
898 "Fract a b < Fract c d \<longleftrightarrow> (if b = 0 |
|
899 then sgn c * sgn d > 0 |
|
900 else if d = 0 |
|
901 then sgn a * sgn b < 0 |
|
902 else a * \<bar>d\<bar> * sgn b < c * \<bar>b\<bar> * sgn d)" |
|
903 by (auto simp add: sgn_times mult_less_0_iff zero_less_mult_iff less_rat' eq_rat simp del: less_rat) |
|
904 |
889 lemma rat_less_eq_code [code]: |
905 lemma rat_less_eq_code [code]: |
890 "Fract a b \<le> Fract c d \<longleftrightarrow> (if b = 0 |
906 "Fract a b \<le> Fract c d \<longleftrightarrow> (if b = 0 |
891 then sgn c * sgn d \<ge> 0 |
907 then sgn c * sgn d \<ge> 0 |
892 else if d = 0 |
908 else if d = 0 |
893 then sgn a * sgn b \<le> 0 |
909 then sgn a * sgn b \<le> 0 |
894 else a * \<bar>d\<bar> * sgn b \<le> c * \<bar>b\<bar> * sgn d)" |
910 else a * \<bar>d\<bar> * sgn b \<le> c * \<bar>b\<bar> * sgn d)" |
895 by (auto simp add: sgn_times mult_le_0_iff zero_le_mult_iff le_rat' eq_rat simp del: le_rat) |
911 by (auto simp add: sgn_times mult_le_0_iff zero_le_mult_iff le_rat' eq_rat simp del: le_rat) |
896 (auto simp add: sgn_times sgn_0_0 le_less sgn_1_pos [symmetric] sgn_1_neg [symmetric]) |
912 (auto simp add: le_less not_less sgn_0_0) |
897 |
913 |
898 lemma rat_le_eq_code [code]: |
|
899 "Fract a b < Fract c d \<longleftrightarrow> (if b = 0 |
|
900 then sgn c * sgn d > 0 |
|
901 else if d = 0 |
|
902 then sgn a * sgn b < 0 |
|
903 else a * \<bar>d\<bar> * sgn b < c * \<bar>b\<bar> * sgn d)" |
|
904 by (auto simp add: sgn_times mult_less_0_iff zero_less_mult_iff less_rat' eq_rat simp del: less_rat) |
|
905 (auto simp add: sgn_times sgn_0_0 sgn_1_pos [symmetric] sgn_1_neg [symmetric], |
|
906 auto simp add: sgn_1_pos) |
|
907 |
914 |
908 lemma rat_plus_code [code]: |
915 lemma rat_plus_code [code]: |
909 "Fract a b + Fract c d = (if b = 0 |
916 "Fract a b + Fract c d = (if b = 0 |
910 then Fract c d |
917 then Fract c d |
911 else if d = 0 |
918 else if d = 0 |