Conjectures.io

certified

Erdős problem 96

Certified 14 Sept 2026, published by conjectures.io.

Review decision

Approved in reviewREVIEW_APPROVED

Approved under policy v2: REVIEW_APPROVED, for the full locked conjecture bounty. The submission refutes the proposed linear bound on unit-distance pairs among the vertices of a convex polygon. Its construction gives arbitrarily large finite point sets in convex position with an unbounded ratio of unit-distance pairs to vertices. The reviewed definitions use Euclidean distance and unordered pairs, and the final argument handles every proposed linear constant and every size threshold. The exact formal target therefore matches the intended [Erdős 96 question](https://www.erdosproblems.com/96). The proof combines finite incidence patterns, strict support margins, and separated rotations, then transports the construction to the Euclidean plane. Additional exact-arithmetic checks passed for small incidence patterns and seed configurations; these finite checks supplement the infinite argument verified by Lean. The recorded provenance search did not establish an earlier completed negative solution or exact external formalization. Earlier discussion of a claimed positive bound does not establish this negative construction. Public-search coverage was limited, including inaccessible direct forum pages. The exact accepted proof and task passed production verification and a fresh isolated replay on 10 September 2026, including statement, dependency, permitted-axiom, and Lean-kernel checks. No material formalization defect or published disqualification reason was established by the recorded review. Under v2, unresolved provenance questions alone do not justify denying the reward. This is an eligibility decision, not a guarantee of originality. The verification replays used the Lean default kernel; an independent-kernel check was not performed.

Approved · decided 11 Sept 2026

Formal statement

True ↔ (fun n => ↑(Erdos96.maxConvexUnitDistances n)) =O[Filter.atTop] fun n => ↑n

The proof

This proof was approved in review, so the file the kernel accepted is published in full.

Read the proof

Verification report

Every box below had to hold before the proof counted. They are grouped in the order the verifier reaches them.

The task it was checked against

  • Manifest validPassed

    The task bundle held together: the exact file set, a strict manifest, and every trusted hash matching the bytes on disk.

  • Task commitment matchesPassed

    The bundle digest the submission committed to is the digest of the bundle that was actually verified.

  • Production taskPassed

    The task came from the production pool rather than a test fixture.

  • Trusted file hashes matchPassed

    The pinned dependencies agree across the manifest, the lockfile and the checkout, down to the same Formal Conjectures commit.

The submission and the sandbox

  • Submission policy respectedPassed

    The submitted source passed the static scan: no imports, no axiom declarations, no sorry, no native_decide, no unsafe options.

  • Production sandboxPassed

    The run happened under real isolation, Landrun with seccomp, and the sandbox passed its own live self-test before the proof was touched.

The trusted build

  • Challenge builtPassed

    The trusted Challenge.lean, which contains no miner code, compiled on its own.

  • Source type hash matchesPassed

    The source theorem in the compiled environment still hashes to the type recorded in the task, so the statement has not drifted upstream.

The kernel's verdict

  • Solution builtPassed

    The submitted Solution.lean compiled.

  • Statement unchangedPassed

    The theorem the proof establishes has exactly the same canonical type as the task's target - it was not weakened or restated.

  • Only permitted axiomsPassed

    The transitive axiom closure of the proof stays inside the axioms this task permits.

  • Lean kernel acceptedPassed

    The Lean kernel replayed the proof and accepted it.

  • Nanoda acceptedNot run

    A second kernel, written independently of Lean's, also accepted the proof.

One kernel, not two

This task does not require a second, independent kernel, so Nanoda was not run. The verdict rests on a single kernel implementation.

Theorems established

  • Bounty.target

Stage COMPLETED · Axioms permitted: propext, Quot.sound, Classical.choice