@@ -477,11 +477,16 @@ theorem prod_pow_prime_padicValNat (n : Nat) (hn : n ≠ 0) (m : Nat) (pr : n <
477477 · intro p hp
478478 simp [factorization_def n (prime_of_mem_primeFactors hp)]
479479
480- lemma prod_pow_primeFactors_factorization (hn : n ≠ 0 ) :
480+ theorem prod_primeFactors_pow_factorization (hn : n ≠ 0 ) :
481+ n = ∏ p ∈ n.primeFactors, p ^ n.factorization p :=
482+ prod_factorization_pow_eq_self hn |>.symm.trans <| prod_factorization_eq_prod_primeFactors _
483+
484+ lemma prod_primeFactors_coe_pow_factorization (hn : n ≠ 0 ) :
481485 n = ∏ (p : n.primeFactors), (p : ℕ) ^ (n.factorization p) := by
482- nth_rw 1 [← prod_factorization_pow_eq_self hn]
483- rw [prod_factorization_eq_prod_primeFactors _]
484- exact prod_subtype n.primeFactors (fun _ ↦ Iff.rfl) fun a ↦ a ^ n.factorization a
486+ simpa using prod_primeFactors_pow_factorization hn
487+
488+ @ [deprecated (since := "2026-06-24" )]
489+ alias prod_pow_primeFactors_factorization := prod_primeFactors_coe_pow_factorization
485490
486491lemma pairwise_coprime_pow_primeFactors_factorization :
487492 Pairwise (Function.onFun Nat.Coprime fun (p : n.primeFactors) ↦ p ^ n.factorization p) := by
@@ -491,6 +496,26 @@ lemma pairwise_coprime_pow_primeFactors_factorization :
491496 · exact Nat.prime_of_mem_primeFactors p1.2
492497 · exact Nat.prime_of_mem_primeFactors p2.2
493498
499+ theorem dvd_prod_primeFactors_pow_self {n : ℕ} (hn : n ≠ 0 ) :
500+ n ∣ (∏ p ∈ n.primeFactors, p) ^ n := by
501+ nth_rw 1 [← Finset.prod_pow, prod_primeFactors_pow_factorization hn]
502+ refine prod_dvd_prod_of_dvd _ _ fun i hi ↦ pow_dvd_pow i ?_
503+ grw [n.factorization_def <| prime_of_mem_primeFactors hi, padicValNat_le_self]
504+
505+ theorem dvd_pow_self_iff {n k : ℕ} (hn : n ≠ 0 ) (hk : k ≠ 0 ) :
506+ n ∣ k ^ n ↔ n.primeFactors ⊆ k.primeFactors := by
507+ refine ⟨fun h ↦ ?_, fun h ↦ ?_⟩
508+ · grw [← Nat.primeFactors_pow k hn, Nat.primeFactors_mono h <| pow_ne_zero n hk]
509+ · grw [dvd_prod_primeFactors_pow_self hn, prod_dvd_prod_of_subset _ _ _ h, prod_primeFactors_dvd]
510+
511+ theorem exists_dvd_pow_iff {n k : ℕ} (hn : n ≠ 0 ) (hk : k ≠ 0 ) :
512+ (∃ m, n ∣ k ^ m) ↔ n.primeFactors ⊆ k.primeFactors := by
513+ refine ⟨fun ⟨m, h⟩ ↦ ?_, fun h ↦ ⟨n, dvd_pow_self_iff hn hk |>.mpr h⟩⟩
514+ rcases eq_or_ne m 0 with (rfl | hm)
515+ · simp_all
516+ rw [← Nat.primeFactors_pow k hm]
517+ exact Nat.primeFactors_mono h <| pow_ne_zero m hk
518+
494519/-! ### Lemmas about factorizations of particular functions -/
495520
496521/-- Exactly `n / p` naturals in `[1, n]` are multiples of `p`.
0 commit comments