src/HOL/Library/Univ_Poly.thy
changeset 32456 341c83339aeb
parent 31021 53642251a04f
child 32960 69916a850301
equal deleted inserted replaced
32450:375db037f4d2 32456:341c83339aeb
   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"