internlm/Lean-Github huggingface dataset:
Theorem: Sieve.selbergBoundingSum_ge_sum_div
Proof state before:
s : SelbergSieve
hP : ∀ (p : ℕ), p.Prime → ↑p ≤ s.level → p ∣ s.prodPrimes
hnu : CompletelyMultiplicative s.nu
hnu_nonneg : ∀ (n : ℕ), 0 ≤ s.nu n
hnu_lt : ∀ (p : ℕ), p.Prime → p ∣ s.prodPrimes → s.nu p < 1
m : ℕ
hm : 1 ≤ m ∧ ↑m ≤ √s.level
hprod_pos : 0 < ∏ p ∈ m.primeFactors, p
hprod_ne_zero : (∏ p ∈ m.primeFactors, p) ^ ⌊s.level⌋₊ ≠ 0
hm_ne_zero : m ≠ 0
p : ℕ
hy_mul_prod_nonneg : 0 ≤ ⌊s.level⌋₊ * (∏ p ∈ m.primeFactors, p).factorization p
⊢ m.factorization p * 1 ≤ (⌊s.level⌋₊ • (∏ p ∈ m.primeFactors, p).factorization) p

s : SelbergSieve
hP : ∀ (p : ℕ), p.Prime → ↑p ≤ s.level → p ∣ s.prodPrimes
hnu : CompletelyMultiplicative s.nu
hnu_nonneg : ∀ (n : ℕ), 0 ≤ s.nu n
hnu_lt : ∀ (p : ℕ), p.Prime → p ∣ s.prodPrimes → s.nu p < 1
m : ℕ
hm : 1 ≤ m ∧ ↑m ≤ √s.level
hprod_pos : 0 < ∏ p ∈ m.primeFactors, p
hprod_ne_zero : (∏ p ∈ m.primeFactors, p) ^ ⌊s.level⌋₊ ≠ 0
hm_ne_zero : m ≠ 0
⊢ m ≠ 0
Tactic:
trans ⌊s.level⌋₊ * Nat.factorization (∏ p in m.primeFactors, p) p
Proof state after:
s : SelbergSieve
hP : ∀ (p : ℕ), p.Prime → ↑p ≤ s.level → p ∣ s.prodPrimes
hnu : CompletelyMultiplicative s.nu
hnu_nonneg : ∀ (n : ℕ), 0 ≤ s.nu n
hnu_lt : ∀ (p : ℕ), p.Prime → p ∣ s.prodPrimes → s.nu p < 1
m : ℕ
hm : 1 ≤ m ∧ ↑m ≤ √s.level
hprod_pos : 0 < ∏ p ∈ m.primeFactors, p
hprod_ne_zero : (∏ p ∈ m.primeFactors, p) ^ ⌊s.level⌋₊ ≠ 0
hm_ne_zero : m ≠ 0
p : ℕ
hy_mul_prod_nonneg : 0 ≤ ⌊s.level⌋₊ * (∏ p ∈ m.primeFactors, p).factorization p
⊢ m.factorization p * 1 ≤ ⌊s.level⌋₊ * (∏ p ∈ m.primeFactors, p).factorization p

s : SelbergSieve
hP : ∀ (p : ℕ), p.Prime → ↑p ≤ s.level → p ∣ s.prodPrimes
hnu : CompletelyMultiplicative s.nu
hnu_nonneg : ∀ (n : ℕ), 0 ≤ s.nu n
hnu_lt : ∀ (p : ℕ), p.Prime → p ∣ s.prodPrimes → s.nu p < 1
m : ℕ
hm : 1 ≤ m ∧ ↑m ≤ √s.level
hprod_pos : 0 < ∏ p ∈ m.primeFactors, p
hprod_ne_zero : (∏ p ∈ m.primeFactors, p) ^ ⌊s.level⌋₊ ≠ 0
hm_ne_zero : m ≠ 0
p : ℕ
hy_mul_prod_nonneg : 0 ≤ ⌊s.level⌋₊ * (∏ p ∈ m.primeFactors, p).factorization p
⊢ ⌊s.level⌋₊ * (∏ p ∈ m.primeFactors, p).factorization p ≤ (⌊s.level⌋₊ • (∏ p ∈ m.primeFactors, p).factorization) p

s : SelbergSieve
hP : ∀ (p : ℕ), p.Prime → ↑p ≤ s.level → p ∣ s.prodPrimes
hnu : CompletelyMultiplicative s.nu
hnu_nonneg : ∀ (n : ℕ), 0 ≤ s.nu n
hnu_lt : ∀ (p : ℕ), p.Prime → p ∣ s.prodPrimes → s.nu p < 1
m : ℕ
hm : 1 ≤ m ∧ ↑m ≤ √s.level
hprod_pos : 0 < ∏ p ∈ m.primeFactors, p
hprod_ne_zero : (∏ p ∈ m.primeFactors, p) ^ ⌊s.level⌋₊ ≠ 0
hm_ne_zero : m ≠ 0
⊢ m ≠ 0
Theorem: Sieve.selbergBoundingSum_ge_sum_div
Proof state before:
s : SelbergSieve
hP : ∀ (p : ℕ), p.Prime → ↑p ≤ s.level → p ∣ s.prodPrimes
hnu : CompletelyMultiplicative s.nu
hnu_nonneg : ∀ (n : ℕ), 0 ≤ s.nu n
hnu_lt : ∀ (p : ℕ), p.Prime → p ∣ s.prodPrimes → s.nu p < 1
m : ℕ
hm : 1 ≤ m ∧ ↑m ≤ √s.level
hprod_pos : 0 < ∏ p ∈ m.primeFactors, p
hprod_ne_zero : (∏ p ∈ m.primeFactors, p) ^ ⌊s.level⌋₊ ≠ 0
hm_ne_zero : m ≠ 0
p : ℕ
hy_mul_prod_nonneg : 0 ≤ ⌊s.level⌋₊ * (∏ p ∈ m.primeFactors, p).factorization p
⊢ m.factorization p * 1 ≤ ⌊s.level⌋₊ * (∏ p ∈ m.primeFactors, p).factorization p

