Skip to content

Research · Discrete geometry · unit distances

Unit distances between rational points: 121 points, 429 distances

This page presents a piece of research in discrete geometry: a set of 121 points of the plane with rational coordinates, of which 429 pairs are at distance exactly 1. It shows the exact statement, the landscape of public values with their sources, then the whole configuration, with a short program that anyone runs to recheck it.

429unit distances, for 121 points with rational coordinatesfull list in section 3 · checked on 13 Oct 2026
22011 × 11 integer grid, the board’s baselinesame number of points · scored by check.py on 13 Oct 2026
3independent ways of checkingboard judge · integers over every pair · the page’s program; moved point: 13 distances lost
sha256 f23f7a706166…fingerprint of the points fileidentical to that of the file of proposal no. 8

1. The problem

How many pairs of n points in the plane can be at distance exactly 1? Let u(n) be that maximum. Erdős asked the question in 1946; the board recalls the upper bound u(n) = O(n4/3) (Spencer, Szemerédi and Trotter, 1984). For points with rational coordinates, let uQ(n) be the greatest number of unit distances among n distinct points of the plane with rational coordinates.

The board’s statement: “How many pairs of n points in the plane can be at distance exactly 1? Let u(n) be the max.” and, for Tier A, “most unit distances among n rational points”. That is: a set of distinct points, each coordinate being an integer, a fraction “p/q” or a pair [numerator, denominator]; the board’s checker (check.py) counts the pairs at distance exactly 1, in exact rational arithmetic and without floating point, and that number is the score. Source: github.com/math-market/unit-distances, file TASK.md, read on 13 Oct 2026; the board and its checker are published under the Apache-2.0 licence.

On the left, the diagram shows four rational points A (0, 0), B (3/5, 4/5), D (1, 0) and C (8/5, 4/5): the four sides are at distance exactly 1, for instance (3/5)² + (4/5)² = 1, and the diagonals are not. On the right, point C is moved by 1/10: sides BC and DC stop being at distance 1, and two unit distances remain. A set is judged this way, pair by pair, with no approximation.

4 points, 4 unit distancesABDCC moved by 1/10: 2 unit distancesABDCAB² = (3/5)² + (4/5)² = 1BC = 11/10; DC² = (7/10)² + (4/5)² = 113/100statement diagram: four points, unrelated to the configuration of section 3
Statement diagram, not the configuration of the result · left, 4 points and 4 unit distances (cyan lines) · right, C moved by 1/10: sides BC and DC (dotted) are no longer at distance 1

2. The public landscape

The table gathers the public numbers around n = 121, with their source and reading date. They are the landmarks of the problem: they place the known values. The first three rows concern the real plane, where points need not be rational.

Unit distances Nature Source Read on
439 real plane, n = 100: largest value found by the source’s search (graphs of the Moser lattice) Engel, Hammond-Lee, Su, Varga, Zsámboki, “Diverse beam search to find densest-known planar unit distance graphs”, arXiv:2406.15317v3 (13 Jun 2025), Table 2 13 Oct 2026
434 real plane, n = 99, same search same table 13 Oct 2026
429 real plane, n = 98, same search same table 13 Oct 2026
429 n = 121, points with rational coordinates: the configuration of section 3 this page 13 Oct 2026
220 n = 121, 11 × 11 integer grid: 2L(L − 1) with L = 11, the board’s baseline board math-market/unit-distances (generator_example.py), scored by check.py 13 Oct 2026
57 real plane, n = 21: exact value of u(21) OEIS A186705 (exact values up to n = 21 according to Alexeev, Mixon and Parshall, arXiv:2412.11914) 13 Oct 2026

Readings of 13 Oct 2026: board math-market/unit-distances (README, TASK.md, check.py, task.json, generator_example.py, list of pull requests), OEIS A186705, arXiv:2406.15317v3, arXiv:2606.29415v2.

