Repository navigation
smt_solver: validate deep models on a large stack - #43
Open
findalexli wants to merge 9 commits into
Open
findalexli wants to merge 9 commits into
findalexli wants to merge 9 commits into
Conversation
…r crashes as invalid
findalexli
marked this pull request as ready for review
November 4, 2026 05:45
findalexli
added a commit
to findalexli/EdgeBench
that referenced
this pull request
Nov 4, 2026
Keeps the validator change here, with shorter NOTES.
4 tasks done
This branch has not been deployed
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.
Task finding: #42.
What and why
Correct
satmodels on at least six hard QF_UFLRA files crash the recursive validator at an 8 MiB stack. The pool breaks, no score file is written, and the judge reports a valid 0 for the whole submission.validate_sat_witnessnow runs in a thread with a 2 GiB stack and a recursion limit of 1,000,000. A thread that can't start, or a validator out of memory, ends the evaluation as a crash does today, because that says nothing about the model. The twoevaluate.pychanges are identical. Validator logic, cases, formula and scale don't change.A larger stack alone isn't enough: at the old limit the crash becomes
RecursionError, which counts as an invalid model, so correct answers still lose credit (4-5 in QF_UFLRA on a real solver; 0 with the raised limit).Reporting an evaluator crash as invalid, not a valid 0, is a separate PR, #45.
Limits
satfiles if a model visits every definition; real models on three of them passed, and the solver gave none on the other two. Of 40 synthetic deep formulas across 15 shapes, 34 finished without a crash, mostly rejected at the limit, and six timed out with no verdict, so they don't show that deep correct models pass.ulimit -vtable at https://github.com/findalexli/EdgeBench/tree/8a4d1576af560cbd4074da3524d8df098dd97752). A deep validation reached 1427 MiB peak RSS on captured witnesses.How old scores map. For identical solver outputs and a host with the memory above, verdicts are preserved unless the old validator crashed, rejected a model at its recursion limit, or ran out of memory. All 774 inputs, 354 models of the real solver, validated by both on identical witnesses: 322 accepted by both, 28 rejected by both with the same exception types and recorded message prefixes, 4 crash on old and pass on new. Regrade a valid 0 with
correct=0/0from a submission that built and ran. Timed reruns can vary.Old vs new judge
Old key
cd3a5bf1f538, newe70c10c6fb4b,sforge eval,ulimit -s8192. Failure-path rows: one worker, order swapped, n=2 per judge.correct=0/0, 1473 scorrect=328/774, 1861 scorrect=0/0correct=1/774solve, or rejected by preflightcorrect=0/0unknown, or wrong modelscorrect=0/774correct=42/774The real-solver row isn't one same-host pair: a worker's budget fits one pair at best, and these two grades are on different workers. The complete same-host pairs include #45: 0.00 to 47.34 old first has the same validator (its evaluator differs in one exit status), and 0.00 to 46.58 and 46.45 new first are earlier revisions without the
MemoryErrorre-raise. Attempts that didn't finish, all pairs and scripts: https://github.com/findalexli/EdgeBench/tree/8a4d1576af560cbd4074da3524d8df098dd97752. Your archives can settle this if any reach the crash.Checklist for task changes
versionintask.tomlis bumped (any change that can move scores).NOTES.md: the change and its score effect are under Changes. No Known issue covered this crash.