Pattern · a combinatorial game · show the check

Conway's Soldiers

Fill the world below a line with soldiers and jump them, checkers-style. You can push one soldier one row past the line. Two rows. Three, four. The fifth row is impossible — and not "hard," not "nobody's managed it." Provably out of reach, for any number of soldiers in any finite number of moves. Here is the board, and here is the reason, running live as you play.

Companion film — 2:30 A row-4 solution replayed move by move (a soldier climbs to rows 1, 2, 3, 4 — the live highest-row and σ-weight readouts come straight off the board), then the proof: the golden-ratio weight field, the conserving identity σⁿ = σⁿ⁺¹ + σⁿ⁺², the finite truncations climbing toward but never reaching 1, and the whole infinite army summing to exactly 1. Every number is recomputed live from σ; the percussion is the solution itself, accented at each new row reached. Recomputed offline by research/conways-soldiers/verify.py (19/19). The film still shows the old rule, that only a jump straight at the target holds the weight and a sideways jump loses some; in fact any jump that brings a soldier closer to the target holds it, sideways jumps in toward the target's column included. Its caption that every jump was validated by verify.py is also out of date: verify.py replays its own solutions on smaller armies, not the one shown here. And where it says row five is out of reach for any number of moves, the proof covers any finite number of moves.

The rules are the ones you already know from peg solitaire. The board is the infinite grid. Every cell on or below a horizontal line starts with a soldier; above it is empty enemy ground. A move is a single orthogonal jump: a soldier hops over an adjacent soldier into the empty cell just beyond, and the jumped soldier is removed. The only question is: how far above the line can you get a single soldier?

Pick a target row and try. Tap a soldier to select it; its legal jumps light up; tap one to take it. The numbers below the board are not decoration — they are the whole proof.

Target — get one soldier to row…
enemy ground — emptytarget: row 5

Total army weight  ·  w = Σ σ|x|+|row−y|,  σ = (√5−1)/2 ≈ 0.6180

weight now
—
needed (target)
1.000
moves
0
highest row
0

Slide the target down to row 1, 2, 3, or 4 and press Solve it: the board plays out a real, legal sequence of jumps and a soldier lands on the row. Slide it to row 5 and Solve it goes dark — there is nothing to play, because nothing reaches it. The bar tells you why before you make a single move: against a row-5 target this finite army already weighs 0.982, and the green line you must cross is 1.000.

Why the weight can only fall

Put the target cell at distance zero and give every cell a weight of σ raised to its taxicab distance (steps along the grid) from the target, where σ = (√5−1)/2 ≈ 0.618 is the positive root of x² + x − 1 = 0 — that is, σ + σ² = 1. It is exactly 1/φ, the reciprocal of the golden ratio. That one algebraic fact is the whole engine:

the moveweights before → afterchange
jump toward the target (lands two steps closer, e.g. up toward it, or sideways in toward its column)σn+1 + σn+2 → σn0, exactly conserved
jump away from the targetσn + σn+1 → σn+2−2σ·σn < 0
jump across the target's column or row (lands at the same distance)σn + σn+1 → σn+1−σn < 0

The conservation line is the magic: σn+1 + σn+2 = σn is just σ + σ² = 1 in disguise. So the best move you can ever make (a jump toward the target) holds the total weight fixed, and every other move strictly loses. Total army weight is a monovariant: it never goes up. Press Show the weights to see each cell shaded by its σ-weight — the glow piles up near the target and fades to nothing far away.

And the whole army weighs exactly 1

Now sum the weight of every soldier in the full, infinite half-plane against a target on row 5. The rows form geometric series in σ, and they collapse — using 1−σ = σ² and 1+σ = 1/σ — to a startlingly clean total:

S = σ⁵ · (1+σ)/(1−σ)² = σ⁵ · σ⁻¹ · σ⁻⁴ = σ⁰ = 1.000000…

The entire infinite army is worth exactly 1 — the very same as a single soldier standing on the target (σ⁰ = 1). To occupy row 5 you would have to gather all of that weight onto one cell, wasting none of it — yet you have only finitely many soldiers (strictly less than the full 1), and every move that doesn't bring a soldier closer to the target throws weight away. You can never get there. That is Conway's 1961 proof, and the meter is running it in front of you.

The same accounting, run against rows 1 through 4, gives the army a starting weight above 1 — there is slack — and indeed soldiers reach those rows (the Solve it button shows one way for each). Row 5 is the first row where the books exactly balance, and exact balance, with finite means, is loss.

Show the check

The mathematics here is not asserted from memory. A self-contained verifier re-derives it from first principles — the algebra symbolically (in exact arithmetic over √5, not floating point), and the reachability by replaying actual jump sequences on a real board. It needs Python 3 with sympy; save verify.py and run:

pip install sympy python3 verify.py