01002003004000255075100125number of unit distancesnumber of points n220 · 11 × 11 grid439 · n = 100429 · n = 121real plane, value found (Engel et al.)exact known value (n ≤ 21)integer grid (board)rational points: result of this page
The landscape of public values · grey-violet dots: largest value found in the real plane (n from 1 to 100) · yellow rings: exact values (n ≤ 21) · yellow ticks: the board’s integer grids · cyan: the result of this page, rational points · readings of 13 Oct 2026

For points with rational coordinates, the sources cited give no table of values by n. The board writes “Beat the best known for your n” without publishing values; the submissions/ folder of its repository holds only its README, and the seven other pull requests of the repository concern the board’s infrastructure (titles read). Rodis’s paper (arXiv:2606.29415v2, 3 September 2026), which the board cites, explores the rational plane to build a graph of 2,411,001 vertices and 33,237,700 unit distances; its text gives no numerical values for sets of modest size, and its repository publishes whole graphs (up to 2.4 million vertices), not a table by n (text read in full, repository pages read on 13 Oct 2026). In the real plane, u(n) is known exactly for n ≤ 21 (OEIS A186705, 57 at n = 21); for n from 22 to 100, the table of Engel et al. gives the largest value found by their search, up to 439 at n = 100. The graphs of that table are subsets of the Moser lattice, generated by 1, ω1, ω3 and ω1ω3, where ω1 and ω3 are roots of x² − x + 1 and of x² − (5/3)x + 1 (Theorem 2.3 of the paper): their points do not, in general, have rational coordinates.

At the readings of 13 Oct 2026, 429 is the largest value published for the number of unit distances among 121 points with rational coordinates in the sources cited above, and the only one: those sources give no value for rational points at this n. It is not the exact value of uQ(121). It does not compare directly with the real-plane table: in the real plane, u(121) ≥ 439 (a set of 100 points completed with 21 isolated points), and the table gives 429 for 98 points.

3. The result

Provenance. This configuration is computed by EventCompute; it does not start from any object published by others.

The set has 121 distinct points with rational coordinates and 429 pairs at distance exactly 1, hence uQ(121) ≥ 429. Each coordinate is given as a numerator over the common denominator 1,105: point i is (xi/1,105, yi/1,105).

All 121 points are published. The file in the board’s format is unit_distances_n121.json (3,619 bytes); the same points are given below as a list of numerators, built into the recheck program.

The checks

Four checks, replayed on 13 Oct 2026 on the points file:

Check Nature Result
Board judge check.py from the repository math-market/unit-distances (sha256 a136757f…), run on the file OK 121 points, 429 unit distances (score = 429); exit code 0
Independent second path written for this page without the judge: integers over the common denominator, all 7,260 pairs of points 429 unit distances
Public program (section 3) Python standard library; two distinct checks: every pair in exact fractions, then a lookup in the set of points of the 108 integer vectors of length 1,105 429 unit distances in both checks
Counter-test point no. 40 (numbered from 0), which has 13 neighbours at distance 1, is moved in x by 1/1,105, then by 1/109 judge, second path and program: 416 unit distances, that is 13 fewer

Output of the board judge on the configuration:

OK  121 points, 429 unit distances  (score = 429)

Output of the judge on the configuration with point no. 40 moved by 1/109 in x:

OK  121 points, 416 unit distances  (score = 416)

Recheck it yourself

The program below contains the configuration. Save it in a file verifier_distances.py and run python verifier_distances.py: Python 3 is enough, with no library to install. Each line of the list gives the two numerators of a point over the common denominator. The program applies two checks of different natures, replays two canaries (the point of highest degree moved by a tiny amount: both checks must count fewer distances) and prints the fingerprint of the rebuilt JSON file, to be compared with the one in section 3. Saveable version: verifier_distances_en.py.

# verifier_distances.py: standard library only; python verifier_distances.py
import hashlib, json
from fractions import Fraction
from math import isqrt