s : SelbergSieve
hP : ∀ (p : ℕ), p.Prime → ↑p ≤ s.level → p ∣ s.prodPrimes
hnu : CompletelyMultiplicative s.nu
hnu_nonneg : ∀ (n : ℕ), 0 ≤ s.nu n
hnu_lt : ∀ (p : ℕ), p.Prime → p ∣ s.prodPrimes → s.nu p < 1
m : ℕ
hm : 1 ≤ m ∧ ↑m ≤ √s.level
hprod_pos : 0 < ∏ p ∈ m.primeFactors, p
hprod_ne_zero : (∏ p ∈ m.primeFactors, p) ^ ⌊s.level⌋₊ ≠ 0
hm_ne_zero : m ≠ 0
p : ℕ
hy_mul_prod_nonneg : 0 ≤ ⌊s.level⌋₊ * (∏ p ∈ m.primeFactors, p).factorization p
⊢ ⌊s.level⌋₊ * (∏ p ∈ m.primeFactors, p).factorization p ≤ (⌊s.level⌋₊ • (∏ p ∈ m.primeFactors, p).factorization) p

s : SelbergSieve
hP : ∀ (p : ℕ), p.Prime → ↑p ≤ s.level → p ∣ s.prodPrimes
hnu : CompletelyMultiplicative s.nu
hnu_nonneg : ∀ (n : ℕ), 0 ≤ s.nu n
hnu_lt : ∀ (p : ℕ), p.Prime → p ∣ s.prodPrimes → s.nu p < 1
m : ℕ
hm : 1 ≤ m ∧ ↑m ≤ √s.level
hprod_pos : 0 < ∏ p ∈ m.primeFactors, p
hprod_ne_zero : (∏ p ∈ m.primeFactors, p) ^ ⌊s.level⌋₊ ≠ 0
hm_ne_zero : m ≠ 0
⊢ m ≠ 0
Tactic:
swap
Proof state after:
s : SelbergSieve
hP : ∀ (p : ℕ), p.Prime → ↑p ≤ s.level → p ∣ s.prodPrimes
hnu : CompletelyMultiplicative s.nu
hnu_nonneg : ∀ (n : ℕ), 0 ≤ s.nu n
hnu_lt : ∀ (p : ℕ), p.Prime → p ∣ s.prodPrimes → s.nu p < 1
m : ℕ
hm : 1 ≤ m ∧ ↑m ≤ √s.level
hprod_pos : 0 < ∏ p ∈ m.primeFactors, p
hprod_ne_zero : (∏ p ∈ m.primeFactors, p) ^ ⌊s.level⌋₊ ≠ 0
hm_ne_zero : m ≠ 0
p : ℕ
hy_mul_prod_nonneg : 0 ≤ ⌊s.level⌋₊ * (∏ p ∈ m.primeFactors, p).factorization p
⊢ ⌊s.level⌋₊ * (∏ p ∈ m.primeFactors, p).factorization p ≤ (⌊s.level⌋₊ • (∏ p ∈ m.primeFactors, p).factorization) p

s : SelbergSieve
hP : ∀ (p : ℕ), p.Prime → ↑p ≤ s.level → p ∣ s.prodPrimes
hnu : CompletelyMultiplicative s.nu
hnu_nonneg : ∀ (n : ℕ), 0 ≤ s.nu n
hnu_lt : ∀ (p : ℕ), p.Prime → p ∣ s.prodPrimes → s.nu p < 1
m : ℕ
hm : 1 ≤ m ∧ ↑m ≤ √s.level
hprod_pos : 0 < ∏ p ∈ m.primeFactors, p
hprod_ne_zero : (∏ p ∈ m.primeFactors, p) ^ ⌊s.level⌋₊ ≠ 0
hm_ne_zero : m ≠ 0
p : ℕ
hy_mul_prod_nonneg : 0 ≤ ⌊s.level⌋₊ * (∏ p ∈ m.primeFactors, p).factorization p
⊢ m.factorization p * 1 ≤ ⌊s.level⌋₊ * (∏ p ∈ m.primeFactors, p).factorization p

s : SelbergSieve
hP : ∀ (p : ℕ), p.Prime → ↑p ≤ s.level → p ∣ s.prodPrimes
hnu : CompletelyMultiplicative s.nu
hnu_nonneg : ∀ (n : ℕ), 0 ≤ s.nu n
hnu_lt : ∀ (p : ℕ), p.Prime → p ∣ s.prodPrimes → s.nu p < 1
m : ℕ
hm : 1 ≤ m ∧ ↑m ≤ √s.level
hprod_pos : 0 < ∏ p ∈ m.primeFactors, p
hprod_ne_zero : (∏ p ∈ m.primeFactors, p) ^ ⌊s.level⌋₊ ≠ 0
hm_ne_zero : m ≠ 0
⊢ m ≠ 0
Theorem: Sieve.selbergBoundingSum_ge_sum_div
Proof state before:
s : SelbergSieve
hP : ∀ (p : ℕ), p.Prime → ↑p ≤ s.level → p ∣ s.prodPrimes
hnu : CompletelyMultiplicative s.nu
hnu_nonneg : ∀ (n : ℕ), 0 ≤ s.nu n
hnu_lt : ∀ (p : ℕ), p.Prime → p ∣ s.prodPrimes → s.nu p < 1
m : ℕ
hm : 1 ≤ m ∧ ↑m ≤ √s.level
hprod_pos : 0 < ∏ p ∈ m.primeFactors, p
hprod_ne_zero : (∏ p ∈ m.primeFactors, p) ^ ⌊s.level⌋₊ ≠ 0
hm_ne_zero : m ≠ 0
p : ℕ
hy_mul_prod_nonneg : 0 ≤ ⌊s.level⌋₊ * (∏ p ∈ m.primeFactors, p).factorization p
⊢ m.factorization p * 1 ≤ ⌊s.level⌋₊ * (∏ p ∈ m.primeFactors, p).factorization p

