Walkthrough — the gcd branch that composite 14 makes wide
0. What was actually missing
Not a search. A term.
The folder had been reading the 14-runner case as blocked by a missing algebraic identity: Sungkawichai and Trakulthongchai prove that the tuple is eventually -proper when is an odd prime, by a polynomial argument in the field with elements, and is not prime. That reading is what set the previous campaign's target.
The degree of freedom that was actually sitting unused is on the other side of the same proposition. Their Proposition 4.4 splits the fiber above into three cases, and one of them is discharged not by any witness time but by the gcd condition in their Definition 2.1: a speed tuple is proper as soon as some prime dividing divides all but one of its coordinates. When is prime that condition says "at most one nonzero coordinate", which is nearly nothing, and it is easy to read past it. When it says "some divides all but one coordinate", which is a large piece of .
The previous campaign was searching a space with that piece left in. So it was looking for witnesses for tuples that never needed one.
1. Named false starts
Redo Proposition 4.1 over . Their proof compares leading coefficients of two degree- polynomials that agree on points, and concludes . Both steps want a field. has zero divisors and the argument dies on the first line. Killed on paper, before writing code.
Clear with more primes. Proposition 2.7 gives from over a prime set with . Here , and the earlier note that primes in only reach is right. But the conclusion drawn from it — "one modular constraint cannot finish" — was answering the wrong question: the requirement is a long enough list, and the list just needs to run to about . What actually kills this is their Section 7: each needs , roughly tuples at under their own Section 5.1 reduction. Dead on cost, not on arithmetic.
Resume the leftover CSP. The previous run enumerated vectors — millions per zero-pattern — and had been left partway through the "remaining columns 4 to 12" range. Continuing it would have been weeks of arithmetic toward a false statement. See beat 2.
2. The useful failure
Rewriting the question as a covering problem made it cheap enough to just ask, so the first thing to do was ask it in the form the previous campaign had assumed, over all of — nonzero with a zero coordinate, no gcd condition. The answer came back in 27 seconds, and it was the wrong sign: there is such a vector, and none of the pairs saves it.
That was the useful failure. The target as stated was false, so the search that was running could not have terminated the way it was aimed — and the vector sits in exactly the unfinished range.
Then look at what the counterexample is. Every coordinate is even. It is not a subtle object; it is the whole of . And a tuple all of whose coordinates are even is precisely what the gcd condition throws away. The false statement and the missing term are the same fact seen twice.
3. The click
Put the gcd condition back and the hypothesis becomes clean. For a prime , "some has for all " is the same as . So with :
needs a witness exactly when it has a zero coordinate, at least two odd coordinates, and at least two coordinates not divisible by 7.
Two counts and a flag. And it is the same shape at every composite — which means the guess is testable at small where brute force still runs.
It does. At the p-independent statement has 64 obstructions and at it has none; at , 2596 and none at . Composite breaks the -free statement and repairs it. That is the pattern the case then reproduces.
4. The argument, in the order it was found
Write , the -th entry of . Call a pair a constraint, and say coordinate taking value hits it when or . Unwinding the definition:
has no witness the sets cover all constraints.
So the question is set-cover feasibility in 13 variables of 14 values — not an enumeration over the candidates. That is the entire reason this became a four-minute computation instead of a multi-week one.
Two reductions come free. Every constraint is hit by every , because some coordinate of is always or — which is just Goddyn–Wong tightness of , and the code asserts it rather than assuming it. And and induce the same hitting set. At that takes 2674 constraints down to 1181.
5. Computer search
./cover --k 13 --p 191
k=13 m=14 p=191 constraints=1181
m factors: 2 7 search space = { some v_i = 0 } minus gcd-proper
RESULT UNSAT (T2(13,191) HOLDS)
nodes=102905279 bound_cuts=80243639 dead_cuts=8002240 seconds=240.73
Agreement table — brute force is an independent enumeration of all of written from the paper, not from the search:
| brute force | cover |
cover_bdd |
|||
|---|---|---|---|---|---|
| 4 | 5 | p-indep | 0 obstructions | UNSAT | — |
| 5 | 6 | p-indep | 64 | SAT | SAT |
| 5 | 6 | 31 | 0 | UNSAT | UNSAT |
| 7 | 8 | p-indep | 2596 | SAT | SAT |
| 7 | 8 | 59 | 0 | UNSAT | UNSAT |
| 8 | 9 | p-indep | — | SAT | SAT |
| 13 | 14 | p-indep | — | SAT | SAT |
| 13 | 14 | 191 | out of reach | UNSAT | state-explodes |
6. What is proved, what is not
Proved, and checkable in four minutes from a clean checkout:
Every with and has the lonely runner property.
Equivalently . Sungkawichai and Trakulthongchai prove the corresponding statement only when and are both odd primes, so falls outside it, and their Section 5.2 reports as the sole survivor of the lifting ladder — it is eliminated here with no and no lift.
Not proved, and worth being blunt about. This is not a bound on the number of runners. The lonely runner conjecture for 14 runners is open, and the reason it is open is untouched: their Section 7 names computing as the bottleneck, about tuples at , and nothing here reduces that. What has been removed is one named obstacle — the tight tuple — at one prime.
Also not done. The forward-sweep second decision procedure agrees on every small composite case but runs out of memory before , so the verdict rests on one exact search plus brute-force validation of the reformulation and 23 million adversarial samples, rather than on two exact searches. Subset dominance would fix it. And whether holds for every prime — the statement that would actually replace Proposition 4.1 for composite — is open; it fails at , so there is a threshold, and locating it is a sweep, not a proof.
Walkthrough II — where the modulus stops being enough
The first walkthrough ends with an admission: holds at and fails at , so there is a threshold somewhere, and finding it "is a sweep, not a proof". The sweep is the wrong instrument. Here is what replaced it.
7. The witnesses were trying to tell us something
would not resolve in forty minutes, in either direction. So stop asking for a decision and ask only for a witness — restrict every coordinate to a small alphabet and exhaust. The alphabet came from looking at what had already printed: at the witness was , at it used only .
With , answers in milliseconds: Two coordinates equal to , everything else . And the same shape comes back at .
8. Why that shape works, exactly
Write for the two nonzero positions and for the eleven zeros. Fix .
A coordinate in has value , so it hits iff — a condition with no in it. Either it hits every at this , or none.
A coordinate in has value , so it hits iff or : exactly two values of .
So at a given there are only two outcomes. Either some zero coordinate fires and all fourteen are covered at once; or no zero coordinate fires, and the two coordinates of between them reach at most of the nonzero — and , so is saved. The whole question collapses:
is unsaved at every has some with .
Read the right-hand side out loud and it is a lonely-runner statement about eleven speeds: delete two runners from the tight configuration, and ask whether the survivors have a witness time on the grid . They always have one on the circle — deleting two speeds makes slack, so the good set contains intervals, not just the six points . The only question is whether the grid is fine enough to land in one.
That is computable once and for all. is a union of closed intervals with endpoints over ; for each of the pairs, list them, and for each ask whether any interval contains a multiple of . No search over , no search over .
The answer: fails at and at no larger prime from this family, the largest failing integer being . The tightest pair is , whose longest good interval is ; past every pair has room.
The last known failure moves from to . Two programs that share no code agree on the list, including the composite cases , and 's own checker — written from the paper — calls the , and vectors genuine obstructions.
9. The correction this forces
It is tempting to now say "so the threshold is 89". It is not, and is the proof. There, brute force over all vectors decides every outright: fails at . The pair family accounts for and nothing else. Everything from to comes from one richer vector, — the balanced lift of , and .
So the pair family is a lower bound on where failure stops, not the threshold. (The obvious analogue, the balanced lift of , is saved at every prime from to . The construction does not transfer; the caution does.)
That same table kills a second habit. fails and holds. The pass/fail set is not an interval, so "the first that holds" is not a well-posed quantity, and a sweep column must not be read as a threshold.
10. Deciding every large with one search
Which leaves the other direction: not "which fails" but "is there a past which nothing can". For that, get rid of .
Everything in the problem depends on only through the real number , via . That function is right-continuous and jumps only where crosses an integer — on . Take all of those together, : breakpoints, cutting the circle into half-open cells on which the entire hitting structure is constant. Every real is in exactly one. No boundary cases.
Now the only fact needed about the grid: every half-open interval of length contains a point of . So fix , and for each cell start look at the window . If , that window contains a grid point, and that grid point lies in one of the cells the window meets. An unsaved must hit at least one of them. Union those cells' hitting sets and it is a set-cover constraint again — the same DFS, the same counting bound, the same gcd branch as , with only the constraints rebuilt:
no eligible covers all of it holds for every integer .
One run, an infinite tail. And monotone in , so the smallest that returns UNSAT is the statement to report.
The first version of this used only cells longer than , throwing away
every short cell. It works, but loosely: at it certifies
where the window version certifies . The union over a window is what
recovers the short cells, and it is kept side by side (--strictcell) so the
difference is visible.
Calibration, where brute force can check everything: certifies against a true last failure of ; brute force over for all finds no contradiction. So the certificate is sound and about loose. At the lemma of §8 forces any such to be at least .