cert-machine · audit · AlphaEvolve's Ramsey graphs · found 2026-10-23 at google-research 0d94f8c4
AlphaEvolve’s Ramsey lower bounds: the 18 released graphs decided
Each graph decided by an exhaustive search, in two implementations held to each other
With AlphaEvolve (arXiv 2603.09172) Google released 18 graphs, one per claimed lower bound on a Ramsey number R(s, t). A graph on m − 1 vertices with no clique of size s and no independent set of size t proves R(s, t) ≥ m. Here each file is read as a simple graph and both properties are decided by an exhaustive search written from the definition, in two implementations held to each other root by root: 17 of 18 CERTIFIED, 1 still searching.
Published, not peer-reviewed. The graphs and the bounds are Google's (Apache-2.0), copied unmodified from github.com/google-research/google-research at 0d94f8c4 and pinned by sha256; their sha256 equal those maximusrufus published with the same files (cert-machine#1). Neither Google's notebook nor maximusrufus's checker was run or read for this decision. A CERTIFIED file proves its bound; whether the bound is new is the paper's claim, not checked here.
tl;dr
- The finding. 17 of 18 files prove their bounds; none fails. All 18 are simple graphs of the order their names claim. The 13 graphs up to 250 vertices were searched to the end on both sides by both implementations, with equal node counts at every root. Of the 5 large graphs, every clique side is closed; the independent-set side of R(8, 18) >= 1052 is still being searched (9,402 / 288,647 units). Two gaps in the release's own check, neither of which changes a verdict, lead below.
- The mechanism. For each side, every clique of the forbidden size would start at its lowest-ranked vertex in a smallest-last order and lie among that vertex's later neighbours; each such root is searched with a greedy colouring as the bound (c colour classes are independent sets, so no clique among them is larger than c). A branch closes only on that bound or on too few candidates — both theorems — so "none" means none. A "found" answer would print the vertices and be re-checked edge by edge without the search.
- Check it. python3 tools/run-ramsey-ledger.py --check re-checks the pins, re-searches the small graphs with both implementations, re-reads every long search from its per-root record, fires a planted triangle and a planted independent set, refuses four malformed matrices and decides 24 random graphs both ways (seconds); python3 tools/run-ramsey-ledger.py --only R_8_12_ge_511 --fresh --budget 0 re-runs a long search from nothing (16 min on an 8-core M2).
files decided
17 CERTIFIED · 1 REFUSED
Google's 18 released graphs, google-research 0d94f8c4, ramsey_number_bounds/improved_bounds.
both implementations
13 of 13
Graphs up to 250 vertices: the C kernel and the Python reference count the same search nodes at every root, on both sides.
largest search closed
613,161,647,297 nodes
One side, every root to the end.
release's own check
unexecuted
verify_bounds.ipynb ships with 0 outputs and no execution count.
§1 · the gaps
What the release's own check leaves out
G1 · record · found 2026-10-23
The verifier ships unexecuted. The release's check is a notebook, verify_bounds.ipynb, which lists every clique of size s in the graph and every clique of size t in its complement with igraph's cliques(min=k, max=k). It is published with 0 output cells and no execution count, so the release carries no record that the check was run on any file, or how long the five large ones took.
What would close it. The notebook's output, or the run's log and timing, beside the files.
G2 · reading · found 2026-10-23
Half the matrix is read. The notebook builds the graph from the entries above the diagonal that equal 1. Symmetry and the diagonal are never looked at, and an entry other than 0 or 1 would be read as "no edge". All 18 files are in fact symmetric 0/1 matrices with a zero diagonal (checked here, instruments/ramsey/graph.py), so no verdict changes; a file that was not would have been "verified" as the graph of its upper triangle.
What would close it. Three assertions before the graph is built: square, symmetric, zero diagonal, entries in {0, 1}.
§2 · the decisions
Every file, both sides
| claim | vertices | no s-clique (K side) | no independent t-set (I side) | both implementations | verdict |
|---|
| R(3, 12) >= 53 | 52 | none · 52 nodes | none · 4,967 nodes | yes, root by root | CERTIFIED |
| R(3, 13) >= 61 | 60 | none · 60 nodes | none · 54,515 nodes | yes, root by root | CERTIFIED |
| R(3, 15) >= 74 | 73 | none · 73 nodes | none · 130,758 nodes | yes, root by root | CERTIFIED |
| R(3, 17) >= 93 | 92 | none · 92 nodes | none · 1,730,104 nodes | yes, root by root | CERTIFIED |
| R(3, 18) >= 100 | 99 | none · 99 nodes | none · 1,423,686 nodes | yes, root by root | CERTIFIED |
| R(4, 13) >= 139 | 138 | none · 1,371 nodes | none · 250,304 nodes | yes, root by root | CERTIFIED |
| R(4, 14) >= 148 | 147 | none · 1,300 nodes | none · 1,038,704 nodes | yes, root by root | CERTIFIED |
| R(4, 15) >= 163 | 162 | none · 1,716 nodes | none · 2,344,398 nodes | yes, root by root | CERTIFIED |
| R(4, 16) >= 174 | 173 | none · 1,689 nodes | none · 5,024,559 nodes | yes, root by root | CERTIFIED |
| R(4, 18) >= 209 | 208 | none · 2,793 nodes | none · 10,754,608 nodes | yes, root by root | CERTIFIED |
| R(4, 19) >= 219 | 218 | none · 2,722 nodes | none · 16,226,653 nodes | yes, root by root | CERTIFIED |
| R(4, 20) >= 237 | 236 | none · 3,612 nodes | none · 10,401,596 nodes | yes, root by root | CERTIFIED |
| R(4, 21) >= 244 | 243 | none · 3,488 nodes | none · 17,515,703 nodes | yes, root by root | CERTIFIED |
| R(8, 12) >= 511 | 510 | none · 1,805,950 nodes | none · 23,489,926,261 nodes | kernel; roots on record | CERTIFIED |
| R(7, 13) >= 513 | 512 | none · 2,399,667 nodes | none · 613,161,647,297 nodes | kernel; roots on record | CERTIFIED |
| R(9, 11) >= 617 | 616 | none · 79,590,364 nodes | none · 10,998,244,950 nodes | kernel; roots on record | CERTIFIED |
| R(10, 12) >= 856 | 855 | none · 503,223,948 nodes | none · 88,209,553,369 nodes | kernel; roots on record | CERTIFIED |
| R(8, 18) >= 1052 | 1051 | none · 18,979,448 nodes | 9,402 / 288,647 units so far | kernel; roots on record | REFUSED |
Node counts are search nodes of this algorithm, comparable between its two implementations and across runs, not across programs. A long side's finished roots are kept in corpus/ramsey/runs/<file>.<side>.progress ("rank nodes"), so a stopped search resumes and every closed root stays on record.
§3 · the method
An exhaustive search, stated so it can be held to
Reading. graph.py refuses a file that is not square, has an entry outside {0, 1}, is not symmetric, has a vertex joined to itself, or has a vertex count other than the m − 1 its name claims. The independent-set side searches the complement for cliques of size t.
Search. smallest-last (ties by smallest label); roots in rank order with their later neighbours; greedy colouring of the candidates (lowest label first), walked backwards; size + colour < k closes the branch. clique.py is the reference: standard library, agreeing with brute force on thousands of random small graphs. clique.c is the kernel, threaded over roots, held to the reference: the same order, the same colouring, the same branch order, so on every graph both finish the per-root node counts must be equal, or the build refuses.
Independence. Written from the definition of R(s, t). Google's notebook (igraph) and maximusrufus's checker were not run and their code was not read for this decision; the only things taken from the release are the 18 matrices and the claims in their file names.
§4 · what is claimed, and what is not
The limits
- Claimed. For each CERTIFIED file: the pinned bytes are a simple graph on m − 1 vertices with no clique of size s and no independent set of size t, so R(s, t) ≥ m.
- Not claimed. That a bound is new or best known (the paper's comparison with the literature is not re-checked), anything about how AlphaEvolve found the graphs, or the code in the release's code/ directory.
- The trust in a "none". An exhaustive search has no short certificate. It rests on the algorithm (stated in full in clique.py), on its two implementations agreeing node for node where both run, and on the kernel for the large graphs alone.
- Independence. From Google and from maximusrufus, whose results on the same files (cert-machine#1) were read only after these were decided; not from the operator (one).
§5 · from outside Google
A Ramsey graph from another contributor, decided by the same instruments
Decided 2026-10-27. Ramsey lower-bound graphs published by others than Google, decided by the same instruments; kept apart from Google's 18 and their counts. The contributor below had re-run two of our rows with their own code; this is the reciprocal check, kept apart from Google's counts.
- R(3, 33) >= 241 — CERTIFIED. JeetuSK0808 (Satyajeeth Suresh Kannan) (doi:10.5281/zenodo.23552014, pinned by sha256). The graph is rebuilt from the connection set the text prints (x ~ y iff y − x ∈ ±D on Z240, 3,840 edges, equal to the certificate's edge list). No triangle (240 roots, 0.5 s). No independent set of size 33: the graph is circulant, so a translation moves any such set onto one through vertex 0, and the multipliers 1, 13, 37, 71, 169, 203, 227, 239 — each checked as an automorphism — fix 0 and split its non-neighbours into 31 orbits; orbital.c searched the 31 pieces this leaves (2,572 units, 2.9·10⁹ nodes, 537 s on 8 threads of the laptop) and found none. The reduction is a lemma proved in orbital.py's docstring and re-derived by it here; the kernel is held to it root by root on 78 smaller instances, with 8 red controls. The claimant's own proof needed orbital branching too, split into 1,665 jobs across three solvers. A second path that shares no code with the search — the same cubes as CNF formulas, solved by kissat with a DRAT proof, every UNSAT checked by drat-trim — closed 22 of the 31 cubes; the 9 largest stayed open at a 20-minute cap, so the second path is partial and the verdict rests on the orbital kernel (the summary is pinned beside the run in corpus/ramsey/runs).
outside
What has come back from outside
- Re-run independently, 2026-10-24. maximusrufus (GitHub): Google’s AlphaEvolve Ramsey lower-bound graphs decided with their own clique search (two methods), before ours and with no code of ours: 15 of the 18 graphs, the verdicts compared with certs/ramsey-ledger.json. Outcome: the same verdict on all 15; R(10,12) and R(7,13), which they could not finish, decided here; R(8,18) unfinished on both sides. (their code · the report)
- Re-run independently, 2026-11-11. arhancanli (GitHub): R(3, 33) ≥ 241, JeetuSK0808’s circulant certificate, which we re-decided on 2026-10-27 (the outside row of certs/ramsey-ledger.json): replayed with their own code from the certificate data alone, none of the deposit’s programs read or run. The file’s graph is the Cayley graph of Z₂₄₀ on a symmetric set of 32 residues (3,840 edges), triangle-free by two routes, and it has no independent 33-set: the eight multipliers fixing 0 split its 207 non-neighbours into 31 orbits, and their own bitset branch and bound closed all 31 searches (19,242,156,924 nodes, 7,262 s of CPU on one core). Three red controls: with K = 32 the search finds an independent 32-set, with ±14 removed from the set it finds an independent 33-set, and on 60 random small circulants it agrees with brute force. Outcome: the same verdict: no triangle and no independent 33-set, through the same eight multipliers and the same 31 orbits. (their code · the report)
- Noted by an independent replayer, 2026-11-11. Arhancanli on GitHub, an independent replayer of the optimization-constants registry's certificates (quantavane-replays), with no connection to their authors: Replayed, with their own code and from the certificate data alone, the circulant certificate for R(3, 33) ≥ 241 that pull request #252 cites on the 17b page: triangle-free, and no independent 33-set in any of the 31 orbital searches, as our re-decision of 27 October on the same thread found. In their words: “It holds, in agreement with carlostoledo1891's re-decision above.” (the source, pinned)
Each credit is quoted from a snapshot pinned by sha256 (corpus/recognition.json); each re-run is a row of corpus/external-reruns.json. Neither is a peer review.