Borwein-Style Lower Bound #
Any counterexample to the Agoh-Giuga conjecture exceeds 10^13800.
The proof combines three ingredients:
Branch-and-bound verifier: every normal odd-prime set with reciprocal sum > 1 has at least
Belements (computational search vianative_decide).Structural transfer: a Carmichael-Giuga number's prime factors form such a set, so
B ≤ n.primeFactors.card, hence∏_{j<B} (j+1)-th prime ≤ n.Product comparison: the product of the first 4000 odd primes exceeds
10^13800.
The full pipeline is demonstrated at B = 20 (~2s). The main theorem's sorry
reduces to running the verifier at B = 4000.
Section 1 — Borwein definitions #
A finite set whose elements are odd primes.
Equations
- Borwein.IsOddPrimeSet S = ∀ p ∈ S, Nat.Prime p ∧ Odd p
Instances For
Reciprocal sum used in the Giuga/Borwein inequalities.
Equations
- Borwein.reciprocalSum S = ∑ p ∈ S, 1 / ↑p
Instances For
Section 2 — Structural bridge #
For Carmichael numbers, the set of prime factors is normal in the Borwein sense: no distinct prime factor divides another minus one.
Repackaging the existing reciprocal-sum theorem with the Borwein notation.
If a Carmichael-Giuga number has at least k prime factors, then it is at
least the product of the first k odd primes.
Section 3 — Branch-and-bound verifier #
Unnormalized positive fractions #
UFrac interpretation in ℚ #
Prime enumeration utilities #
Check primality by trial division.
Equations
- BorweinVerifier.isPrime n = if n < 2 then false else BorweinVerifier.isPrime.go n 2 n
Instances For
Equations
- BorweinVerifier.nextOddPrime.go x✝ 0 = none
- BorweinVerifier.nextOddPrime.go x✝ fuel.succ = if BorweinVerifier.isPrime x✝ = true then some x✝ else BorweinVerifier.nextOddPrime.go (x✝ + 2) fuel
Instances For
Top-level soundness for nextOddPrime: if it returns some p,
then p is prime, odd, and p ≥ start.
Find the next admissible odd prime ≥ start w.r.t. current.
Equations
- BorweinVerifier.nextAdmissible current start probeFuel = BorweinVerifier.nextAdmissible.go current start probeFuel
Instances For
If nextAdmissible returns some p, then p is prime, odd, p ≥ start,
and admissible w.r.t. current.
Tail bound #
Upper bound on the reciprocal sum achievable by adding at most count
primes ≥ start. We sum reciprocals of the next count primes ≥ start
(ignoring normality, which makes this a valid over-estimate).
Equations
- BorweinVerifier.tailBound start count probeFuel = BorweinVerifier.tailBound.go start count probeFuel BorweinVerifier.UFrac.zero
Instances For
Equations
- One or more equations did not get rendered due to their size.
- BorweinVerifier.tailBound.go x✝² 0 x✝¹ x✝ = x✝
- BorweinVerifier.tailBound.go x✝² x✝¹ 0 x✝ = x✝
Instances For
Count of primes found by tailBound. Returns the number of primes
actually summed (may be less than count if fuel runs out).
Equations
- BorweinVerifier.tailBoundFound start count probeFuel = BorweinVerifier.tailBoundFound.go start count probeFuel 0
Instances For
Equations
- One or more equations did not get rendered due to their size.
- BorweinVerifier.tailBoundFound.go x✝² 0 x✝¹ x✝ = x✝
- BorweinVerifier.tailBoundFound.go x✝² x✝¹ 0 x✝ = x✝
Instances For
Branch-and-bound verifier #
Branch-and-bound verifier.
Returns true if every normal odd-prime set extending current with
all additional elements ≥ start, having reciprocal sum > 1, has
at least target elements.
Equations
- One or more equations did not get rendered due to their size.
- BorweinVerifier.verify current curSum target start probeFuel 0 = false
Instances For
Top-level verifier: checks that every normal odd-prime set with
reciprocal sum > 1 has at least target elements.
Equations
- BorweinVerifier.verifyMinNormalSet target probeFuel depth = BorweinVerifier.verify #[] BorweinVerifier.UFrac.zero target 3 probeFuel depth
Instances For
Fuel check #
Decidable check that verify's fuel was sufficient at every node.
At pruning nodes, checks tailBoundFound = remaining.
At terminal nodes (nextAdmissible = none), returns false (conservative).
Equations
- One or more equations did not get rendered due to their size.
- BorweinVerifier.fuelOK current curSum target start probeFuel 0 = true
Instances For
Top-level fuel check.
Equations
- BorweinVerifier.fuelOKTop target probeFuel depth = BorweinVerifier.fuelOK #[] BorweinVerifier.UFrac.zero target 3 probeFuel depth
Instances For
Soundness #
A set T is reachable from (current, start) if it contains all elements
of current, every element is an odd prime, the set is normal, and all
elements not in current are ≥ start.
- oddPrime : Borwein.IsOddPrimeSet T
- normal : Borwein.IsNormalSet T
Instances For
Top-level soundness: if verifyMinNormalSet succeeds and fuel is sufficient,
then every normal odd-prime set with reciprocal sum > 1 has ≥ target elements.
Verified computations #
The verifier confirms: every normal odd-prime set with reciprocal sum > 1
has at least 20 elements. Verified by native_decide in ~2 seconds.
Fuel check passes for target 20.
Corollary: any normal odd-prime set with reciprocal sum > 1 has ≥ 20 elements.
Section 4 — Product comparison #
Product of the first B odd numbers starting from 3:
oddNumProduct B = 3 × 5 × 7 × ⋯ × (2B+1).
Equations
- oddNumProduct 0 = 1
- oddNumProduct fuel.succ = oddNumProduct fuel * (2 * fuel + 3)
Instances For
The product of the first 4000 odd numbers ≥ 3 exceeds 10^13800.
The product of the first 4000 odd primes exceeds 10^13800.
Section 5 — Main theorem #
The Borwein et al. (1996) lower bound: any counterexample to Agoh-Giuga
exceeds 10 ^ 13800.
Equations
- borweinBound = 10 ^ 13800
Instances For
Transfer from verifier to cardinality bound.
Transfer from verifier to product bound.
Pipeline demo: any Carmichael-Giuga number has ≥ 20 prime factors.
Main theorem: any counterexample to Agoh-Giuga exceeds 10^13800.
The remaining sorry is purely computational: running the verifier at
target 4000 via native_decide. The pipeline is demonstrated at target 20.