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) |