s : SelbergSieve
hP : ∀ (p : ℕ), p.Prime → ↑p ≤ s.level → p ∣ s.prodPrimes
hnu : CompletelyMultiplicative s.nu
hnu_nonneg : ∀ (n : ℕ), 0 ≤ s.nu n
hnu_lt : ∀ (p : ℕ), p.Prime → p ∣ s.prodPrimes → s.nu p < 1
m : ℕ
hm : 1 ≤ m ∧ ↑m ≤ √s.level
hprod_pos : 0 < ∏ p ∈ m.primeFactors, p
hprod_ne_zero : (∏ p ∈ m.primeFactors, p) ^ ⌊s.level⌋₊ ≠ 0
hm_ne_zero : m ≠ 0
⊢ m ≠ 0
Tactic:
by_cases hpp : p.Prime
Proof state after:
case pos
s : SelbergSieve
hP : ∀ (p : ℕ), p.Prime → ↑p ≤ s.level → p ∣ s.prodPrimes
hnu : CompletelyMultiplicative s.nu
hnu_nonneg : ∀ (n : ℕ), 0 ≤ s.nu n
hnu_lt : ∀ (p : ℕ), p.Prime → p ∣ s.prodPrimes → s.nu p < 1
m : ℕ
hm : 1 ≤ m ∧ ↑m ≤ √s.level
hprod_pos : 0 < ∏ p ∈ m.primeFactors, p
hprod_ne_zero : (∏ p ∈ m.primeFactors, p) ^ ⌊s.level⌋₊ ≠ 0
hm_ne_zero : m ≠ 0
p : ℕ
hy_mul_prod_nonneg : 0 ≤ ⌊s.level⌋₊ * (∏ p ∈ m.primeFactors, p).factorization p
hpp : p.Prime
⊢ m.factorization p * 1 ≤ ⌊s.level⌋₊ * (∏ p ∈ m.primeFactors, p).factorization p

case neg
s : SelbergSieve
hP : ∀ (p : ℕ), p.Prime → ↑p ≤ s.level → p ∣ s.prodPrimes
hnu : CompletelyMultiplicative s.nu
hnu_nonneg : ∀ (n : ℕ), 0 ≤ s.nu n
hnu_lt : ∀ (p : ℕ), p.Prime → p ∣ s.prodPrimes → s.nu p < 1
m : ℕ
hm : 1 ≤ m ∧ ↑m ≤ √s.level
hprod_pos : 0 < ∏ p ∈ m.primeFactors, p
hprod_ne_zero : (∏ p ∈ m.primeFactors, p) ^ ⌊s.level⌋₊ ≠ 0
hm_ne_zero : m ≠ 0
p : ℕ
hy_mul_prod_nonneg : 0 ≤ ⌊s.level⌋₊ * (∏ p ∈ m.primeFactors, p).factorization p
hpp : ¬p.Prime
⊢ m.factorization p * 1 ≤ ⌊s.level⌋₊ * (∏ p ∈ m.primeFactors, p).factorization p

s : SelbergSieve
hP : ∀ (p : ℕ), p.Prime → ↑p ≤ s.level → p ∣ s.prodPrimes
hnu : CompletelyMultiplicative s.nu
hnu_nonneg : ∀ (n : ℕ), 0 ≤ s.nu n
hnu_lt : ∀ (p : ℕ), p.Prime → p ∣ s.prodPrimes → s.nu p < 1
m : ℕ
hm : 1 ≤ m ∧ ↑m ≤ √s.level
hprod_pos : 0 < ∏ p ∈ m.primeFactors, p
hprod_ne_zero : (∏ p ∈ m.primeFactors, p) ^ ⌊s.level⌋₊ ≠ 0
hm_ne_zero : m ≠ 0
⊢ m ≠ 0
Theorem: Sieve.selbergBoundingSum_ge_sum_div
Proof state before:
case pos
s : SelbergSieve
hP : ∀ (p : ℕ), p.Prime → ↑p ≤ s.level → p ∣ s.prodPrimes
hnu : CompletelyMultiplicative s.nu
hnu_nonneg : ∀ (n : ℕ), 0 ≤ s.nu n
hnu_lt : ∀ (p : ℕ), p.Prime → p ∣ s.prodPrimes → s.nu p < 1
m : ℕ
hm : 1 ≤ m ∧ ↑m ≤ √s.level
hprod_pos : 0 < ∏ p ∈ m.primeFactors, p
hprod_ne_zero : (∏ p ∈ m.primeFactors, p) ^ ⌊s.level⌋₊ ≠ 0
hm_ne_zero : m ≠ 0
p : ℕ
hy_mul_prod_nonneg : 0 ≤ ⌊s.level⌋₊ * (∏ p ∈ m.primeFactors, p).factorization p
hpp : p.Prime
⊢ m.factorization p * 1 ≤ ⌊s.level⌋₊ * (∏ p ∈ m.primeFactors, p).factorization p

case neg
s : SelbergSieve
hP : ∀ (p : ℕ), p.Prime → ↑p ≤ s.level → p ∣ s.prodPrimes
hnu : CompletelyMultiplicative s.nu
hnu_nonneg : ∀ (n : ℕ), 0 ≤ s.nu n
hnu_lt : ∀ (p : ℕ), p.Prime → p ∣ s.prodPrimes → s.nu p < 1
m : ℕ
hm : 1 ≤ m ∧ ↑m ≤ √s.level
hprod_pos : 0 < ∏ p ∈ m.primeFactors, p
hprod_ne_zero : (∏ p ∈ m.primeFactors, p) ^ ⌊s.level⌋₊ ≠ 0
hm_ne_zero : m ≠ 0
p : ℕ
hy_mul_prod_nonneg : 0 ≤ ⌊s.level⌋₊ * (∏ p ∈ m.primeFactors, p).factorization p
hpp : ¬p.Prime
⊢ m.factorization p * 1 ≤ ⌊s.level⌋₊ * (∏ p ∈ m.primeFactors, p).factorization p

