Skip to main content
AlexKontorovich/PrimeNumberTheoremAnd
Source indexedlemma · leanprover/lean4:v4.32.0

Erdos392.Factorization.addFactor_submultiset_total_imbalance

PrimeNumberTheoremAnd.IEANTN.Erdos392 · PrimeNumberTheoremAnd/IEANTN/Erdos392.lean:479 to 525

Source documentation

Adding a submultiset M of deficit primes to a factorization reduces the total imbalance by M.card.

Exact Lean statement

lemma Factorization.addFactor_submultiset_total_imbalance {n : ℕ} (f : Factorization n) (L : ℕ)
    (h_surplus : ∀ p, f.balance p ≤ 0) (M : Multiset ℕ) (hM : M ≤ deficitMultiset f L)
    (m : ℕ) (hm : m ≤ n) (hm_pos : 0 < m) (h_m_prod : m = M.prod) :
    (addFactor f m hm hm_pos).total_imbalance = f.total_imbalance - M.card

Complete declaration

Lean source

Canonical source
Full Lean sourceLean 4
lemma Factorization.addFactor_submultiset_total_imbalance {n : } (f : Factorization n) (L : )    (h_surplus :  p, f.balance p  0) (M : Multiset ) (hM : M  deficitMultiset f L)    (m : ) (hm : m  n) (hm_pos : 0 < m) (h_m_prod : m = M.prod) :    (addFactor f m hm hm_pos).total_imbalance = f.total_imbalance - M.card := by  have h_bal :  p  (n + 1).primesBelow,      (addFactor f m hm hm_pos).balance p = f.balance p + M.count p := fun p _  by    rw [addFactor_balance, h_m_prod, factorization_prod_eq_count]    exact fun q hq  (mem_deficitMultiset f L q (Multiset.mem_of_le hM hq)).1  have h_ptwise :  p  (n + 1).primesBelow,      (f.balance p + M.count p).natAbs = (f.balance p).natAbs - M.count p := fun p _  by    have h_count_le : M.count p  (f.balance p).natAbs := by      have := Multiset.count_le_of_le p hM      rw [count_deficitMultiset] at this      aesop    have h_neg : f.balance p  0 := h_surplus p    have h1 : ((f.balance p).natAbs : ) = -f.balance p := Int.ofNat_natAbs_of_nonpos h_neg    have h2 : ((f.balance p + M.count p).natAbs : ) = -(f.balance p + M.count p) :=      Int.ofNat_natAbs_of_nonpos (by omega : f.balance p + M.count p  0)    omega  have h_sum : ∑ p  (n + 1).primesBelow, (f.balance p + M.count p).natAbs =      ∑ p  (n + 1).primesBelow, (f.balance p).natAbs -        ∑ p  (n + 1).primesBelow, M.count p := by    have h_le :  p  (n + 1).primesBelow, M.count p  (f.balance p).natAbs := fun p _  by      have := Multiset.count_le_of_le p hM      rw [count_deficitMultiset] at this      aesop    rw [Finset.sum_congr rfl h_ptwise]    have h_add : ∑ p  (n + 1).primesBelow, ((f.balance p).natAbs - M.count p + M.count p) =        ∑ p  (n + 1).primesBelow, (f.balance p).natAbs :=      Finset.sum_congr rfl fun x hx  Nat.sub_add_cancel (h_le x hx)    rw [Finset.sum_add_distrib] at h_add    omega  have h_card_eq :  {M : Multiset }, ( p  M, p  (n + 1).primesBelow)       M.card = ∑ p  (n + 1).primesBelow, M.count p := fun {M} hM  by    induction M using Multiset.induction with    | empty => simp    | cons a M ih =>      simp only [Multiset.card_cons, Multiset.count_cons]      rw [ih (fun p hp  hM p (Multiset.mem_cons_of_mem hp)), Finset.sum_add_distrib,          Finset.sum_ite_eq' _ a, if_pos (hM a (Multiset.mem_cons_self a M))]  convert! h_sum using 2  · simp only [total_imbalance]    exact Finset.sum_congr rfl fun p hp  congrArg Int.natAbs (h_bal p hp)  · exact h_card_eq fun p hp  by      obtain a, ha, ha' := Multiset.mem_bind.mp (Multiset.mem_of_le hM hp)      rw [Multiset.mem_replicate] at ha'      exact ha'.2 ▸ (Finset.mem_filter.mp ha).1