Where it stops

Two clauses and a third question

A component can carry its own rule when two things hold: its moves are a function of what it carries, and a move in it leaves every other component alone. Two rulesets built to fail one clause each are both caught on a named witness. The four real games sort exactly — every one the recipe gets right fails no clause, every one it gets wrong fails one — and the two clauses still miss something, because Fibonacci Nim and a held pass fail the same clause and only one of them can be repaired.

Assumes: What a component has to carry · What restores the theorem

What a component has to carry measures four impartial rulesets against the recipe every impartial game is supposed to obey — one number per component, exclusive-ored — and finds three of them wrong between a quarter and half the time. What restores the theorem repairs one of the three: index Fibonacci Nim’s recursion on the pair of heap size and cap rather than on the heap alone, and the recipe becomes exact.

Both essays leave a note beside each row saying what went wrong — a component knows its own history and nothing else, a component’s move constrains where the whole board replies, a component cannot say whether its own move is legal. Those are descriptions. This rung turns them into a test.

Two clauses, and what each is about. Four rulesets against the two clauses of the condition. A ruleset passes both or the one-number-per-component recipe fails on it, and the two clauses fail for different reasons: locality is about the state proposed, isolation is about the rule.
Fig. 1 Four rulesets against the two clauses of the condition. A ruleset passes both or the one-number-per-component recipe fails on it, and the two clauses fail for different reasons: locality is about the state proposed, isolation is about the rule.

Locality. The moves available in a component are a function of the state that component carries, and of nothing else.

Isolation. A move in one component leaves every other component’s carried state exactly as it was.

A ruleset satisfies both or the recipe fails on it. That is the condition, and the rest of this essay is what it separates and what it does not.

Both clauses are stated about a component and its surroundings rather than about a game, and that is deliberate. A rule like take any number of counters from one heap is local because the answer to what is available here never mentions anywhere else; a rule like take counters from up to two heaps is not, and the difference is visible in the sentence rather than in any measurement. What the sweep adds is that the same test applies to rules where it is not visible in the sentence — where the dependence is hidden inside a cap, an obligation, or a token’s legality, and where four rulesets that all read like ordinary impartial games sort into three different categories.

It is worth saying what “carries” means, since the whole condition is about it. A component’s carried state is whatever a solver stores for that component and looks up later. For Nim it is a heap size. For Fibonacci Nim under the repair it is a pair. The recipe under test is that a solver can store one Grundy value per carried state, look up each component, and exclusive-or — which is the whole of the sum is the object applied to impartial games, and is the thing three of these four rulesets break.

The condition is therefore not about games in the abstract. It is about a proposal: this ruleset, with this state. That distinction is the reason it can be tested at all, because a proposal has a definite answer and a game does not.

Why two clauses rather than one

They could be run together — the sum decomposes — and the reason not to is that they fail differently and are repaired differently.

Locality is not a property of a rule. It is a property of a rule together with the state proposed for it, and that is the whole of why Fibonacci Nim is the repairable case. Asked to carry only its heap size, a Fibonacci Nim component cannot say what its own moves are: the cap depends on the last move made in that heap, which is not in the state. Asked to carry the pair, it can. Same rule, same game, different answer to the clause — because the clause is about a proposal.

Isolation is a property of the rule alone. A rule in which a move in one component changes what another component is has no proposed state to be right or wrong about; the components are not separate objects at all, and no amount of carrying repairs that. Enlarging the state cannot help, because the thing being changed is another component’s state whatever the state is.

So the two clauses answer two questions a single test would run together: is this the wrong description of the part, and is there a part.

The two things it must refuse

A condition that has never rejected anything is not a condition, so two rulesets were built to fail one clause each.

The two things it must refuse. Two rulesets constructed to fail one clause each, with the witness the sweep found for each. The first is Fibonacci Nim asked to carry only its heap size; the second is a cap rewritten by moves in other components.
Fig. 2 Two rulesets constructed to fail one clause each, with the witness the sweep found for each. The first is Fibonacci Nim asked to carry only its heap size; the second is a cap rewritten by moves in other components.

The locality control is Fibonacci Nim with the wrong state — the same game the rung between repaired, presented with the state the rung below gave it. The sweep hands one component the same carried state in four different surroundings and asks what moves it has. A heap of two has two different move sets across the four, and that is the witness: not a rate, not a count, but a single state whose moves are not a function of it.

The isolation control is a cap read off the board rather than off the component’s own history — a plausible-looking variant in which a move sets the cap everywhere rather than locally. The sweep finds a move from state 1:1 to state 0:2 that turns a component sitting at 0:1 into 0:2, without touching it. That is a move in one part changing another part.

Both controls are required to pass the clause they were not built to fail, and the sweep refuses to return a result if either does not. That is the part that makes the two clauses a separation rather than a pair of alarms: a control that failed both would say nothing about which clause caught it.

