| author | wenzelm | 
| Sun, 12 Jan 2025 12:54:25 +0100 | |
| changeset 81773 | 5df6481f45f9 | 
| parent 74543 | ee039c11fb6f | 
| permissions | -rw-r--r-- | 
| 66276 
acc3b7dd0b21
More material on powers for HOL-Computational_Algebra/HOL-Number_Theory
 eberlm <eberlm@in.tum.de> parents: diff
changeset | 1 | (* | 
| 
acc3b7dd0b21
More material on powers for HOL-Computational_Algebra/HOL-Number_Theory
 eberlm <eberlm@in.tum.de> parents: diff
changeset | 2 | File: HOL/Number_Theory/Prime_Powers.thy | 
| 74543 | 3 | Author: Manuel Eberl <manuel@pruvisto.org> | 
| 66276 
acc3b7dd0b21
More material on powers for HOL-Computational_Algebra/HOL-Number_Theory
 eberlm <eberlm@in.tum.de> parents: diff
changeset | 4 | |
| 
acc3b7dd0b21
More material on powers for HOL-Computational_Algebra/HOL-Number_Theory
 eberlm <eberlm@in.tum.de> parents: diff
changeset | 5 | Prime powers and the Mangoldt function | 
| 
acc3b7dd0b21
More material on powers for HOL-Computational_Algebra/HOL-Number_Theory
 eberlm <eberlm@in.tum.de> parents: diff
changeset | 6 | *) | 
| 
acc3b7dd0b21
More material on powers for HOL-Computational_Algebra/HOL-Number_Theory
 eberlm <eberlm@in.tum.de> parents: diff
changeset | 7 | section \<open>Prime powers\<close> | 
| 
acc3b7dd0b21
More material on powers for HOL-Computational_Algebra/HOL-Number_Theory
 eberlm <eberlm@in.tum.de> parents: diff
changeset | 8 | theory Prime_Powers | 
| 68188 
2af1f142f855
move FuncSet back to HOL-Library (amending 493b818e8e10)
 immler parents: 
68072diff
changeset | 9 | imports Complex_Main "HOL-Computational_Algebra.Primes" "HOL-Library.FuncSet" | 
| 66276 
acc3b7dd0b21
More material on powers for HOL-Computational_Algebra/HOL-Number_Theory
 eberlm <eberlm@in.tum.de> parents: diff
changeset | 10 | begin | 
| 
acc3b7dd0b21
More material on powers for HOL-Computational_Algebra/HOL-Number_Theory
 eberlm <eberlm@in.tum.de> parents: diff
changeset | 11 | |
| 
acc3b7dd0b21
More material on powers for HOL-Computational_Algebra/HOL-Number_Theory
 eberlm <eberlm@in.tum.de> parents: diff
changeset | 12 | definition aprimedivisor :: "'a :: normalization_semidom \<Rightarrow> 'a" where | 
| 
acc3b7dd0b21
More material on powers for HOL-Computational_Algebra/HOL-Number_Theory
 eberlm <eberlm@in.tum.de> parents: diff
changeset | 13 | "aprimedivisor q = (SOME p. prime p \<and> p dvd q)" | 
| 
acc3b7dd0b21
More material on powers for HOL-Computational_Algebra/HOL-Number_Theory
 eberlm <eberlm@in.tum.de> parents: diff
changeset | 14 | |
| 
acc3b7dd0b21
More material on powers for HOL-Computational_Algebra/HOL-Number_Theory
 eberlm <eberlm@in.tum.de> parents: diff
changeset | 15 | definition primepow :: "'a :: normalization_semidom \<Rightarrow> bool" where | 
| 
acc3b7dd0b21
More material on powers for HOL-Computational_Algebra/HOL-Number_Theory
 eberlm <eberlm@in.tum.de> parents: diff
changeset | 16 | "primepow n \<longleftrightarrow> (\<exists>p k. prime p \<and> k > 0 \<and> n = p ^ k)" | 
| 
acc3b7dd0b21
More material on powers for HOL-Computational_Algebra/HOL-Number_Theory
 eberlm <eberlm@in.tum.de> parents: diff
changeset | 17 | |
| 
acc3b7dd0b21
More material on powers for HOL-Computational_Algebra/HOL-Number_Theory
 eberlm <eberlm@in.tum.de> parents: diff
changeset | 18 | definition primepow_factors :: "'a :: normalization_semidom \<Rightarrow> 'a set" where | 
| 
acc3b7dd0b21
More material on powers for HOL-Computational_Algebra/HOL-Number_Theory
 eberlm <eberlm@in.tum.de> parents: diff
changeset | 19 |   "primepow_factors n = {x. primepow x \<and> x dvd n}"
 | 
| 
acc3b7dd0b21
More material on powers for HOL-Computational_Algebra/HOL-Number_Theory
 eberlm <eberlm@in.tum.de> parents: diff
changeset | 20 | |
| 
acc3b7dd0b21
More material on powers for HOL-Computational_Algebra/HOL-Number_Theory
 eberlm <eberlm@in.tum.de> parents: diff
changeset | 21 | lemma primepow_gt_Suc_0: "primepow n \<Longrightarrow> n > Suc 0" | 
| 
acc3b7dd0b21
More material on powers for HOL-Computational_Algebra/HOL-Number_Theory
 eberlm <eberlm@in.tum.de> parents: diff
changeset | 22 | using one_less_power[of "p::nat" for p] by (auto simp: primepow_def prime_nat_iff) | 
| 
acc3b7dd0b21
More material on powers for HOL-Computational_Algebra/HOL-Number_Theory
 eberlm <eberlm@in.tum.de> parents: diff
changeset | 23 | |
| 
acc3b7dd0b21
More material on powers for HOL-Computational_Algebra/HOL-Number_Theory
 eberlm <eberlm@in.tum.de> parents: diff
changeset | 24 | lemma | 
| 
acc3b7dd0b21
More material on powers for HOL-Computational_Algebra/HOL-Number_Theory
 eberlm <eberlm@in.tum.de> parents: diff
changeset | 25 | assumes "prime p" "p dvd n" | 
| 
acc3b7dd0b21
More material on powers for HOL-Computational_Algebra/HOL-Number_Theory
 eberlm <eberlm@in.tum.de> parents: diff
changeset | 26 | shows prime_aprimedivisor: "prime (aprimedivisor n)" | 
| 
acc3b7dd0b21
More material on powers for HOL-Computational_Algebra/HOL-Number_Theory
 eberlm <eberlm@in.tum.de> parents: diff
changeset | 27 | and aprimedivisor_dvd: "aprimedivisor n dvd n" | 
| 
acc3b7dd0b21
More material on powers for HOL-Computational_Algebra/HOL-Number_Theory
 eberlm <eberlm@in.tum.de> parents: diff
changeset | 28 | proof - | 
| 
acc3b7dd0b21
More material on powers for HOL-Computational_Algebra/HOL-Number_Theory
 eberlm <eberlm@in.tum.de> parents: diff
changeset | 29 | from assms have "\<exists>p. prime p \<and> p dvd n" by auto | 
| 
acc3b7dd0b21
More material on powers for HOL-Computational_Algebra/HOL-Number_Theory
 eberlm <eberlm@in.tum.de> parents: diff
changeset | 30 | from someI_ex[OF this] show "prime (aprimedivisor n)" "aprimedivisor n dvd n" | 
| 
acc3b7dd0b21
More material on powers for HOL-Computational_Algebra/HOL-Number_Theory
 eberlm <eberlm@in.tum.de> parents: diff
changeset | 31 | unfolding aprimedivisor_def by (simp_all add: conj_commute) | 
| 
acc3b7dd0b21
More material on powers for HOL-Computational_Algebra/HOL-Number_Theory
 eberlm <eberlm@in.tum.de> parents: diff
changeset | 32 | qed | 
| 
acc3b7dd0b21
More material on powers for HOL-Computational_Algebra/HOL-Number_Theory
 eberlm <eberlm@in.tum.de> parents: diff
changeset | 33 | |
| 
acc3b7dd0b21
More material on powers for HOL-Computational_Algebra/HOL-Number_Theory
 eberlm <eberlm@in.tum.de> parents: diff
changeset | 34 | lemma | 
| 
acc3b7dd0b21
More material on powers for HOL-Computational_Algebra/HOL-Number_Theory
 eberlm <eberlm@in.tum.de> parents: diff
changeset | 35 | assumes "n \<noteq> 0" "\<not>is_unit (n :: 'a :: factorial_semiring)" | 
| 
acc3b7dd0b21
More material on powers for HOL-Computational_Algebra/HOL-Number_Theory
 eberlm <eberlm@in.tum.de> parents: diff
changeset | 36 | shows prime_aprimedivisor': "prime (aprimedivisor n)" | 
| 
acc3b7dd0b21
More material on powers for HOL-Computational_Algebra/HOL-Number_Theory
 eberlm <eberlm@in.tum.de> parents: diff
changeset | 37 | and aprimedivisor_dvd': "aprimedivisor n dvd n" | 
| 
acc3b7dd0b21
More material on powers for HOL-Computational_Algebra/HOL-Number_Theory
 eberlm <eberlm@in.tum.de> parents: diff
changeset | 38 | proof - | 
| 
acc3b7dd0b21
More material on powers for HOL-Computational_Algebra/HOL-Number_Theory
 eberlm <eberlm@in.tum.de> parents: diff
changeset | 39 | from someI_ex[OF prime_divisor_exists[OF assms]] | 
| 
acc3b7dd0b21
More material on powers for HOL-Computational_Algebra/HOL-Number_Theory
 eberlm <eberlm@in.tum.de> parents: diff
changeset | 40 | show "prime (aprimedivisor n)" "aprimedivisor n dvd n" | 
| 
acc3b7dd0b21
More material on powers for HOL-Computational_Algebra/HOL-Number_Theory
 eberlm <eberlm@in.tum.de> parents: diff
changeset | 41 | unfolding aprimedivisor_def by (simp_all add: conj_commute) | 
| 
acc3b7dd0b21
More material on powers for HOL-Computational_Algebra/HOL-Number_Theory
 eberlm <eberlm@in.tum.de> parents: diff
changeset | 42 | qed | 
| 
acc3b7dd0b21
More material on powers for HOL-Computational_Algebra/HOL-Number_Theory
 eberlm <eberlm@in.tum.de> parents: diff
changeset | 43 | |
| 
acc3b7dd0b21
More material on powers for HOL-Computational_Algebra/HOL-Number_Theory
 eberlm <eberlm@in.tum.de> parents: diff
changeset | 44 | lemma aprimedivisor_of_prime [simp]: | 
| 
acc3b7dd0b21
More material on powers for HOL-Computational_Algebra/HOL-Number_Theory
 eberlm <eberlm@in.tum.de> parents: diff
changeset | 45 | assumes "prime p" | 
| 
acc3b7dd0b21
More material on powers for HOL-Computational_Algebra/HOL-Number_Theory
 eberlm <eberlm@in.tum.de> parents: diff
changeset | 46 | shows "aprimedivisor p = p" | 
| 
acc3b7dd0b21
More material on powers for HOL-Computational_Algebra/HOL-Number_Theory
 eberlm <eberlm@in.tum.de> parents: diff
changeset | 47 | proof - | 
| 
acc3b7dd0b21
More material on powers for HOL-Computational_Algebra/HOL-Number_Theory
 eberlm <eberlm@in.tum.de> parents: diff
changeset | 48 | from assms have "\<exists>q. prime q \<and> q dvd p" by auto | 
| 
acc3b7dd0b21
More material on powers for HOL-Computational_Algebra/HOL-Number_Theory
 eberlm <eberlm@in.tum.de> parents: diff
changeset | 49 | from someI_ex[OF this, folded aprimedivisor_def] assms show ?thesis | 
| 
acc3b7dd0b21
More material on powers for HOL-Computational_Algebra/HOL-Number_Theory
 eberlm <eberlm@in.tum.de> parents: diff
changeset | 50 | by (auto intro: primes_dvd_imp_eq) | 
| 
acc3b7dd0b21
More material on powers for HOL-Computational_Algebra/HOL-Number_Theory
 eberlm <eberlm@in.tum.de> parents: diff
changeset | 51 | qed | 
| 
acc3b7dd0b21
More material on powers for HOL-Computational_Algebra/HOL-Number_Theory
 eberlm <eberlm@in.tum.de> parents: diff
changeset | 52 | |
| 
acc3b7dd0b21
More material on powers for HOL-Computational_Algebra/HOL-Number_Theory
 eberlm <eberlm@in.tum.de> parents: diff
changeset | 53 | lemma aprimedivisor_pos_nat: "(n::nat) > 1 \<Longrightarrow> aprimedivisor n > 0" | 
| 
acc3b7dd0b21
More material on powers for HOL-Computational_Algebra/HOL-Number_Theory
 eberlm <eberlm@in.tum.de> parents: diff
changeset | 54 | using aprimedivisor_dvd'[of n] by (auto elim: dvdE intro!: Nat.gr0I) | 
| 
acc3b7dd0b21
More material on powers for HOL-Computational_Algebra/HOL-Number_Theory
 eberlm <eberlm@in.tum.de> parents: diff
changeset | 55 | |
| 
acc3b7dd0b21
More material on powers for HOL-Computational_Algebra/HOL-Number_Theory
 eberlm <eberlm@in.tum.de> parents: diff
changeset | 56 | lemma aprimedivisor_primepow_power: | 
| 
acc3b7dd0b21
More material on powers for HOL-Computational_Algebra/HOL-Number_Theory
 eberlm <eberlm@in.tum.de> parents: diff
changeset | 57 | assumes "primepow n" "k > 0" | 
| 
acc3b7dd0b21
More material on powers for HOL-Computational_Algebra/HOL-Number_Theory
 eberlm <eberlm@in.tum.de> parents: diff
changeset | 58 | shows "aprimedivisor (n ^ k) = aprimedivisor n" | 
| 
acc3b7dd0b21
More material on powers for HOL-Computational_Algebra/HOL-Number_Theory
 eberlm <eberlm@in.tum.de> parents: diff
changeset | 59 | proof - | 
| 
acc3b7dd0b21
More material on powers for HOL-Computational_Algebra/HOL-Number_Theory
 eberlm <eberlm@in.tum.de> parents: diff
changeset | 60 | from assms obtain p l where l: "prime p" "l > 0" "n = p ^ l" | 
| 
acc3b7dd0b21
More material on powers for HOL-Computational_Algebra/HOL-Number_Theory
 eberlm <eberlm@in.tum.de> parents: diff
changeset | 61 | by (auto simp: primepow_def) | 
| 
acc3b7dd0b21
More material on powers for HOL-Computational_Algebra/HOL-Number_Theory
 eberlm <eberlm@in.tum.de> parents: diff
changeset | 62 | from l assms have *: "prime (aprimedivisor (n ^ k))" "aprimedivisor (n ^ k) dvd n ^ k" | 
| 
acc3b7dd0b21
More material on powers for HOL-Computational_Algebra/HOL-Number_Theory
 eberlm <eberlm@in.tum.de> parents: diff
changeset | 63 | by (intro prime_aprimedivisor[of p] aprimedivisor_dvd[of p] dvd_power; | 
| 
acc3b7dd0b21
More material on powers for HOL-Computational_Algebra/HOL-Number_Theory
 eberlm <eberlm@in.tum.de> parents: diff
changeset | 64 | simp add: power_mult [symmetric])+ | 
| 
acc3b7dd0b21
More material on powers for HOL-Computational_Algebra/HOL-Number_Theory
 eberlm <eberlm@in.tum.de> parents: diff