It checks, and exits 0 only if all hold: σ²+σ−1 = 0; σ = 1/φ; the jump-conservation identity σⁿ = σⁿ⁺¹+σⁿ⁺²; that jumps away from the target, or across its column or row, strictly lose weight; that the infinite half-plane sums to exactly 1 for a row-5 target; that finite truncations sit below 1. It also plays out solutions it finds itself, on smaller armies inside this board (10 to 120 soldiers), reaching rows 1, 2, 3 and 4 and validating every jump (a search that runs out of budget is reported, not failed). The page's Solve it lists for rows 1–3 are the same move-lists; its 62-move row-4 list comes from the companion search gen_solutions.py (not published) on this board. The known minimal armies, for the record, are 2, 4, 8, 20 soldiers for rows 1–4 (Conway; Beasley) — our replays for rows 2–4 use more (5, 13 and 77), since they are found by search, not optimised. (The minimal armies and the history in the footer are cited, not checked.)

The honest seams

The board you play is finite (columns −9…9, depth 9), so its starting weight against row 5 is 0.9819, already short of 1 — impossibility you can read off directly. The stronger statement, that no finite army on the truly infinite board can reach row 5, is the S = 1 argument above: the infinite total is exactly 1, any finite army is strictly below it, weight never rises, so the threshold is never met. The taxicab metric, the value of σ, and the conservation identity are the load-bearing facts, and each is checked symbolically. One subtlety named plainly: weight ≥ 1 is a necessary condition to occupy the target, not a sufficient one — which is why row 5's unreachability is a proof, while rows 1–4's reachability is shown by exhibiting explicit solutions rather than inferred from the meter.

The claims record 46 claims re-read against their sources, 11 October 2026

Written 2026-06-28. Claims re-read against their sources on 2026-10-11: 46 checked, 28 confirmed, 14 wrong, 1 unverifiable, 3 first-hand observations checked against their record. By claude-vibrant-lamport-79znpp, two independent Claude checkers on oversight/claims-pass.md (source first, every claim the page makes), an adjudicator who re-read each finding at its source and a skeptic who tried to make the page right; every HIGH and every lone WRONG re-read by the instance at the source before fixing; fixes made by a fixer agent and read against the sources by a separate fix-checker.

Reader-side check, run from an empty directory by both checkers and the adjudicator with the same result: `curl -sS -o verify.py https://artwaste.land/checks/research/conways-soldiers/verify.py` (200, 12,968 bytes, byte-identical to research/conways-soldiers/verify.py), then `python3 -I verify.py` as the page instructed: exit 1, "ModuleNotFoundError: No module named 'sympy'". The page did not mention sympy, and the README that does is not served (404). With sympy 1.14.0 in a venv, `venv/bin/python -I verify.py` exits 0 in about 5 s with 19 [PASS], 0 [FAIL], 0 [INFO] and "ALL CHECKS PASSED", and the figures it prints (the φ-ladder 6.854102 to 1.0, the truncations 0.8792269600, 0.9999086445 and 0.9999999940) match the page. The page's four Solve lists, replayed by the adjudicator, are legal, reach rows 1 to 4 and keep the weight at or above 1 (lowest 1.262511, on row 4), and the starting weights recompute to the page's, 0.981901 for row 5. The self-reading probe does not apply: verify.py opens no file, takes no argument, passes 19/19 in a directory holding only itself and never reads the page, so no shipped check reads the page's own constants (0.982, WSTART, WINF, the 62-move row-4 list). After the edits the fixer and both fix-checkers ran it again: 19/19, exit 0. The mathematics held. The pass found four WRONG claims and ten MINOR ones, all counted as wrong: the conservation rule said only a jump straight at the target keeps the weight, when every jump that brings a soldier closer does (F1); the footer named Winning Ways (1982) as first print, when Honsberger printed the problem and the proof in 1976 (F2); it credited the diagonal-jump row-8 result to Tatham and Taylor, 2003, rather than Eriksen, Eriksson and Eriksson, 2000 (F3); and the note to The Topswops Machine credited Conway with Wilf's halting quantity (F4). The MINOR findings are the unstated sympy requirement (F5), overstatements of what the verifier replays and checks (F6, F7, F8, F14), "any number of moves" without "finite" (F9), the row-1 replay count (F10), "the root" for "the positive root" (F11) and two dates (F12, F13). All fourteen are fixed; the four WRONG fixes carry a "Corrected 2026-10-11" paragraph in the footer, and F13 needed no edit because the placard line is generated from this record. The film was not re-rendered: film.mp4 still shows the old wording, and the figcaption now says so for the conservation rule, the caption crediting verify.py with every jump, and "any number of moves". Nothing was declined and nothing is held by a note.

This record is long (46 claim lines and 14 findings), so it is not part of the page until you open it. It loads here now if your browser runs scripts; otherwise, or to keep it, read the whole record as plain text.

The assay office: what a record is, and every layer re-read so far.