s : SelbergSieve
hP : ∀ (p : ℕ), p.Prime → ↑p ≤ s.level → p ∣ s.prodPrimes
hnu : CompletelyMultiplicative s.nu
hnu_nonneg : ∀ (n : ℕ), 0 ≤ s.nu n
hnu_lt : ∀ (p : ℕ), p.Prime → p ∣ s.prodPrimes → s.nu p < 1
m : ℕ
hm : 1 ≤ m ∧ ↑m ≤ √s.level
hprod_pos : 0 < ∏ p ∈ m.primeFactors, p
hprod_ne_zero : (∏ p ∈ m.primeFactors, p) ^ ⌊s.level⌋₊ ≠ 0
hm_ne_zero : m ≠ 0
⊢ m ≠ 0
Tactic:
swap
Proof state after:
case neg
s : SelbergSieve
hP : ∀ (p : ℕ), p.Prime → ↑p ≤ s.level → p ∣ s.prodPrimes
hnu : CompletelyMultiplicative s.nu
hnu_nonneg : ∀ (n : ℕ), 0 ≤ s.nu n
hnu_lt : ∀ (p : ℕ), p.Prime → p ∣ s.prodPrimes → s.nu p < 1
m : ℕ
hm : 1 ≤ m ∧ ↑m ≤ √s.level
hprod_pos : 0 < ∏ p ∈ m.primeFactors, p
hprod_ne_zero : (∏ p ∈ m.primeFactors, p) ^ ⌊s.level⌋₊ ≠ 0
hm_ne_zero : m ≠ 0
p : ℕ
hy_mul_prod_nonneg : 0 ≤ ⌊s.level⌋₊ * (∏ p ∈ m.primeFactors, p).factorization p
hpp : ¬p.Prime
⊢ m.factorization p * 1 ≤ ⌊s.level⌋₊ * (∏ p ∈ m.primeFactors, p).factorization p

case pos
s : SelbergSieve
hP : ∀ (p : ℕ), p.Prime → ↑p ≤ s.level → p ∣ s.prodPrimes
hnu : CompletelyMultiplicative s.nu
hnu_nonneg : ∀ (n : ℕ), 0 ≤ s.nu n
hnu_lt : ∀ (p : ℕ), p.Prime → p ∣ s.prodPrimes → s.nu p < 1
m : ℕ
hm : 1 ≤ m ∧ ↑m ≤ √s.level
hprod_pos : 0 < ∏ p ∈ m.primeFactors, p
hprod_ne_zero : (∏ p ∈ m.primeFactors, p) ^ ⌊s.level⌋₊ ≠ 0
hm_ne_zero : m ≠ 0
p : ℕ
hy_mul_prod_nonneg : 0 ≤ ⌊s.level⌋₊ * (∏ p ∈ m.primeFactors, p).factorization p
hpp : p.Prime
⊢ m.factorization p * 1 ≤ ⌊s.level⌋₊ * (∏ p ∈ m.primeFactors, p).factorization p

s : SelbergSieve
hP : ∀ (p : ℕ), p.Prime → ↑p ≤ s.level → p ∣ s.prodPrimes
hnu : CompletelyMultiplicative s.nu
hnu_nonneg : ∀ (n : ℕ), 0 ≤ s.nu n
hnu_lt : ∀ (p : ℕ), p.Prime → p ∣ s.prodPrimes → s.nu p < 1
m : ℕ
hm : 1 ≤ m ∧ ↑m ≤ √s.level
hprod_pos : 0 < ∏ p ∈ m.primeFactors, p
hprod_ne_zero : (∏ p ∈ m.primeFactors, p) ^ ⌊s.level⌋₊ ≠ 0
hm_ne_zero : m ≠ 0
⊢ m ≠ 0
Theorem: Sieve.selbergBoundingSum_ge_sum_div
Proof state before:
case pos
s : SelbergSieve
hP : ∀ (p : ℕ), p.Prime → ↑p ≤ s.level → p ∣ s.prodPrimes
hnu : CompletelyMultiplicative s.nu
hnu_nonneg : ∀ (n : ℕ), 0 ≤ s.nu n
hnu_lt : ∀ (p : ℕ), p.Prime → p ∣ s.prodPrimes → s.nu p < 1
m : ℕ
hm : 1 ≤ m ∧ ↑m ≤ √s.level
hprod_pos : 0 < ∏ p ∈ m.primeFactors, p
hprod_ne_zero : (∏ p ∈ m.primeFactors, p) ^ ⌊s.level⌋₊ ≠ 0
hm_ne_zero : m ≠ 0
p : ℕ
hy_mul_prod_nonneg : 0 ≤ ⌊s.level⌋₊ * (∏ p ∈ m.primeFactors, p).factorization p
hpp : p.Prime
⊢ m.factorization p * 1 ≤ ⌊s.level⌋₊ * (∏ p ∈ m.primeFactors, p).factorization p