changeset | 65 | from * l have "aprimedivisor (n ^ k) dvd p ^ (l * k)" by (simp add: power_mult) | 
| 
acc3b7dd0b21
More material on powers for HOL-Computational_Algebra/HOL-Number_Theory
 eberlm <eberlm@in.tum.de> parents: diff
changeset | 66 | with assms * l have "aprimedivisor (n ^ k) dvd p" | 
| 
acc3b7dd0b21
More material on powers for HOL-Computational_Algebra/HOL-Number_Theory
 eberlm <eberlm@in.tum.de> parents: diff
changeset | 67 | by (subst (asm) prime_dvd_power_iff) simp_all | 
| 
acc3b7dd0b21
More material on powers for HOL-Computational_Algebra/HOL-Number_Theory
 eberlm <eberlm@in.tum.de> parents: diff
changeset | 68 | with l assms have "aprimedivisor (n ^ k) = p" | 
| 
acc3b7dd0b21
More material on powers for HOL-Computational_Algebra/HOL-Number_Theory
 eberlm <eberlm@in.tum.de> parents: diff
changeset | 69 | by (intro primes_dvd_imp_eq prime_aprimedivisor l) (auto simp: power_mult [symmetric]) | 
| 
acc3b7dd0b21
More material on powers for HOL-Computational_Algebra/HOL-Number_Theory
 eberlm <eberlm@in.tum.de> parents: diff
changeset | 70 | moreover from l have "aprimedivisor n dvd p ^ l" | 
| 
acc3b7dd0b21
More material on powers for HOL-Computational_Algebra/HOL-Number_Theory
 eberlm <eberlm@in.tum.de> parents: diff
changeset | 71 | by (auto intro: aprimedivisor_dvd simp: prime_gt_0_nat) | 
| 
acc3b7dd0b21
More material on powers for HOL-Computational_Algebra/HOL-Number_Theory
 eberlm <eberlm@in.tum.de> parents: diff
changeset | 72 | with assms l have "aprimedivisor n dvd p" | 
| 
acc3b7dd0b21
More material on powers for HOL-Computational_Algebra/HOL-Number_Theory
 eberlm <eberlm@in.tum.de> parents: diff
changeset | 73 | by (subst (asm) prime_dvd_power_iff) (auto intro!: prime_aprimedivisor simp: prime_gt_0_nat) | 
| 
acc3b7dd0b21
More material on powers for HOL-Computational_Algebra/HOL-Number_Theory
 eberlm <eberlm@in.tum.de> parents: diff
changeset | 74 | with l assms have "aprimedivisor n = p" | 
| 
acc3b7dd0b21
More material on powers for HOL-Computational_Algebra/HOL-Number_Theory
 eberlm <eberlm@in.tum.de> parents: diff
changeset | 75 | by (intro primes_dvd_imp_eq prime_aprimedivisor l) auto | 
| 
acc3b7dd0b21
More material on powers for HOL-Computational_Algebra/HOL-Number_Theory
 eberlm <eberlm@in.tum.de> parents: diff
changeset | 76 | ultimately show ?thesis by simp | 
| 
acc3b7dd0b21
More material on powers for HOL-Computational_Algebra/HOL-Number_Theory
 eberlm <eberlm@in.tum.de> parents: diff
changeset | 77 | qed | 
| 
acc3b7dd0b21
More material on powers for HOL-Computational_Algebra/HOL-Number_Theory
 eberlm <eberlm@in.tum.de> parents: diff
changeset | 78 | |
| 
acc3b7dd0b21
More material on powers for HOL-Computational_Algebra/HOL-Number_Theory
 eberlm <eberlm@in.tum.de> parents: diff
changeset | 79 | lemma aprimedivisor_prime_power: | 
| 
acc3b7dd0b21
More material on powers for HOL-Computational_Algebra/HOL-Number_Theory
 eberlm <eberlm@in.tum.de> parents: diff
changeset | 80 | assumes "prime p" "k > 0" | 
| 
acc3b7dd0b21
More material on powers for HOL-Computational_Algebra/HOL-Number_Theory
 eberlm <eberlm@in.tum.de> parents: diff
changeset | 81 | shows "aprimedivisor (p ^ k) = p" | 
| 
acc3b7dd0b21
More material on powers for HOL-Computational_Algebra/HOL-Number_Theory
 eberlm <eberlm@in.tum.de> parents: diff
changeset | 82 | proof - | 
| 
acc3b7dd0b21
More material on powers for HOL-Computational_Algebra/HOL-Number_Theory
 eberlm <eberlm@in.tum.de> parents: diff
changeset | 83 | from assms have *: "prime (aprimedivisor (p ^ k))" "aprimedivisor (p ^ k) dvd p ^ k" | 
| 
acc3b7dd0b21
More material on powers for HOL-Computational_Algebra/HOL-Number_Theory
 eberlm <eberlm@in.tum.de> parents: diff
changeset | 84 | by (intro prime_aprimedivisor[of p] aprimedivisor_dvd[of p]; simp add: prime_nat_iff)+ | 
| 
acc3b7dd0b21
More material on powers for HOL-Computational_Algebra/HOL-Number_Theory
 eberlm <eberlm@in.tum.de> parents: diff
changeset | 85 | from assms * have "aprimedivisor (p ^ k) dvd p" | 
| 
acc3b7dd0b21
More material on powers for HOL-Computational_Algebra/HOL-Number_Theory
 eberlm <eberlm@in.tum.de> parents: diff
changeset | 86 | by (subst (asm) prime_dvd_power_iff) simp_all | 
| 
acc3b7dd0b21
More material on powers for HOL-Computational_Algebra/HOL-Number_Theory
 eberlm <eberlm@in.tum.de> parents: diff
changeset | 87 | with assms * show "aprimedivisor (p ^ k) = p" by (intro primes_dvd_imp_eq) | 
| 
acc3b7dd0b21
More material on powers for HOL-Computational_Algebra/HOL-Number_Theory
 eberlm <eberlm@in.tum.de> parents: diff
changeset | 88 | qed | 
| 
acc3b7dd0b21
More material on powers for HOL-Computational_Algebra/HOL-Number_Theory
 eberlm <eberlm@in.tum.de> parents: diff
changeset | 89 | |
| 
acc3b7dd0b21
More material on powers for HOL-Computational_Algebra/HOL-Number_Theory
 eberlm <eberlm@in.tum.de> parents: diff
changeset | 90 | lemma prime_factorization_primepow: | 
| 
acc3b7dd0b21
More material on powers for HOL-Computational_Algebra/HOL-Number_Theory
 eberlm <eberlm@in.tum.de> parents: diff
changeset | 91 | assumes "primepow n" | 
| 
acc3b7dd0b21
More material on powers for HOL-Computational_Algebra/HOL-Number_Theory
 eberlm <eberlm@in.tum.de> parents: diff
changeset | 92 | shows "prime_factorization n = | 
| 
acc3b7dd0b21
More material on powers for HOL-Computational_Algebra/HOL-Number_Theory
 eberlm <eberlm@in.tum.de> parents: diff
changeset | 93 | replicate_mset (multiplicity (aprimedivisor n) n) (aprimedivisor n)" | 
| 
acc3b7dd0b21
More material on powers for HOL-Computational_Algebra/HOL-Number_Theory
 eberlm <eberlm@in.tum.de> parents: diff
changeset | 94 | using assms | 
| 
acc3b7dd0b21
More material on powers for HOL-Computational_Algebra/HOL-Number_Theory
 eberlm <eberlm@in.tum.de> parents: diff
changeset | 95 | by (auto simp: primepow_def aprimedivisor_prime_power prime_factorization_prime_power) | 
| 
acc3b7dd0b21
More material on powers for HOL-Computational_Algebra/HOL-Number_Theory
 eberlm <eberlm@in.tum.de> parents: diff
changeset | 96 | |
| 
acc3b7dd0b21
More material on powers for HOL-Computational_Algebra/HOL-Number_Theory
 eberlm <eberlm@in.tum.de> parents: diff
changeset | 97 | lemma primepow_decompose: | 
| 71398 
e0237f2eb49d
Removed multiplicativity assumption from normalization_semidom
 Manuel Eberl <eberlm@in.tum.de> parents: 
68188diff
changeset | 98 | fixes n :: "'a :: factorial_semiring_multiplicative" | 
| 66276 
acc3b7dd0b21
More material on powers for HOL-Computational_Algebra/HOL-Number_Theory
 eberlm <eberlm@in.tum.de> parents: diff
changeset | 99 | assumes "primepow n" | 
| 
acc3b7dd0b21
More material on powers for HOL-Computational_Algebra/HOL-Number_Theory
 eberlm <eberlm@in.tum.de> parents: diff
changeset | 100 | shows "aprimedivisor n ^ multiplicity (aprimedivisor n) n = n" | 
| 
acc3b7dd0b21
More material on powers for HOL-Computational_Algebra/HOL-Number_Theory
 eberlm <eberlm@in.tum.de> parents: diff
changeset | 101 | proof - | 
| 
acc3b7dd0b21
More material on powers for HOL-Computational_Algebra/HOL-Number_Theory
 eberlm <eberlm@in.tum.de> parents: diff
changeset | 102 | from assms have "n \<noteq> 0" by (intro notI) (auto simp: primepow_def) | 
| 
acc3b7dd0b21
More material on powers for HOL-Computational_Algebra/HOL-Number_Theory
 eberlm <eberlm@in.tum.de> parents: diff
changeset | 103 | hence "n = unit_factor n * prod_mset (prime_factorization n)" | 
| 
acc3b7dd0b21
More material on powers for HOL-Computational_Algebra/HOL-Number_Theory
 eberlm <eberlm@in.tum.de> parents: diff
changeset | 104 | by (subst prod_mset_prime_factorization) simp_all | 
| 
acc3b7dd0b21
More material on powers for HOL-Computational_Algebra/HOL-Number_Theory
 eberlm <eberlm@in.tum.de> parents: diff
changeset | 105 | also from assms have "unit_factor n = 1" by (auto simp: primepow_def unit_factor_power) | 
| 
acc3b7dd0b21
More material on powers for HOL-Computational_Algebra/HOL-Number_Theory
 eberlm <eberlm@in.tum.de> parents: diff
changeset | 106 | also have "prime_factorization n = | 
| 
acc3b7dd0b21
More material on powers for HOL-Computational_Algebra/HOL-Number_Theory
 eberlm <eberlm@in.tum.de> parents: diff
changeset | 107 | replicate_mset (multiplicity (aprimedivisor n) n) (aprimedivisor n)" | 
| 
acc3b7dd0b21
More material on powers for HOL-Computational_Algebra/HOL-Number_Theory
 eberlm <eberlm@in.tum.de> parents: diff
changeset | 108 | by (intro prime_factorization_primepow assms) | 
| 
acc3b7dd0b21
More material on powers for HOL-Computational_Algebra/HOL-Number_Theory
 eberlm <eberlm@in.tum.de> parents: diff
changeset | 109 | also have "prod_mset \<dots> = aprimedivisor n ^ multiplicity (aprimedivisor n) n" by simp | 
| 
acc3b7dd0b21
More material on powers for HOL-Computational_Algebra/HOL-Number_Theory
 eberlm <eberlm@in.tum.de> parents: diff
changeset | 110 | finally show ?thesis by simp | 
| 
acc3b7dd0b21
More material on powers for HOL-Computational_Algebra/HOL-Number_Theory
 eberlm <eberlm@in.tum.de> parents: diff
changeset | 111 | qed | 
| 
acc3b7dd0b21
More material on powers for HOL-Computational_Algebra/HOL-Number_Theory
 eberlm <eberlm@in.tum.de> parents: diff
changeset | 112 | |
| 
acc3b7dd0b21
More material on powers for HOL-Computational_Algebra/HOL-Number_Theory
 eberlm <eberlm@in.tum.de> parents: diff
changeset | 113 | lemma prime_power_not_one: | 
| 
acc3b7dd0b21
More material on powers for HOL-Computational_Algebra/HOL-Number_Theory
 eberlm <eberlm@in.tum.de> parents: diff
changeset | 114 | assumes "prime p" "k > 0" | 
| 
acc3b7dd0b21
More material on powers for HOL-Computational_Algebra/HOL-Number_Theory
 eberlm <eberlm@in.tum.de> parents: diff
changeset | 115 | shows "p ^ k \<noteq> 1" | 
| 
acc3b7dd0b21
More material on powers for HOL-Computational_Algebra/HOL-Number_Theory
 eberlm <eberlm@in.tum.de> parents: diff
changeset | 116 | proof | 
| 
acc3b7dd0b21
More material on powers for HOL-Computational_Algebra/HOL-Number_Theory
 eberlm <eberlm@in.tum.de> parents: diff
changeset | 117 | assume "p ^ k = 1" | 
| 
acc3b7dd0b21
More material on powers for HOL-Computational_Algebra/HOL-Number_Theory
 eberlm <eberlm@in.tum.de> parents: diff
changeset | 118 | hence "is_unit (p ^ k)" by simp | 
| 
acc3b7dd0b21
More material on powers for HOL-Computational_Algebra/HOL-Number_Theory
 eberlm <eberlm@in.tum.de> parents: diff
changeset | 119 | thus False using assms by (simp add: is_unit_power_iff) | 
| 
acc3b7dd0b21
More material on powers for HOL-Computational_Algebra/HOL-Number_Theory
 eberlm <eberlm@in.tum.de> parents: diff
changeset | 120 | qed | 
| 
acc3b7dd0b21
More material on powers for HOL-Computational_Algebra/HOL-Number_Theory
 eberlm <eberlm@in.tum.de> parents: diff
changeset | 121 | |
| 
acc3b7dd0b21
More material on powers for HOL-Computational_Algebra/HOL-Number_Theory
 eberlm <eberlm@in.tum.de> parents: diff
changeset | 122 | lemma zero_not_primepow [simp]: "\<not>primepow 0" | 
| 
acc3b7dd0b21
More material on powers for HOL-Computational_Algebra/HOL-Number_Theory
 eberlm <eberlm@in.tum.de> parents: diff
changeset | 123 | by (auto simp: primepow_def) | 
| 
acc3b7dd0b21
More material on powers for HOL-Computational_Algebra/HOL-Number_Theory
 eberlm <eberlm@in.tum.de> parents: diff
changeset | 124 | |
| 
acc3b7dd0b21
More material on powers for HOL-Computational_Algebra/HOL-Number_Theory
 eberlm <eberlm@in.tum.de> parents: diff
changeset | 125 | lemma one_not_primepow [simp]: "\<not>primepow 1" | 
| 
acc3b7dd0b21
More material on powers for HOL-Computational_Algebra/HOL-Number_Theory
 eberlm <eberlm@in.tum.de> parents: diff
changeset | 126 | by (auto simp: primepow_def prime_power_not_one) | 
| 
acc3b7dd0b21
More material on powers for HOL-Computational_Algebra/HOL-Number_Theory
 eberlm <eberlm@in.tum.de> parents: diff
changeset | 127 | |
| 
acc3b7dd0b21
More material on powers for HOL-Computational_Algebra/HOL-Number_Theory
 eberlm <eberlm@in.tum.de> parents: diff
changeset | 128 | lemma primepow_not_unit [simp]: "primepow p \<Longrightarrow> \<not>is_unit p" | 
| 
acc3b7dd0b21
More material on powers for HOL-Computational_Algebra/HOL-Number_Theory
 eberlm <eberlm@in.tum.de> parents: diff
changeset | 129 | by (auto simp: primepow_def is_unit_power_iff) | 
| 
acc3b7dd0b21
More material on powers for HOL-Computational_Algebra/HOL-Number_Theory
 eberlm <eberlm@in.tum.de> parents: diff