D = 1105
# the configuration: one line per point "x y", as numerators over the common denominator D (the point is (x/D, y/D))
LISTE = """
-2619 3285
-2347 2214
-2151 4286
-2099 2310
-2043 4228
-1879 3215
-1827 1239
-1771 3157
-1735 2622
-1676 2709
-1667 3846
-1631 3311
-1575 5229
-1523 3253
-1463 1551
-1404 1638
-1395 2775
-1359 2240
-1303 4158
-1267 3623
-1251 2182
-1215 1647
-1208 3710
-1199 4847
-1159 3565
-1156 1734
-1147 2871
-1100 3652
-1091 4789
-1055 4254
-995 2552
-943 576
-936 2639
-927 3776
-887 2494
-884 663
-875 1800
-828 2581
-819 3718
-792 2046
-783 3183
-747 2648
-724 3270
-691 4566
-688 2735
-679 3872
-639 2590
-632 4653
-623 5790
-580 2677
-571 3814
-520 975
-511 2112
-475 1577
-452 2199
-419 3495
-416 1664
-407 2801
-367 1519
-360 3582
-351 4719
-324 3047
-315 4184
-308 1606
-299 2743
-272 1071
-263 2208
-256 4271
-216 2989
-207 4126
-204 2295
-171 3591
-148 4213
-112 3678
-103 4815
-52 1976
-43 3113
0 0
9 1137
16 3200
56 1918
65 3055
68 1224
101 2520
124 3142
160 2607
169 3744
196 2072
205 3209
252 3990
261 5127
264 3296
304 2014
313 3151
320 5214
372 3238
432 1536
468 1001
477 2138
524 2919
536 2225
576 943
585 2080
628 3608
644 2167
680 1632
736 3550
772 3015
781 4152
840 4239
900 2537
952 561
1008 2479
1044 1944
1053 3081
1148 2633
1204 4551
1256 2575
1420 1562
1528 1504
1724 3576
"""
P = [tuple(int(w) for w in l.split()) for l in LISTE.strip().splitlines()]
assert all(len(p) == 2 for p in P)

# check 1: every pair, exact fractions: (x1 - x2)^2 + (y1 - y2)^2 == 1
def frac(pts):
    return [(Fraction(x, D), Fraction(y, D)) for x, y in pts]

def controle1(F):
    return sum(1 for i in range(len(F)) for j in range(i) if (F[i][0] - F[j][0]) ** 2 + (F[i][1] - F[j][1]) ** 2 == 1)

# check 2, unrelated to check 1: in integers, the vectors (a, b) with a^2 + b^2 = D^2, then a lookup in the set of points
def vecteurs():
    V = []
    for a in range(-D, D + 1):
        b = isqrt(D * D - a * a)
        if b * b == D * D - a * a:
            V += [(a, b)] if b == 0 else [(a, b), (a, -b)]
    return V

def controle2(pts):
    S, V = set(pts), vecteurs()
    return sum(1 for (x, y) in S for a, b in V if (x + a, y + b) in S) // 2

# canary: a point moved by a tiny amount must lose unit distances in both checks
def deplacer(pts, k):
    return [(x + 1, y) if i == k else (x, y) for i, (x, y) in enumerate(pts)]

n1, n2 = controle1(frac(P)), controle2(P)
print("points: %d (distinct: %s); common denominator: %d" % (len(P), len(set(P)) == len(P), D))
print("integer vectors (a, b) with a^2 + b^2 = D^2: %d" % len(vecteurs()))
print("check 1 (every pair, exact fractions)      : %d unit distances" % n1); print("check 2 (integer vectors of length D)      : %d unit distances" % n2)
deg = lambda i: sum(1 for j in range(len(P)) if j != i and (P[i][0] - P[j][0]) ** 2 + (P[i][1] - P[j][1]) ** 2 == D * D)
k = max(range(len(P)), key=deg)
Q = deplacer(P, k)
c1, c2 = controle1(frac(Q)), controle2(Q)
print("canary 1: point no. %d moved by 1/%d in x -> check 1: %d; check 2: %d" % (k, D, c1, c2))
F = frac(P)
F[k] = (F[k][0] + Fraction(1, 10 ** 9), F[k][1])
c3 = controle1(F)
print("canary 2: point no. %d moved by 1/10^9 in x -> check 1: %d" % (k, c3))
print("sha256 fingerprint of the rebuilt JSON file: %s" % hashlib.sha256(json.dumps({"points": [[[x, D], [y, D]] for x, y in P]}).encode()).hexdigest())
bon = len(P) == 121 and n1 == n2 and c1 < n1 and c2 < n2 and c3 < n1
print("VERIFIED: %d distinct points, %d unit distances in both checks; each canary loses distances" % (len(P), n1) if bon else "FAILURE")
raise SystemExit(0 if bon else 1)