s : SelbergSieve
hP : ∀ (p : ℕ), p.Prime → ↑p ≤ s.level → p ∣ s.prodPrimes
hnu : CompletelyMultiplicative s.nu
hnu_nonneg : ∀ (n : ℕ), 0 ≤ s.nu n
hnu_lt : ∀ (p : ℕ), p.Prime → p ∣ s.prodPrimes → s.nu p < 1
m : ℕ
hm : 1 ≤ m ∧ ↑m ≤ √s.level
hprod_pos : 0 < ∏ p ∈ m.primeFactors, p
hprod_ne_zero : (∏ p ∈ m.primeFactors, p) ^ ⌊s.level⌋₊ ≠ 0
hm_ne_zero : m ≠ 0
⊢ m ≠ 0
Tactic:
by_cases hpdvd : p ∣ m
Proof state after:
case pos
s : SelbergSieve
hP : ∀ (p : ℕ), p.Prime → ↑p ≤ s.level → p ∣ s.prodPrimes
hnu : CompletelyMultiplicative s.nu
hnu_nonneg : ∀ (n : ℕ), 0 ≤ s.nu n
hnu_lt : ∀ (p : ℕ), p.Prime → p ∣ s.prodPrimes → s.nu p < 1
m : ℕ
hm : 1 ≤ m ∧ ↑m ≤ √s.level
hprod_pos : 0 < ∏ p ∈ m.primeFactors, p
hprod_ne_zero : (∏ p ∈ m.primeFactors, p) ^ ⌊s.level⌋₊ ≠ 0
hm_ne_zero : m ≠ 0
p : ℕ
hy_mul_prod_nonneg : 0 ≤ ⌊s.level⌋₊ * (∏ p ∈ m.primeFactors, p).factorization p
hpp : p.Prime
hpdvd : p ∣ m
⊢ m.factorization p * 1 ≤ ⌊s.level⌋₊ * (∏ p ∈ m.primeFactors, p).factorization p

case neg
s : SelbergSieve
hP : ∀ (p : ℕ), p.Prime → ↑p ≤ s.level → p ∣ s.prodPrimes
hnu : CompletelyMultiplicative s.nu
hnu_nonneg : ∀ (n : ℕ), 0 ≤ s.nu n
hnu_lt : ∀ (p : ℕ), p.Prime → p ∣ s.prodPrimes → s.nu p < 1
m : ℕ
hm : 1 ≤ m ∧ ↑m ≤ √s.level
hprod_pos : 0 < ∏ p ∈ m.primeFactors, p
hprod_ne_zero : (∏ p ∈ m.primeFactors, p) ^ ⌊s.level⌋₊ ≠ 0
hm_ne_zero : m ≠ 0
p : ℕ
hy_mul_prod_nonneg : 0 ≤ ⌊s.level⌋₊ * (∏ p ∈ m.primeFactors, p).factorization p
hpp : p.Prime
hpdvd : ¬p ∣ m
⊢ m.factorization p * 1 ≤ ⌊s.level⌋₊ * (∏ p ∈ m.primeFactors, p).factorization p

s : SelbergSieve
hP : ∀ (p : ℕ), p.Prime → ↑p ≤ s.level → p ∣ s.prodPrimes
hnu : CompletelyMultiplicative s.nu
hnu_nonneg : ∀ (n : ℕ), 0 ≤ s.nu n
hnu_lt : ∀ (p : ℕ), p.Prime → p ∣ s.prodPrimes → s.nu p < 1
m : ℕ
hm : 1 ≤ m ∧ ↑m ≤ √s.level
hprod_pos : 0 < ∏ p ∈ m.primeFactors, p
hprod_ne_zero : (∏ p ∈ m.primeFactors, p) ^ ⌊s.level⌋₊ ≠ 0
hm_ne_zero : m ≠ 0
⊢ m ≠ 0
Theorem: Sieve.selbergBoundingSum_ge_sum_div
Proof state before:
case pos
s : SelbergSieve
hP : ∀ (p : ℕ), p.Prime → ↑p ≤ s.level → p ∣ s.prodPrimes
hnu : CompletelyMultiplicative s.nu
hnu_nonneg : ∀ (n : ℕ), 0 ≤ s.nu n
hnu_lt : ∀ (p : ℕ), p.Prime → p ∣ s.prodPrimes → s.nu p < 1
m : ℕ
hm : 1 ≤ m ∧ ↑m ≤ √s.level
hprod_pos : 0 < ∏ p ∈ m.primeFactors, p
hprod_ne_zero : (∏ p ∈ m.primeFactors, p) ^ ⌊s.level⌋₊ ≠ 0
hm_ne_zero : m ≠ 0
p : ℕ
hy_mul_prod_nonneg : 0 ≤ ⌊s.level⌋₊ * (∏ p ∈ m.primeFactors, p).factorization p
hpp : p.Prime
hpdvd : p ∣ m
⊢ m.factorization p * 1 ≤ ⌊s.level⌋₊ * (∏ p ∈ m.primeFactors, p).factorization p

case neg
s : SelbergSieve
hP : ∀ (p : ℕ), p.Prime → ↑p ≤ s.level → p ∣ s.prodPrimes
hnu : CompletelyMultiplicative s.nu
hnu_nonneg : ∀ (n : ℕ), 0 ≤ s.nu n
hnu_lt : ∀ (p : ℕ), p.Prime → p ∣ s.prodPrimes → s.nu p < 1
m : ℕ
hm : 1 ≤ m ∧ ↑m ≤ √s.level
hprod_pos : 0 < ∏ p ∈ m.primeFactors, p
hprod_ne_zero : (∏ p ∈ m.primeFactors, p) ^ ⌊s.level⌋₊ ≠ 0
hm_ne_zero : m ≠ 0
p : ℕ
hy_mul_prod_nonneg : 0 ≤ ⌊s.level⌋₊ * (∏ p ∈ m.primeFactors, p).factorization p
hpp : p.Prime
hpdvd : ¬p ∣ m
⊢ m.factorization p * 1 ≤ ⌊s.level⌋₊ * (∏ p ∈ m.primeFactors, p).factorization p

