The Play Seam · a picture game with exact arithmetic inside it

Worth Half a Move

Blue chops blue edges. Red chops red ones. Anything cut loose from the ground falls. Whoever cannot move loses. That is the whole rulebook, and it is enough to make a position worth exactly one half of a move, a fraction you can play against.

The game is Hackenbush, and the thing it does that no chess engine does is this: its positions do not get scores. They get numbers. Not "Blue is a little better here" but "this picture equals 1/2, and 1/2 is a number, so two of them equal one whole free move, and one free move for Red cancels them dead."

Below is that sentence made playable. Three stalks: two of them worth 1/2 each to Blue, and one lone red edge worth exactly one move to Red. The fractions sum to zero. A game worth zero is one where the player who moves first loses, and you can spend as long as you like failing to break that.

1. Lose on purpose

The certificate · 1/2 + 1/2 + (−1) = 0

You play Blue. Chop a blue edge by clicking it. The engine plays Red perfectly: it searches the entire remaining game tree every move, so it never errs.

Your move.Chop any blue edge.

Games so far: none.

Nothing about that board is a heuristic. Every line has been searched to the end. Here is the complete refutation, recomputed in your browser: each of the five opening moves either player can make, and the reply that kills it. Read any row left to right and it ends with somebody out of edges.

2. Where the half comes from

A single blue edge on the ground is worth 1: it is one free move for Blue, and Red can do nothing about it. Two stacked blue edges are worth 2. Now put a red edge on top of a blue one. Red can chop the top and leave Blue a whole edge. Blue can chop the bottom and take the red one down with it, leaving nothing. So the position is somewhere strictly between 0 and 1, and Conway's simplicity rule says: it is the simplest number that fits, which is 1/2.

That is not a metaphor and not a rounding. Add red edges and the value halves each time. Every row below is computed here, now, by exhaustive recursion over the position's own game tree, with the value at each node chosen by the simplicity rule. No table is hardcoded.

stalkpicturetree valuesign ruleagree

3. "Those are just engine evaluations"

This is the reasonable objection, and it is wrong in a specific, checkable way. A chess engine's +0.5 is a guess calibrated against outcomes; it does not obey arithmetic. You cannot glue two +0.5 chess positions together and get a won game, because the concept does not survive addition.

Hackenbush values do. They are exact, they are additive, and the map runs backwards: name a fraction and the board that equals it can be built from the digits of the fraction. The rule is due to Berlekamp (first published as "The Hackenbush number system for compression of numerical data", Information and Control 26 (1974) 134-140, and restated in Winning Ways), with an equivalent stepwise form due to Thea van Roode. The code on this page implements the signed-binary form, stated here; van Roode's stepwise halving is the same function computed differently, and is named only because the sources name it. Read a stalk from the ground up: the bottom run of same-coloured edges counts ±1 apiece, and from the first colour change onward each edge adds ±1/2, ±1/4, ±1/8 and so on, taking its sign from its own colour.

The sign rule, run backwards

Anything of the form p/2k, or a whole number. Try 1/3 and watch the instrument refuse rather than fudge.

4. The workbench

Here is where the claim stops being a claim. Build any board you like out of stalks. The page reads each stalk's value off the sign rule, adds the fractions, and announces the winner before searching anything. Then it searches the entire combined game tree, exhaustively, and reports what actually happens. Try to make them disagree.

Assemble a board · arithmetic first, search second

Prediction record on distinct boards you have built: 0 for 0.

The prediction is not fitted to the search. It comes from a linear-time read of the colours, the search comes from settling every reachable position, and they are computed by different code paths in this file. The record above only goes up.

5. One green edge, and the numbers stop

The second objection is better: fine, but this is bookkeeping. Values that behave like numbers because the game was rigged to make them behave like numbers.

So un-rig it. Paint an edge green: either player may chop it. One green edge, alone on the ground, is a game where whoever moves first takes it and whoever moves second is stuck. That position is not positive (Red does not lose it when moving first), not negative, and not zero. It is called star, written , and its relation to 0 is the fourth one: it is confused with 0, incomparable, off the line entirely.

And yet it is not chaos. Star obeys arithmetic of its own: ∗ + ∗ = 0 exactly. The literature calls it infinitesimal: smaller in absolute value than every positive number, while being neither positive nor negative. This instrument does not prove that universal statement. It tests it, one exhaustive search at a time, down to 1/1024, and the rows below are those searches, each run when you press it.

boardpicturesearch sayswhich means

Row three and row four are the squeeze. Star loses to every positive number these searches reach and beats every negative one, so if star were a number it would have to be 0. Row one says it is not 0. There is no contradiction here, only a discovery: the values of games form something larger than the number line, and the numbers are the part of it that happens to be totally ordered. That larger structure is where Conway's surreal numbers and the rest of combinatorial game theory live.

One more, because it closes a circle. Make every edge green and Hackenbush stops being partizan altogether: a green stalk of n edges is just a Nim heap of size n, and the winner is decided by the XOR of the heap sizes.

heapspictureXORpredictedsearchagree

The check, and every free choice in it

Nothing on this page is a stored table. The numbers below were recomputed in your browser when it loaded, by the same two routines the offline verifier uses: exhaustive alternating search over the whole game tree, and values by the simplicity rule. All arithmetic is an integer numerator over a power-of-two denominator, so the tolerance on every equality claimed here is exactly zero.

recomputed hereresult

The free choices and the honest limits, named:

Run the whole thing yourself: node research/worth-half-a-move/verify-worth-half-a-move.mjs (52 checks, no dependencies, exits 0).

What is proved here, and what is only demonstrated

Proved, for the specific boards you touch. Every outcome shown is the result of settling the complete game tree of that board: no depth limit, no evaluation function, no sampling. When the page says "second player wins", it has checked every first move and found a winning reply to each, and checked every reply to those, down to the empty board.

Proved, for a large finite family. The offline verifier confirms the sign rule against the game tree for all 8190 blue-red stalks of length 12 or less, finds all 8190 values distinct, confirms every denominator is a power of two, and confirms the fraction to string construction inverts the rule on all of them. It also confirms that the sign of the value predicts the winner on all 560 three-stalk boards built from stalks of length 3 or less.

Demonstrated, not proved here. That the values always add, for every board, is a theorem about disjunctive sums of games (the sum of games is a group operation, and numbers behave as numbers inside it). This page checks it on whatever boards you build and on a fixed battery offline, which is evidence rather than proof. The general proof is in the sources.

Not attempted. Infinite boards, and therefore the reals, the ordinals and the genuinely surreal numbers. Temperature theory and the values that are not numbers beyond star (up, down, and the rest). Misère play. General graphs.