author | Manuel Eberl <eberlm@in.tum.de> |
Tue, 21 Jan 2020 11:02:27 +0100 | |
changeset 71398 | e0237f2eb49d |
parent 68188 | 2af1f142f855 |
child 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 |
acc3b7dd0b21
More material on powers for HOL-Computational_Algebra/HOL-Number_Theory
eberlm <eberlm@in.tum.de>
parents:
diff
changeset
|
3 |
Author: Manuel Eberl <eberlm@in.tum.de> |
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:
68072
diff
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:
68188
diff
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:
67108
diff
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:
67108
diff
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:
67108
diff
changeset
|
133 |
|
1a94352812f4
Moved material from AFP to Analysis/Number_Theory
Manuel Eberl <eberlm@in.tum.de>
parents:
67108
diff
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:
67108
diff
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:
67108
diff
changeset
|
136 |
|
71398
e0237f2eb49d
Removed multiplicativity assumption from normalization_semidom
Manuel Eberl <eberlm@in.tum.de>
parents:
68188
diff
changeset
|
137 |
lemma unit_factor_primepow: |
e0237f2eb49d
Removed multiplicativity assumption from normalization_semidom
Manuel Eberl <eberlm@in.tum.de>
parents:
68188
diff
changeset
|
138 |
fixes p :: "'a :: factorial_semiring_multiplicative" |
e0237f2eb49d
Removed multiplicativity assumption from normalization_semidom
Manuel Eberl <eberlm@in.tum.de>
parents:
68188
diff
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:
68188
diff
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:
68188
diff
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:
68188
diff
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:
67108
diff
changeset
|
217 |
lemma primepow_power_iff_nat: |
1a94352812f4
Moved material from AFP to Analysis/Number_Theory
Manuel Eberl <eberlm@in.tum.de>
parents:
67108
diff
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:
67108
diff
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:
67108
diff
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:
68188
diff
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:
67108
diff
changeset
|
228 |
lemma aprimedivisor_vimage: |
71398
e0237f2eb49d
Removed multiplicativity assumption from normalization_semidom
Manuel Eberl <eberlm@in.tum.de>
parents:
68188
diff
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:
67108
diff
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:
67108
diff
changeset
|
231 |
proof safe |
1a94352812f4
Moved material from AFP to Analysis/Number_Theory
Manuel Eberl <eberlm@in.tum.de>
parents:
67108
diff
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:
67108
diff
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:
67108
diff
changeset
|
234 |
let ?n = "multiplicity (aprimedivisor q) q" |
1a94352812f4
Moved material from AFP to Analysis/Number_Theory
Manuel Eberl <eberlm@in.tum.de>
parents:
67108
diff
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:
67108
diff
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:
67108
diff
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:
67108
diff
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:
67108
diff
changeset
|
239 |
next |
1a94352812f4
Moved material from AFP to Analysis/Number_Theory
Manuel Eberl <eberlm@in.tum.de>
parents:
67108
diff
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:
67108
diff
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:
67108
diff
changeset
|
242 |
by (auto simp: aprimedivisor_prime_power) |
1a94352812f4
Moved material from AFP to Analysis/Number_Theory
Manuel Eberl <eberlm@in.tum.de>
parents:
67108
diff
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:
67108
diff
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:
67108
diff
changeset
|
245 |
qed |
1a94352812f4
Moved material from AFP to Analysis/Number_Theory
Manuel Eberl <eberlm@in.tum.de>
parents:
67108
diff
changeset
|
246 |
|
1a94352812f4
Moved material from AFP to Analysis/Number_Theory
Manuel Eberl <eberlm@in.tum.de>
parents:
67108
diff
changeset
|
247 |
lemma aprimedivisor_nat: |
1a94352812f4
Moved material from AFP to Analysis/Number_Theory
Manuel Eberl <eberlm@in.tum.de>
parents:
67108
diff
changeset
|
248 |
assumes "n \<noteq> (Suc 0::nat)" |
1a94352812f4
Moved material from AFP to Analysis/Number_Theory
Manuel Eberl <eberlm@in.tum.de>
parents:
67108
diff
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:
67108
diff
changeset
|
250 |
proof - |
1a94352812f4
Moved material from AFP to Analysis/Number_Theory
Manuel Eberl <eberlm@in.tum.de>
parents:
67108
diff
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:
67108
diff
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:
67108
diff
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:
67108
diff
changeset
|
254 |
qed |
1a94352812f4
Moved material from AFP to Analysis/Number_Theory
Manuel Eberl <eberlm@in.tum.de>
parents:
67108
diff
changeset
|
255 |
|
1a94352812f4
Moved material from AFP to Analysis/Number_Theory
Manuel Eberl <eberlm@in.tum.de>
parents:
67108
diff
changeset
|
256 |
lemma aprimedivisor_gt_Suc_0: |
1a94352812f4
Moved material from AFP to Analysis/Number_Theory
Manuel Eberl <eberlm@in.tum.de>
parents:
67108
diff
changeset
|
257 |
assumes "n \<noteq> Suc 0" |
1a94352812f4
Moved material from AFP to Analysis/Number_Theory
Manuel Eberl <eberlm@in.tum.de>
parents:
67108
diff
changeset
|
258 |
shows "aprimedivisor n > Suc 0" |
1a94352812f4
Moved material from AFP to Analysis/Number_Theory
Manuel Eberl <eberlm@in.tum.de>
parents:
67108
diff
changeset
|
259 |
proof - |
1a94352812f4
Moved material from AFP to Analysis/Number_Theory
Manuel Eberl <eberlm@in.tum.de>
parents:
67108
diff
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:
67108
diff
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:
67108
diff
changeset
|
262 |
qed |
1a94352812f4
Moved material from AFP to Analysis/Number_Theory
Manuel Eberl <eberlm@in.tum.de>
parents:
67108
diff
changeset
|
263 |
|
1a94352812f4
Moved material from AFP to Analysis/Number_Theory
Manuel Eberl <eberlm@in.tum.de>
parents:
67108
diff
changeset
|
264 |
lemma aprimedivisor_le_nat: |
1a94352812f4
Moved material from AFP to Analysis/Number_Theory
Manuel Eberl <eberlm@in.tum.de>
parents:
67108
diff
changeset
|
265 |
assumes "n > Suc 0" |
1a94352812f4
Moved material from AFP to Analysis/Number_Theory
Manuel Eberl <eberlm@in.tum.de>
parents:
67108
diff
changeset
|
266 |
shows "aprimedivisor n \<le> n" |
1a94352812f4
Moved material from AFP to Analysis/Number_Theory
Manuel Eberl <eberlm@in.tum.de>
parents:
67108
diff
changeset
|
267 |
proof - |
1a94352812f4
Moved material from AFP to Analysis/Number_Theory
Manuel Eberl <eberlm@in.tum.de>
parents:
67108
diff
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:
67108
diff
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:
67108
diff
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:
67108
diff
changeset
|
271 |
qed |
1a94352812f4
Moved material from AFP to Analysis/Number_Theory
Manuel Eberl <eberlm@in.tum.de>
parents:
67108
diff
changeset
|
272 |
|
67108
6b350c594ae3
bij_betw lemma for prime powers
eberlm <eberlm@in.tum.de>
parents:
66453
diff
changeset
|
273 |
lemma bij_betw_primepows: |
71398
e0237f2eb49d
Removed multiplicativity assumption from normalization_semidom
Manuel Eberl <eberlm@in.tum.de>
parents:
68188
diff
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:
66453
diff
changeset
|
275 |
(Collect prime \<times> UNIV) (Collect primepow)" |
6b350c594ae3
bij_betw lemma for prime powers
eberlm <eberlm@in.tum.de>
parents:
66453
diff
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:
66453
diff
changeset
|
277 |
goal_cases) |
6b350c594ae3
bij_betw lemma for prime powers
eberlm <eberlm@in.tum.de>
parents:
66453
diff
changeset
|
278 |
case 1 |
6b350c594ae3
bij_betw lemma for prime powers
eberlm <eberlm@in.tum.de>
parents:
66453
diff
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:
66453
diff
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:
66453
diff
changeset
|
281 |
next |
6b350c594ae3
bij_betw lemma for prime powers
eberlm <eberlm@in.tum.de>
parents:
66453
diff
changeset
|
282 |
case 2 |
6b350c594ae3
bij_betw lemma for prime powers
eberlm <eberlm@in.tum.de>
parents:
66453
diff
changeset
|
283 |
show ?case |
6b350c594ae3
bij_betw lemma for prime powers
eberlm <eberlm@in.tum.de>
parents:
66453
diff
changeset
|
284 |
by (auto simp: primepow_def prime_aprimedivisor) |
6b350c594ae3
bij_betw lemma for prime powers
eberlm <eberlm@in.tum.de>
parents:
66453
diff
changeset
|
285 |
next |
6b350c594ae3
bij_betw lemma for prime powers
eberlm <eberlm@in.tum.de>
parents:
66453
diff
changeset
|
286 |
case (3 n) |
6b350c594ae3
bij_betw lemma for prime powers
eberlm <eberlm@in.tum.de>
parents:
66453
diff
changeset
|
287 |
thus ?case |
6b350c594ae3
bij_betw lemma for prime powers
eberlm <eberlm@in.tum.de>
parents:
66453
diff
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:
66453
diff
changeset
|
289 |
next |
6b350c594ae3
bij_betw lemma for prime powers
eberlm <eberlm@in.tum.de>
parents:
66453
diff
changeset
|
290 |
case (4 n) |
6b350c594ae3
bij_betw lemma for prime powers
eberlm <eberlm@in.tum.de>
parents:
66453
diff
changeset
|
291 |
hence *: "0 < multiplicity (aprimedivisor n) n" |
6b350c594ae3
bij_betw lemma for prime powers
eberlm <eberlm@in.tum.de>
parents:
66453
diff
changeset
|
292 |
by (subst prime_multiplicity_gt_zero_iff) |
6b350c594ae3
bij_betw lemma for prime powers
eberlm <eberlm@in.tum.de>
parents:
66453
diff
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:
66453
diff
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:
66453
diff
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:
66453
diff
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:
66453
diff
changeset
|
297 |
multiplicity (aprimedivisor n) n" |
6b350c594ae3
bij_betw lemma for prime powers
eberlm <eberlm@in.tum.de>
parents:
66453
diff
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:
66453
diff
changeset
|
299 |
also have "aprimedivisor n ^ \<dots> = n" |
6b350c594ae3
bij_betw lemma for prime powers
eberlm <eberlm@in.tum.de>
parents:
66453
diff
changeset
|
300 |
using 4 by (subst primepow_decompose) auto |
6b350c594ae3
bij_betw lemma for prime powers
eberlm <eberlm@in.tum.de>
parents:
66453
diff
changeset
|
301 |
finally show ?case by auto |
6b350c594ae3
bij_betw lemma for prime powers
eberlm <eberlm@in.tum.de>
parents:
66453
diff
changeset
|
302 |
qed |
6b350c594ae3
bij_betw lemma for prime powers
eberlm <eberlm@in.tum.de>
parents:
66453
diff
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:
68188
diff
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:
67108
diff
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:
68188
diff
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:
68188
diff
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:
67108
diff
changeset
|
348 |
lemma aprimedivisor_primepow_factors_conv_prime_factorization: |
71398
e0237f2eb49d
Removed multiplicativity assumption from normalization_semidom
Manuel Eberl <eberlm@in.tum.de>
parents:
68188
diff
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:
67108
diff
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:
67108
diff
changeset
|
351 |
(is "?lhs = ?rhs") |
1a94352812f4
Moved material from AFP to Analysis/Number_Theory
Manuel Eberl <eberlm@in.tum.de>
parents:
67108
diff
changeset
|
352 |
proof (intro multiset_eqI) |
1a94352812f4
Moved material from AFP to Analysis/Number_Theory
Manuel Eberl <eberlm@in.tum.de>
parents:
67108
diff
changeset
|
353 |
fix p :: 'a |
1a94352812f4
Moved material from AFP to Analysis/Number_Theory
Manuel Eberl <eberlm@in.tum.de>
parents:
67108
diff
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:
67108
diff
changeset
|
355 |
proof (cases "prime p") |
1a94352812f4
Moved material from AFP to Analysis/Number_Theory
Manuel Eberl <eberlm@in.tum.de>
parents:
67108
diff
changeset
|
356 |
case False |
1a94352812f4
Moved material from AFP to Analysis/Number_Theory
Manuel Eberl <eberlm@in.tum.de>
parents:
67108
diff
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:
67108
diff
changeset
|
358 |
proof |
1a94352812f4
Moved material from AFP to Analysis/Number_Theory
Manuel Eberl <eberlm@in.tum.de>
parents:
67108
diff
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:
67108
diff
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:
67108
diff
changeset
|
361 |
by (auto simp: finite_primepow_factors) |
1a94352812f4
Moved material from AFP to Analysis/Number_Theory
Manuel Eberl <eberlm@in.tum.de>
parents:
67108
diff
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:
67108
diff
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:
67108
diff
changeset
|
364 |
qed |
1a94352812f4
Moved material from AFP to Analysis/Number_Theory
Manuel Eberl <eberlm@in.tum.de>
parents:
67108
diff
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:
67108
diff
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:
67108
diff
changeset
|
367 |
next |
1a94352812f4
Moved material from AFP to Analysis/Number_Theory
Manuel Eberl <eberlm@in.tum.de>
parents:
67108
diff
changeset
|
368 |
case True |
1a94352812f4
Moved material from AFP to Analysis/Number_Theory
Manuel Eberl <eberlm@in.tum.de>
parents:
67108
diff
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:
67108
diff
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:
67108
diff
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:
67108
diff
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:
67108
diff
changeset
|
373 |
using True by (rule aprimedivisor_vimage) |
1a94352812f4
Moved material from AFP to Analysis/Number_Theory
Manuel Eberl <eberlm@in.tum.de>
parents:
67108
diff
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:
67108
diff
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:
67108
diff
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:
67108
diff
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:
67108
diff
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:
67108
diff
changeset
|
379 |
by (simp add: count_prime_factorization) |
1a94352812f4
Moved material from AFP to Analysis/Number_Theory
Manuel Eberl <eberlm@in.tum.de>
parents:
67108
diff
changeset
|
380 |
finally show ?thesis . |
1a94352812f4
Moved material from AFP to Analysis/Number_Theory
Manuel Eberl <eberlm@in.tum.de>
parents:
67108
diff
changeset
|
381 |
qed |
1a94352812f4
Moved material from AFP to Analysis/Number_Theory
Manuel Eberl <eberlm@in.tum.de>
parents:
67108
diff
changeset
|
382 |
qed |
1a94352812f4
Moved material from AFP to Analysis/Number_Theory
Manuel Eberl <eberlm@in.tum.de>
parents:
67108
diff
changeset
|
383 |
|
1a94352812f4
Moved material from AFP to Analysis/Number_Theory
Manuel Eberl <eberlm@in.tum.de>
parents:
67108
diff
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:
67108
diff
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:
67108
diff
changeset
|
386 |
|
1a94352812f4
Moved material from AFP to Analysis/Number_Theory
Manuel Eberl <eberlm@in.tum.de>
parents:
67108
diff
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:
67108
diff
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:
67108
diff
changeset
|
389 |
|
1a94352812f4
Moved material from AFP to Analysis/Number_Theory
Manuel Eberl <eberlm@in.tum.de>
parents:
67108
diff
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:
67108
diff
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:
67108
diff
changeset
|
392 |
|
1a94352812f4
Moved material from AFP to Analysis/Number_Theory
Manuel Eberl <eberlm@in.tum.de>
parents:
67108
diff
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:
67108
diff
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:
67108
diff
changeset
|
395 |
|
1a94352812f4
Moved material from AFP to Analysis/Number_Theory
Manuel Eberl <eberlm@in.tum.de>
parents:
67108
diff
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:
67108
diff
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:
67108
diff
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:
67108
diff
changeset
|
399 |
|
1a94352812f4
Moved material from AFP to Analysis/Number_Theory
Manuel Eberl <eberlm@in.tum.de>
parents:
67108
diff
changeset
|
400 |
lemma primepowI: |
1a94352812f4
Moved material from AFP to Analysis/Number_Theory
Manuel Eberl <eberlm@in.tum.de>
parents:
67108
diff
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:
67108
diff
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:
67108
diff
changeset
|
403 |
|
1a94352812f4
Moved material from AFP to Analysis/Number_Theory
Manuel Eberl <eberlm@in.tum.de>
parents:
67108
diff
changeset
|
404 |
lemma not_primepowI: |
1a94352812f4
Moved material from AFP to Analysis/Number_Theory
Manuel Eberl <eberlm@in.tum.de>
parents:
67108
diff
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:
67108
diff
changeset
|
406 |
shows "\<not>primepow n" |
1a94352812f4
Moved material from AFP to Analysis/Number_Theory
Manuel Eberl <eberlm@in.tum.de>
parents:
67108
diff
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:
67108
diff
changeset
|
408 |
|
1a94352812f4
Moved material from AFP to Analysis/Number_Theory
Manuel Eberl <eberlm@in.tum.de>
parents:
67108
diff
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:
68188
diff
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:
67108
diff
changeset
|
411 |
assumes "n \<noteq> 0" |
1a94352812f4
Moved material from AFP to Analysis/Number_Theory
Manuel Eberl <eberlm@in.tum.de>
parents:
67108
diff
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:
67108
diff
changeset
|
413 |
proof - |
1a94352812f4
Moved material from AFP to Analysis/Number_Theory
Manuel Eberl <eberlm@in.tum.de>
parents:
67108
diff
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:
67108
diff
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:
67108
diff
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:
67108
diff
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:
67108
diff
changeset
|
418 |
finally show ?thesis .. |
1a94352812f4
Moved material from AFP to Analysis/Number_Theory
Manuel Eberl <eberlm@in.tum.de>
parents:
67108
diff
changeset
|
419 |
qed |
1a94352812f4
Moved material from AFP to Analysis/Number_Theory
Manuel Eberl <eberlm@in.tum.de>
parents:
67108
diff
changeset
|
420 |
|
1a94352812f4
Moved material from AFP to Analysis/Number_Theory
Manuel Eberl <eberlm@in.tum.de>
parents:
67108
diff
changeset
|
421 |
lemma multiplicity_aprimedivisor_Suc_0_iff: |
71398
e0237f2eb49d
Removed multiplicativity assumption from normalization_semidom
Manuel Eberl <eberlm@in.tum.de>
parents:
68188
diff
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:
67108
diff
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:
67108
diff
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:
67108
diff
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:
67108
diff
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:
67135
diff
changeset
|
430 |
|
a77d54ef718b
Some facts on the Mangoldt function
eberlm <eberlm@in.tum.de>
parents:
67135
diff
changeset
|
431 |
lemma mangoldt_0 [simp]: "mangoldt 0 = 0" |
a77d54ef718b
Some facts on the Mangoldt function
eberlm <eberlm@in.tum.de>
parents:
67135
diff
changeset
|
432 |
by (simp add: mangoldt_def) |
a77d54ef718b
Some facts on the Mangoldt function
eberlm <eberlm@in.tum.de>
parents:
67135
diff
changeset
|
433 |
|
a77d54ef718b
Some facts on the Mangoldt function
eberlm <eberlm@in.tum.de>
parents:
67135
diff
changeset
|
434 |
lemma mangoldt_Suc_0 [simp]: "mangoldt (Suc 0) = 0" |
a77d54ef718b
Some facts on the Mangoldt function
eberlm <eberlm@in.tum.de>
parents:
67135
diff
changeset
|
435 |
by (simp add: mangoldt_def) |
a77d54ef718b
Some facts on the Mangoldt function
eberlm <eberlm@in.tum.de>
parents:
67135
diff
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:
67108
diff
changeset
|
468 |
|
1a94352812f4
Moved material from AFP to Analysis/Number_Theory
Manuel Eberl <eberlm@in.tum.de>
parents:
67108
diff
changeset
|
469 |
lemma mangoldt_primepow: |
1a94352812f4
Moved material from AFP to Analysis/Number_Theory
Manuel Eberl <eberlm@in.tum.de>
parents:
67108
diff
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:
67108
diff
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:
67108
diff
changeset
|
472 |
|
1a94352812f4
Moved material from AFP to Analysis/Number_Theory
Manuel Eberl <eberlm@in.tum.de>
parents:
67108
diff
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:
67108
diff
changeset
|
474 |
by (subst mangoldt_primepow) auto |
1a94352812f4
Moved material from AFP to Analysis/Number_Theory
Manuel Eberl <eberlm@in.tum.de>
parents:
67108
diff
changeset
|
475 |
|
1a94352812f4
Moved material from AFP to Analysis/Number_Theory
Manuel Eberl <eberlm@in.tum.de>
parents:
67108
diff
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:
67108
diff
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:
67108
diff
changeset
|
478 |
|
1a94352812f4
Moved material from AFP to Analysis/Number_Theory
Manuel Eberl <eberlm@in.tum.de>
parents:
67108
diff
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:
67108
diff
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:
67108
diff
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:
67108
diff
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:
67108
diff
changeset
|
483 |
|
1a94352812f4
Moved material from AFP to Analysis/Number_Theory
Manuel Eberl <eberlm@in.tum.de>
parents:
67108
diff
changeset
|
484 |
lemma norm_mangoldt [simp]: |
1a94352812f4
Moved material from AFP to Analysis/Number_Theory
Manuel Eberl <eberlm@in.tum.de>
parents:
67108
diff
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:
67108
diff
changeset
|
486 |
proof (cases "primepow n") |
1a94352812f4
Moved material from AFP to Analysis/Number_Theory
Manuel Eberl <eberlm@in.tum.de>
parents:
67108
diff
changeset
|
487 |
case True |
1a94352812f4
Moved material from AFP to Analysis/Number_Theory
Manuel Eberl <eberlm@in.tum.de>
parents:
67108
diff
changeset
|
488 |
hence "prime (aprimedivisor n)" |
1a94352812f4
Moved material from AFP to Analysis/Number_Theory
Manuel Eberl <eberlm@in.tum.de>
parents:
67108
diff
changeset
|
489 |
by (intro prime_aprimedivisor') |
1a94352812f4
Moved material from AFP to Analysis/Number_Theory
Manuel Eberl <eberlm@in.tum.de>
parents:
67108
diff
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:
67108
diff
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:
67108
diff
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:
67108
diff
changeset
|
493 |
qed (auto simp: mangoldt_def) |
1a94352812f4
Moved material from AFP to Analysis/Number_Theory
Manuel Eberl <eberlm@in.tum.de>
parents:
67108
diff
changeset
|
494 |
|
67166
a77d54ef718b
Some facts on the Mangoldt function
eberlm <eberlm@in.tum.de>
parents:
67135
diff
changeset
|
495 |
lemma Re_mangoldt [simp]: "Re (mangoldt n) = mangoldt n" |
a77d54ef718b
Some facts on the Mangoldt function
eberlm <eberlm@in.tum.de>
parents:
67135
diff
changeset
|
496 |
and Im_mangoldt [simp]: "Im (mangoldt n) = 0" |
a77d54ef718b
Some facts on the Mangoldt function
eberlm <eberlm@in.tum.de>
parents:
67135
diff
changeset
|
497 |
by (simp_all add: mangoldt_def) |
a77d54ef718b
Some facts on the Mangoldt function
eberlm <eberlm@in.tum.de>
parents:
67135
diff
changeset
|
498 |
|
67135
1a94352812f4
Moved material from AFP to Analysis/Number_Theory
Manuel Eberl <eberlm@in.tum.de>
parents:
67108
diff
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:
67108
diff
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:
67108
diff
changeset
|
501 |
|
1a94352812f4
Moved material from AFP to Analysis/Number_Theory
Manuel Eberl <eberlm@in.tum.de>
parents:
67108
diff
changeset
|
502 |
lemma mangoldt_le: |
1a94352812f4
Moved material from AFP to Analysis/Number_Theory
Manuel Eberl <eberlm@in.tum.de>
parents:
67108
diff
changeset
|
503 |
assumes "n > 0" |
1a94352812f4
Moved material from AFP to Analysis/Number_Theory
Manuel Eberl <eberlm@in.tum.de>
parents:
67108
diff
changeset
|
504 |
shows "mangoldt n \<le> ln n" |
1a94352812f4
Moved material from AFP to Analysis/Number_Theory
Manuel Eberl <eberlm@in.tum.de>
parents:
67108
diff
changeset
|
505 |
proof (cases "primepow n") |
1a94352812f4
Moved material from AFP to Analysis/Number_Theory
Manuel Eberl <eberlm@in.tum.de>
parents:
67108
diff
changeset
|
506 |
case True |
1a94352812f4
Moved material from AFP to Analysis/Number_Theory
Manuel Eberl <eberlm@in.tum.de>
parents:
67108
diff
changeset
|
507 |
from True have "prime (aprimedivisor n)" |
1a94352812f4
Moved material from AFP to Analysis/Number_Theory
Manuel Eberl <eberlm@in.tum.de>
parents:
67108
diff
changeset
|
508 |
by (intro prime_aprimedivisor') |
1a94352812f4
Moved material from AFP to Analysis/Number_Theory
Manuel Eberl <eberlm@in.tum.de>
parents:
67108
diff
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:
67108
diff
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:
67108
diff
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:
67108
diff
changeset
|
512 |
by (simp add: mangoldt_def) |
1a94352812f4
Moved material from AFP to Analysis/Number_Theory
Manuel Eberl <eberlm@in.tum.de>
parents:
67108
diff
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:
67108
diff
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:
67108
diff
changeset
|
515 |
finally show ?thesis . |
1a94352812f4
Moved material from AFP to Analysis/Number_Theory
Manuel Eberl <eberlm@in.tum.de>
parents:
67108
diff
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:
67108
diff
changeset
|
517 |
|
67341
df79ef3b3a41
Renamed (^) to [^] in preparation of the move from "op X" to (X)
nipkow
parents:
67166
diff
changeset
|
518 |
end |