s : SelbergSieve
hP : ∀ (p : ℕ), p.Prime → ↑p ≤ s.level → p ∣ s.prodPrimes
hnu : CompletelyMultiplicative s.nu
hnu_nonneg : ∀ (n : ℕ), 0 ≤ s.nu n
hnu_lt : ∀ (p : ℕ), p.Prime → p ∣ s.prodPrimes → s.nu p < 1
m : ℕ
hm : 1 ≤ m ∧ ↑m ≤ √s.level
hprod_pos : 0 < ∏ p ∈ m.primeFactors, p
hprod_ne_zero : (∏ p ∈ m.primeFactors, p) ^ ⌊s.level⌋₊ ≠ 0
hm_ne_zero : m ≠ 0
⊢ m ≠ 0
Tactic:
swap
Proof state after:
case neg
s : SelbergSieve
hP : ∀ (p : ℕ), p.Prime → ↑p ≤ s.level → p ∣ s.prodPrimes
hnu : CompletelyMultiplicative s.nu
hnu_nonneg : ∀ (n : ℕ), 0 ≤ s.nu n
hnu_lt : ∀ (p : ℕ), p.Prime → p ∣ s.prodPrimes → s.nu p < 1
m : ℕ
hm : 1 ≤ m ∧ ↑m ≤ √s.level
hprod_pos : 0 < ∏ p ∈ m.primeFactors, p
hprod_ne_zero : (∏ p ∈ m.primeFactors, p) ^ ⌊s.level⌋₊ ≠ 0
hm_ne_zero : m ≠ 0
p : ℕ
hy_mul_prod_nonneg : 0 ≤ ⌊s.level⌋₊ * (∏ p ∈ m.primeFactors, p).factorization p
hpp : p.Prime
hpdvd : ¬p ∣ m
⊢ m.factorization p * 1 ≤ ⌊s.level⌋₊ * (∏ p ∈ m.primeFactors, p).factorization p

case pos
s : SelbergSieve
hP : ∀ (p : ℕ), p.Prime → ↑p ≤ s.level → p ∣ s.prodPrimes
hnu : CompletelyMultiplicative s.nu
hnu_nonneg : ∀ (n : ℕ), 0 ≤ s.nu n
hnu_lt : ∀ (p : ℕ), p.Prime → p ∣ s.prodPrimes → s.nu p < 1
m : ℕ
hm : 1 ≤ m ∧ ↑m ≤ √s.level
hprod_pos : 0 < ∏ p ∈ m.primeFactors, p
hprod_ne_zero : (∏ p ∈ m.primeFactors, p) ^ ⌊s.level⌋₊ ≠ 0
hm_ne_zero : m ≠ 0
p : ℕ
hy_mul_prod_nonneg : 0 ≤ ⌊s.level⌋₊ * (∏ p ∈ m.primeFactors, p).factorization p
hpp : p.Prime
hpdvd : p ∣ m
⊢ m.factorization p * 1 ≤ ⌊s.level⌋₊ * (∏ p ∈ m.primeFactors, p).factorization p

s : SelbergSieve
hP : ∀ (p : ℕ), p.Prime → ↑p ≤ s.level → p ∣ s.prodPrimes
hnu : CompletelyMultiplicative s.nu
hnu_nonneg : ∀ (n : ℕ), 0 ≤ s.nu n
hnu_lt : ∀ (p : ℕ), p.Prime → p ∣ s.prodPrimes → s.nu p < 1
m : ℕ
hm : 1 ≤ m ∧ ↑m ≤ √s.level
hprod_pos : 0 < ∏ p ∈ m.primeFactors, p
hprod_ne_zero : (∏ p ∈ m.primeFactors, p) ^ ⌊s.level⌋₊ ≠ 0
hm_ne_zero : m ≠ 0
⊢ m ≠ 0
Theorem: Sieve.selbergBoundingSum_ge_sum_div
Proof state before:
case pos.c0
s : SelbergSieve
hP : ∀ (p : ℕ), p.Prime → ↑p ≤ s.level → p ∣ s.prodPrimes
hnu : CompletelyMultiplicative s.nu
hnu_nonneg : ∀ (n : ℕ), 0 ≤ s.nu n
hnu_lt : ∀ (p : ℕ), p.Prime → p ∣ s.prodPrimes → s.nu p < 1
m : ℕ
hm : 1 ≤ m ∧ ↑m ≤ √s.level
hprod_pos : 0 < ∏ p ∈ m.primeFactors, p
hprod_ne_zero : (∏ p ∈ m.primeFactors, p) ^ ⌊s.level⌋₊ ≠ 0
hm_ne_zero : m ≠ 0
p : ℕ
hy_mul_prod_nonneg : 0 ≤ ⌊s.level⌋₊ * (∏ p ∈ m.primeFactors, p).factorization p
hpp : p.Prime
hpdvd : p ∣ m
⊢ 0 ≤ 1

case pos.b0
s : SelbergSieve
hP : ∀ (p : ℕ), p.Prime → ↑p ≤ s.level → p ∣ s.prodPrimes
hnu : CompletelyMultiplicative s.nu
hnu_nonneg : ∀ (n : ℕ), 0 ≤ s.nu n
hnu_lt : ∀ (p : ℕ), p.Prime → p ∣ s.prodPrimes → s.nu p < 1
m : ℕ
hm : 1 ≤ m ∧ ↑m ≤ √s.level
hprod_pos : 0 < ∏ p ∈ m.primeFactors, p
hprod_ne_zero : (∏ p ∈ m.primeFactors, p) ^ ⌊s.level⌋₊ ≠ 0
hm_ne_zero : m ≠ 0
p : ℕ
hy_mul_prod_nonneg : 0 ≤ ⌊s.level⌋₊ * (∏ p ∈ m.primeFactors, p).factorization p
hpp : p.Prime
hpdvd : p ∣ m
⊢ 0 ≤ ⌊s.level⌋₊