A note on how the controls are checked, since “built to fail” invites the suspicion that they were built to be caught. The locality check takes a component in a fixed carried state and varies only its surroundings, then compares the move sets. It does not know which ruleset it is looking at and it does not know which clause the ruleset was built to fail — it enumerates, compares and reports the first disagreement. The isolation check does the same for the other clause: it takes a move in one component and a second component, applies the move, and asks whether the second component’s state changed.

Nim and the paired Fibonacci state go through the identical machinery and come out clean, on 45 and 690 checks respectively. That is what makes the two witnesses above evidence rather than a demonstration.

The four games, sorted

The four games, diagnosed. The rulesets from the rung below placed against the condition. Every one the recipe gets right fails no clause and every one it gets wrong fails one — and the two locality failures differ in whether the missing information is the component's own past or the rest of the board.
Fig. 3 The rulesets from the rung below placed against the condition. Every one the recipe gets right fails no clause and every one it gets wrong fails one — and the two locality failures differ in whether the missing information is the component’s own past or the rest of the board.

Nim fails neither clause and the recipe is exact on all 78 of its sums. Fibonacci Nim fails locality and is wrong on 17 of 66. Top Entails fails isolation and is wrong on 9 of 36. Nim with a held pass fails locality and is wrong on 54 of 120.

The condition predicts the column, and the sweep asserts that it does: a ruleset the recipe gets right must fail no clause, and one it gets wrong must fail one. If those ever came apart the condition would be describing something other than the failures it was written for.

Top Entails is the isolation failure and it is worth seeing why, because the rule sounds local. Splitting a heap obliges the opponent to reply in that heap. Nothing about the split heap has changed that a component could not record — but every other heap has just become unplayable for one move, and unplayability is part of a component’s state. So a move in one part rewrote the others, which is isolation failing exactly as stated.

The third question

The two clauses sort the four games and they do not finish the job, and the gap is the interesting part of this rung.

Fibonacci Nim and the held pass both fail locality. Their error rates are 26 and 45 per cent, which looks like a difference of degree. It is not a difference of degree at all: one of them is repaired by carrying two numbers instead of one, and the other cannot be repaired by carrying anything.

The question the clauses do not ask is what the missing information is.

For Fibonacci Nim it is the component’s own last move. That is something the component did, in its own history, and a component can remember what it did. Carrying it is the repair, and what restores the theorem is that repair measured.

For the held pass it is the rest of the board. Whether the pass may be taken depends on what the other heaps are doing, and no amount of remembering its own past tells a component about somebody else’s present. The state that would restore locality is the whole position, at which point there is one component and the recipe is not saying anything.

So the condition is really three questions and the third has a form worth stating: when locality fails, is the missing information a function of what this component has done? Yes and the rule is carryable with a larger state; no and it is not carryable at all.

That third question is invisible in a table of failure rates, which is what makes it worth extracting. Twenty-six per cent and forty-five per cent are two numbers on the same scale describing two situations with nothing in common.

Why the third question is not a fourth clause

The obvious tidying is to make the third question a clause of its own — the missing information is the component’s own history — and it is worth saying why that is the wrong shape.

A clause is something a proposal either satisfies or does not, checkable by enumeration. The two above are: hand a state four surroundings and compare, or apply a move and look elsewhere. The third question is not of that form. It asks whether some state exists that would restore locality, and it asks it about a rule rather than about a proposal — which is a question about an unbounded search rather than a check.

Worse, it has a trivial affirmative answer that ruins it. The whole position is always a state a component could carry, it always restores locality, and it always makes the recipe vacuous: one component, one value, nothing to exclusive-or. So the honest form of the third question has a size condition attached — is there a state, bounded independently of the rest of the board, that restores locality — and that is a question about the price rather than about the rule.

Which is why it is presented here as the thing the clauses do not settle rather than as a clause they are missing. Fibonacci Nim’s answer is yes and the bound is two numbers. The held pass’s answer is no, and demonstrating that properly would mean showing that no bounded state works, which nothing here does — what is shown is the weaker and still useful thing: the information the component needs is information about other components, and the burden of proposing a bounded state is on anybody who thinks otherwise.

What the condition is not

Three things it does not do, each worth knowing before applying it.

It is not a decision procedure for a new game. Checking locality requires a proposed state, and proposing one is the creative step. The condition says whether a proposal works; it does not produce the proposal, and the third question above is the only guidance it offers about where to look.

It says nothing about the size of the state. A rule can be carryable and require a state so large that carrying it defeats the purpose — the whole position is always a legal proposal and always satisfies both clauses trivially, and it is always useless. What restores the theorem measures the price for Fibonacci Nim, and the price is what decides whether a repair is worth making. The condition is about possibility and the price is about value.