changeset | 130 | |
| 67135 
1a94352812f4
Moved material from AFP to Analysis/Number_Theory
 Manuel Eberl <eberlm@in.tum.de> parents: 
67108diff
changeset | 131 | lemma not_primepow_Suc_0_nat [simp]: "\<not>primepow (Suc 0)" | 
| 
1a94352812f4
Moved material from AFP to Analysis/Number_Theory
 Manuel Eberl <eberlm@in.tum.de> parents: 
67108diff
changeset | 132 | using primepow_gt_Suc_0[of "Suc 0"] by auto | 
| 
1a94352812f4
Moved material from AFP to Analysis/Number_Theory
 Manuel Eberl <eberlm@in.tum.de> parents: 
67108diff
changeset | 133 | |
| 
1a94352812f4
Moved material from AFP to Analysis/Number_Theory
 Manuel Eberl <eberlm@in.tum.de> parents: 
67108diff
changeset | 134 | lemma primepow_gt_0_nat: "primepow n \<Longrightarrow> n > (0::nat)" | 
| 
1a94352812f4
Moved material from AFP to Analysis/Number_Theory
 Manuel Eberl <eberlm@in.tum.de> parents: 
67108diff
changeset | 135 | using primepow_gt_Suc_0[of n] by simp | 
| 
1a94352812f4
Moved material from AFP to Analysis/Number_Theory
 Manuel Eberl <eberlm@in.tum.de> parents: 
67108diff
changeset | 136 | |
| 71398 
e0237f2eb49d
Removed multiplicativity assumption from normalization_semidom
 Manuel Eberl <eberlm@in.tum.de> parents: 
68188diff
changeset | 137 | lemma unit_factor_primepow: | 
| 
e0237f2eb49d
Removed multiplicativity assumption from normalization_semidom
 Manuel Eberl <eberlm@in.tum.de> parents: 
68188diff
changeset | 138 | fixes p :: "'a :: factorial_semiring_multiplicative" | 
| 
e0237f2eb49d
Removed multiplicativity assumption from normalization_semidom
 Manuel Eberl <eberlm@in.tum.de> parents: 
68188diff
changeset | 139 | shows "primepow p \<Longrightarrow> unit_factor p = 1" | 
| 66276 
acc3b7dd0b21
More material on powers for HOL-Computational_Algebra/HOL-Number_Theory
 eberlm <eberlm@in.tum.de> parents: diff
changeset | 140 | by (auto simp: primepow_def unit_factor_power) | 
| 
acc3b7dd0b21
More material on powers for HOL-Computational_Algebra/HOL-Number_Theory
 eberlm <eberlm@in.tum.de> parents: diff
changeset | 141 | |
| 
acc3b7dd0b21
More material on powers for HOL-Computational_Algebra/HOL-Number_Theory
 eberlm <eberlm@in.tum.de> parents: diff
changeset | 142 | lemma aprimedivisor_primepow: | 
| 71398 
e0237f2eb49d
Removed multiplicativity assumption from normalization_semidom
 Manuel Eberl <eberlm@in.tum.de> parents: 
68188diff
changeset | 143 | assumes "prime p" "p dvd n" "primepow (n :: 'a :: factorial_semiring_multiplicative)" | 
| 66276 
acc3b7dd0b21
More material on powers for HOL-Computational_Algebra/HOL-Number_Theory
 eberlm <eberlm@in.tum.de> parents: diff
changeset | 144 | shows "aprimedivisor (p * n) = p" "aprimedivisor n = p" | 
| 
acc3b7dd0b21
More material on powers for HOL-Computational_Algebra/HOL-Number_Theory
 eberlm <eberlm@in.tum.de> parents: diff
changeset | 145 | proof - | 
| 
acc3b7dd0b21
More material on powers for HOL-Computational_Algebra/HOL-Number_Theory
 eberlm <eberlm@in.tum.de> parents: diff
changeset | 146 | from assms have [simp]: "n \<noteq> 0" by auto | 
| 
acc3b7dd0b21
More material on powers for HOL-Computational_Algebra/HOL-Number_Theory
 eberlm <eberlm@in.tum.de> parents: diff
changeset | 147 | define q where "q = aprimedivisor n" | 
| 
acc3b7dd0b21
More material on powers for HOL-Computational_Algebra/HOL-Number_Theory
 eberlm <eberlm@in.tum.de> parents: diff
changeset | 148 | with assms have q: "prime q" by (auto simp: q_def intro!: prime_aprimedivisor) | 
| 
acc3b7dd0b21
More material on powers for HOL-Computational_Algebra/HOL-Number_Theory
 eberlm <eberlm@in.tum.de> parents: diff
changeset | 149 | from \<open>primepow n\<close> have n: "n = q ^ multiplicity q n" | 
| 
acc3b7dd0b21
More material on powers for HOL-Computational_Algebra/HOL-Number_Theory
 eberlm <eberlm@in.tum.de> parents: diff
changeset | 150 | by (simp add: primepow_decompose q_def) | 
| 
acc3b7dd0b21
More material on powers for HOL-Computational_Algebra/HOL-Number_Theory
 eberlm <eberlm@in.tum.de> parents: diff
changeset | 151 | have nz: "multiplicity q n \<noteq> 0" | 
| 
acc3b7dd0b21
More material on powers for HOL-Computational_Algebra/HOL-Number_Theory
 eberlm <eberlm@in.tum.de> parents: diff
changeset | 152 | proof | 
| 
acc3b7dd0b21
More material on powers for HOL-Computational_Algebra/HOL-Number_Theory
 eberlm <eberlm@in.tum.de> parents: diff
changeset | 153 | assume "multiplicity q n = 0" | 
| 
acc3b7dd0b21
More material on powers for HOL-Computational_Algebra/HOL-Number_Theory
 eberlm <eberlm@in.tum.de> parents: diff
changeset | 154 | with n have n': "n = unit_factor n" by simp | 
| 
acc3b7dd0b21
More material on powers for HOL-Computational_Algebra/HOL-Number_Theory
 eberlm <eberlm@in.tum.de> parents: diff
