src/HOL/Rational.thy
changeset 29332 edc1e2a56398
parent 28952 15a4b2cf8c34
child 29667 53103fc8ffa3
equal deleted inserted replaced
29252:ea97aa6aeba2 29332:edc1e2a56398
   849 qed
   849 qed
   850 
   850 
   851 definition Fract_norm :: "int \<Rightarrow> int \<Rightarrow> rat" where
   851 definition Fract_norm :: "int \<Rightarrow> int \<Rightarrow> rat" where
   852   [simp, code del]: "Fract_norm a b = Fract a b"
   852   [simp, code del]: "Fract_norm a b = Fract a b"
   853 
   853 
   854 lemma [code]: "Fract_norm a b = (if a = 0 \<or> b = 0 then 0 else let c = zgcd a b in
   854 lemma Fract_norm_code [code]: "Fract_norm a b = (if a = 0 \<or> b = 0 then 0 else let c = zgcd a b in
   855   if b > 0 then Fract (a div c) (b div c) else Fract (- (a div c)) (- (b div c)))"
   855   if b > 0 then Fract (a div c) (b div c) else Fract (- (a div c)) (- (b div c)))"
   856   by (simp add: eq_rat Zero_rat_def Let_def Fract_norm)
   856   by (simp add: eq_rat Zero_rat_def Let_def Fract_norm)
   857 
   857 
   858 lemma [code]:
   858 lemma [code]:
   859   "of_rat (Fract a b) = (if b \<noteq> 0 then of_int a / of_int b else 0)"
   859   "of_rat (Fract a b) = (if b \<noteq> 0 then of_int a / of_int b else 0)"
   869 lemma rat_eq_code [code]:
   869 lemma rat_eq_code [code]:
   870   "eq_class.eq (Fract a b) (Fract c d) \<longleftrightarrow> (if b = 0
   870   "eq_class.eq (Fract a b) (Fract c d) \<longleftrightarrow> (if b = 0
   871        then c = 0 \<or> d = 0
   871        then c = 0 \<or> d = 0
   872      else if d = 0
   872      else if d = 0
   873        then a = 0 \<or> b = 0
   873        then a = 0 \<or> b = 0
   874      else a * d =  b * c)"
   874      else a * d = b * c)"
   875   by (auto simp add: eq eq_rat)
   875   by (auto simp add: eq eq_rat)
   876 
   876 
   877 lemma rat_eq_refl [code nbe]:
   877 lemma rat_eq_refl [code nbe]:
   878   "eq_class.eq (r::rat) r \<longleftrightarrow> True"
   878   "eq_class.eq (r::rat) r \<longleftrightarrow> True"
   879   by (rule HOL.eq_refl)
   879   by (rule HOL.eq_refl)