And it is stated for impartial games under normal play. The clauses are about move sets and about what a move does to other components, and both of those are convention-independent — but the recipe they are predicting, one Grundy value per component exclusive-ored, is not. The parts are worth nothing and the sum is not is a game where the components are perfectly isolated, every move set is a function of the component alone, and the recipe fails anyway, because a capture keeps the turn. That is a third clause the sweep here does not have: a move must pass the turn.

Adding it would make the condition three clauses rather than two, and it is left out here deliberately rather than overlooked — every ruleset in this sweep passes it, so including it would be a clause with no witness, which is the thing this site’s habits are most against.

The held pass, worked through

The held pass is the case worth following in detail, because it is the one where a reader’s instinct is that the repair is obvious and it is not.

A held pass is a token a player owns and may spend at some point to skip a turn. A pass is not a move establishes the contrast that matters: a pass that may be taken at any time, including when it ends the game, is exactly a Nim heap of one — it is a component, it has a value, and the board is worth the nim-sum exclusive-ored with one, on all 120 positions. That is a rule a component can carry, and the component it is carried by is the pass itself.

The held pass is the same token with one restriction, and the restriction is what breaks it: it may not be spent when spending it would end the game. So its legality is a question about whether any other component still has a move in it — which is a question about the rest of the board.

The tempting repair is to give the pass a two-state carrier: spendable and not spendable. That fails, and it fails in a way the locality clause catches directly. Two boards can present the pass in the same carried state and differ in whether the pass is spendable, because spendability was never a property of the token. Enlarge the state again and the same thing happens, for the same reason, at every size: the information is not about the token.

That is the whole of why 45 per cent is not a large version of 26 per cent. The 26 is a component that has forgotten something about itself. The 45 is a component being asked a question about somebody else.

And it is why the free pass works and the held one does not, on rules that differ by a single clause. Removing the restriction removes the reference to the rest of the board, and a component that never has to look outside itself satisfies locality trivially. One sentence of rule text is the difference between a Nim heap of one and an object with no value at all.

What it is for

The use is diagnostic and it is worth a sentence, because the point of a general condition is to be applied to a game nobody has looked at.

Given a new impartial ruleset that does not obey the recipe, the condition says which of three things has happened. If isolation fails, stop — the parts are not parts, and which part to move in is a question with no meaning here. If locality fails on information the component generated, enlarge the state and the theorem comes back, at whatever price the enlargement costs. If locality fails on information from elsewhere, the game does not decompose and any effort spent looking for the right per-component value is spent looking for something that does not exist.

That last case is the one worth catching early, and it is the one a failure rate hides. Independence is a claim makes the same point about board games: the claim that a position is a sum is a claim about moves, and it can be false in ways that look like a bad approximation and are not approximations at all.

What a component has to carry. Four impartial games, one of which is Nim. In the other three a component cannot say what its own legal moves are without knowing something about the past or about the rest of the board, so the Sprague–Grundy recipe does not apply — and the table says by how much. Every outcome was obtained by solving the sum outright rather than by any formula.
Fig. 4 The measurement this rung explains: four rulesets against the one-number-per-component recipe, with the failure rates the condition above sorts. Read beside the diagnosis, the two middle rows stop looking like the same kind of problem.

Reading the rates beside the diagnosis is the point of putting them together, and it changes what the middle two rows mean. Twenty-six per cent and twenty-five per cent look like two instances of one problem measured on different populations. They are a component that has forgotten its own past and a rule whose parts are not parts, and the only thing they have in common is the size of the number.

Three smallest failures. The smallest position in each family at which one number per component gets the outcome of the sum wrong, found by search rather than chosen. In every case the recipe is the Sprague–Grundy one and every case is a game that recipe does not cover, so the failures are the expected kind — what is worth reading is how small each of them is.
Fig. 5 The three failures at their smallest, so the mechanism can be read rather than counted. Each is the smallest position in its family where one number per component gets the answer wrong — and each is now the smallest instance of a named clause failing rather than of a rate.

Smallest is the right way to look at a failure of this kind, because a mechanism is visible in a two-heap position and invisible in a census. Each of the three above is small enough to check by hand, and checking one by hand is how a reader can tell which clause it is an instance of without taking the classification on trust.

What carrying the pair costs. For each heap size, the number of distinct states of Fibonacci Nim it can reach against the number of distinct heap sizes below it. The table the restored theorem needs is larger than the table the heap sizes alone would fill, and the gap is what the extra number buys.
Fig. 6 What the repair costs on the one game that admits one. The condition says Fibonacci Nim is carryable; this is the size of the state that makes it so, which is the question the condition explicitly does not answer.

Part 3 of 3

One argument about Memory. The parts either side of it:

What links here

Essays that reach for this one mid-argument — the half of a link its own author cannot write down.

The objects named here

The third axis, after the field and the series: the games, values and theorems themselves, and every essay that touches each one.

ComponentContextDecompositionExhaustive searchImpartialIndependenceInvariantRule tableSprague–GrundyState