src/HOL/Library/Poly_Deriv.thy
changeset 60688 01488b559910
parent 60500 903bb1495239
child 60867 86e7560e07d0
equal deleted inserted replaced
60687:33dbbcb6a8a3 60688:01488b559910
   180   then show ?thesis
   180   then show ?thesis
   181     by (metis \<open>n = Suc n'\<close> pe)
   181     by (metis \<open>n = Suc n'\<close> pe)
   182 qed
   182 qed
   183 
   183 
   184 lemma order_decomp:
   184 lemma order_decomp:
   185      "p \<noteq> 0
   185   assumes "p \<noteq> 0"
   186       ==> \<exists>q. p = [:-a, 1:] ^ (order a p) * q &
   186   shows "\<exists>q. p = [:- a, 1:] ^ order a p * q \<and> \<not> [:- a, 1:] dvd q"
   187                 ~([:-a, 1:] dvd q)"
   187 proof -
   188 apply (drule order [where a=a])
   188   from assms have A: "[:- a, 1:] ^ order a p dvd p"
   189 by (metis dvdE dvd_mult_cancel_left power_Suc2)
   189     and B: "\<not> [:- a, 1:] ^ Suc (order a p) dvd p" by (auto dest: order)
       
   190   from A obtain q where C: "p = [:- a, 1:] ^ order a p * q" ..
       
   191   with B have "\<not> [:- a, 1:] ^ Suc (order a p) dvd [:- a, 1:] ^ order a p * q"
       
   192     by simp
       
   193   then have "\<not> [:- a, 1:] ^ order a p * [:- a, 1:] dvd [:- a, 1:] ^ order a p * q"
       
   194     by simp
       
   195   then have D: "\<not> [:- a, 1:] dvd q"
       
   196     using idom_class.dvd_mult_cancel_left [of "[:- a, 1:] ^ order a p" "[:- a, 1:]" q]
       
   197     by auto
       
   198   from C D show ?thesis by blast
       
   199 qed
   190 
   200 
   191 lemma order_pderiv: "[| pderiv p \<noteq> 0; order a p \<noteq> 0 |]
   201 lemma order_pderiv: "[| pderiv p \<noteq> 0; order a p \<noteq> 0 |]
   192       ==> (order a p = Suc (order a (pderiv p)))"
   202       ==> (order a p = Suc (order a (pderiv p)))"
   193 apply (case_tac "p = 0", simp)
   203 apply (case_tac "p = 0", simp)
   194 apply (drule_tac a = a and p = p in order_decomp)
   204 apply (drule_tac a = a and p = p in order_decomp)