Remove Late Move Reductions: stronger at every TC, provable as written - #141
Merged
Conversation
…th loop The measured record, all per docs/TESTING.md (frozen snapshots, paired openings, per-engine time-loss accounting): - Removing deterministic LMR: +69 +/- 40 and +29 +/- 33 (two 300-game matches, 4+0.04), +19 +/- 45 at 60+1 (200 games) - noLMR is stronger at every time control tested, and fixed-depth suites corroborate (mate4, Bratko-Kopec, WAC all improve without LMR). - The original re-search LMR (+49 when added at 58883ea) REPRODUCES: +41 +/- 36 replaying the exact historical A/B today. The ledger was never wrong. - The resolution: re-search LMR grafted on today's baseline is +20 +/- 36 over noLMR - but an honest variant (min-semantics, identical cutoffs, sound bound propagation) scores exactly 0.00 +/- 34 vs noLMR. Re-search LMR's entire edge lives in its over-claimed bounds: fail-highs propagated as facts about a depth they did not search. That is not a trade-off between strength and provability; it is strength borrowed from a bug (contradictory transposition entries, machine-checked while the mechanism existed). - Deterministic LMR (7f9f164) was believed -16 vs re-search; the true price was ~-50, below zero net. A decision that hinges on a difference smaller than its error bars needs SPRT or a bigger sample - added to docs/TESTING.md's lessons. With no reduction anywhere, every move is searched at depth - 1, bound()'s docstring is provable as written (Bound.lean's point spec, zero sorries), the killer duplicate is same-depth idempotent, and the formal record needs no LMR machinery: Lmr.lean, LmrDet.lean, TableClamp.lean and their interval-spec/clamp apparatus are deleted - git is the archive. The doctrine they taught survives in formal/README.md: every stored bound must describe one value function determined by the transposition key; 'the truth lies within an unboundable gap' is not a spec. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
formal/README.md and formal/paper describe the post-removal reality: six core Lean files, the shipped loop matching Bound.lean's searchMoves exactly, the measurement campaign's numbers, and the retired mechanisms paragraph pointing at git. Paper: 23 pages, builds clean, new second epilogue with the full campaign. Residual stale comments in CanNull and Tricks swept. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This was referenced Aug 6, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
The capstone of the LMR investigation. Two commits: the removal (full measured story in its message) and the documentation pass (README doctrine, paper's second epilogue, 23pp PDF).
The measurements (all frozen-snapshot, paired-opening, time-loss-audited):
Fixed-depth floors all improve or hold: mate4 1→4/10, WAC 87→94/300, Bratko-Kopec 4→5/24 (floor bumps for #138's ladder noted), everything else unchanged.
Formal: Lmr.lean, LmrDet.lean, TableClamp.lean deleted with their mechanism — git is the archive. Six files, zero sorries, and
bound()'s docstring is provable as written (bound_spec): no reduction hypotheses, no interval readings, no clamp. The doctrine survives in README: every stored bound describes one value function determined by the transposition key.🤖 Generated with Claude Code