s : SelbergSieve
hP : ∀ (p : ℕ), p.Prime → ↑p ≤ s.level → p ∣ s.prodPrimes
hnu : CompletelyMultiplicative s.nu
hnu_nonneg : ∀ (n : ℕ), 0 ≤ s.nu n
hnu_lt : ∀ (p : ℕ), p.Prime → p ∣ s.prodPrimes → s.nu p < 1
m : ℕ
hm : 1 ≤ m ∧ ↑m ≤ √s.level
hprod_pos : 0 < ∏ p ∈ m.primeFactors, p
hprod_ne_zero : (∏ p ∈ m.primeFactors, p) ^ ⌊s.level⌋₊ ≠ 0
hm_ne_zero : m ≠ 0
⊢ m ≠ 0
Tactic:
norm_num
Proof state after:
case pos.b0
s : SelbergSieve
hP : ∀ (p : ℕ), p.Prime → ↑p ≤ s.level → p ∣ s.prodPrimes
hnu : CompletelyMultiplicative s.nu
hnu_nonneg : ∀ (n : ℕ), 0 ≤ s.nu n
hnu_lt : ∀ (p : ℕ), p.Prime → p ∣ s.prodPrimes → s.nu p < 1
m : ℕ
hm : 1 ≤ m ∧ ↑m ≤ √s.level
hprod_pos : 0 < ∏ p ∈ m.primeFactors, p
hprod_ne_zero : (∏ p ∈ m.primeFactors, p) ^ ⌊s.level⌋₊ ≠ 0
hm_ne_zero : m ≠ 0
p : ℕ
hy_mul_prod_nonneg : 0 ≤ ⌊s.level⌋₊ * (∏ p ∈ m.primeFactors, p).factorization p
hpp : p.Prime
hpdvd : p ∣ m
⊢ 0 ≤ ⌊s.level⌋₊

s : SelbergSieve
hP : ∀ (p : ℕ), p.Prime → ↑p ≤ s.level → p ∣ s.prodPrimes
hnu : CompletelyMultiplicative s.nu
hnu_nonneg : ∀ (n : ℕ), 0 ≤ s.nu n
hnu_lt : ∀ (p : ℕ), p.Prime → p ∣ s.prodPrimes → s.nu p < 1
m : ℕ
hm : 1 ≤ m ∧ ↑m ≤ √s.level
hprod_pos : 0 < ∏ p ∈ m.primeFactors, p
hprod_ne_zero : (∏ p ∈ m.primeFactors, p) ^ ⌊s.level⌋₊ ≠ 0
hm_ne_zero : m ≠ 0
⊢ m ≠ 0
Theorem: Sieve.selbergBoundingSum_ge_sum_div
Proof state before:
case pos.b0
s : SelbergSieve
hP : ∀ (p : ℕ), p.Prime → ↑p ≤ s.level → p ∣ s.prodPrimes
hnu : CompletelyMultiplicative s.nu
hnu_nonneg : ∀ (n : ℕ), 0 ≤ s.nu n
hnu_lt : ∀ (p : ℕ), p.Prime → p ∣ s.prodPrimes → s.nu p < 1
m : ℕ
hm : 1 ≤ m ∧ ↑m ≤ √s.level
hprod_pos : 0 < ∏ p ∈ m.primeFactors, p
hprod_ne_zero : (∏ p ∈ m.primeFactors, p) ^ ⌊s.level⌋₊ ≠ 0
hm_ne_zero : m ≠ 0
p : ℕ
hy_mul_prod_nonneg : 0 ≤ ⌊s.level⌋₊ * (∏ p ∈ m.primeFactors, p).factorization p
hpp : p.Prime
hpdvd : p ∣ m
⊢ 0 ≤ ⌊s.level⌋₊

s : SelbergSieve
hP : ∀ (p : ℕ), p.Prime → ↑p ≤ s.level → p ∣ s.prodPrimes
hnu : CompletelyMultiplicative s.nu
hnu_nonneg : ∀ (n : ℕ), 0 ≤ s.nu n
hnu_lt : ∀ (p : ℕ), p.Prime → p ∣ s.prodPrimes → s.nu p < 1
m : ℕ
hm : 1 ≤ m ∧ ↑m ≤ √s.level
hprod_pos : 0 < ∏ p ∈ m.primeFactors, p
hprod_ne_zero : (∏ p ∈ m.primeFactors, p) ^ ⌊s.level⌋₊ ≠ 0
hm_ne_zero : m ≠ 0
⊢ m ≠ 0
Tactic:
norm_num
Proof state after:
s : SelbergSieve
hP : ∀ (p : ℕ), p.Prime → ↑p ≤ s.level → p ∣ s.prodPrimes
hnu : CompletelyMultiplicative s.nu
hnu_nonneg : ∀ (n : ℕ), 0 ≤ s.nu n
hnu_lt : ∀ (p : ℕ), p.Prime → p ∣ s.prodPrimes → s.nu p < 1
m : ℕ
hm : 1 ≤ m ∧ ↑m ≤ √s.level
hprod_pos : 0 < ∏ p ∈ m.primeFactors, p
hprod_ne_zero : (∏ p ∈ m.primeFactors, p) ^ ⌊s.level⌋₊ ≠ 0
hm_ne_zero : m ≠ 0
⊢ m ≠ 0
Theorem: Sieve.selbergBoundingSum_ge_sum_div
Proof state before:
s : SelbergSieve
hP : ∀ (p : ℕ), p.Prime → ↑p ≤ s.level → p ∣ s.prodPrimes
hnu : CompletelyMultiplicative s.nu
hnu_nonneg : ∀ (n : ℕ), 0 ≤ s.nu n
hnu_lt : ∀ (p : ℕ), p.Prime → p ∣ s.prodPrimes → s.nu p < 1
m : ℕ
hm : 1 ≤ m ∧ ↑m ≤ √s.level
hprod_pos : 0 < ∏ p ∈ m.primeFactors, p
hprod_ne_zero : (∏ p ∈ m.primeFactors, p) ^ ⌊s.level⌋₊ ≠ 0
hm_ne_zero : m ≠ 0
⊢ m ≠ 0
Tactic:
exact hm_ne_zero
Proof state after:
no goals
Theorem: Sieve.selbergBoundingSum_ge_sum_div
Proof state before:
s : SelbergSieve
hP : ∀ (p : ℕ), p.Prime → ↑p ≤ s.level → p ∣ s.prodPrimes
hnu : CompletelyMultiplicative s.nu
hnu_nonneg : ∀ (n : ℕ), 0 ≤ s.nu n
hnu_lt : ∀ (p : ℕ), p.Prime → p ∣ s.prodPrimes → s.nu p < 1
m : ℕ
hm : 1 ≤ m ∧ ↑m ≤ √s.level
hprod_pos : 0 < ∏ p ∈ m.primeFactors, p
hprod_ne_zero : (∏ p ∈ m.primeFactors, p) ^ ⌊s.level⌋₊ ≠ 0
hm_ne_zero : m ≠ 0
p : ℕ
⊢ 0 ≤ ⌊s.level⌋₊ * (∏ p ∈ m.primeFactors, p).factorization p
Tactic:
apply mul_nonneg
Proof state after:
case ha
s : SelbergSieve
hP : ∀ (p : ℕ), p.Prime → ↑p ≤ s.level → p ∣ s.prodPrimes
hnu : CompletelyMultiplicative s.nu
hnu_nonneg : ∀ (n : ℕ), 0 ≤ s.nu n
hnu_lt : ∀ (p : ℕ), p.Prime → p ∣ s.prodPrimes → s.nu p < 1
m : ℕ
hm : 1 ≤ m ∧ ↑m ≤ √s.level
hprod_pos : 0 < ∏ p ∈ m.primeFactors, p
hprod_ne_zero : (∏ p ∈ m.primeFactors, p) ^ ⌊s.level⌋₊ ≠ 0
hm_ne_zero : m ≠ 0
p : ℕ
⊢ 0 ≤ ⌊s.level⌋₊

