src/HOL/Rational.thy
changeset 30960 fec1a04b7220
parent 30649 57753e0ec1d4
child 31017 2c227493ea56
equal deleted inserted replaced
30959:458e55fd0a33 30960:fec1a04b7220
   154 proof -
   154 proof -
   155   from assms have "Fract c c = Fract 1 1" by (simp add: Fract_def)
   155   from assms have "Fract c c = Fract 1 1" by (simp add: Fract_def)
   156   then show ?thesis by (simp add: mult_rat [symmetric])
   156   then show ?thesis by (simp add: mult_rat [symmetric])
   157 qed
   157 qed
   158 
   158 
   159 primrec power_rat
       
   160 where
       
   161   "q ^ 0 = (1\<Colon>rat)"
       
   162 | "q ^ Suc n = (q\<Colon>rat) * (q ^ n)"
       
   163 
       
   164 instance proof
   159 instance proof
   165   fix q r s :: rat show "(q * r) * s = q * (r * s)" 
   160   fix q r s :: rat show "(q * r) * s = q * (r * s)" 
   166     by (cases q, cases r, cases s) (simp add: eq_rat)
   161     by (cases q, cases r, cases s) (simp add: eq_rat)
   167 next
   162 next
   168   fix q r :: rat show "q * r = r * q"
   163   fix q r :: rat show "q * r = r * q"
   191 next
   186 next
   192   show "(0::rat) \<noteq> 1" by (simp add: Zero_rat_def One_rat_def eq_rat)
   187   show "(0::rat) \<noteq> 1" by (simp add: Zero_rat_def One_rat_def eq_rat)
   193 next
   188 next
   194   fix q :: rat show "q * 1 = q"
   189   fix q :: rat show "q * 1 = q"
   195     by (cases q) (simp add: One_rat_def eq_rat)
   190     by (cases q) (simp add: One_rat_def eq_rat)
   196 next
   191 qed
   197   fix q :: rat
       
   198   fix n :: nat
       
   199   show "q ^ 0 = 1" by simp
       
   200   show "q ^ (Suc n) = q * (q ^ n)" by simp
       
   201 qed
       
   202 
       
   203 declare power_rat.simps [simp del]
       
   204 
   192 
   205 end
   193 end
   206 
   194 
   207 lemma of_nat_rat: "of_nat k = Fract (of_nat k) 1"
   195 lemma of_nat_rat: "of_nat k = Fract (of_nat k) 1"
   208   by (induct k) (simp_all add: Zero_rat_def One_rat_def)
   196   by (induct k) (simp_all add: Zero_rat_def One_rat_def)
   220 begin
   208 begin
   221 
   209 
   222 definition
   210 definition
   223   rat_number_of_def [code del]: "number_of w = Fract w 1"
   211   rat_number_of_def [code del]: "number_of w = Fract w 1"
   224 
   212 
   225 instance by intro_classes (simp add: rat_number_of_def of_int_rat)
   213 instance proof
       
   214 qed (simp add: rat_number_of_def of_int_rat)
   226 
   215 
   227 end
   216 end
   228 
   217 
   229 lemma rat_number_collapse [code post]:
   218 lemma rat_number_collapse [code post]:
   230   "Fract 0 k = 0"
   219   "Fract 0 k = 0"