changeset | 155 | have "is_unit n" by (subst n', rule unit_factor_is_unit) (insert assms, auto) | 
| 
acc3b7dd0b21
More material on powers for HOL-Computational_Algebra/HOL-Number_Theory
 eberlm <eberlm@in.tum.de> parents: diff
changeset | 156 | with assms show False by auto | 
| 
acc3b7dd0b21
More material on powers for HOL-Computational_Algebra/HOL-Number_Theory
 eberlm <eberlm@in.tum.de> parents: diff
changeset | 157 | qed | 
| 
acc3b7dd0b21
More material on powers for HOL-Computational_Algebra/HOL-Number_Theory
 eberlm <eberlm@in.tum.de> parents: diff
changeset | 158 | with \<open>prime p\<close> \<open>p dvd n\<close> q have "p dvd q" | 
| 
acc3b7dd0b21
More material on powers for HOL-Computational_Algebra/HOL-Number_Theory
 eberlm <eberlm@in.tum.de> parents: diff
changeset | 159 | by (subst (asm) n) (auto intro: prime_dvd_power) | 
| 
acc3b7dd0b21
More material on powers for HOL-Computational_Algebra/HOL-Number_Theory
 eberlm <eberlm@in.tum.de> parents: diff
changeset | 160 | with \<open>prime p\<close> q have "p = q" by (intro primes_dvd_imp_eq) | 
| 
acc3b7dd0b21
More material on powers for HOL-Computational_Algebra/HOL-Number_Theory
 eberlm <eberlm@in.tum.de> parents: diff
changeset | 161 | thus "aprimedivisor n = p" by (simp add: q_def) | 
| 
acc3b7dd0b21
More material on powers for HOL-Computational_Algebra/HOL-Number_Theory
 eberlm <eberlm@in.tum.de> parents: diff
changeset | 162 | |
| 
acc3b7dd0b21
More material on powers for HOL-Computational_Algebra/HOL-Number_Theory
 eberlm <eberlm@in.tum.de> parents: diff
changeset | 163 | define r where "r = aprimedivisor (p * n)" | 
| 
acc3b7dd0b21
More material on powers for HOL-Computational_Algebra/HOL-Number_Theory
 eberlm <eberlm@in.tum.de> parents: diff
changeset | 164 | with assms have r: "r dvd (p * n)" "prime r" unfolding r_def | 
| 
acc3b7dd0b21
More material on powers for HOL-Computational_Algebra/HOL-Number_Theory
 eberlm <eberlm@in.tum.de> parents: diff
changeset | 165 | by (intro aprimedivisor_dvd[of p] prime_aprimedivisor[of p]; simp)+ | 
| 
acc3b7dd0b21
More material on powers for HOL-Computational_Algebra/HOL-Number_Theory
 eberlm <eberlm@in.tum.de> parents: diff
changeset | 166 | hence "r dvd q ^ Suc (multiplicity q n)" | 
| 
acc3b7dd0b21
More material on powers for HOL-Computational_Algebra/HOL-Number_Theory
 eberlm <eberlm@in.tum.de> parents: diff
changeset | 167 | by (subst (asm) n) (auto simp: \<open>p = q\<close> dest: dvd_unit_imp_unit) | 
| 
acc3b7dd0b21
More material on powers for HOL-Computational_Algebra/HOL-Number_Theory
 eberlm <eberlm@in.tum.de> parents: diff
changeset | 168 | with r have "r dvd q" | 
| 
acc3b7dd0b21
More material on powers for HOL-Computational_Algebra/HOL-Number_Theory
 eberlm <eberlm@in.tum.de> parents: diff
changeset | 169 | by (auto intro: prime_dvd_power_nat simp: prime_dvd_mult_iff dest: prime_dvd_power) | 
| 
acc3b7dd0b21
More material on powers for HOL-Computational_Algebra/HOL-Number_Theory
 eberlm <eberlm@in.tum.de> parents: diff
changeset | 170 | with r q have "r = q" by (intro primes_dvd_imp_eq) | 
| 
acc3b7dd0b21
More material on powers for HOL-Computational_Algebra/HOL-Number_Theory
 eberlm <eberlm@in.tum.de> parents: diff
changeset | 171 | thus "aprimedivisor (p * n) = p" by (simp add: r_def \<open>p = q\<close>) | 
| 
acc3b7dd0b21
More material on powers for HOL-Computational_Algebra/HOL-Number_Theory
 eberlm <eberlm@in.tum.de> parents: diff
changeset | 172 | qed | 
| 
acc3b7dd0b21
More material on powers for HOL-Computational_Algebra/HOL-Number_Theory
 eberlm <eberlm@in.tum.de> parents: diff
changeset | 173 | |
| 
acc3b7dd0b21
More material on powers for HOL-Computational_Algebra/HOL-Number_Theory
 eberlm <eberlm@in.tum.de> parents: diff
changeset | 174 | lemma power_eq_prime_powerD: | 
| 
acc3b7dd0b21
More material on powers for HOL-Computational_Algebra/HOL-Number_Theory
 eberlm <eberlm@in.tum.de> parents: diff
changeset | 175 | fixes p :: "'a :: factorial_semiring" | 
| 
acc3b7dd0b21
More material on powers for HOL-Computational_Algebra/HOL-Number_Theory
 eberlm <eberlm@in.tum.de> parents: diff
changeset | 176 | assumes "prime p" "n > 0" "x ^ n = p ^ k" | 
| 
acc3b7dd0b21
More material on powers for HOL-Computational_Algebra/HOL-Number_Theory
 eberlm <eberlm@in.tum.de> parents: diff
changeset | 177 | shows "\<exists>i. normalize x = normalize (p ^ i)" | 
| 
acc3b7dd0b21
More material on powers for HOL-Computational_Algebra/HOL-Number_Theory
 eberlm <eberlm@in.tum.de> parents: diff
changeset | 178 | proof - | 
| 
acc3b7dd0b21
More material on powers for HOL-Computational_Algebra/HOL-Number_Theory
 eberlm <eberlm@in.tum.de> parents: diff
changeset | 179 | have "normalize x = normalize (p ^ multiplicity p x)" | 
| 
acc3b7dd0b21
More material on powers for HOL-Computational_Algebra/HOL-Number_Theory
 eberlm <eberlm@in.tum.de> parents: diff
changeset | 180 | proof (rule multiplicity_eq_imp_eq) | 
| 
acc3b7dd0b21
More material on powers for HOL-Computational_Algebra/HOL-Number_Theory
 eberlm <eberlm@in.tum.de> parents: diff
changeset | 181 | fix q :: 'a assume "prime q" | 
| 
acc3b7dd0b21
More material on powers for HOL-Computational_Algebra/HOL-Number_Theory
 eberlm <eberlm@in.tum.de> parents: diff
changeset | 182 | from assms have "multiplicity q (x ^ n) = multiplicity q (p ^ k)" by simp | 
| 
acc3b7dd0b21
More material on powers for HOL-Computational_Algebra/HOL-Number_Theory
 eberlm <eberlm@in.tum.de> parents: diff
changeset | 183 | with \<open>prime q\<close> and assms have "n * multiplicity q x = k * multiplicity q p" | 
| 
acc3b7dd0b21
More material on powers for HOL-Computational_Algebra/HOL-Number_Theory
 eberlm <eberlm@in.tum.de> parents: diff
changeset | 184 | by (subst (asm) (1 2) prime_elem_multiplicity_power_distrib) (auto simp: power_0_left) | 
| 
acc3b7dd0b21
More material on powers for HOL-Computational_Algebra/HOL-Number_Theory
 eberlm <eberlm@in.tum.de> parents: diff
changeset | 185 | with assms and \<open>prime q\<close> show "multiplicity q x = multiplicity q (p ^ multiplicity p x)" | 
| 
acc3b7dd0b21
More material on powers for HOL-Computational_Algebra/HOL-Number_Theory
 eberlm <eberlm@in.tum.de> parents: diff
changeset | 186 | by (cases "p = q") (auto simp: multiplicity_distinct_prime_power prime_multiplicity_other) | 
| 
acc3b7dd0b21
More material on powers for HOL-Computational_Algebra/HOL-Number_Theory
 eberlm <eberlm@in.tum.de> parents: diff
changeset | 187 | qed (insert assms, auto simp: power_0_left) | 
| 
acc3b7dd0b21
More material on powers for HOL-Computational_Algebra/HOL-Number_Theory
 eberlm <eberlm@in.tum.de> parents: diff
changeset | 188 | thus ?thesis by auto | 
| 
acc3b7dd0b21
More material on powers for HOL-Computational_Algebra/HOL-Number_Theory
 eberlm <eberlm@in.tum.de> parents: diff
changeset | 189 | qed | 
| 
acc3b7dd0b21
More material on powers for HOL-Computational_Algebra/HOL-Number_Theory
 eberlm <eberlm@in.tum.de> parents: diff
changeset | 190 | |
| 
acc3b7dd0b21
More material on powers for HOL-Computational_Algebra/HOL-Number_Theory
 eberlm <eberlm@in.tum.de> parents: diff
changeset | 191 | |
| 
acc3b7dd0b21
More material on powers for HOL-Computational_Algebra/HOL-Number_Theory
 eberlm <eberlm@in.tum.de> parents: diff
changeset | 192 | lemma primepow_power_iff: | 
| 71398 
e0237f2eb49d
Removed multiplicativity assumption from normalization_semidom
 Manuel Eberl <eberlm@in.tum.de> parents: 
68188diff
changeset | 193 | fixes p :: "'a :: factorial_semiring_multiplicative" | 
| 66276 
acc3b7dd0b21
More material on powers for HOL-Computational_Algebra/HOL-Number_Theory
 eberlm <eberlm@in.tum.de> parents: diff
changeset | 194 | assumes "unit_factor p = 1" | 
| 71398 
e0237f2eb49d
Removed multiplicativity assumption from normalization_semidom
 Manuel Eberl <eberlm@in.tum.de> parents: 
68188diff
changeset | 195 | shows "primepow (p ^ n) \<longleftrightarrow> primepow p \<and> n > 0" | 
| 66276 
acc3b7dd0b21
More material on powers for HOL-Computational_Algebra/HOL-Number_Theory
 eberlm <eberlm@in.tum.de> parents: diff
changeset | 196 | proof safe | 
| 
acc3b7dd0b21
More material on powers for HOL-Computational_Algebra/HOL-Number_Theory
 eberlm <eberlm@in.tum.de> parents: diff
changeset | 197 | assume "primepow (p ^ n)" | 
| 
acc3b7dd0b21
More material on powers for HOL-Computational_Algebra/HOL-Number_Theory
 eberlm <eberlm@in.tum.de> parents: diff
changeset | 198 | hence n: "n \<noteq> 0" by (auto intro!: Nat.gr0I) | 
| 
acc3b7dd0b21
More material on powers for HOL-Computational_Algebra/HOL-Number_Theory
 eberlm <eberlm@in.tum.de> parents: diff
changeset | 199 | thus "n > 0" by simp | 
| 
acc3b7dd0b21
More material on powers for HOL-Computational_Algebra/HOL-Number_Theory
 eberlm <eberlm@in.tum.de> parents: diff
changeset | 200 | from assms have [simp]: "normalize p = p" | 
| 
acc3b7dd0b21
More material on powers for HOL-Computational_Algebra/HOL-Number_Theory
 eberlm <eberlm@in.tum.de> parents: diff
changeset | 201 | using normalize_mult_unit_factor[of p] by (simp only: mult.right_neutral) | 
| 
acc3b7dd0b21
More material on powers for HOL-Computational_Algebra/HOL-Number_Theory
 eberlm <eberlm@in.tum.de> parents: diff
changeset | 202 | from \<open>primepow (p ^ n)\<close> obtain q k where *: "k > 0" "prime q" "p ^ n = q ^ k" | 
| 
acc3b7dd0b21
More material on powers for HOL-Computational_Algebra/HOL-Number_Theory
 eberlm <eberlm@in.tum.de> parents: diff
changeset | 203 | by (auto simp: primepow_def) | 
| 
acc3b7dd0b21
More material on powers for HOL-Computational_Algebra/HOL-Number_Theory
 eberlm <eberlm@in.tum.de> parents: diff
changeset | 204 | with power_eq_prime_powerD[of q n p k] n | 
| 
acc3b7dd0b21
More material on powers for HOL-Computational_Algebra/HOL-Number_Theory
 eberlm <eberlm@in.tum.de> parents: diff
changeset | 205 | obtain i where eq: "normalize p = normalize (q ^ i)" by auto | 
| 
acc3b7dd0b21
More material on powers for HOL-Computational_Algebra/HOL-Number_Theory
 eberlm <eberlm@in.tum.de> parents: diff
changeset | 206 | with primepow_not_unit[OF \<open>primepow (p ^ n)\<close>] have "i \<noteq> 0" | 
| 
acc3b7dd0b21
More material on powers for HOL-Computational_Algebra/HOL-Number_Theory
 eberlm <eberlm@in.tum.de> parents: diff
changeset | 207 | by (intro notI) (simp add: normalize_1_iff is_unit_power_iff del: primepow_not_unit) | 
| 
acc3b7dd0b21
More material on powers for HOL-Computational_Algebra/HOL-Number_Theory
 eberlm <eberlm@in.tum.de> parents: diff
changeset | 208 | with \<open>normalize p = normalize (q ^ i)\<close> \<open>prime q\<close> show "primepow p" | 
| 
acc3b7dd0b21
More material on powers for HOL-Computational_Algebra/HOL-Number_Theory
 eberlm <eberlm@in.tum.de> parents: diff
changeset | 209 | by (auto simp: normalize_power primepow_def intro!: exI[of _ q] exI[of _ i]) | 
| 
acc3b7dd0b21
More material on powers for HOL-Computational_Algebra/HOL-Number_Theory
 eberlm <eberlm@in.tum.de> parents: diff
changeset | 210 | next | 
| 
acc3b7dd0b21
More material on powers for HOL-Computational_Algebra/HOL-Number_Theory
 eberlm <eberlm@in.tum.de> parents: diff
changeset | 211 | assume "primepow p" "n > 0" | 
| 
acc3b7dd0b21
More material on powers for HOL-Computational_Algebra/HOL-Number_Theory
 eberlm <eberlm@in.tum.de> parents: diff
changeset | 212 | then obtain q k where *: "k > 0" "prime q" "p = q ^ k" by (auto simp: primepow_def) | 
| 
acc3b7dd0b21
More material on powers for HOL-Computational_Algebra/HOL-Number_Theory
 eberlm <eberlm@in.tum.de> parents: diff
changeset | 213 | with \<open>n > 0\<close> show "primepow (p ^ n)" | 
| 
acc3b7dd0b21
More material on powers for HOL-Computational_Algebra/HOL-Number_Theory
 eberlm <eberlm@in.tum.de> parents: diff
changeset | 214 | by (auto simp: primepow_def power_mult intro!: exI[of _ q] exI[of _ "k * n"]) | 
| 
acc3b7dd0b21
More material on powers for HOL-Computational_Algebra/HOL-Number_Theory
 eberlm <eberlm@in.tum.de> parents: diff
changeset | 215 | qed | 
| 
acc3b7dd0b21
More material on powers for HOL-Computational_Algebra/HOL-Number_Theory
 eberlm <eberlm@in.tum.de> parents: diff
changeset | 216 | |
| 67135 
1a94352812f4
Moved material from AFP to Analysis/Number_Theory
 Manuel Eberl <eberlm@in.tum.de> parents: 
67108diff
changeset | 217 | lemma primepow_power_iff_nat: | 
| 
1a94352812f4
Moved material from AFP to Analysis/Number_Theory
 Manuel Eberl <eberlm@in.tum.de> parents: 
67108diff
changeset | 218 | "p > 0 \<Longrightarrow> primepow (p ^ n) \<longleftrightarrow> primepow (p :: nat) \<and> n > 0" | 
| 
1a94352812f4
Moved material from AFP to Analysis/Number_Theory
 Manuel Eberl <eberlm@in.tum.de> parents: 
67108diff
changeset | 219 | by (rule primepow_power_iff) (simp_all add: unit_factor_nat_def) | 
| 
1a94352812f4
Moved material from AFP to Analysis/Number_Theory
 Manuel Eberl <eberlm@in.tum.de> parents: 
67108diff
changeset | 220 | |
| 66276 
acc3b7dd0b21
More material on powers for HOL-Computational_Algebra/HOL-Number_Theory
 eberlm <eberlm@in.tum.de> parents: diff
changeset | 221 | lemma primepow_prime [simp]: "prime n \<Longrightarrow> primepow n" | 
| 
acc3b7dd0b21
More material on powers for HOL-Computational_Algebra/HOL-Number_Theory
 eberlm <eberlm@in.tum.de> parents: diff
changeset | 222 | by (auto simp: primepow_def intro!: exI[of _ n] exI[of _ "1::nat"]) | 
| 
acc3b7dd0b21
More material on powers for HOL-Computational_Algebra/HOL-Number_Theory
 eberlm <eberlm@in.tum.de> parents: diff
changeset | 223 | |
| 
acc3b7dd0b21
More material on powers for HOL-Computational_Algebra/HOL-Number_Theory
 eberlm <eberlm@in.tum.de> parents: diff
changeset | 224 | lemma primepow_prime_power [simp]: | 
| 71398 
e0237f2eb49d
Removed multiplicativity assumption from normalization_semidom
 Manuel Eberl <eberlm@in.tum.de> parents: 
68188diff
changeset | 225 | "prime (p :: 'a :: factorial_semiring_multiplicative) \<Longrightarrow> primepow (p ^ n) \<longleftrightarrow> n > 0" | 
| 66276 
acc3b7dd0b21
More material on powers for HOL-Computational_Algebra/HOL-Number_Theory
 eberlm <eberlm@in.tum.de> parents: diff
changeset | 226 | by (subst primepow_power_iff) auto | 
| 
acc3b7dd0b21
More material on powers for HOL-Computational_Algebra/HOL-Number_Theory
 eberlm <eberlm@in.tum.de> parents: diff
changeset | 227 | |
| 67135 
1a94352812f4
Moved material from AFP to Analysis/Number_Theory
 Manuel Eberl <eberlm@in.tum.de> parents: 
67108diff
changeset | 228 | lemma aprimedivisor_vimage: | 
| 71398 
e0237f2eb49d
Removed multiplicativity assumption from normalization_semidom
 Manuel Eberl <eberlm@in.tum.de> parents: 
68188diff
changeset | 229 | assumes "prime (p :: 'a :: factorial_semiring_multiplicative)" | 
| 67135 
1a94352812f4
Moved material from AFP to Analysis/Number_Theory
 Manuel Eberl <eberlm@in.tum.de> parents: 
67108diff
changeset | 230 |   shows   "aprimedivisor -` {p} \<inter> primepow_factors n = {p ^ k |k. k > 0 \<and> p ^ k dvd n}"
 | 
| 
1a94352812f4
Moved material from AFP to Analysis/Number_Theory
 Manuel Eberl <eberlm@in.tum.de> parents: 
67108diff
changeset | 231 | proof safe | 
| 
1a94352812f4
Moved material from AFP to Analysis/Number_Theory
 Manuel Eberl <eberlm@in.tum.de> parents: 
67108diff
changeset | 232 | fix q assume q: "q \<in> primepow_factors n" | 
| 
1a94352812f4
Moved material from AFP to Analysis/Number_Theory
 Manuel Eberl <eberlm@in.tum.de> parents: 
67108diff
changeset | 233 | hence q': "q \<noteq> 0" "q \<noteq> 1" by (auto simp: primepow_def primepow_factors_def prime_power_not_one) | 
| 
1a94352812f4
Moved material from AFP to Analysis/Number_Theory
 Manuel Eberl <eberlm@in.tum.de> parents: 
67108diff
changeset | 234 | let ?n = "multiplicity (aprimedivisor q) q" | 
| 
1a94352812f4
Moved material from AFP to Analysis/Number_Theory
 Manuel Eberl <eberlm@in.tum.de> parents: 
67108diff
changeset | 235 | from q q' have "q = aprimedivisor q ^ ?n \<and> ?n > 0 \<and> aprimedivisor q ^ ?n dvd n" | 
| 
1a94352812f4
Moved material from AFP to Analysis/Number_Theory
 Manuel Eberl <eberlm@in.tum.de> parents: 
67108diff
changeset | 236 | by (auto simp: primepow_decompose primepow_factors_def prime_multiplicity_gt_zero_iff | 
| 
1a94352812f4
Moved material from AFP to Analysis/Number_Theory
 Manuel Eberl <eberlm@in.tum.de> parents: 
67108diff
changeset | 237 | prime_aprimedivisor' prime_imp_prime_elem aprimedivisor_dvd') | 
| 
1a94352812f4
Moved material from AFP to Analysis/Number_Theory
 Manuel Eberl <eberlm@in.tum.de> parents: 
67108diff
changeset | 238 | thus "\<exists>k. q = aprimedivisor q ^ k \<and> k > 0 \<and> aprimedivisor q ^ k dvd n" .. | 
| 
1a94352812f4
Moved material from AFP to Analysis/Number_Theory
 Manuel Eberl <eberlm@in.tum.de> parents: 
67108diff
changeset | 239 | next | 
| 
1a94352812f4
Moved material from AFP to Analysis/Number_Theory
 Manuel Eberl <eberlm@in.tum.de> parents: 
67108diff
changeset | 240 | fix k :: nat assume k: "p ^ k dvd n" "k > 0" | 
| 
1a94352812f4
Moved material from AFP to Analysis/Number_Theory
 Manuel Eberl <eberlm@in.tum.de> parents: 
67108diff
changeset | 241 |   with assms show "p ^ k \<in> aprimedivisor -` {p}"
 | 
| 
1a94352812f4
Moved material from AFP to Analysis/Number_Theory
 Manuel Eberl <eberlm@in.tum.de> parents: 
67108diff
changeset | 242 | by (auto simp: aprimedivisor_prime_power) | 
| 
1a94352812f4
Moved material from AFP to Analysis/Number_Theory
 Manuel Eberl <eberlm@in.tum.de> parents: 
67108diff
changeset | 243 | with assms k show "p ^ k \<in> primepow_factors n" | 
| 
1a94352812f4
Moved material from AFP to Analysis/Number_Theory
 Manuel Eberl <eberlm@in.tum.de> parents: 
67108diff
changeset | 244 | by (auto simp: primepow_factors_def primepow_def aprimedivisor_prime_power intro: Suc_leI) | 
| 
1a94352812f4
Moved material from AFP to Analysis/Number_Theory
 Manuel Eberl <eberlm@in.tum.de> parents: 
67108diff
changeset | 245 | qed | 
| 
1a94352812f4
Moved material from AFP to Analysis/Number_Theory
 Manuel Eberl <eberlm@in.tum.de> parents: 
67108diff
changeset | 246 | |
| 
1a94352812f4
Moved material from AFP to Analysis/Number_Theory
 Manuel Eberl <eberlm@in.tum.de> parents: 
67108diff
changeset | 247 | lemma aprimedivisor_nat: | 
| 
1a94352812f4
Moved material from AFP to Analysis/Number_Theory
 Manuel Eberl <eberlm@in.tum.de> parents: 
67108diff
changeset | 248 | assumes "n \<noteq> (Suc 0::nat)" | 
| 
1a94352812f4
Moved material from AFP to Analysis/Number_Theory
 Manuel Eberl <eberlm@in.tum.de> parents: 
67108diff
changeset | 249 | shows "prime (aprimedivisor n)" "aprimedivisor n dvd n" | 
| 
1a94352812f4
Moved material from AFP to Analysis/Number_Theory
 Manuel Eberl <eberlm@in.tum.de> parents: 
67108diff
changeset | 250 | proof - | 
| 
1a94352812f4
Moved material from AFP to Analysis/Number_Theory
 Manuel Eberl <eberlm@in.tum.de> parents: 
67108diff
changeset | 251 | from assms have "\<exists>p. prime p \<and> p dvd n" by (intro prime_factor_nat) auto | 
| 
1a94352812f4
Moved material from AFP to Analysis/Number_Theory
 Manuel Eberl <eberlm@in.tum.de> parents: 
67108diff
changeset | 252 | from someI_ex[OF this, folded aprimedivisor_def] | 
| 
1a94352812f4
Moved material from AFP to Analysis/Number_Theory
 Manuel Eberl <eberlm@in.tum.de> parents: 
67108diff
changeset | 253 | show "prime (aprimedivisor n)" "aprimedivisor n dvd n" by blast+ | 
| 
1a94352812f4
Moved material from AFP to Analysis/Number_Theory
 Manuel Eberl <eberlm@in.tum.de> parents: 
67108diff
changeset | 254 | qed | 
| 
1a94352812f4
Moved material from AFP to Analysis/Number_Theory
 Manuel Eberl <eberlm@in.tum.de> parents: 
67108diff
changeset | 255 | |
| 
1a94352812f4
Moved material from AFP to Analysis/Number_Theory
 Manuel Eberl <eberlm@in.tum.de> parents: 
67108diff
changeset | 256 | lemma aprimedivisor_gt_Suc_0: | 
| 
1a94352812f4
Moved material from AFP to Analysis/Number_Theory
 Manuel Eberl <eberlm@in.tum.de> parents: 
67108diff
changeset | 257 | assumes "n \<noteq> Suc 0" | 
| 
1a94352812f4
Moved material from AFP to Analysis/Number_Theory
 Manuel Eberl <eberlm@in.tum.de> parents: 
67108diff
changeset | 258 | shows "aprimedivisor n > Suc 0" | 
| 
1a94352812f4
Moved material from AFP to Analysis/Number_Theory
 Manuel Eberl <eberlm@in.tum.de> parents: 
67108diff
changeset | 259 | proof - | 
| 
1a94352812f4
Moved material from AFP to Analysis/Number_Theory
 Manuel Eberl <eberlm@in.tum.de> parents: 
67108diff
changeset | 260 | from assms have "prime (aprimedivisor n)" by (rule aprimedivisor_nat) | 
| 
1a94352812f4
Moved material from AFP to Analysis/Number_Theory
 Manuel Eberl <eberlm@in.tum.de> parents: 
67108diff
changeset | 261 | thus "aprimedivisor n > Suc 0" by (simp add: prime_nat_iff) | 
| 
1a94352812f4
Moved material from AFP to Analysis/Number_Theory
 Manuel Eberl <eberlm@in.tum.de> parents: 
67108diff
changeset | 262 | qed | 
| 
1a94352812f4
Moved material from AFP to Analysis/Number_Theory
 Manuel Eberl <eberlm@in.tum.de> parents: 
67108diff
changeset | 263 | |
| 
1a94352812f4
Moved material from AFP to Analysis/Number_Theory
 Manuel Eberl <eberlm@in.tum.de> parents: 
67108diff
changeset | 264 | lemma aprimedivisor_le_nat: | 
| 
1a94352812f4
Moved material from AFP to Analysis/Number_Theory
 Manuel Eberl <eberlm@in.tum.de> parents: 
67108diff
changeset | 265 | assumes "n > Suc 0" | 
| 
1a94352812f4
Moved material from AFP to Analysis/Number_Theory
 Manuel Eberl <eberlm@in.tum.de> parents: 
67108diff
changeset | 266 | shows "aprimedivisor n \<le> n" | 
| 
1a94352812f4
Moved material from AFP to Analysis/Number_Theory
 Manuel Eberl <eberlm@in.tum.de> parents: 
67108diff
changeset | 267 | proof - | 
| 
1a94352812f4
Moved material from AFP to Analysis/Number_Theory
 Manuel Eberl <eberlm@in.tum.de> parents: 
67108diff
changeset | 268 | from assms have "aprimedivisor n dvd n" by (intro aprimedivisor_nat) simp_all | 
| 
1a94352812f4
Moved material from AFP to Analysis/Number_Theory
 Manuel Eberl <eberlm@in.tum.de> parents: 
67108diff
changeset | 269 | with assms show "aprimedivisor n \<le> n" | 
| 
1a94352812f4
Moved material from AFP to Analysis/Number_Theory
 Manuel Eberl <eberlm@in.tum.de> parents: 
67108diff
changeset | 270 | by (intro dvd_imp_le) simp_all | 
| 
1a94352812f4
Moved material from AFP to Analysis/Number_Theory
 Manuel Eberl <eberlm@in.tum.de> parents: 
67108diff
changeset | 271 | qed | 
| 
1a94352812f4
Moved material from AFP to Analysis/Number_Theory
 Manuel Eberl <eberlm@in.tum.de> parents: 
67108diff
changeset | 272 | |
| 67108 
6b350c594ae3
bij_betw lemma for prime powers
 eberlm <eberlm@in.tum.de> parents: 
66453diff
changeset | 273 | lemma bij_betw_primepows: | 
| 71398 
e0237f2eb49d
Removed multiplicativity assumption from normalization_semidom
 Manuel Eberl <eberlm@in.tum.de> parents: 
68188diff
changeset | 274 | "bij_betw (\<lambda>(p,k). p ^ Suc k :: 'a :: factorial_semiring_multiplicative) | 
| 67108 
6b350c594ae3
bij_betw lemma for prime powers
 eberlm <eberlm@in.tum.de> parents: 
66453diff
changeset | 275 | (Collect prime \<times> UNIV) (Collect primepow)" | 
| 
6b350c594ae3
bij_betw lemma for prime powers
 eberlm <eberlm@in.tum.de> parents: 
66453diff
changeset | 276 | proof (rule bij_betwI [where ?g = "(\<lambda>n. (aprimedivisor n, multiplicity (aprimedivisor n) n - 1))"], | 
| 
6b350c594ae3
bij_betw lemma for prime powers
 eberlm <eberlm@in.tum.de> parents: 
66453diff
changeset | 277 | goal_cases) | 
| 
6b350c594ae3
bij_betw lemma for prime powers
 eberlm <eberlm@in.tum.de> parents: 
66453diff
changeset | 278 | case 1 | 
| 
6b350c594ae3
bij_betw lemma for prime powers
 eberlm <eberlm@in.tum.de> parents: 
66453diff
changeset | 279 | show "(\<lambda>(p, k). p ^ Suc k :: 'a) \<in> Collect prime \<times> UNIV \<rightarrow> Collect primepow" | 
| 
6b350c594ae3
bij_betw lemma for prime powers
 eberlm <eberlm@in.tum.de> parents: 
66453diff
changeset | 280 | by (auto intro!: primepow_prime_power simp del: power_Suc ) | 
| 
6b350c594ae3
bij_betw lemma for prime powers
 eberlm <eberlm@in.tum.de> parents: 
66453diff
changeset | 281 | next | 
| 
6b350c594ae3
bij_betw lemma for prime powers
 eberlm <eberlm@in.tum.de> parents: 
66453diff
changeset | 282 | case 2 | 
| 
6b350c594ae3
bij_betw lemma for prime powers
 eberlm <eberlm@in.tum.de> parents: 
66453diff
changeset | 283 | show ?case | 
| 
6b350c594ae3
bij_betw lemma for prime powers
 eberlm <eberlm@in.tum.de> parents: 
66453diff
changeset | 284 | by (auto simp: primepow_def prime_aprimedivisor) | 
| 
6b350c594ae3
bij_betw lemma for prime powers
 eberlm <eberlm@in.tum.de> parents: 
66453diff
changeset | 285 | next | 
| 
6b350c594ae3
bij_betw lemma for prime powers
 eberlm <eberlm@in.tum.de> parents: 
66453diff
changeset | 286 | case (3 n) | 
| 
6b350c594ae3
bij_betw lemma for prime powers
 eberlm <eberlm@in.tum.de> parents: 
66453diff
changeset | 287 | thus ?case | 
| 
6b350c594ae3
bij_betw lemma for prime powers
 eberlm <eberlm@in.tum.de> parents: 
66453diff
changeset | 288 | by (auto simp: aprimedivisor_prime_power simp del: power_Suc) | 
| 
6b350c594ae3
bij_betw lemma for prime powers
 eberlm <eberlm@in.tum.de> parents: 
66453diff
changeset | 289 | next | 
| 
6b350c594ae3
bij_betw lemma for prime powers
 eberlm <eberlm@in.tum.de> parents: 
66453diff
changeset | 290 | case (4 n) | 
| 
6b350c594ae3
bij_betw lemma for prime powers
 eberlm <eberlm@in.tum.de> parents: 
66453diff
changeset | 291 | hence *: "0 < multiplicity (aprimedivisor n) n" | 
| 
6b350c594ae3
bij_betw lemma for prime powers
 eberlm <eberlm@in.tum.de> parents: 
66453diff
changeset | 292 | by (subst prime_multiplicity_gt_zero_iff) | 
| 
6b350c594ae3
bij_betw lemma for prime powers
 eberlm <eberlm@in.tum.de> parents: 
66453diff
changeset | 293 | (auto intro!: prime_imp_prime_elem aprimedivisor_dvd simp: primepow_def prime_aprimedivisor) | 
| 
6b350c594ae3
bij_betw lemma for prime powers
 eberlm <eberlm@in.tum.de> parents: 
66453diff
changeset | 294 | have "aprimedivisor n * aprimedivisor n ^ (multiplicity (aprimedivisor n) n - Suc 0) = | 
| 
6b350c594ae3
bij_betw lemma for prime powers
 eberlm <eberlm@in.tum.de> parents: 
66453diff
changeset | 295 | aprimedivisor n ^ Suc (multiplicity (aprimedivisor n) n - Suc 0)" by simp | 
| 
6b350c594ae3
bij_betw lemma for prime powers
 eberlm <eberlm@in.tum.de> parents: 
66453diff
changeset | 296 | also from * have "Suc (multiplicity (aprimedivisor n) n - Suc 0) = | 
| 
6b350c594ae3
bij_betw lemma for prime powers
 eberlm <eberlm@in.tum.de> parents: 
66453diff
changeset | 297 | multiplicity (aprimedivisor n) n" | 
| 
6b350c594ae3
bij_betw lemma for prime powers
 eberlm <eberlm@in.tum.de> parents: 
66453diff
changeset | 298 | by (subst Suc_diff_Suc) (auto simp: prime_multiplicity_gt_zero_iff) | 
| 
6b350c594ae3
bij_betw lemma for prime powers
 eberlm <eberlm@in.tum.de> parents: 
66453diff
changeset | 299 | also have "aprimedivisor n ^ \<dots> = n" | 
| 
6b350c594ae3
bij_betw lemma for prime powers
 eberlm <eberlm@in.tum.de> parents: 
66453diff
changeset | 300 | using 4 by (subst primepow_decompose) auto | 
| 
6b350c594ae3
bij_betw lemma for prime powers
 eberlm <eberlm@in.tum.de> parents: 
66453diff
changeset | 301 | finally show ?case by auto | 
| 
6b350c594ae3
bij_betw lemma for prime powers
 eberlm <eberlm@in.tum.de> parents: 
66453diff
changeset | 302 | qed | 
| 
6b350c594ae3
bij_betw lemma for prime powers
 eberlm <eberlm@in.tum.de> parents: 
66453diff
changeset | 303 | |
| 66276 
acc3b7dd0b21
More material on powers for HOL-Computational_Algebra/HOL-Number_Theory
 eberlm <eberlm@in.tum.de> parents: diff
changeset | 304 | (* TODO Generalise *) | 
| 
acc3b7dd0b21
More material on powers for HOL-Computational_Algebra/HOL-Number_Theory
 eberlm <eberlm@in.tum.de> parents: diff
changeset | 305 | lemma primepow_multD: | 
| 
acc3b7dd0b21
More material on powers for HOL-Computational_Algebra/HOL-Number_Theory
 eberlm <eberlm@in.tum.de> parents: diff
changeset | 306 | assumes "primepow (a * b :: nat)" | 
| 
acc3b7dd0b21
More material on powers for HOL-Computational_Algebra/HOL-Number_Theory
 eberlm <eberlm@in.tum.de> parents: diff
changeset | 307 | shows "a = 1 \<or> primepow a" "b = 1 \<or> primepow b" | 
| 
acc3b7dd0b21
More material on powers for HOL-Computational_Algebra/HOL-Number_Theory
 eberlm <eberlm@in.tum.de> parents: diff
changeset | 308 | proof - | 
| 
acc3b7dd0b21
More material on powers for HOL-Computational_Algebra/HOL-Number_Theory
 eberlm <eberlm@in.tum.de> parents: diff
changeset | 309 | from assms obtain p k where k: "k > 0" "a * b = p ^ k" "prime p" | 
| 
acc3b7dd0b21
More material on powers for HOL-Computational_Algebra/HOL-Number_Theory
 eberlm <eberlm@in.tum.de> parents: diff
changeset | 310 | unfolding primepow_def by auto | 
| 
acc3b7dd0b21
More material on powers for HOL-Computational_Algebra/HOL-Number_Theory
 eberlm <eberlm@in.tum.de> parents: diff
changeset | 311 | then obtain i j where "a = p ^ i" "b = p ^ j" | 
| 
acc3b7dd0b21
More material on powers for HOL-Computational_Algebra/HOL-Number_Theory
 eberlm <eberlm@in.tum.de> parents: diff
changeset | 312 | using prime_power_mult_nat[of p a b] by blast | 
| 
acc3b7dd0b21
More material on powers for HOL-Computational_Algebra/HOL-Number_Theory
 eberlm <eberlm@in.tum.de> parents: diff
changeset | 313 | with \<open>prime p\<close> show "a = 1 \<or> primepow a" "b = 1 \<or> primepow b" by auto | 
| 
acc3b7dd0b21
More material on powers for HOL-Computational_Algebra/HOL-Number_Theory
 eberlm <eberlm@in.tum.de> parents: diff
changeset | 314 | qed | 
| 
acc3b7dd0b21
More material on powers for HOL-Computational_Algebra/HOL-Number_Theory
 eberlm <eberlm@in.tum.de> parents: diff
changeset | 315 | |
| 
acc3b7dd0b21
More material on powers for HOL-Computational_Algebra/HOL-Number_Theory
 eberlm <eberlm@in.tum.de> parents: diff
changeset | 316 | lemma primepow_mult_aprimedivisorI: | 
| 71398 
e0237f2eb49d
Removed multiplicativity assumption from normalization_semidom
 Manuel Eberl <eberlm@in.tum.de> parents: 
68188diff
changeset | 317 | assumes "primepow (n :: 'a :: factorial_semiring_multiplicative)" | 
| 66276 
acc3b7dd0b21
More material on powers for HOL-Computational_Algebra/HOL-Number_Theory
 eberlm <eberlm@in.tum.de> parents: diff
changeset | 318 | shows "primepow (aprimedivisor n * n)" | 
| 
acc3b7dd0b21
More material on powers for HOL-Computational_Algebra/HOL-Number_Theory
 eberlm <eberlm@in.tum.de> parents: diff
changeset | 319 | by (subst (2) primepow_decompose[OF assms, symmetric], subst power_Suc [symmetric], | 
| 
acc3b7dd0b21
More material on powers for HOL-Computational_Algebra/HOL-Number_Theory
 eberlm <eberlm@in.tum.de> parents: diff
changeset | 320 | subst primepow_prime_power) | 
| 
acc3b7dd0b21
More material on powers for HOL-Computational_Algebra/HOL-Number_Theory
 eberlm <eberlm@in.tum.de> parents: diff
changeset | 321 | (insert assms, auto intro!: prime_aprimedivisor' dest: primepow_gt_Suc_0) | 
| 67135 
1a94352812f4
Moved material from AFP to Analysis/Number_Theory
 Manuel Eberl <eberlm@in.tum.de> parents: 
67108diff
changeset | 322 | |
| 66276 
acc3b7dd0b21
More material on powers for HOL-Computational_Algebra/HOL-Number_Theory
 eberlm <eberlm@in.tum.de> parents: diff
changeset | 323 | lemma primepow_factors_altdef: | 
| 71398 
e0237f2eb49d
Removed multiplicativity assumption from normalization_semidom
 Manuel Eberl <eberlm@in.tum.de> parents: 
68188diff
changeset | 324 | fixes x :: "'a :: factorial_semiring_multiplicative" | 
| 66276 
acc3b7dd0b21
More material on powers for HOL-Computational_Algebra/HOL-Number_Theory
 eberlm <eberlm@in.tum.de> parents: diff
changeset | 325 | assumes "x \<noteq> 0" | 
| 
acc3b7dd0b21
More material on powers for HOL-Computational_Algebra/HOL-Number_Theory
 eberlm <eberlm@in.tum.de> parents: diff
changeset | 326 |   shows "primepow_factors x = {p ^ k |p k. p \<in> prime_factors x \<and> k \<in> {0<.. multiplicity p x}}"
 | 
| 
acc3b7dd0b21
More material on powers for HOL-Computational_Algebra/HOL-Number_Theory
 eberlm <eberlm@in.tum.de> parents: diff
changeset | 327 | proof (intro equalityI subsetI) | 
| 
acc3b7dd0b21
More material on powers for HOL-Computational_Algebra/HOL-Number_Theory
 eberlm <eberlm@in.tum.de> parents: diff
changeset | 328 | fix q assume "q \<in> primepow_factors x" | 
| 
acc3b7dd0b21
More material on powers for HOL-Computational_Algebra/HOL-Number_Theory
 eberlm <eberlm@in.tum.de> parents: diff
changeset | 329 | then obtain p k where pk: "prime p" "k > 0" "q = p ^ k" "q dvd x" | 
| 
acc3b7dd0b21
More material on powers for HOL-Computational_Algebra/HOL-Number_Theory
 eberlm <eberlm@in.tum.de> parents: diff
changeset | 330 | unfolding primepow_factors_def primepow_def by blast | 
| 
acc3b7dd0b21
More material on powers for HOL-Computational_Algebra/HOL-Number_Theory
 eberlm <eberlm@in.tum.de> parents: diff
changeset | 331 | moreover have "k \<le> multiplicity p x" using pk assms by (intro multiplicity_geI) auto | 
| 
acc3b7dd0b21
More material on powers for HOL-Computational_Algebra/HOL-Number_Theory
 eberlm <eberlm@in.tum.de> parents: diff
changeset | 332 |   ultimately show "q \<in> {p ^ k |p k. p \<in> prime_factors x \<and> k \<in> {0<.. multiplicity p x}}"
 | 
| 
acc3b7dd0b21
More material on powers for HOL-Computational_Algebra/HOL-Number_Theory
 eberlm <eberlm@in.tum.de> parents: diff
changeset | 333 | by (auto simp: prime_factors_multiplicity intro!: exI[of _ p] exI[of _ k]) | 
| 
acc3b7dd0b21
More material on powers for HOL-Computational_Algebra/HOL-Number_Theory
 eberlm <eberlm@in.tum.de> parents: diff
changeset | 334 | qed (auto simp: primepow_factors_def prime_factors_multiplicity multiplicity_dvd') | 
| 
acc3b7dd0b21
More material on powers for HOL-Computational_Algebra/HOL-Number_Theory
 eberlm <eberlm@in.tum.de> parents: diff
changeset | 335 | |
| 
acc3b7dd0b21
More material on powers for HOL-Computational_Algebra/HOL-Number_Theory
 eberlm <eberlm@in.tum.de> parents: diff
changeset | 336 | lemma finite_primepow_factors: | 
| 71398 
e0237f2eb49d
Removed multiplicativity assumption from normalization_semidom
 Manuel Eberl <eberlm@in.tum.de> parents: 
68188diff
changeset | 337 | assumes "x \<noteq> (0 :: 'a :: factorial_semiring_multiplicative)" | 
| 66276 
acc3b7dd0b21
More material on powers for HOL-Computational_Algebra/HOL-Number_Theory
 eberlm <eberlm@in.tum.de> parents: diff
changeset | 338 | shows "finite (primepow_factors x)" | 
| 
acc3b7dd0b21
More material on powers for HOL-Computational_Algebra/HOL-Number_Theory
 eberlm <eberlm@in.tum.de> parents: diff
changeset | 339 | proof - | 
| 
acc3b7dd0b21
More material on powers for HOL-Computational_Algebra/HOL-Number_Theory
 eberlm <eberlm@in.tum.de> parents: diff
changeset | 340 |   have "finite (SIGMA p:prime_factors x. {0<..multiplicity p x})"
 | 
| 
acc3b7dd0b21
More material on powers for HOL-Computational_Algebra/HOL-Number_Theory
 eberlm <eberlm@in.tum.de> parents: diff
changeset | 341 | by (intro finite_SigmaI) simp_all | 
| 
acc3b7dd0b21
More material on powers for HOL-Computational_Algebra/HOL-Number_Theory
 eberlm <eberlm@in.tum.de> parents: diff
changeset | 342 | hence "finite ((\<lambda>(p,k). p ^ k) ` \<dots>)" (is "finite ?A") by (rule finite_imageI) | 
| 
acc3b7dd0b21
More material on powers for HOL-Computational_Algebra/HOL-Number_Theory
 eberlm <eberlm@in.tum.de> parents: diff
changeset | 343 | also have "?A = primepow_factors x" | 
| 
acc3b7dd0b21
More material on powers for HOL-Computational_Algebra/HOL-Number_Theory
 eberlm <eberlm@in.tum.de> parents: diff
changeset | 344 | using assms by (subst primepow_factors_altdef) fast+ | 
| 
acc3b7dd0b21
More material on powers for HOL-Computational_Algebra/HOL-Number_Theory
 eberlm <eberlm@in.tum.de> parents: diff
changeset | 345 | finally show ?thesis . | 
| 
acc3b7dd0b21
More material on powers for HOL-Computational_Algebra/HOL-Number_Theory
 eberlm <eberlm@in.tum.de> parents: diff
changeset | 346 | qed | 
| 
acc3b7dd0b21
More material on powers for HOL-Computational_Algebra/HOL-Number_Theory
 eberlm <eberlm@in.tum.de> parents: diff
changeset | 347 | |
| 67135 
1a94352812f4
Moved material from AFP to Analysis/Number_Theory
 Manuel Eberl <eberlm@in.tum.de> parents: 
67108diff
changeset | 348 | lemma aprimedivisor_primepow_factors_conv_prime_factorization: | 
| 71398 
e0237f2eb49d
Removed multiplicativity assumption from normalization_semidom
 Manuel Eberl <eberlm@in.tum.de> parents: 
68188diff
changeset | 349 | assumes [simp]: "n \<noteq> (0 :: 'a :: factorial_semiring_multiplicative)" | 
| 67135 
1a94352812f4
Moved material from AFP to Analysis/Number_Theory
 Manuel Eberl <eberlm@in.tum.de> parents: 
67108diff
changeset | 350 | shows "image_mset aprimedivisor (mset_set (primepow_factors n)) = prime_factorization n" | 
| 
1a94352812f4
Moved material from AFP to Analysis/Number_Theory
 Manuel Eberl <eberlm@in.tum.de> parents: 
67108diff
changeset | 351 | (is "?lhs = ?rhs") | 
| 
1a94352812f4
Moved material from AFP to Analysis/Number_Theory
 Manuel Eberl <eberlm@in.tum.de> parents: 
67108diff
changeset | 352 | proof (intro multiset_eqI) | 
| 
1a94352812f4
Moved material from AFP to Analysis/Number_Theory
 Manuel Eberl <eberlm@in.tum.de> parents: 
67108diff
changeset | 353 | fix p :: 'a | 
| 
1a94352812f4
Moved material from AFP to Analysis/Number_Theory
 Manuel Eberl <eberlm@in.tum.de> parents: 
67108diff
changeset | 354 | show "count ?lhs p = count ?rhs p" | 
| 
1a94352812f4
Moved material from AFP to Analysis/Number_Theory
 Manuel Eberl <eberlm@in.tum.de> parents: 
67108diff
changeset | 355 | proof (cases "prime p") | 
| 
1a94352812f4
Moved material from AFP to Analysis/Number_Theory
 Manuel Eberl <eberlm@in.tum.de> parents: 
67108diff
changeset | 356 | case False | 
| 
1a94352812f4
Moved material from AFP to Analysis/Number_Theory
 Manuel Eberl <eberlm@in.tum.de> parents: 
67108diff
changeset | 357 | have "p \<notin># image_mset aprimedivisor (mset_set (primepow_factors n))" | 
| 
1a94352812f4
Moved material from AFP to Analysis/Number_Theory
 Manuel Eberl <eberlm@in.tum.de> parents: 
67108diff
changeset | 358 | proof | 
| 
1a94352812f4
Moved material from AFP to Analysis/Number_Theory
 Manuel Eberl <eberlm@in.tum.de> parents: 
67108diff
changeset | 359 | assume "p \<in># image_mset aprimedivisor (mset_set (primepow_factors n))" | 
| 
1a94352812f4
Moved material from AFP to Analysis/Number_Theory
 Manuel Eberl <eberlm@in.tum.de> parents: 
67108diff
changeset | 360 | then obtain q where "p = aprimedivisor q" "q \<in> primepow_factors n" | 
| 
1a94352812f4
Moved material from AFP to Analysis/Number_Theory
 Manuel Eberl <eberlm@in.tum.de> parents: 
67108diff
changeset | 361 | by (auto simp: finite_primepow_factors) | 
| 
1a94352812f4
Moved material from AFP to Analysis/Number_Theory
 Manuel Eberl <eberlm@in.tum.de> parents: 
67108diff
changeset | 362 | with False prime_aprimedivisor'[of q] have "q = 0 \<or> is_unit q" by auto | 
| 
1a94352812f4
Moved material from AFP to Analysis/Number_Theory
 Manuel Eberl <eberlm@in.tum.de> parents: 
67108diff
changeset | 363 | with \<open>q \<in> primepow_factors n\<close> show False by (auto simp: primepow_factors_def primepow_def) | 
| 
1a94352812f4
Moved material from AFP to Analysis/Number_Theory
 Manuel Eberl <eberlm@in.tum.de> parents: 
67108diff
changeset | 364 | qed | 
| 
1a94352812f4
Moved material from AFP to Analysis/Number_Theory
 Manuel Eberl <eberlm@in.tum.de> parents: 
67108diff
changeset | 365 | hence "count ?lhs p = 0" by (simp only: Multiset.not_in_iff) | 
| 
1a94352812f4
Moved material from AFP to Analysis/Number_Theory
 Manuel Eberl <eberlm@in.tum.de> parents: 
67108diff
changeset | 366 | with False show ?thesis by (simp add: count_prime_factorization) | 
| 
1a94352812f4
Moved material from AFP to Analysis/Number_Theory
 Manuel Eberl <eberlm@in.tum.de> parents: 
67108diff
changeset | 367 | next | 
| 
1a94352812f4
Moved material from AFP to Analysis/Number_Theory
 Manuel Eberl <eberlm@in.tum.de> parents: 
67108diff
changeset | 368 | case True | 
| 
1a94352812f4
Moved material from AFP to Analysis/Number_Theory
 Manuel Eberl <eberlm@in.tum.de> parents: 
67108diff
changeset | 369 | hence p: "p \<noteq> 0" "\<not>is_unit p" by auto | 
| 
1a94352812f4
Moved material from AFP to Analysis/Number_Theory
 Manuel Eberl <eberlm@in.tum.de> parents: 
67108diff
changeset | 370 |     have "count ?lhs p = card (aprimedivisor -` {p} \<inter> primepow_factors n)"
 | 
| 
1a94352812f4
Moved material from AFP to Analysis/Number_Theory
 Manuel Eberl <eberlm@in.tum.de> parents: 
67108diff
changeset | 371 | by (simp add: count_image_mset finite_primepow_factors) | 
| 
1a94352812f4
Moved material from AFP to Analysis/Number_Theory
 Manuel Eberl <eberlm@in.tum.de> parents: 
67108diff
changeset | 372 |     also have "aprimedivisor -` {p} \<inter> primepow_factors n = {p^k |k. k > 0 \<and> p ^ k dvd n}"
 | 
| 
1a94352812f4
Moved material from AFP to Analysis/Number_Theory
 Manuel Eberl <eberlm@in.tum.de> parents: 
67108diff
changeset | 373 | using True by (rule aprimedivisor_vimage) | 
| 
1a94352812f4
Moved material from AFP to Analysis/Number_Theory
 Manuel Eberl <eberlm@in.tum.de> parents: 
67108diff
changeset | 374 |     also from True have "\<dots> = (\<lambda>k. p ^ k) ` {0<..multiplicity p n}"
 | 
| 
1a94352812f4
Moved material from AFP to Analysis/Number_Theory
 Manuel Eberl <eberlm@in.tum.de> parents: 
67108diff
changeset | 375 | by (subst power_dvd_iff_le_multiplicity) auto | 
| 
1a94352812f4
Moved material from AFP to Analysis/Number_Theory
 Manuel Eberl <eberlm@in.tum.de> parents: 
67108diff
changeset | 376 | also from p True have "card \<dots> = multiplicity p n" | 
| 
1a94352812f4
Moved material from AFP to Analysis/Number_Theory
 Manuel Eberl <eberlm@in.tum.de> parents: 
67108diff
changeset | 377 | by (subst card_image) (auto intro!: inj_onI dest: prime_power_inj) | 
| 
1a94352812f4
Moved material from AFP to Analysis/Number_Theory
 Manuel Eberl <eberlm@in.tum.de> parents: 
67108diff
changeset | 378 | also from True have "\<dots> = count (prime_factorization n) p" | 
| 
1a94352812f4
Moved material from AFP to Analysis/Number_Theory
 Manuel Eberl <eberlm@in.tum.de> parents: 
67108diff
changeset | 379 | by (simp add: count_prime_factorization) | 
| 
1a94352812f4
Moved material from AFP to Analysis/Number_Theory
 Manuel Eberl <eberlm@in.tum.de> parents: 
67108diff
changeset | 380 | finally show ?thesis . | 
| 
1a94352812f4
Moved material from AFP to Analysis/Number_Theory
 Manuel Eberl <eberlm@in.tum.de> parents: 
67108diff
changeset | 381 | qed | 
| 
1a94352812f4
Moved material from AFP to Analysis/Number_Theory
 Manuel Eberl <eberlm@in.tum.de> parents: 
67108diff
changeset | 382 | qed | 
| 
1a94352812f4
Moved material from AFP to Analysis/Number_Theory
 Manuel Eberl <eberlm@in.tum.de> parents: 
67108diff
changeset | 383 | |
| 
1a94352812f4
Moved material from AFP to Analysis/Number_Theory
 Manuel Eberl <eberlm@in.tum.de> parents: 
67108diff
changeset | 384 | lemma prime_elem_aprimedivisor_nat: "d > Suc 0 \<Longrightarrow> prime_elem (aprimedivisor d)" | 
| 
1a94352812f4
Moved material from AFP to Analysis/Number_Theory
 Manuel Eberl <eberlm@in.tum.de> parents: 
67108diff
changeset | 385 | using prime_aprimedivisor'[of d] by simp | 
| 
1a94352812f4
Moved material from AFP to Analysis/Number_Theory
 Manuel Eberl <eberlm@in.tum.de> parents: 
67108diff
changeset | 386 | |
| 
1a94352812f4
Moved material from AFP to Analysis/Number_Theory
 Manuel Eberl <eberlm@in.tum.de> parents: 
67108diff
changeset | 387 | lemma aprimedivisor_gt_0_nat [simp]: "d > Suc 0 \<Longrightarrow> aprimedivisor d > 0" | 
| 
1a94352812f4
Moved material from AFP to Analysis/Number_Theory
 Manuel Eberl <eberlm@in.tum.de> parents: 
67108diff
changeset | 388 | using prime_aprimedivisor'[of d] by (simp add: prime_gt_0_nat) | 
| 
1a94352812f4
Moved material from AFP to Analysis/Number_Theory
 Manuel Eberl <eberlm@in.tum.de> parents: 
67108diff
changeset | 389 | |
| 
1a94352812f4
Moved material from AFP to Analysis/Number_Theory
 Manuel Eberl <eberlm@in.tum.de> parents: 
67108diff
changeset | 390 | lemma aprimedivisor_gt_Suc_0_nat [simp]: "d > Suc 0 \<Longrightarrow> aprimedivisor d > Suc 0" | 
| 
1a94352812f4
Moved material from AFP to Analysis/Number_Theory
 Manuel Eberl <eberlm@in.tum.de> parents: 
67108diff
changeset | 391 | using prime_aprimedivisor'[of d] by (simp add: prime_gt_Suc_0_nat) | 
| 
1a94352812f4
Moved material from AFP to Analysis/Number_Theory
 Manuel Eberl <eberlm@in.tum.de> parents: 
67108diff
changeset | 392 | |
| 
1a94352812f4
Moved material from AFP to Analysis/Number_Theory
 Manuel Eberl <eberlm@in.tum.de> parents: 
67108diff
changeset | 393 | lemma aprimedivisor_not_Suc_0_nat [simp]: "d > Suc 0 \<Longrightarrow> aprimedivisor d \<noteq> Suc 0" | 
| 
1a94352812f4
Moved material from AFP to Analysis/Number_Theory
 Manuel Eberl <eberlm@in.tum.de> parents: 
67108diff
changeset | 394 | using aprimedivisor_gt_Suc_0[of d] by (intro notI) auto | 
| 
1a94352812f4
Moved material from AFP to Analysis/Number_Theory
 Manuel Eberl <eberlm@in.tum.de> parents: 
67108diff
changeset | 395 | |
| 
1a94352812f4
Moved material from AFP to Analysis/Number_Theory
 Manuel Eberl <eberlm@in.tum.de> parents: 
67108diff
changeset | 396 | lemma multiplicity_aprimedivisor_gt_0_nat [simp]: | 
| 
1a94352812f4
Moved material from AFP to Analysis/Number_Theory
 Manuel Eberl <eberlm@in.tum.de> parents: 
67108diff
changeset | 397 | "d > Suc 0 \<Longrightarrow> multiplicity (aprimedivisor d) d > 0" | 
| 
1a94352812f4
Moved material from AFP to Analysis/Number_Theory
 Manuel Eberl <eberlm@in.tum.de> parents: 
67108diff
changeset | 398 | by (subst multiplicity_gt_zero_iff) (auto intro: aprimedivisor_dvd') | 
| 
1a94352812f4
Moved material from AFP to Analysis/Number_Theory
 Manuel Eberl <eberlm@in.tum.de> parents: 
67108diff
changeset | 399 | |
| 
1a94352812f4
Moved material from AFP to Analysis/Number_Theory
 Manuel Eberl <eberlm@in.tum.de> parents: 
67108diff
changeset | 400 | lemma primepowI: | 
| 
1a94352812f4
Moved material from AFP to Analysis/Number_Theory
 Manuel Eberl <eberlm@in.tum.de> parents: 
67108diff
changeset | 401 | "prime p \<Longrightarrow> k > 0 \<Longrightarrow> p ^ k = n \<Longrightarrow> primepow n \<and> aprimedivisor n = p" | 
| 
1a94352812f4
Moved material from AFP to Analysis/Number_Theory
 Manuel Eberl <eberlm@in.tum.de> parents: 
67108diff
changeset | 402 | unfolding primepow_def by (auto simp: aprimedivisor_prime_power) | 
| 
1a94352812f4
Moved material from AFP to Analysis/Number_Theory
 Manuel Eberl <eberlm@in.tum.de> parents: 
67108diff
changeset | 403 | |
| 
1a94352812f4
Moved material from AFP to Analysis/Number_Theory
 Manuel Eberl <eberlm@in.tum.de> parents: 
67108diff
changeset | 404 | lemma not_primepowI: | 
| 
1a94352812f4
Moved material from AFP to Analysis/Number_Theory
 Manuel Eberl <eberlm@in.tum.de> parents: 
67108diff
changeset | 405 | assumes "prime p" "prime q" "p \<noteq> q" "p dvd n" "q dvd n" | 
| 
1a94352812f4
Moved material from AFP to Analysis/Number_Theory
 Manuel Eberl <eberlm@in.tum.de> parents: 
67108diff
changeset | 406 | shows "\<not>primepow n" | 
| 
1a94352812f4
Moved material from AFP to Analysis/Number_Theory
 Manuel Eberl <eberlm@in.tum.de> parents: 
67108diff
changeset | 407 | using assms by (auto simp: primepow_def dest!: prime_dvd_power[rotated] dest: primes_dvd_imp_eq) | 
| 
1a94352812f4
Moved material from AFP to Analysis/Number_Theory
 Manuel Eberl <eberlm@in.tum.de> parents: 
67108diff
changeset | 408 | |
| 
1a94352812f4
Moved material from AFP to Analysis/Number_Theory
 Manuel Eberl <eberlm@in.tum.de> parents: 
67108diff
changeset | 409 | lemma sum_prime_factorization_conv_sum_primepow_factors: | 
| 71398 
e0237f2eb49d
Removed multiplicativity assumption from normalization_semidom
 Manuel Eberl <eberlm@in.tum.de> parents: 
68188diff
changeset | 410 | fixes n :: "'a :: factorial_semiring_multiplicative" | 
| 67135 
1a94352812f4
Moved material from AFP to Analysis/Number_Theory
 Manuel Eberl <eberlm@in.tum.de> parents: 
67108diff
changeset | 411 | assumes "n \<noteq> 0" | 
| 
1a94352812f4
Moved material from AFP to Analysis/Number_Theory
 Manuel Eberl <eberlm@in.tum.de> parents: 
67108diff
changeset | 412 | shows "(\<Sum>q\<in>primepow_factors n. f (aprimedivisor q)) = (\<Sum>p\<in>#prime_factorization n. f p)" | 
| 
1a94352812f4
Moved material from AFP to Analysis/Number_Theory
 Manuel Eberl <eberlm@in.tum.de> parents: 
67108diff
changeset | 413 | proof - | 
| 
1a94352812f4
Moved material from AFP to Analysis/Number_Theory
 Manuel Eberl <eberlm@in.tum.de> parents: 
67108diff
changeset | 414 | from assms have "prime_factorization n = image_mset aprimedivisor (mset_set (primepow_factors n))" | 
| 
1a94352812f4
Moved material from AFP to Analysis/Number_Theory
 Manuel Eberl <eberlm@in.tum.de> parents: 
67108diff
changeset | 415 | by (rule aprimedivisor_primepow_factors_conv_prime_factorization [symmetric]) | 
| 
1a94352812f4
Moved material from AFP to Analysis/Number_Theory
 Manuel Eberl <eberlm@in.tum.de> parents: 
67108diff
changeset | 416 | also have "(\<Sum>p\<in>#\<dots>. f p) = (\<Sum>q\<in>primepow_factors n. f (aprimedivisor q))" | 
| 
1a94352812f4
Moved material from AFP to Analysis/Number_Theory
 Manuel Eberl <eberlm@in.tum.de> parents: 
67108diff
changeset | 417 | by (simp add: image_mset.compositionality sum_unfold_sum_mset o_def) | 
| 
1a94352812f4
Moved material from AFP to Analysis/Number_Theory
 Manuel Eberl <eberlm@in.tum.de> parents: 
67108diff
changeset | 418 | finally show ?thesis .. | 
| 
1a94352812f4
Moved material from AFP to Analysis/Number_Theory
 Manuel Eberl <eberlm@in.tum.de> parents: 
67108diff
changeset | 419 | qed | 
| 
1a94352812f4
Moved material from AFP to Analysis/Number_Theory
 Manuel Eberl <eberlm@in.tum.de> parents: 
67108diff
changeset | 420 | |
| 
1a94352812f4
Moved material from AFP to Analysis/Number_Theory
 Manuel Eberl <eberlm@in.tum.de> parents: 
67108diff
changeset | 421 | lemma multiplicity_aprimedivisor_Suc_0_iff: | 
| 71398 
e0237f2eb49d
Removed multiplicativity assumption from normalization_semidom
 Manuel Eberl <eberlm@in.tum.de> parents: 
68188diff
changeset | 422 | assumes "primepow (n :: 'a :: factorial_semiring_multiplicative)" | 
| 67135 
1a94352812f4
Moved material from AFP to Analysis/Number_Theory
 Manuel Eberl <eberlm@in.tum.de> parents: 
67108diff
changeset | 423 | shows "multiplicity (aprimedivisor n) n = Suc 0 \<longleftrightarrow> prime n" | 
| 
1a94352812f4
Moved material from AFP to Analysis/Number_Theory
 Manuel Eberl <eberlm@in.tum.de> parents: 
67108diff
changeset | 424 | by (subst (3) primepow_decompose [OF assms, symmetric]) | 
| 
1a94352812f4
Moved material from AFP to Analysis/Number_Theory
 Manuel Eberl <eberlm@in.tum.de> parents: 
67108diff
changeset | 425 | (insert assms, auto simp add: prime_power_iff intro!: prime_aprimedivisor') | 
| 
1a94352812f4
Moved material from AFP to Analysis/Number_Theory
 Manuel Eberl <eberlm@in.tum.de> parents: 
67108diff
changeset | 426 | |
| 66276 
acc3b7dd0b21
More material on powers for HOL-Computational_Algebra/HOL-Number_Theory
 eberlm <eberlm@in.tum.de> parents: diff
changeset | 427 | |
| 
acc3b7dd0b21
More material on powers for HOL-Computational_Algebra/HOL-Number_Theory
 eberlm <eberlm@in.tum.de> parents: diff
changeset | 428 | definition mangoldt :: "nat \<Rightarrow> 'a :: real_algebra_1" where | 
| 
acc3b7dd0b21
More material on powers for HOL-Computational_Algebra/HOL-Number_Theory
 eberlm <eberlm@in.tum.de> parents: diff
changeset | 429 | "mangoldt n = (if primepow n then of_real (ln (real (aprimedivisor n))) else 0)" | 
| 67166 
a77d54ef718b
Some facts on the Mangoldt function
 eberlm <eberlm@in.tum.de> parents: 
67135diff
changeset | 430 | |
| 
a77d54ef718b
Some facts on the Mangoldt function
 eberlm <eberlm@in.tum.de> parents: 
67135diff
changeset | 431 | lemma mangoldt_0 [simp]: "mangoldt 0 = 0" | 
| 
a77d54ef718b
Some facts on the Mangoldt function
 eberlm <eberlm@in.tum.de> parents: 
67135diff
changeset | 432 | by (simp add: mangoldt_def) | 
| 
a77d54ef718b
Some facts on the Mangoldt function
 eberlm <eberlm@in.tum.de> parents: 
67135diff
changeset | 433 | |
| 
a77d54ef718b
Some facts on the Mangoldt function
 eberlm <eberlm@in.tum.de> parents: 
67135diff
changeset | 434 | lemma mangoldt_Suc_0 [simp]: "mangoldt (Suc 0) = 0" | 
| 
a77d54ef718b
Some facts on the Mangoldt function
 eberlm <eberlm@in.tum.de> parents: 
67135diff
changeset | 435 | by (simp add: mangoldt_def) | 
| 
a77d54ef718b
Some facts on the Mangoldt function
 eberlm <eberlm@in.tum.de> parents: 
67135diff
changeset | 436 | |
| 66276 
acc3b7dd0b21
More material on powers for HOL-Computational_Algebra/HOL-Number_Theory
 eberlm <eberlm@in.tum.de> parents: diff
changeset | 437 | lemma of_real_mangoldt [simp]: "of_real (mangoldt n) = mangoldt n" | 
| 
acc3b7dd0b21
More material on powers for HOL-Computational_Algebra/HOL-Number_Theory
 eberlm <eberlm@in.tum.de> parents: diff
changeset | 438 | by (simp add: mangoldt_def) | 
| 
acc3b7dd0b21
More material on powers for HOL-Computational_Algebra/HOL-Number_Theory
 eberlm <eberlm@in.tum.de> parents: diff
changeset | 439 | |
| 
acc3b7dd0b21
More material on powers for HOL-Computational_Algebra/HOL-Number_Theory
 eberlm <eberlm@in.tum.de> parents: diff
changeset | 440 | lemma mangoldt_sum: | 
| 
acc3b7dd0b21
More material on powers for HOL-Computational_Algebra/HOL-Number_Theory
 eberlm <eberlm@in.tum.de> parents: diff
changeset | 441 | assumes "n \<noteq> 0" | 
| 
acc3b7dd0b21
More material on powers for HOL-Computational_Algebra/HOL-Number_Theory
 eberlm <eberlm@in.tum.de> parents: diff
changeset | 442 | shows "(\<Sum>d | d dvd n. mangoldt d :: 'a :: real_algebra_1) = of_real (ln (real n))" | 
| 
acc3b7dd0b21
More material on powers for HOL-Computational_Algebra/HOL-Number_Theory
 eberlm <eberlm@in.tum.de> parents: diff
changeset | 443 | proof - | 
| 
acc3b7dd0b21
More material on powers for HOL-Computational_Algebra/HOL-Number_Theory
 eberlm <eberlm@in.tum.de> parents: diff
changeset | 444 | have "(\<Sum>d | d dvd n. mangoldt d :: 'a) = of_real (\<Sum>d | d dvd n. mangoldt d)" by simp | 
| 
acc3b7dd0b21
More material on powers for HOL-Computational_Algebra/HOL-Number_Theory
 eberlm <eberlm@in.tum.de> parents: diff
changeset | 445 | also have "(\<Sum>d | d dvd n. mangoldt d) = (\<Sum>d \<in> primepow_factors n. ln (real (aprimedivisor d)))" | 
| 
acc3b7dd0b21
More material on powers for HOL-Computational_Algebra/HOL-Number_Theory
 eberlm <eberlm@in.tum.de> parents: diff
changeset | 446 | using assms by (intro sum.mono_neutral_cong_right) (auto simp: primepow_factors_def mangoldt_def) | 
| 
acc3b7dd0b21
More material on powers for HOL-Computational_Algebra/HOL-Number_Theory
 eberlm <eberlm@in.tum.de> parents: diff
changeset | 447 | also have "\<dots> = ln (real (\<Prod>d \<in> primepow_factors n. aprimedivisor d))" | 
| 
acc3b7dd0b21
More material on powers for HOL-Computational_Algebra/HOL-Number_Theory
 eberlm <eberlm@in.tum.de> parents: diff
changeset | 448 | using assms finite_primepow_factors[of n] | 
| 
acc3b7dd0b21
More material on powers for HOL-Computational_Algebra/HOL-Number_Theory
 eberlm <eberlm@in.tum.de> parents: diff
changeset | 449 | by (subst ln_prod [symmetric]) | 
| 
acc3b7dd0b21
More material on powers for HOL-Computational_Algebra/HOL-Number_Theory
 eberlm <eberlm@in.tum.de> parents: diff
changeset | 450 | (auto simp: primepow_factors_def intro!: aprimedivisor_pos_nat | 
| 
acc3b7dd0b21
More material on powers for HOL-Computational_Algebra/HOL-Number_Theory
 eberlm <eberlm@in.tum.de> parents: diff
changeset | 451 | intro: Nat.gr0I primepow_gt_Suc_0) | 
| 
acc3b7dd0b21
More material on powers for HOL-Computational_Algebra/HOL-Number_Theory
 eberlm <eberlm@in.tum.de> parents: diff
changeset | 452 | also have "primepow_factors n = | 
| 
acc3b7dd0b21
More material on powers for HOL-Computational_Algebra/HOL-Number_Theory
 eberlm <eberlm@in.tum.de> parents: diff
changeset | 453 |                (\<lambda>(p,k). p ^ k) ` (SIGMA p:prime_factors n. {0<..multiplicity p n})" 
 | 
| 
acc3b7dd0b21
More material on powers for HOL-Computational_Algebra/HOL-Number_Theory
 eberlm <eberlm@in.tum.de> parents: diff
changeset | 454 | (is "_ = _ ` ?A") by (subst primepow_factors_altdef[OF assms]) fast+ | 
| 
acc3b7dd0b21
More material on powers for HOL-Computational_Algebra/HOL-Number_Theory
 eberlm <eberlm@in.tum.de> parents: diff
changeset | 455 | also have "prod aprimedivisor \<dots> = (\<Prod>(p,k)\<in>?A. aprimedivisor (p ^ k))" | 
| 
acc3b7dd0b21
More material on powers for HOL-Computational_Algebra/HOL-Number_Theory
 eberlm <eberlm@in.tum.de> parents: diff
changeset | 456 | by (subst prod.reindex) | 
| 
acc3b7dd0b21
More material on powers for HOL-Computational_Algebra/HOL-Number_Theory
 eberlm <eberlm@in.tum.de> parents: diff
changeset | 457 | (auto simp: inj_on_def prime_power_inj'' prime_factors_multiplicity | 
| 
acc3b7dd0b21
More material on powers for HOL-Computational_Algebra/HOL-Number_Theory
 eberlm <eberlm@in.tum.de> parents: diff
changeset | 458 | prod.Sigma [symmetric] case_prod_unfold) | 
| 
acc3b7dd0b21
More material on powers for HOL-Computational_Algebra/HOL-Number_Theory
 eberlm <eberlm@in.tum.de> parents: diff
changeset | 459 | also have "\<dots> = (\<Prod>(p,k)\<in>?A. p)" | 
| 
acc3b7dd0b21
More material on powers for HOL-Computational_Algebra/HOL-Number_Theory
 eberlm <eberlm@in.tum.de> parents: diff
changeset | 460 | by (intro prod.cong refl) (auto simp: aprimedivisor_prime_power prime_factors_multiplicity) | 
| 
acc3b7dd0b21
More material on powers for HOL-Computational_Algebra/HOL-Number_Theory
 eberlm <eberlm@in.tum.de> parents: diff
changeset | 461 |   also have "\<dots> = (\<Prod>x\<in>prime_factors n. \<Prod>k\<in>{0<..multiplicity x n}. x)"
 | 
| 
acc3b7dd0b21
More material on powers for HOL-Computational_Algebra/HOL-Number_Theory
 eberlm <eberlm@in.tum.de> parents: diff
changeset | 462 | by (rule prod.Sigma [symmetric]) auto | 
| 
acc3b7dd0b21
More material on powers for HOL-Computational_Algebra/HOL-Number_Theory
 eberlm <eberlm@in.tum.de> parents: diff
changeset | 463 | also have "\<dots> = (\<Prod>x\<in>prime_factors n. x ^ multiplicity x n)" | 
| 
acc3b7dd0b21
More material on powers for HOL-Computational_Algebra/HOL-Number_Theory
 eberlm <eberlm@in.tum.de> parents: diff
changeset | 464 | by (intro prod.cong refl) (simp add: prod_constant) | 
| 
acc3b7dd0b21
More material on powers for HOL-Computational_Algebra/HOL-Number_Theory
 eberlm <eberlm@in.tum.de> parents: diff
changeset | 465 | also have "\<dots> = n" using assms by (intro prime_factorization_nat [symmetric]) simp | 
| 
acc3b7dd0b21
More material on powers for HOL-Computational_Algebra/HOL-Number_Theory
 eberlm <eberlm@in.tum.de> parents: diff
changeset | 466 | finally show ?thesis . | 
| 
acc3b7dd0b21
More material on powers for HOL-Computational_Algebra/HOL-Number_Theory
 eberlm <eberlm@in.tum.de> parents: diff
changeset | 467 | qed | 
| 67135 
1a94352812f4
Moved material from AFP to Analysis/Number_Theory
 Manuel Eberl <eberlm@in.tum.de> parents: 
67108diff
changeset | 468 | |
| 
1a94352812f4
Moved material from AFP to Analysis/Number_Theory
 Manuel Eberl <eberlm@in.tum.de> parents: 
67108diff
changeset | 469 | lemma mangoldt_primepow: | 
| 
1a94352812f4
Moved material from AFP to Analysis/Number_Theory
 Manuel Eberl <eberlm@in.tum.de> parents: 
67108diff
changeset | 470 | "prime p \<Longrightarrow> mangoldt (p ^ k) = (if k > 0 then of_real (ln (real p)) else 0)" | 
| 
1a94352812f4
Moved material from AFP to Analysis/Number_Theory
 Manuel Eberl <eberlm@in.tum.de> parents: 
67108diff
changeset | 471 | by (simp add: mangoldt_def aprimedivisor_prime_power) | 
| 
1a94352812f4
Moved material from AFP to Analysis/Number_Theory
 Manuel Eberl <eberlm@in.tum.de> parents: 
67108diff
changeset | 472 | |
| 
1a94352812f4
Moved material from AFP to Analysis/Number_Theory
 Manuel Eberl <eberlm@in.tum.de> parents: 
67108diff
changeset | 473 | lemma mangoldt_primepow' [simp]: "prime p \<Longrightarrow> k > 0 \<Longrightarrow> mangoldt (p ^ k) = of_real (ln (real p))" | 
| 
1a94352812f4
Moved material from AFP to Analysis/Number_Theory
 Manuel Eberl <eberlm@in.tum.de> parents: 
67108diff
changeset | 474 | by (subst mangoldt_primepow) auto | 
| 
1a94352812f4
Moved material from AFP to Analysis/Number_Theory
 Manuel Eberl <eberlm@in.tum.de> parents: 
67108diff
changeset | 475 | |
| 
1a94352812f4
Moved material from AFP to Analysis/Number_Theory
 Manuel Eberl <eberlm@in.tum.de> parents: 
67108diff
changeset | 476 | lemma mangoldt_prime [simp]: "prime p \<Longrightarrow> mangoldt p = of_real (ln (real p))" | 
| 
1a94352812f4
Moved material from AFP to Analysis/Number_Theory
 Manuel Eberl <eberlm@in.tum.de> parents: 
67108diff
changeset | 477 | using mangoldt_primepow[of p 1] by simp | 
| 
1a94352812f4
Moved material from AFP to Analysis/Number_Theory
 Manuel Eberl <eberlm@in.tum.de> parents: 
67108diff
changeset | 478 | |
| 
1a94352812f4
Moved material from AFP to Analysis/Number_Theory
 Manuel Eberl <eberlm@in.tum.de> parents: 
67108diff
changeset | 479 | lemma mangoldt_nonneg: "0 \<le> (mangoldt d :: real)" | 
| 
1a94352812f4
Moved material from AFP to Analysis/Number_Theory
 Manuel Eberl <eberlm@in.tum.de> parents: 
67108diff
changeset | 480 | using aprimedivisor_gt_Suc_0_nat[of d] | 
| 
1a94352812f4
Moved material from AFP to Analysis/Number_Theory
 Manuel Eberl <eberlm@in.tum.de> parents: 
67108diff
changeset | 481 | by (auto simp: mangoldt_def of_nat_le_iff[of 1 x for x, unfolded of_nat_1] Suc_le_eq | 
| 
1a94352812f4
Moved material from AFP to Analysis/Number_Theory
 Manuel Eberl <eberlm@in.tum.de> parents: 
67108diff
changeset | 482 | intro!: ln_ge_zero dest: primepow_gt_Suc_0) | 
| 
1a94352812f4
Moved material from AFP to Analysis/Number_Theory
 Manuel Eberl <eberlm@in.tum.de> parents: 
67108diff
changeset | 483 | |
| 
1a94352812f4
Moved material from AFP to Analysis/Number_Theory
 Manuel Eberl <eberlm@in.tum.de> parents: 
67108diff
changeset | 484 | lemma norm_mangoldt [simp]: | 
| 
1a94352812f4
Moved material from AFP to Analysis/Number_Theory
 Manuel Eberl <eberlm@in.tum.de> parents: 
67108diff
changeset | 485 | "norm (mangoldt n :: 'a :: real_normed_algebra_1) = mangoldt n" | 
| 
1a94352812f4
Moved material from AFP to Analysis/Number_Theory
 Manuel Eberl <eberlm@in.tum.de> parents: 
67108diff
changeset | 486 | proof (cases "primepow n") | 
| 
1a94352812f4
Moved material from AFP to Analysis/Number_Theory
 Manuel Eberl <eberlm@in.tum.de> parents: 
67108diff
changeset | 487 | case True | 
| 
1a94352812f4
Moved material from AFP to Analysis/Number_Theory
 Manuel Eberl <eberlm@in.tum.de> parents: 
67108diff
changeset | 488 | hence "prime (aprimedivisor n)" | 
| 
1a94352812f4
Moved material from AFP to Analysis/Number_Theory
 Manuel Eberl <eberlm@in.tum.de> parents: 
67108diff
changeset | 489 | by (intro prime_aprimedivisor') | 
| 
1a94352812f4
Moved material from AFP to Analysis/Number_Theory
 Manuel Eberl <eberlm@in.tum.de> parents: 
67108diff
changeset | 490 | (auto simp: primepow_def prime_gt_0_nat) | 
| 
1a94352812f4
Moved material from AFP to Analysis/Number_Theory
 Manuel Eberl <eberlm@in.tum.de> parents: 
67108diff
changeset | 491 | hence "aprimedivisor n > 1" by (simp add: prime_gt_Suc_0_nat) | 
| 
1a94352812f4
Moved material from AFP to Analysis/Number_Theory
 Manuel Eberl <eberlm@in.tum.de> parents: 
67108diff
changeset | 492 | with True show ?thesis by (auto simp: mangoldt_def abs_if) | 
| 
1a94352812f4
Moved material from AFP to Analysis/Number_Theory
 Manuel Eberl <eberlm@in.tum.de> parents: 
67108diff
changeset | 493 | qed (auto simp: mangoldt_def) | 
| 
1a94352812f4
Moved material from AFP to Analysis/Number_Theory
 Manuel Eberl <eberlm@in.tum.de> parents: 
67108diff
changeset | 494 | |
| 67166 
a77d54ef718b
Some facts on the Mangoldt function
 eberlm <eberlm@in.tum.de> parents: 
67135diff
changeset | 495 | lemma Re_mangoldt [simp]: "Re (mangoldt n) = mangoldt n" | 
| 
a77d54ef718b
Some facts on the Mangoldt function
 eberlm <eberlm@in.tum.de> parents: 
67135diff
changeset | 496 | and Im_mangoldt [simp]: "Im (mangoldt n) = 0" | 
| 
a77d54ef718b
Some facts on the Mangoldt function
 eberlm <eberlm@in.tum.de> parents: 
67135diff
changeset | 497 | by (simp_all add: mangoldt_def) | 
| 
a77d54ef718b
Some facts on the Mangoldt function
 eberlm <eberlm@in.tum.de> parents: 
67135diff
changeset | 498 | |
| 67135 
1a94352812f4
Moved material from AFP to Analysis/Number_Theory
 Manuel Eberl <eberlm@in.tum.de> parents: 
67108diff
changeset | 499 | lemma abs_mangoldt [simp]: "abs (mangoldt n :: real) = mangoldt n" | 
| 
1a94352812f4
Moved material from AFP to Analysis/Number_Theory
 Manuel Eberl <eberlm@in.tum.de> parents: 
67108diff
changeset | 500 | using norm_mangoldt[of n, where ?'a = real, unfolded real_norm_def] . | 
| 
1a94352812f4
Moved material from AFP to Analysis/Number_Theory
 Manuel Eberl <eberlm@in.tum.de> parents: 
67108diff
changeset | 501 | |
| 
1a94352812f4
Moved material from AFP to Analysis/Number_Theory
 Manuel Eberl <eberlm@in.tum.de> parents: 
67108diff
changeset | 502 | lemma mangoldt_le: | 
| 
1a94352812f4
Moved material from AFP to Analysis/Number_Theory
 Manuel Eberl <eberlm@in.tum.de> parents: 
67108diff
changeset | 503 | assumes "n > 0" | 
| 
1a94352812f4
Moved material from AFP to Analysis/Number_Theory
 Manuel Eberl <eberlm@in.tum.de> parents: 
67108diff
changeset | 504 | shows "mangoldt n \<le> ln n" | 
| 
1a94352812f4
Moved material from AFP to Analysis/Number_Theory
 Manuel Eberl <eberlm@in.tum.de> parents: 
67108diff
changeset | 505 | proof (cases "primepow n") | 
| 
1a94352812f4
Moved material from AFP to Analysis/Number_Theory
 Manuel Eberl <eberlm@in.tum.de> parents: 
67108diff
changeset | 506 | case True | 
| 
1a94352812f4
Moved material from AFP to Analysis/Number_Theory
 Manuel Eberl <eberlm@in.tum.de> parents: 
67108diff
changeset | 507 | from True have "prime (aprimedivisor n)" | 
| 
1a94352812f4
Moved material from AFP to Analysis/Number_Theory
 Manuel Eberl <eberlm@in.tum.de> parents: 
67108diff
changeset | 508 | by (intro prime_aprimedivisor') | 
| 
1a94352812f4
Moved material from AFP to Analysis/Number_Theory
 Manuel Eberl <eberlm@in.tum.de> parents: 
67108diff
changeset | 509 | (auto simp: primepow_def prime_gt_0_nat) | 
| 
1a94352812f4
Moved material from AFP to Analysis/Number_Theory
 Manuel Eberl <eberlm@in.tum.de> parents: 
67108diff
changeset | 510 | hence gt_1: "aprimedivisor n > 1" by (simp add: prime_gt_Suc_0_nat) | 
| 
1a94352812f4
Moved material from AFP to Analysis/Number_Theory
 Manuel Eberl <eberlm@in.tum.de> parents: 
67108diff
changeset | 511 | from True have "mangoldt n = ln (aprimedivisor n)" | 
| 
1a94352812f4
Moved material from AFP to Analysis/Number_Theory
 Manuel Eberl <eberlm@in.tum.de> parents: 
67108diff
changeset | 512 | by (simp add: mangoldt_def) | 
| 
1a94352812f4
Moved material from AFP to Analysis/Number_Theory
 Manuel Eberl <eberlm@in.tum.de> parents: 
67108diff
changeset | 513 | also have "\<dots> \<le> ln n" using True gt_1 | 
| 
1a94352812f4
Moved material from AFP to Analysis/Number_Theory
 Manuel Eberl <eberlm@in.tum.de> parents: 
67108diff
changeset | 514 | by (subst ln_le_cancel_iff) (auto intro!: Nat.gr0I dvd_imp_le aprimedivisor_dvd') | 
| 
1a94352812f4
Moved material from AFP to Analysis/Number_Theory
 Manuel Eberl <eberlm@in.tum.de> parents: 
67108diff
changeset | 515 | finally show ?thesis . | 
| 
1a94352812f4
Moved material from AFP to Analysis/Number_Theory
 Manuel Eberl <eberlm@in.tum.de> parents: 
67108diff
changeset | 516 | qed (insert assms, auto simp: mangoldt_def) | 
| 
1a94352812f4
Moved material from AFP to Analysis/Number_Theory
 Manuel Eberl <eberlm@in.tum.de> parents: 
67108diff
changeset | 517 | |
| 67341 
df79ef3b3a41
Renamed (^) to [^] in preparation of the move from "op X" to (X)
 nipkow parents: 
67166diff
changeset | 518 | end |