Bateman-Horn Conjecture
Bateman-Horn Conjecture
Inferred from the community field; finer classification has not been reviewed.
Problem statement
bateman_horn_conjecture
The Bateman-Horn Conjecture Given a finite collection of distinct irreducible polynomials non-constant with positive leading coefficients that satisfy the Schinzel condition, the number of positive integers n ≤ x for which all polynomials are simultaneously prime is asymptotic to:
where is the Bateman-Horn constant given by the convergent infinite product:
Here is the number of residue classes modulo for which at least one polynomial vanishes.
The Schinzel condition ensures that for each prime , there exists some integer such that does not divide the product , which guarantees the infinite product converges to a positive value.
Lean 4
Formal statement
Lean 4/-
Copyright 2025 The Formal Conjectures Authors.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
https://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
-/
import FormalConjecturesUtil
/-!
# Bateman-Horn Conjecture
*Reference:* [Wikipedia](https://en.wikipedia.org/wiki/Bateman%E2%80%93Horn_conjecture)
-/
/-
Note: This formalization was one-shot (with minimal cleaning) from Claude 4.0 Sonnet; see:
https://claude.ai/share/a02c2bba-7f5f-435c-ab0e-58eb5ddc0545
-/
open Polynomial Asymptotics Filter Topology
namespace BatemanHornConjecture
/-- `OmegaP S p` counts the number of residue classes mod `p` where at least one polynomial in `S` vanishes. -/
noncomputable def OmegaP (polys : Finset ℤ[X]) (p : ℕ) : ℕ :=
{n : ZMod p | ∃ f ∈ polys, (f.map (Int.castRingHom (ZMod p))).eval n = 0}.ncard
/-- The product of degrees of polynomials in a finite set. -/
def DegreesProduct (polys : Finset ℤ[X]) : ℕ :=
polys.prod (fun f => f.natDegree)
/--
The Bateman-Horn constant of a set of polynomials `S`. This is defined as the infinite product over all primes:
$$\frac{1}{D} \prod_p (1 - \frac{1}{p})^{-|S|} (1 - \frac{\omega_p(S)}{p})$$
where $D = \prod_{f \in S} \deg(f)$ is the product of degrees and $\omega_p(S)$ is the number of residue classes mod $p$
where at least one polynomial in $S$ vanishes.
-/
noncomputable def BatemanHornConstant (polys : Finset ℤ[X]) : ℝ :=
(1 : ℝ) / (DegreesProduct polys) *
∏' p : {p : ℕ // p.Prime},
(1 - (1 : ℝ) / p.val) ^ (-polys.card : ℤ) * (1 - (OmegaP polys p.val : ℝ) / p.val)
/-- `CountSimultaneousPrimes S x` counts the number of `n ≤ x` at which all polynomials in `S` attain a prime value. -/
noncomputable def CountSimultaneousPrimes (polys : Finset ℤ[X]) (x : ℝ) : ℕ :=
Finset.card (Finset.filter
(fun n : ℕ => ∀ f ∈ polys, (f.eval ↑n).natAbs.Prime)
(Finset.range (⌊x⌋₊ + 1)))
/--
**The Bateman-Horn Conjecture**
Given a finite collection of distinct irreducible polynomials non-constant $f_1, f_2, \dots, f_k \in \mathbb{Z}[x]$
with positive leading coefficients that satisfy the Schinzel condition, the number
of positive integers n ≤ x for which all polynomials $f_i$ are simultaneously prime is asymptotic to:
$$C(f_1, f_2, \dots, f_k) x / (log x)^k$$
where $C$ is the Bateman-Horn constant given by the convergent infinite product:
$$C = \frac{1}{D}\prod_{p\in\mathbb{P}} (1 - 1/p)^(-k) · (1 - \omega_p/p)$$
Here $\omega_p/p$ is the number of residue classes modulo $p$ for which at least one polynomial vanishes.
The Schinzel condition ensures that for each prime $p$, there exists some integer $n$
such that $p$ does not divide the product $f_(n) f_2(n) \dotsb f_(n)$, which guarantees the
infinite product converges to a positive value.
-/
@[category research open, AMS 11 12]
theorem bateman_horn_conjecture
(polys : Finset ℤ[X])
(h_nonempty : polys.Nonempty)
(h_irreducible : ∀ f ∈ polys, BunyakovskyCondition f)
(h_compat : SchinzelCondition polys) :
(fun x : ℝ => (CountSimultaneousPrimes polys x : ℝ)) ~[atTop]
(fun x : ℝ => BatemanHornConstant polys * x / (Real.log x) ^ polys.card) := by
sorry
end BatemanHornConjecture
On-site verification needs an executable Lean target. None is attached yet.
A source attachment or link is not a verified proof. The statement’s correspondence with the original question needs human review.
Proofs & verification
No Lean has been submitted for this problem yet. A Lean file can be attached to a submission for review, though with no target here it cannot be machine-checked.
Background
Source snapshot inspected on 10 September 2026. Subsequent research status and the accuracy of source formalizations have not been independently certified.
Fixed commit b82b08faa9006484021c12005ab41287fb2ffb69. This file contains 1 source-labeled research-open declarations. Other declarations in the attached file can be definitions, solved results or tests. The file is preserved as source material; it has not been compiled or proved by this import.
Copyright The Formal Conjectures Authors. Code: Apache-2.0; other original material: CC BY 4.0. Third-party sources retain their own licenses. Original source files and notices preserved.
Recorded progress
Add yours →Nothing recorded yet. A pointer to a paper the entry is missing counts.
Machine attempts
0 recordedAttempts run against the statement below and are recorded in full, including the failures. The point is to stop the next model — and the next person — from re-walking a road that is already known to end. Each attempt costs 25 credits.
No machine attempts recorded.
Sign in to run an attempt. New accounts start with enough credits for ten.
Discussion
0 notesNotes are for clarifying the statement, flagging a missing reference, or recording why an approach fails. Claimed solutions belong in a submission, where they can be reviewed.
No notes yet.
Sign in to add a note.