equal
deleted
inserted
replaced
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) |