src/HOL/Number_Theory/Prime_Powers.thy
author haftmann
Sun, 09 Feb 2020 10:46:32 +0000
changeset 71424 e83fe2c31088
parent 71398 e0237f2eb49d
child 74543 ee039c11fb6f
permissions -rw-r--r--
rule concerning bit (push_bit ...)
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
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