equal
deleted
inserted
replaced
304 proof (induct k) |
304 proof (induct k) |
305 case 0 then show ?case by (simp add: Pi_def m_assoc) |
305 case 0 then show ?case by (simp add: Pi_def m_assoc) |
306 next |
306 next |
307 case (Suc k) |
307 case (Suc k) |
308 then have "k <= n" by arith |
308 then have "k <= n" by arith |
309 then have "?eq k" by (rule Suc) |
309 from this R have "?eq k" by (rule Suc) |
310 with R show ?case |
310 with R show ?case |
311 by (simp cong: finsum_cong |
311 by (simp cong: finsum_cong |
312 add: Suc_diff_le Pi_def l_distr r_distr m_assoc) |
312 add: Suc_diff_le Pi_def l_distr r_distr m_assoc) |
313 (simp cong: finsum_cong add: Pi_def a_ac finsum_ldistr m_assoc) |
313 (simp cong: finsum_cong add: Pi_def a_ac finsum_ldistr m_assoc) |
314 qed |
314 qed |
631 with prem show P . |
631 with prem show P . |
632 qed |
632 qed |
633 *) |
633 *) |
634 |
634 |
635 lemma (in UP_cring) deg_aboveD: |
635 lemma (in UP_cring) deg_aboveD: |
636 "[| deg R p < m; p \<in> carrier P |] ==> coeff P p m = \<zero>" |
636 assumes "deg R p < m" and "p \<in> carrier P" |
637 proof - |
637 shows "coeff P p m = \<zero>" |
638 assume R: "p \<in> carrier P" and "deg R p < m" |
638 proof - |
639 from R obtain n where "bound \<zero> n (coeff P p)" |
639 from `p \<in> carrier P` obtain n where "bound \<zero> n (coeff P p)" |
640 by (auto simp add: UP_def P_def) |
640 by (auto simp add: UP_def P_def) |
641 then have "bound \<zero> (deg R p) (coeff P p)" |
641 then have "bound \<zero> (deg R p) (coeff P p)" |
642 by (auto simp: deg_def P_def dest: LeastI) |
642 by (auto simp: deg_def P_def dest: LeastI) |
643 then show ?thesis .. |
643 from this and `deg R p < m` show ?thesis .. |
644 qed |
644 qed |
645 |
645 |
646 lemma (in UP_cring) deg_belowI: |
646 lemma (in UP_cring) deg_belowI: |
647 assumes non_zero: "n ~= 0 ==> coeff P p n ~= \<zero>" |
647 assumes non_zero: "n ~= 0 ==> coeff P p n ~= \<zero>" |
648 and R: "p \<in> carrier P" |
648 and R: "p \<in> carrier P" |
670 by (unfold deg_def P_def) arith |
670 by (unfold deg_def P_def) arith |
671 then have "~ bound \<zero> (deg R p - 1) (coeff P p)" by (rule not_less_Least) |
671 then have "~ bound \<zero> (deg R p - 1) (coeff P p)" by (rule not_less_Least) |
672 then have "EX m. deg R p - 1 < m & coeff P p m ~= \<zero>" |
672 then have "EX m. deg R p - 1 < m & coeff P p m ~= \<zero>" |
673 by (unfold bound_def) fast |
673 by (unfold bound_def) fast |
674 then have "EX m. deg R p <= m & coeff P p m ~= \<zero>" by (simp add: deg minus) |
674 then have "EX m. deg R p <= m & coeff P p m ~= \<zero>" by (simp add: deg minus) |
675 then show ?thesis by auto |
675 then show ?thesis by (auto intro: that) |
676 qed |
676 qed |
677 with deg_belowI R have "deg R p = m" by fastsimp |
677 with deg_belowI R have "deg R p = m" by fastsimp |
678 with m_coeff show ?thesis by simp |
678 with m_coeff show ?thesis by simp |
679 qed |
679 qed |
680 |
680 |
687 assume "~ ?thesis" |
687 assume "~ ?thesis" |
688 with R have "p = \<zero>\<^bsub>P\<^esub>" by (auto intro: up_eqI) |
688 with R have "p = \<zero>\<^bsub>P\<^esub>" by (auto intro: up_eqI) |
689 with nonzero show ?thesis by contradiction |
689 with nonzero show ?thesis by contradiction |
690 qed |
690 qed |
691 then obtain m where coeff: "coeff P p m ~= \<zero>" .. |
691 then obtain m where coeff: "coeff P p m ~= \<zero>" .. |
692 then have "m <= deg R p" by (rule deg_belowI) |
692 from this and R have "m <= deg R p" by (rule deg_belowI) |
693 then have "m = 0" by (simp add: deg) |
693 then have "m = 0" by (simp add: deg) |
694 with coeff show ?thesis by simp |
694 with coeff show ?thesis by simp |
695 qed |
695 qed |
696 |
696 |
697 lemma (in UP_cring) lcoeff_nonzero: |
697 lemma (in UP_cring) lcoeff_nonzero: |
771 lemma (in UP_domain) deg_smult [simp]: |
771 lemma (in UP_domain) deg_smult [simp]: |
772 assumes R: "a \<in> carrier R" "p \<in> carrier P" |
772 assumes R: "a \<in> carrier R" "p \<in> carrier P" |
773 shows "deg R (a \<odot>\<^bsub>P\<^esub> p) = (if a = \<zero> then 0 else deg R p)" |
773 shows "deg R (a \<odot>\<^bsub>P\<^esub> p) = (if a = \<zero> then 0 else deg R p)" |
774 proof (rule le_anti_sym) |
774 proof (rule le_anti_sym) |
775 show "deg R (a \<odot>\<^bsub>P\<^esub> p) <= (if a = \<zero> then 0 else deg R p)" |
775 show "deg R (a \<odot>\<^bsub>P\<^esub> p) <= (if a = \<zero> then 0 else deg R p)" |
776 by (rule deg_smult_ring) |
776 using R by (rule deg_smult_ring) |
777 next |
777 next |
778 show "(if a = \<zero> then 0 else deg R p) <= deg R (a \<odot>\<^bsub>P\<^esub> p)" |
778 show "(if a = \<zero> then 0 else deg R p) <= deg R (a \<odot>\<^bsub>P\<^esub> p)" |
779 proof (cases "a = \<zero>") |
779 proof (cases "a = \<zero>") |
780 qed (simp, simp add: deg_belowI lcoeff_nonzero_deg integral_iff R) |
780 qed (simp, simp add: deg_belowI lcoeff_nonzero_deg integral_iff R) |
781 qed |
781 qed |
803 lemma (in UP_domain) deg_mult [simp]: |
803 lemma (in UP_domain) deg_mult [simp]: |
804 "[| p ~= \<zero>\<^bsub>P\<^esub>; q ~= \<zero>\<^bsub>P\<^esub>; p \<in> carrier P; q \<in> carrier P |] ==> |
804 "[| p ~= \<zero>\<^bsub>P\<^esub>; q ~= \<zero>\<^bsub>P\<^esub>; p \<in> carrier P; q \<in> carrier P |] ==> |
805 deg R (p \<otimes>\<^bsub>P\<^esub> q) = deg R p + deg R q" |
805 deg R (p \<otimes>\<^bsub>P\<^esub> q) = deg R p + deg R q" |
806 proof (rule le_anti_sym) |
806 proof (rule le_anti_sym) |
807 assume "p \<in> carrier P" " q \<in> carrier P" |
807 assume "p \<in> carrier P" " q \<in> carrier P" |
808 show "deg R (p \<otimes>\<^bsub>P\<^esub> q) <= deg R p + deg R q" by (rule deg_mult_cring) |
808 then show "deg R (p \<otimes>\<^bsub>P\<^esub> q) <= deg R p + deg R q" by (rule deg_mult_cring) |
809 next |
809 next |
810 let ?s = "(%i. coeff P p i \<otimes> coeff P q (deg R p + deg R q - i))" |
810 let ?s = "(%i. coeff P p i \<otimes> coeff P q (deg R p + deg R q - i))" |
811 assume R: "p \<in> carrier P" "q \<in> carrier P" and nz: "p ~= \<zero>\<^bsub>P\<^esub>" "q ~= \<zero>\<^bsub>P\<^esub>" |
811 assume R: "p \<in> carrier P" "q \<in> carrier P" and nz: "p ~= \<zero>\<^bsub>P\<^esub>" "q ~= \<zero>\<^bsub>P\<^esub>" |
812 have less_add_diff: "!!(k::nat) n m. k < n ==> m < n + m - k" by arith |
812 have less_add_diff: "!!(k::nat) n m. k < n ==> m < n + m - k" by arith |
813 show "deg R p + deg R q <= deg R (p \<otimes>\<^bsub>P\<^esub> q)" |
813 show "deg R p + deg R q <= deg R (p \<otimes>\<^bsub>P\<^esub> q)" |
882 then have "finsum P ?s {..n} = finsum P ?s ({..deg R p} \<union> {deg R p<..n})" |
882 then have "finsum P ?s {..n} = finsum P ?s ({..deg R p} \<union> {deg R p<..n})" |
883 by (simp only: ivl_disj_un_one) |
883 by (simp only: ivl_disj_un_one) |
884 also have "... = finsum P ?s {..deg R p}" |
884 also have "... = finsum P ?s {..deg R p}" |
885 by (simp cong: P.finsum_cong add: P.finsum_Un_disjoint ivl_disj_int_one |
885 by (simp cong: P.finsum_cong add: P.finsum_Un_disjoint ivl_disj_int_one |
886 deg_aboveD R Pi_def) |
886 deg_aboveD R Pi_def) |
887 also have "... = p" by (rule up_repr) |
887 also have "... = p" using R by (rule up_repr) |
888 finally show ?thesis . |
888 finally show ?thesis . |
889 qed |
889 qed |
890 |
890 |
891 |
891 |
892 subsection {* Polynomials over Integral Domains *} |
892 subsection {* Polynomials over Integral Domains *} |
1299 lemma UP_pre_univ_propI: |
1299 lemma UP_pre_univ_propI: |
1300 assumes "cring R" |
1300 assumes "cring R" |
1301 and "cring S" |
1301 and "cring S" |
1302 and "h \<in> ring_hom R S" |
1302 and "h \<in> ring_hom R S" |
1303 shows "UP_pre_univ_prop R S h" |
1303 shows "UP_pre_univ_prop R S h" |
|
1304 using assms |
1304 by (auto intro!: UP_pre_univ_prop.intro ring_hom_cring.intro |
1305 by (auto intro!: UP_pre_univ_prop.intro ring_hom_cring.intro |
1305 ring_hom_cring_axioms.intro UP_cring.intro) |
1306 ring_hom_cring_axioms.intro UP_cring.intro) |
1306 |
1307 |
1307 constdefs |
1308 constdefs |
1308 INTEG :: "int ring" |
1309 INTEG :: "int ring" |