This program was run on 13 Oct 2026 (Python 3.11.0rc2, python -I) on the published configuration. Output obtained:

points: 121 (distinct: True); common denominator: 1105
integer vectors (a, b) with a^2 + b^2 = D^2: 108
check 1 (every pair, exact fractions)      : 429 unit distances
check 2 (integer vectors of length D)      : 429 unit distances
canary 1: point no. 40 moved by 1/1105 in x -> check 1: 416; check 2: 416
canary 2: point no. 40 moved by 1/10^9 in x -> check 1: 416
sha256 fingerprint of the rebuilt JSON file: f23f7a70616677fd21d29f19c38b27f70479562e7d3894240ffde8bcbb6af2e1
VERIFIED: 121 distinct points, 429 unit distances in both checks; each canary loses distances

Both checks agree with the board judge and with the second path. The fingerprint rebuilt by the program is that of the file of proposal no. 8.

sha256 fingerprints

Object sha256
Points file (unit_distances_n121.json, 3,619 bytes) f23f7a70616677fd21d29f19c38b27f70479562e7d3894240ffde8bcbb6af2e1
check.py of the board, read on 13 Oct 2026 a136757f16daf3234057c203c1d1206169ccefde45865a52be41c493cbf1b095
TASK.md of the board, read on 13 Oct 2026 d0e3f20717c86038e3b55693b7cd17770aae3dc288a418a387c3503ce13fe63b
task.json of the board, read on 13 Oct 2026 cfc31a7476e9988c127c4211752d5876708e8630020a4ade70823506817c6d79
LICENSE of the board, read on 13 Oct 2026 cfc7749b96f63bd31c3c42b5c471bf756814053e847c10f3eb003417bc523d30
generator_example.py of the board, read on 13 Oct 2026 e7eced8d4a268a23e2cab7e989e7b897dfeda4f2d3d63f79cb484f534fa0fe90
OEIS A186705 (text), read on 13 Oct 2026 89c8e7ed6dcd9c33a3a85fa6e8f19b03e30d9b9c7f2c5ad69b7c0c7f876cf582
arXiv:2406.15317v3 (Engel et al., PDF), read on 13 Oct 2026 ef390fed54a6715c61bae12ce3909526bd4ba48ab92a265280e78f3cac8177ca
arXiv:2606.29415v2 (Rodis, PDF), read on 13 Oct 2026 1e3145c21c454aa31fd6332cd8f51197d4dd29b8de8eb6ee525184416b8308ec
“results” page of Rodis’s repository, read on 13 Oct 2026 deb58639a7da5d144d04110e99426ea475fb516fbcfdccea11d1e3a8ea2b5a09
results folder of Rodis’s repository (GitHub API), read on 13 Oct 2026 615c171081fba903a6dc099282feeaa146196297f241b0b7bce868c792066083
Proposal no. 8, reply of GitHub’s public API, read on 13 Oct 2026 7b38b79c47a520b1592a4b99c714a9a52d8a5b921a83b0ec8857a8f7dc666db1
verifier_distances_en.py (this page’s program) 931dcc4d311ab6803ed8add2bad8267791f8d0c1a0b7666aa0647a1a43abc1cb

