src/HOL/Real/Rational.thy
changeset 25571 c9e39eafc7a0
parent 25502 9200b36280c0
child 25762 c03e9d04b3e4
--- a/src/HOL/Real/Rational.thy	Fri Dec 07 15:07:56 2007 +0100
+++ b/src/HOL/Real/Rational.thy	Fri Dec 07 15:07:59 2007 +0100
@@ -163,60 +163,72 @@
 
 subsubsection {* Standard operations on rational numbers *}
 
-instance rat :: zero
-  Zero_rat_def: "0 == Fract 0 1" ..
-lemmas [code func del] = Zero_rat_def
+instantiation rat :: "{zero, one, plus, minus, times, inverse, ord, abs, sgn}"
+begin
+
+definition
+  Zero_rat_def [code func del]: "0 = Fract 0 1"
 
-instance rat :: one
-  One_rat_def: "1 == Fract 1 1" ..
-lemmas [code func del] = One_rat_def
+definition
+  One_rat_def [code func del]: "1 = Fract 1 1"
 
-instance rat :: plus
-  add_rat_def:
-   "q + r ==
+definition
+  add_rat_def [code func del]:
+   "q + r =
        Abs_Rat (\<Union>x \<in> Rep_Rat q. \<Union>y \<in> Rep_Rat r.
-           ratrel``{(fst x * snd y + fst y * snd x, snd x * snd y)})" ..
-lemmas [code func del] = add_rat_def
+           ratrel``{(fst x * snd y + fst y * snd x, snd x * snd y)})"
 
-instance rat :: minus
-  minus_rat_def:
-    "- q == Abs_Rat (\<Union>x \<in> Rep_Rat q. ratrel``{(- fst x, snd x)})"
-  diff_rat_def:  "q - r == q + - (r::rat)" ..
-lemmas [code func del] = minus_rat_def diff_rat_def
+definition
+  minus_rat_def [code func del]:
+    "- q = Abs_Rat (\<Union>x \<in> Rep_Rat q. ratrel``{(- fst x, snd x)})"
+
+definition
+  diff_rat_def [code func del]: "q - r = q + - (r::rat)"
 
-instance rat :: times
-  mult_rat_def:
-   "q * r ==
+definition
+  mult_rat_def [code func del]:
+   "q * r =
        Abs_Rat (\<Union>x \<in> Rep_Rat q. \<Union>y \<in> Rep_Rat r.
-           ratrel``{(fst x * fst y, snd x * snd y)})" ..
-lemmas [code func del] = mult_rat_def
+           ratrel``{(fst x * fst y, snd x * snd y)})"
 
-instance rat :: inverse
-  inverse_rat_def:
-    "inverse q ==
+definition
+  inverse_rat_def [code func del]:
+    "inverse q =
         Abs_Rat (\<Union>x \<in> Rep_Rat q.
             ratrel``{if fst x=0 then (0,1) else (snd x, fst x)})"
-  divide_rat_def:  "q / r == q * inverse (r::rat)" ..
-lemmas [code func del] = inverse_rat_def divide_rat_def
+
+definition
+  divide_rat_def [code func del]: "q / r = q * inverse (r::rat)"
 
-instance rat :: ord
-  le_rat_def:
-   "q \<le> r == contents (\<Union>x \<in> Rep_Rat q. \<Union>y \<in> Rep_Rat r.
+definition
+  le_rat_def [code func del]:
+   "q \<le> r \<longleftrightarrow> contents (\<Union>x \<in> Rep_Rat q. \<Union>y \<in> Rep_Rat r.
       {(fst x * snd y)*(snd x * snd y) \<le> (fst y * snd x)*(snd x * snd y)})"
-  less_rat_def: "(z < (w::rat)) == (z \<le> w & z \<noteq> w)" ..
-lemmas [code func del] = le_rat_def less_rat_def
+
+definition
+  less_rat_def [code func del]: "z < (w::rat) \<longleftrightarrow> z \<le> w \<and> z \<noteq> w"
+
+definition
+  abs_rat_def: "\<bar>q\<bar> = (if q < 0 then -q else (q::rat))"
 
-instance rat :: abs
-  abs_rat_def: "\<bar>q\<bar> == if q < 0 then -q else (q::rat)" ..
+definition
+  sgn_rat_def: "sgn (q::rat) = (if q=0 then 0 else if 0<q then 1 else - 1)"
 
-instance rat :: sgn
-  sgn_rat_def: "sgn(q::rat) == (if q=0 then 0 else if 0<q then 1 else - 1)" ..
+instance ..
+
+end
 
-instance rat :: power ..
+instantiation rat :: power
+begin
 
-primrec (rat)
-  rat_power_0:   "q ^ 0       = 1"
-  rat_power_Suc: "q ^ (Suc n) = (q::rat) * (q ^ n)"
+primrec power_rat
+where
+  rat_power_0:     "q ^ 0       = (1\<Colon>rat)"
+  | rat_power_Suc: "q ^ (Suc n) = (q\<Colon>rat) * (q ^ n)"
+
+instance ..
+
+end
 
 theorem eq_rat: "b \<noteq> 0 ==> d \<noteq> 0 ==>
   (Fract a b = Fract c d) = (a * d = c * b)"
@@ -361,11 +373,20 @@
   }
 qed
 
-instance rat :: distrib_lattice
-  "inf \<Colon> rat \<Rightarrow> rat \<Rightarrow> rat \<equiv> min"
-  "sup \<Colon> rat \<Rightarrow> rat \<Rightarrow> rat \<equiv> max"
+instantiation rat :: distrib_lattice
+begin
+
+definition
+  "(inf \<Colon> rat \<Rightarrow> rat \<Rightarrow> rat) = min"
+
+definition
+  "(sup \<Colon> rat \<Rightarrow> rat \<Rightarrow> rat) = max"
+
+instance
   by default (auto simp add: min_max.sup_inf_distrib1 inf_rat_def sup_rat_def)
 
+end
+
 instance rat :: ordered_field
 proof
   fix q r s :: rat
@@ -474,11 +495,16 @@
 
 subsection {* Numerals and Arithmetic *}
 
-instance rat :: number
-  rat_number_of_def: "(number_of w :: rat) \<equiv> of_int w" ..
+instantiation rat :: number_ring
+begin
 
-instance rat :: number_ring
-  by default (simp add: rat_number_of_def) 
+definition
+  rat_number_of_def: "number_of w = (of_int w \<Colon> rat)"
+
+instance
+  by default (simp add: rat_number_of_def)
+
+end 
 
 use "rat_arith.ML"
 declaration {* K rat_arith_setup *}
@@ -488,7 +514,7 @@
 
 class field_char_0 = field + ring_char_0
 
-instance ordered_field < field_char_0 ..
+instance ordered_field < field_char_0 .. 
 
 definition
   of_rat :: "rat \<Rightarrow> 'a::field_char_0"