src/HOL/Nat.thy
changeset 25928 042e877d9841
parent 25690 5226396bf261
child 26072 f65a7fa2da6c
equal deleted inserted replaced
25927:9c544dac6269 25928:042e877d9841
  1173 lemma of_nat_add [simp]: "of_nat (m + n) = of_nat m + of_nat n"
  1173 lemma of_nat_add [simp]: "of_nat (m + n) = of_nat m + of_nat n"
  1174   by (induct m) (simp_all add: add_ac)
  1174   by (induct m) (simp_all add: add_ac)
  1175 
  1175 
  1176 lemma of_nat_mult: "of_nat (m * n) = of_nat m * of_nat n"
  1176 lemma of_nat_mult: "of_nat (m * n) = of_nat m * of_nat n"
  1177   by (induct m) (simp_all add: add_ac left_distrib)
  1177   by (induct m) (simp_all add: add_ac left_distrib)
       
  1178 
       
  1179 definition
       
  1180   of_nat_aux :: "nat \<Rightarrow> 'a \<Rightarrow> 'a"
       
  1181 where
       
  1182   [code func del]: "of_nat_aux n i = of_nat n + i"
       
  1183 
       
  1184 lemma of_nat_aux_code [code]:
       
  1185   "of_nat_aux 0 i = i"
       
  1186   "of_nat_aux (Suc n) i = of_nat_aux n (i + 1)" -- {* tail recursive *}
       
  1187   by (simp_all add: of_nat_aux_def add_ac)
       
  1188 
       
  1189 lemma of_nat_code [code]:
       
  1190   "of_nat n = of_nat_aux n 0"
       
  1191   by (simp add: of_nat_aux_def)
  1178 
  1192 
  1179 end
  1193 end
  1180 
  1194 
  1181 context ordered_semidom
  1195 context ordered_semidom
  1182 begin
  1196 begin