src/HOL/Rational.thy
changeset 29940 83b373f61d41
parent 29925 17d1e32ef867
child 30095 c6e184561159
child 30240 5b25fee0362c
equal deleted inserted replaced
29939:2138ff0ec94a 29940:83b373f61d41
   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