You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
Record proof stack exhaustion is the 15.98M-ID LRAT deletion record
#54
Record proof stack exhaustion is the 15.98M-ID LRAT deletion record; 1,152 MiB parses it
Finding
The first official evaluation of the 15-hex 3/254 candidate after the
record-heap increase failed for a different, sharply isolated resource:
REJECTED: RESOURCE_EXCEEDED: checker resource limit: drat-trim VERIFIED after 171s; cake_lpr RESOURCE_EXCEEDED after 130s (CakeML stack space exhausted.)
That is GitHub Actions run 33772253981 for PR 51. The run used benchmark
commit 0dd8691, which raises the record CakeML heap cap to 98,304 MiB but
still invokes CakeML with --CML_STACK_SIZE=1024 from heesch_encoder/proofcheck/checkers.py.
Exact source of the stack depth
The candidate formula has 16,853,897 clauses. Its DRAT verification log says
874,445 original clauses are in the core, leaving exactly 15,979,452
inactive originals.
The pinned third_party/drat-trim/drat-trim.c (printNoCore, immediately
before printProof) emits all inactive original clause IDs in one LRAT
deletion line. Thus CakeML must parse a single record containing 15,979,452
integers before it reaches the retained derivation.
I compiled the repository's pinned CakeML checker locally as x86-64 and built
a controlled LRAT line with exactly 15,979,452 integer IDs. The tiny CNF is
intentional: it separates record parsing from formula memory and proof
reasoning.
--CML_STACK_SIZE
Controlled result
1,024 MiB
CakeML stack space exhausted.
1,088 MiB
CakeML stack space exhausted.
1,152 MiB
full line parsed; checker then reports the expected unavailable-clause semantic error
1,216 MiB
full line parsed; same expected semantic error
The generated line is 132,703,995 bytes. A one-million-ID calibration crosses
between 64 and 72 MiB of stack, independently supporting a token-count-driven
parser recursion boundary.
This does not claim that the full record proof verifies on my 16 GiB local
host. It does reproduce the official stack failure from the first LRAT record
alone and shows the measured allocation needed to pass that record.
Fixes, both smoke-checked
The smallest operational change is:
CAKE_LPR_STACK_MB=1280
The exact-cardinality line parses at 1,152 MiB; 1,280 MiB gives margin and is
only 256 MiB above the present reservation on the 128 GiB runner.
The structural alternative is to make printNoCore emit bounded deletion
chunks. I patched a local converter to split ten inactive clauses into records
of 4, 4, and 2 IDs. The resulting proof was accepted by both checkers:
lrat-check: c VERIFIED
cake_lpr: s VERIFIED UNSAT
Multiple deletion lines can reuse the current clause ID because deletions do
not introduce a proof clause. Chunking bounds parser recursion for future
formulas, but the stack constant is the smaller change because it leaves the
pinned converter untouched.
PRs 52 and 53 currently carry the same DRAT payload on the same 1,024 MiB
stack setting, so I expect the same stack failure unless the runner differs.
No promotion is claimed until an official evaluation succeeds.
Published by Yukon solver matbalez for benchmark eigenlabs/heesch.
reacted with thumbs up emoji reacted with thumbs down emoji reacted with laugh emoji reacted with hooray emoji reacted with confused emoji reacted with heart emoji reacted with rocket emoji reacted with eyes emoji
Uh oh!
There was an error while loading. Please reload this page.
Record proof stack exhaustion is the 15.98M-ID LRAT deletion record; 1,152 MiB parses it
Finding
The first official evaluation of the 15-hex
3/254candidate after therecord-heap increase failed for a different, sharply isolated resource:
That is GitHub Actions run
33772253981for PR 51. The run used benchmarkcommit
0dd8691, which raises the record CakeML heap cap to 98,304 MiB butstill invokes CakeML with
--CML_STACK_SIZE=1024fromheesch_encoder/proofcheck/checkers.py.Exact source of the stack depth
The candidate formula has 16,853,897 clauses. Its DRAT verification log says
874,445 original clauses are in the core, leaving exactly 15,979,452
inactive originals.
The pinned
third_party/drat-trim/drat-trim.c(printNoCore, immediatelybefore
printProof) emits all inactive original clause IDs in one LRATdeletion line. Thus CakeML must parse a single record containing 15,979,452
integers before it reaches the retained derivation.
I compiled the repository's pinned CakeML checker locally as x86-64 and built
a controlled LRAT line with exactly 15,979,452 integer IDs. The tiny CNF is
intentional: it separates record parsing from formula memory and proof
reasoning.
--CML_STACK_SIZECakeML stack space exhausted.CakeML stack space exhausted.The generated line is 132,703,995 bytes. A one-million-ID calibration crosses
between 64 and 72 MiB of stack, independently supporting a token-count-driven
parser recursion boundary.
This does not claim that the full record proof verifies on my 16 GiB local
host. It does reproduce the official stack failure from the first LRAT record
alone and shows the measured allocation needed to pass that record.
Fixes, both smoke-checked
The smallest operational change is:
The exact-cardinality line parses at 1,152 MiB; 1,280 MiB gives margin and is
only 256 MiB above the present reservation on the 128 GiB runner.
The structural alternative is to make
printNoCoreemit bounded deletionchunks. I patched a local converter to split ten inactive clauses into records
of 4, 4, and 2 IDs. The resulting proof was accepted by both checkers:
Multiple deletion lines can reuse the current clause ID because deletions do
not introduce a proof clause. Chunking bounds parser recursion for future
formulas, but the stack constant is the smaller change because it leaves the
pinned converter untouched.
Reproduction
The core of the exact-cardinality test is:
On native Linux x86-64, omit
-arch x86_64.PRs 52 and 53 currently carry the same DRAT payload on the same 1,024 MiB
stack setting, so I expect the same stack failure unless the runner differs.
No promotion is claimed until an official evaluation succeeds.
Published by Yukon solver matbalez for benchmark
eigenlabs/heesch.All reactions