case hb
s : SelbergSieve
hP : ∀ (p : ℕ), p.Prime → ↑p ≤ s.level → p ∣ s.prodPrimes
hnu : CompletelyMultiplicative s.nu
hnu_nonneg : ∀ (n : ℕ), 0 ≤ s.nu n
hnu_lt : ∀ (p : ℕ), p.Prime → p ∣ s.prodPrimes → s.nu p < 1
m : ℕ
hm : 1 ≤ m ∧ ↑m ≤ √s.level
hprod_pos : 0 < ∏ p ∈ m.primeFactors, p
hprod_ne_zero : (∏ p ∈ m.primeFactors, p) ^ ⌊s.level⌋₊ ≠ 0
hm_ne_zero : m ≠ 0
p : ℕ
⊢ 0 ≤ (∏ p ∈ m.primeFactors, p).factorization p
Theorem: Sieve.selbergBoundingSum_ge_sum_div
Proof state before:
case ha
s : SelbergSieve
hP : ∀ (p : ℕ), p.Prime → ↑p ≤ s.level → p ∣ s.prodPrimes
hnu : CompletelyMultiplicative s.nu
hnu_nonneg : ∀ (n : ℕ), 0 ≤ s.nu n
hnu_lt : ∀ (p : ℕ), p.Prime → p ∣ s.prodPrimes → s.nu p < 1
m : ℕ
hm : 1 ≤ m ∧ ↑m ≤ √s.level
hprod_pos : 0 < ∏ p ∈ m.primeFactors, p
hprod_ne_zero : (∏ p ∈ m.primeFactors, p) ^ ⌊s.level⌋₊ ≠ 0
hm_ne_zero : m ≠ 0
p : ℕ
⊢ 0 ≤ ⌊s.level⌋₊

case hb
s : SelbergSieve
hP : ∀ (p : ℕ), p.Prime → ↑p ≤ s.level → p ∣ s.prodPrimes
hnu : CompletelyMultiplicative s.nu
hnu_nonneg : ∀ (n : ℕ), 0 ≤ s.nu n
hnu_lt : ∀ (p : ℕ), p.Prime → p ∣ s.prodPrimes → s.nu p < 1
m : ℕ
hm : 1 ≤ m ∧ ↑m ≤ √s.level
hprod_pos : 0 < ∏ p ∈ m.primeFactors, p
hprod_ne_zero : (∏ p ∈ m.primeFactors, p) ^ ⌊s.level⌋₊ ≠ 0
hm_ne_zero : m ≠ 0
p : ℕ
⊢ 0 ≤ (∏ p ∈ m.primeFactors, p).factorization p
Tactic:
apply Nat.le_floor
Proof state after:
case ha.h
s : SelbergSieve
hP : ∀ (p : ℕ), p.Prime → ↑p ≤ s.level → p ∣ s.prodPrimes
hnu : CompletelyMultiplicative s.nu
hnu_nonneg : ∀ (n : ℕ), 0 ≤ s.nu n
hnu_lt : ∀ (p : ℕ), p.Prime → p ∣ s.prodPrimes → s.nu p < 1
m : ℕ
hm : 1 ≤ m ∧ ↑m ≤ √s.level
hprod_pos : 0 < ∏ p ∈ m.primeFactors, p
hprod_ne_zero : (∏ p ∈ m.primeFactors, p) ^ ⌊s.level⌋₊ ≠ 0
hm_ne_zero : m ≠ 0
p : ℕ
⊢ ↑0 ≤ s.level

case hb
s : SelbergSieve
hP : ∀ (p : ℕ), p.Prime → ↑p ≤ s.level → p ∣ s.prodPrimes
hnu : CompletelyMultiplicative s.nu
hnu_nonneg : ∀ (n : ℕ), 0 ≤ s.nu n
hnu_lt : ∀ (p : ℕ), p.Prime → p ∣ s.prodPrimes → s.nu p < 1
m : ℕ
hm : 1 ≤ m ∧ ↑m ≤ √s.level
hprod_pos : 0 < ∏ p ∈ m.primeFactors, p
hprod_ne_zero : (∏ p ∈ m.primeFactors, p) ^ ⌊s.level⌋₊ ≠ 0
hm_ne_zero : m ≠ 0
p : ℕ
⊢ 0 ≤ (∏ p ∈ m.primeFactors, p).factorization p