review: retract the axis-separation claim and prediction 3 - #73
Merged
Conversation
Adversarial review of my own ladder claims. Two are withdrawn, one review
hypothesis is refuted, and the generator gets the structural oracle it should
have had from the start.
F1 RETRACTED -- "the expansion axis is 8.4x steeper". It compared steps with
unequal variable increments: 3x3->4x4 adds 14 vars, 4x4->4x5 adds 8. Per
variable the growth is 1.319x, 1.245x, then >=1.109x -- decreasing, and
indifferent to which axis moved. The only clean single-dimension expansion
step in the data (4x5->5x5) is >=2.81x, LOWER than the flat step's 5.77x.
Design confound: from a square torus you cannot raise min(r,c) without adding
both a row and a column, so "square cases" bundles expansion with a double
size jump. The step that breaks it is a size-matched pair, 4x6 (48 vars,
min=4) vs 5x5 (50 vars, min=5) -- and 4x6 was killed mid-run as "more of the
same on the cheap axis", which destroyed the control for the headline claim.
Prediction 2's 20x threshold still was not crossed, so nothing shows the
rectangular axis IS exponential either. Open question; 4x6 is the cheapest
experiment that moves it.
F2 WITHDRAWN -- prediction 3 was vacuous. resolutions is cumulative and
unbounded while peak_learnts is pinned to the reduction schedule
(learnt_limit starts at 4, +2 per reduce run, so peak ~= 4 + 2*runs; the
banked 143/832/1619/1842 imply ~70/~414/~808/~919 runs). The climbing ratio
restates the DB policy, not a property of the family.
F3 REFUTED (a review hypothesis, not a prior claim) -- I suspected the
76->35 res/s decay was an artifact of count_active_learnts being O(total
clauses) per conflict. Tested with an incremental counter: 4x4 went 429.2s ->
410.4s, only 4.4%, counters byte-identical. So the decay is not that scan and
"5x5 is out of reach under the interpreter" stands.
F4 -- and that optimization is a bad trade anyway: it adds an invariant only
build_cdcl_state maintains, and the hand-built reduce_state in
test_solver.eigs breaks instantly ("cannot compare none and num").
count_active_learnts derives from the arrays and needs no invariant. Both
findings recorded in CLAUDE.md so neither is re-attempted.
SURVIVES: the generator is genuine -- every edge appears in exactly two
vertices' incident lists, every vertex is degree-4 with distinct edges,
verified for 3x3/3x4/4x4/4x5/5x5/3x7/6x4. That incidence-exactly-2 property
is what makes XOR-ing all vertex constraints cancel every edge and leave
0 = sum(charges), so odd charge really does imply UNSAT. Promoted to
tests/test_tseitin_invariant.eigs in run_smoke.sh, and planted-fault
validated (duplicating an incident edge makes it fail). Also surviving: the
closed measurements (1,974 / 95,516 / 551,098), the DRAT oracle (single
emission site, compaction does not route through it), and pigeonhole ==
coloring, refined -- the CNFs are not byte-identical but have identical var
and clause counts and produce byte-identical counters.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
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.
Adversarial review of my own ladder claims. Two withdrawn, one review hypothesis refuted, and the generator gets the structural oracle it should have had from the start.
F1 — RETRACTED: "the expansion axis is 8.4× steeper"
The headline compared steps with unequal variable increments — 3×3→4×4 adds 14 vars, 4×4→4×5 adds 8. Normalised:
Per-variable growth is monotonically decreasing and indifferent to which axis moved. And the only clean single-dimension expansion step (4×5→5×5,
min4→5) is ≥2.81× — lower than the flat step's 5.77×.Design confound: from a square torus you cannot raise
min(r,c)without adding both a row and a column, so "square cases" bundles expansion with a double size jump. The step that breaks it is a size-matched pair: 4×6 (48 vars, min=4) vs 5×5 (50 vars, min=5) — and I killed 4×6 mid-run as "more of the same on the cheap axis", destroying the control for my own headline.Prediction 2's 20× threshold still wasn't crossed, so nothing shows the rectangular axis is exponential either. Open question; 4×6 is the cheapest experiment that moves it.
F2 — WITHDRAWN: prediction 3 was vacuous
resolutionsis cumulative and unbounded;peak_learntsis pinned to the reduction schedule (learnt_limitstarts at 4, +2 per reduce run, so peak ≈ 4 + 2·runs — the banked 143/832/1619/1842 imply ~70/~414/~808/~919 runs). The climbing ratio restates the DB policy, not a property of Tseitin.F3 — REFUTED (review hypothesis)
I suspected the 76→35 res/s decay was an artifact of
count_active_learntsbeing O(total clauses) per conflict. Tested with an incremental counter: 4×4 went 429.2s → 410.4s, only 4.4%, counters byte-identical. Refuted — the decay isn't that scan, and "5×5 is out of reach under the interpreter" stands.F4 — that optimization is a bad trade anyway
It adds an invariant only
build_cdcl_statemaintains; the hand-builtreduce_stateintest_solver.eigsbroke instantly ("cannot compare none and num").count_active_learntsderives from the arrays and needs no invariant. Both recorded in CLAUDE.md so neither is re-attempted.What survives
0 = sum(charges), so odd charge really does imply UNSAT. Nowtests/test_tseitin_invariant.eigsin the smoke suite, planted-fault validated (duplicating an incident edge makes it fail).🤖 Generated with Claude Code