Erdős problem #97 — GPU search for a convex polygon in which every vertex has 4 equidistant vertices
See also n7/: an exact, computer-assisted proof that no counterexample has 10 or fewer vertices
(and that no 7 points in the plane at all have every point equidistant from 4 others). Note: a disproof of #97 for
very large n was claimed on 13 Sep 2026 (see n7/README.md); if it holds, that result is a lower bound on the size of the
smallest counterexample. This top-level part is the
earlier numerical search, which found nothing; it is kept for the record and for the validated search code.
Problem ($100). Does every convex polygon have a vertex with no other 4 vertices equidistant from it? A counterexample is an n-gon in strictly convex position in which every vertex has 4 other vertices at one common distance (the distance may depend on the vertex). For 3 instead of 4, counterexamples exist (Danzer, n=9; Fishburn–Reeds, n=20).
Prior work (Sep 2026). AlphaEvolve (arXiv:2511.02864, Problem 6.53) reached 3 but not 4. sallerk
(github.com/sallerk/erdos-notes/p97) proved no counterexample has dihedral symmetry with every vertex on a mirror,
exhaustively excluded C3 with 3 orbits (n=9), and published exact coordinates of Danzer's nonagon (danzer9.json).
A counting bound gives n ≥ 7.
No counterexample found. Massively parallel gradient search over symmetric families on an RTX 3090:
| family | parameters | restarts | outcome |
|---|---|---|---|
| C_m rotational, m=2..12, r=1..8 orbits, n=mr ≤ 80 | 77 families | 8192 × 2 rounds each | 0 candidates |
| D_m dihedral, m=1..10, f=1..4 free orbits, 0/1 vertex on each mirror type, n ≤ 80 | 137 families | 8192 each | 0 candidates |
The best near-misses (spread ≈ 10^-5 to 10^-6) all fail convexity. Polishing them without penalties gives exact
4-equidistant point sets (spread 10^-16) that are not in convex position: 8 of 48, 8 of 56 and 12 of 32 points lie
on the convex hull (nearmiss_*.json). Non-convex examples are known to exist for every k, so these are not new.
search97.py— loss shared by all searches: for each vertex sort the distances to the others, take the 4 consecutive ones with the smallest relative gap (AlphaEvolve's score), loss = Σ spread², plus hinge penalties for convexity (cross products of consecutive edges) and non-degeneracy (minimum edge), both scaled like a regular n-gon (thresholds(n)). Unsymmetric version: the exact Danzer nonagon scores 1.9×10^-16 and the optimizer converges back to it from 1–3 % perturbations, but its basin is too small for random restarts (1/1024 from 10 % noise), which explains why unstructured search cannot work and matches AlphaEvolve's failure.sym97.py— C_m families (orbit representatives in polar coordinates, polygon = union of rotations sorted by angle). Validated: at k=3 it finds Danzer-type solutions hundreds of times per batch (C3, r=3 and r=4).dih97.py— D_m families with free orbits (size 2m) and optional mirror vertices (size m). Validated: k=3 solutions at D3 with 2 free orbits (n=12).refine97.py— float64 Levenberg–Marquardt on the exact equalities read off a candidate, plus convexity check (drives the k=3 candidates to residual 0).inspect97.py,convexify97.py— replay a family from its seed, dump the best polygons regardless of the filter, polish without penalties, and try to push the smallest cross product positive; convex position is finally tested with the convex hull (scipy.spatial.ConvexHull), independent of vertex order.
Logs: sym97_k4.log, dih97_k4.log (per-family best spread, ok-fraction, candidates); raw rows in the .jsonl files.
Environment: Python 3.12, PyTorch 2.11 + cu128, scipy. About 6 GPU-hours in total.