equal
deleted
inserted
replaced
104 by (rule iffI, rule prime_dvd_mult_int, auto) |
104 by (rule iffI, rule prime_dvd_mult_int, auto) |
105 |
105 |
106 lemma not_prime_eq_prod_nat: "(n::nat) > 1 \<Longrightarrow> ~ prime n \<Longrightarrow> |
106 lemma not_prime_eq_prod_nat: "(n::nat) > 1 \<Longrightarrow> ~ prime n \<Longrightarrow> |
107 EX m k. n = m * k & 1 < m & m < n & 1 < k & k < n" |
107 EX m k. n = m * k & 1 < m & m < n & 1 < k & k < n" |
108 unfolding prime_nat_def dvd_def apply auto |
108 unfolding prime_nat_def dvd_def apply auto |
109 by (metis mult_commute linorder_neq_iff linorder_not_le mult_1 |
109 by (metis mult.commute linorder_neq_iff linorder_not_le mult_1 |
110 n_less_n_mult_m one_le_mult_iff less_imp_le_nat) |
110 n_less_n_mult_m one_le_mult_iff less_imp_le_nat) |
111 |
111 |
112 lemma prime_dvd_power_nat: "prime p \<Longrightarrow> p dvd x^n \<Longrightarrow> p dvd x" |
112 lemma prime_dvd_power_nat: "prime p \<Longrightarrow> p dvd x^n \<Longrightarrow> p dvd x" |
113 by (induct n) auto |
113 by (induct n) auto |
114 |
114 |
207 then have pnb: "coprime (p^n) b" |
207 then have pnb: "coprime (p^n) b" |
208 by (subst gcd_commute_nat, rule coprime_exp_nat) |
208 by (subst gcd_commute_nat, rule coprime_exp_nat) |
209 from coprime_dvd_mult_nat[OF pnb pab] have ?thesis by blast } |
209 from coprime_dvd_mult_nat[OF pnb pab] have ?thesis by blast } |
210 moreover |
210 moreover |
211 { assume pb: "p dvd b" |
211 { assume pb: "p dvd b" |
212 have pnba: "p^n dvd b*a" using pab by (simp add: mult_commute) |
212 have pnba: "p^n dvd b*a" using pab by (simp add: mult.commute) |
213 from coprime_common_divisor_nat [OF ab, of p] pb p have "\<not> p dvd a" |
213 from coprime_common_divisor_nat [OF ab, of p] pb p have "\<not> p dvd a" |
214 by auto |
214 by auto |
215 with p have "coprime a p" |
215 with p have "coprime a p" |
216 by (subst gcd_commute_nat, intro prime_imp_coprime_nat) |
216 by (subst gcd_commute_nat, intro prime_imp_coprime_nat) |
217 then have pna: "coprime (p^n) a" |
217 then have pna: "coprime (p^n) a" |
321 with d have "x = p^Suc i" by simp |
321 with d have "x = p^Suc i" by simp |
322 with ij(2) have ?case by blast} |
322 with ij(2) have ?case by blast} |
323 moreover |
323 moreover |
324 {assume px: "p dvd y" |
324 {assume px: "p dvd y" |
325 then obtain d where d: "y = p*d" unfolding dvd_def by blast |
325 then obtain d where d: "y = p*d" unfolding dvd_def by blast |
326 from Suc.prems d have "p*d*x = p^Suc k" by (simp add: mult_commute) |
326 from Suc.prems d have "p*d*x = p^Suc k" by (simp add: mult.commute) |
327 hence th: "d*x = p^k" using p0 by simp |
327 hence th: "d*x = p^k" using p0 by simp |
328 from Suc.hyps[OF th] obtain i j where ij: "d = p^i" "x = p^j" by blast |
328 from Suc.hyps[OF th] obtain i j where ij: "d = p^i" "x = p^j" by blast |
329 with d have "y = p^Suc i" by simp |
329 with d have "y = p^Suc i" by simp |
330 with ij(2) have ?case by blast} |
330 with ij(2) have ?case by blast} |
331 ultimately show ?case using pxyc by blast |
331 ultimately show ?case using pxyc by blast |
353 fixes p::nat |
353 fixes p::nat |
354 assumes p: "prime p" |
354 assumes p: "prime p" |
355 shows "d dvd p^k \<longleftrightarrow> (\<exists> i. i \<le> k \<and> d = p ^i)" |
355 shows "d dvd p^k \<longleftrightarrow> (\<exists> i. i \<le> k \<and> d = p ^i)" |
356 proof |
356 proof |
357 assume H: "d dvd p^k" then obtain e where e: "d*e = p^k" |
357 assume H: "d dvd p^k" then obtain e where e: "d*e = p^k" |
358 unfolding dvd_def apply (auto simp add: mult_commute) by blast |
358 unfolding dvd_def apply (auto simp add: mult.commute) by blast |
359 from prime_power_mult[OF p e] obtain i j where ij: "d = p^i" "e=p^j" by blast |
359 from prime_power_mult[OF p e] obtain i j where ij: "d = p^i" "e=p^j" by blast |
360 from e ij have "p^(i + j) = p^k" by (simp add: power_add) |
360 from e ij have "p^(i + j) = p^k" by (simp add: power_add) |
361 hence "i + j = k" using p prime_gt_1_nat power_inject_exp[of p "i+j" k] by simp |
361 hence "i + j = k" using p prime_gt_1_nat power_inject_exp[of p "i+j" k] by simp |
362 hence "i \<le> k" by arith |
362 hence "i \<le> k" by arith |
363 with ij(1) show "\<exists>i\<le>k. d = p ^ i" by blast |
363 with ij(1) show "\<exists>i\<le>k. d = p ^ i" by blast |