Public repository

The configuration is filed on the board’s public repository: proposal no. 8 (pull request) of math-market/unit-distances, opened on 2 Oct 2026. Its file of points has the same sha256 fingerprint as the file of this page. State read on 13 Oct 2026: open, not merged, no comment and no review. The configuration is published under the Apache-2.0 licence, as the board requires for submissions (task.json); the board, its statement and its checker are also under the Apache-2.0 licence (LICENSE of the repository). No third-party data enters the configuration.

4. What this question models

This question belongs to discrete geometry: how many pairs of n points of the plane can be at distance exactly 1? A portion of an integer lattice of side √n gives u(n) ≥ n1+c/log log n, and Erdős conjectured this growth to be sharp (page 84a of Terence Tao’s optimization-problems tracker, read on 13 Oct 2026). The board cites the upper bound u(n) = O(n4/3) (Spencer, Szemerédi and Trotter, 1984).

According to TASK.md and Tao’s page, an OpenAI reasoning model disproved this conjecture in May 2026: sets of n points have at least n1+δ unit distances for a fixed δ > 0 (Alon, Bloom, Gowers, Litt, Sawin, Shankar, Tsimerman, Wang and Wood, arXiv:2605.20695). The construction belongs to number theory, and TASK.md places the exponent c between 0.03583… and 1/3. These statements concern growth as n tends to infinity; the board’s Tier A, to which this page belongs, concerns finite values of n. The board retains rational coordinates so that the check is exact and instant, notes that these sets are also a research object in their own right (Rodis, arXiv:2606.29415) and sets aside the triangular lattice, which it describes as optimal but irrational.

Sources: github.com/math-market/unit-distances (README, TASK.md, check.py, task.json, LICENSE, generator_example.py, pull request no. 8, list of pull requests), oeis.org/A186705, arXiv:2406.15317, arXiv:2606.29415, arXiv:2605.20695 (cited by TASK.md), teorth.github.io/optimizationproblems/constants/84a.html, read on 13 Oct 2026.

A research programme, an outside test

These results cover domains with nothing to do with each other: the geometry of packings (Packomania, Friedman Packing Center), space mechanics (ESA SpOC 4), number theory (IBM Ponder This) and graphs (FlyWire Codex). In each, the result is entered on a third party’s page, a table, a ranking or a list, and can be rechecked by computation: ESA evaluates each solution with its simulator, Packomania publishes the entries it accepts, IBM publishes a list of names, Friedman keeps a page that credits authors. These results belong to a single research programme: keep only what a certificate proves.

This page applies the same principle to a problem in geometry: a configuration whose complete list is published, a short program that anyone runs, and the judge of an outside board that counts the unit distances. Here, the reader rechecks it personally.

The principle is public: every hypothesis is tested by computation and kept only if a certificate proves it. Generative AIs serve me as assistants, interchangeable ones: they propose, my AI decides, the certificate settles. The internal workings remain confidential. The results are public.

The certificate changes the nature of proof. A result can be checked without trusting whoever produced it, as a proof can be checked without knowing its author. That is what makes this page possible: you do not have to believe me, you recheck. The submitted result is fixed and its fingerprint is published.

All the work runs on accessible hardware: a desktop PC, a Raspberry Pi 5 and a Raspberry Pi Pico, which also serve to check that the computation stays identical from one machine to another; occasionally, a 32-vCPU instance. The programme aims at a certifiable embedded AI, down to modest machines.

A result that is verifiable without trust, fixed and rechecked: these properties open onto the intended uses:

  • certifiable embedded AI, down to modest machines;
  • steering generative AIs, keeping only what is proven;
  • verifiable identity for AI agents;
  • audit after an incident: replaying a past decision exactly;
  • reproducible science;
  • an open map of certified computations: each result with its certificate, so that what is proven is not recomputed.

The research programme sets out this framework. All the results, with their sources and dates, are gathered on the Results page.

All the results, with their sources and dates

→ The mathematical cartography