818 apply (case_tac "?pn p = []") |
818 apply (case_tac "?pn p = []") |
819 apply (auto simp add: poly_zero lemma_degree_zero ) |
819 apply (auto simp add: poly_zero lemma_degree_zero ) |
820 done |
820 done |
821 qed |
821 qed |
822 |
822 |
823 lemma (in semiring_0) pnormalize_sing: "(pnormalize [x] = [x]) \<longleftrightarrow> x \<noteq> 0" by simp |
823 lemma (in semiring_0) pnormalize_sing: "(pnormalize [x] = [x]) \<longleftrightarrow> x \<noteq> 0" |
|
824 by simp |
824 lemma (in semiring_0) pnormalize_pair: "y \<noteq> 0 \<longleftrightarrow> (pnormalize [x, y] = [x, y])" by simp |
825 lemma (in semiring_0) pnormalize_pair: "y \<noteq> 0 \<longleftrightarrow> (pnormalize [x, y] = [x, y])" by simp |
825 lemma (in semiring_0) pnormal_cons: "pnormal p \<Longrightarrow> pnormal (c#p)" |
826 lemma (in semiring_0) pnormal_cons: "pnormal p \<Longrightarrow> pnormal (c#p)" |
826 unfolding pnormal_def by simp |
827 unfolding pnormal_def by simp |
827 lemma (in semiring_0) pnormal_tail: "p\<noteq>[] \<Longrightarrow> pnormal (c#p) \<Longrightarrow> pnormal p" |
828 lemma (in semiring_0) pnormal_tail: "p\<noteq>[] \<Longrightarrow> pnormal (c#p) \<Longrightarrow> pnormal p" |
828 unfolding pnormal_def |
829 unfolding pnormal_def by(auto split: split_if_asm) |
829 apply (cases "pnormalize p = []", auto) |
|
830 by (cases "c = 0", auto) |
|
831 |
830 |
832 |
831 |
833 lemma (in semiring_0) pnormal_last_nonzero: "pnormal p ==> last p \<noteq> 0" |
832 lemma (in semiring_0) pnormal_last_nonzero: "pnormal p ==> last p \<noteq> 0" |
834 proof(induct p) |
833 by(induct p) (simp_all add: pnormal_def split: split_if_asm) |
835 case Nil thus ?case by (simp add: pnormal_def) |
|
836 next |
|
837 case (Cons a as) thus ?case |
|
838 apply (simp add: pnormal_def) |
|
839 apply (cases "pnormalize as = []", simp_all) |
|
840 apply (cases "as = []", simp_all) |
|
841 apply (cases "a=0", simp_all) |
|
842 apply (cases "a=0", simp_all) |
|
843 done |
|
844 qed |
|
845 |
834 |
846 lemma (in semiring_0) pnormal_length: "pnormal p \<Longrightarrow> 0 < length p" |
835 lemma (in semiring_0) pnormal_length: "pnormal p \<Longrightarrow> 0 < length p" |
847 unfolding pnormal_def length_greater_0_conv by blast |
836 unfolding pnormal_def length_greater_0_conv by blast |
848 |
837 |
849 lemma (in semiring_0) pnormal_last_length: "\<lbrakk>0 < length p ; last p \<noteq> 0\<rbrakk> \<Longrightarrow> pnormal p" |
838 lemma (in semiring_0) pnormal_last_length: "\<lbrakk>0 < length p ; last p \<noteq> 0\<rbrakk> \<Longrightarrow> pnormal p" |
850 apply (induct p, auto) |
839 by (induct p) (auto simp: pnormal_def split: split_if_asm) |
851 apply (case_tac "p = []", auto) |
840 |
852 apply (simp add: pnormal_def) |
|
853 by (rule pnormal_cons, auto) |
|
854 |
841 |
855 lemma (in semiring_0) pnormal_id: "pnormal p \<longleftrightarrow> (0 < length p \<and> last p \<noteq> 0)" |
842 lemma (in semiring_0) pnormal_id: "pnormal p \<longleftrightarrow> (0 < length p \<and> last p \<noteq> 0)" |
856 using pnormal_last_length pnormal_length pnormal_last_nonzero by blast |
843 using pnormal_last_length pnormal_length pnormal_last_nonzero by blast |
857 |
844 |
858 lemma (in idom_char_0) poly_Cons_eq: "poly (c#cs) = poly (d#ds) \<longleftrightarrow> c=d \<and> poly cs = poly ds" (is "?lhs \<longleftrightarrow> ?rhs") |
845 lemma (in idom_char_0) poly_Cons_eq: "poly (c#cs) = poly (d#ds) \<longleftrightarrow> c=d \<and> poly cs = poly ds" (is "?lhs \<longleftrightarrow> ?rhs") |
916 show ?thesis using cs |
903 show ?thesis using cs |
917 unfolding eq last_linear_mul_lemma by simp |
904 unfolding eq last_linear_mul_lemma by simp |
918 qed |
905 qed |
919 |
906 |
920 lemma (in semiring_0) pnormalize_eq: "last p \<noteq> 0 \<Longrightarrow> pnormalize p = p" |
907 lemma (in semiring_0) pnormalize_eq: "last p \<noteq> 0 \<Longrightarrow> pnormalize p = p" |
921 apply (induct p, auto) |
908 by (induct p) (auto split: split_if_asm) |
922 apply (case_tac p, auto)+ |
|
923 done |
|
924 |
909 |
925 lemma (in semiring_0) last_pnormalize: "pnormalize p \<noteq> [] \<Longrightarrow> last (pnormalize p) \<noteq> 0" |
910 lemma (in semiring_0) last_pnormalize: "pnormalize p \<noteq> [] \<Longrightarrow> last (pnormalize p) \<noteq> 0" |
926 by (induct p, auto) |
911 by (induct p, auto) |
927 |
912 |
928 lemma (in semiring_0) pnormal_degree: "last p \<noteq> 0 \<Longrightarrow> degree p = length p - 1" |
913 lemma (in semiring_0) pnormal_degree: "last p \<noteq> 0 \<Longrightarrow> degree p = length p - 1" |