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 |