src/HOL/Computational_Algebra/Polynomial.thy
changeset 65484 751f9ed8e940
parent 65435 378175f44328
child 65486 d801126a14cb
equal deleted inserted replaced
65483:1cb9fd58d55e 65484:751f9ed8e940
  1211 
  1211 
  1212 lemma smult_conv_map_poly: "smult c p = map_poly (\<lambda>x. c * x) p"
  1212 lemma smult_conv_map_poly: "smult c p = map_poly (\<lambda>x. c * x) p"
  1213   by (intro poly_eqI) (simp_all add: coeff_map_poly)
  1213   by (intro poly_eqI) (simp_all add: coeff_map_poly)
  1214 
  1214 
  1215 
  1215 
  1216 subsection \<open>Conversions from @{typ nat} and @{typ int} numbers\<close>
  1216 subsection \<open>Conversions\<close>
  1217 
  1217 
  1218 lemma of_nat_poly: "of_nat n = [:of_nat n :: 'a :: comm_semiring_1:]"
  1218 lemma of_nat_poly:
  1219 proof (induct n)
  1219   "of_nat n = [:of_nat n:]"
  1220   case 0
  1220   by (induct n) (simp_all add: one_poly_def)
  1221   then show ?case by simp
  1221 
  1222 next
  1222 lemma of_nat_monom:
  1223   case (Suc n)
  1223   "of_nat n = monom (of_nat n) 0"
  1224   then have "of_nat (Suc n) = 1 + (of_nat n :: 'a poly)"
  1224   by (simp add: of_nat_poly monom_0)
       
  1225 
       
  1226 lemma degree_of_nat [simp]:
       
  1227   "degree (of_nat n) = 0"
       
  1228   by (simp add: of_nat_poly)
       
  1229 
       
  1230 lemma lead_coeff_of_nat [simp]:
       
  1231   "lead_coeff (of_nat n) = of_nat n"
       
  1232   by (simp add: of_nat_poly)
       
  1233 
       
  1234 lemma of_int_poly:
       
  1235   "of_int k = [:of_int k:]"
       
  1236   by (simp only: of_int_of_nat of_nat_poly) simp
       
  1237 
       
  1238 lemma of_int_monom:
       
  1239   "of_int k = monom (of_int k) 0"
       
  1240   by (simp add: of_int_poly monom_0)
       
  1241 
       
  1242 lemma degree_of_int [simp]:
       
  1243   "degree (of_int k) = 0"
       
  1244   by (simp add: of_int_poly)
       
  1245 
       
  1246 lemma lead_coeff_of_int [simp]:
       
  1247   "lead_coeff (of_int k) = of_int k"
       
  1248   by (simp add: of_int_poly)
       
  1249 
       
  1250 lemma numeral_poly: "numeral n = [:numeral n:]"
       
  1251 proof -
       
  1252   have "numeral n = of_nat (numeral n)"
  1225     by simp
  1253     by simp
  1226   also have "(of_nat n :: 'a poly) = [: of_nat n :]"
  1254   also have "\<dots> = [:of_nat (numeral n):]"
  1227     by (subst Suc) (rule refl)
  1255     by (simp add: of_nat_poly)
  1228   also have "1 = [:1:]"
  1256   finally show ?thesis
  1229     by (simp add: one_poly_def)
  1257     by simp
  1230   finally show ?case
  1258 qed
  1231     by (subst (asm) add_pCons) simp
  1259 
  1232 qed
  1260 lemma numeral_monom:
  1233 
  1261   "numeral n = monom (numeral n) 0"
  1234 lemma degree_of_nat [simp]: "degree (of_nat n) = 0"
  1262   by (simp add: numeral_poly monom_0)
  1235   by (simp add: of_nat_poly)
  1263 
  1236 
  1264 lemma degree_numeral [simp]:
  1237 lemma lead_coeff_of_nat [simp]:
  1265   "degree (numeral n) = 0"
  1238   "lead_coeff (of_nat n) = (of_nat n :: 'a::{comm_semiring_1,semiring_char_0})"
  1266   by (simp add: numeral_poly)
  1239   by (simp add: of_nat_poly)
       
  1240 
       
  1241 lemma of_int_poly: "of_int k = [:of_int k :: 'a :: comm_ring_1:]"
       
  1242   by (simp only: of_int_of_nat of_nat_poly) simp
       
  1243 
       
  1244 lemma degree_of_int [simp]: "degree (of_int k) = 0"
       
  1245   by (simp add: of_int_poly)
       
  1246 
       
  1247 lemma lead_coeff_of_int [simp]:
       
  1248   "lead_coeff (of_int k) = (of_int k :: 'a::{comm_ring_1,ring_char_0})"
       
  1249   by (simp add: of_int_poly)
       
  1250 
       
  1251 lemma numeral_poly: "numeral n = [:numeral n:]"
       
  1252   by (subst of_nat_numeral [symmetric], subst of_nat_poly) simp
       
  1253 
       
  1254 lemma degree_numeral [simp]: "degree (numeral n) = 0"
       
  1255   by (subst of_nat_numeral [symmetric], subst of_nat_poly) simp
       
  1256 
  1267 
  1257 lemma lead_coeff_numeral [simp]:
  1268 lemma lead_coeff_numeral [simp]:
  1258   "lead_coeff (numeral n) = numeral n"
  1269   "lead_coeff (numeral n) = numeral n"
  1259   by (simp add: numeral_poly)
  1270   by (simp add: numeral_poly)
  1260 
  1271