[Specbot] Specbot Crash Analyzer — Run §23922549667 #9211
Closed
Replies: 1 comment
-
|
This discussion was automatically closed because it expired on 2026-04-09T21:42:10.861Z.
|
Beta Was this translation helpful? Give feedback.
0 replies
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Uh oh!
There was an error while loading. Please reload this page.
-
Workflow run: §23922549667 · Branch:
c3· Build: Debug (CMake + Ninja)Summary
c3branchtest_specbot_seq,test_deeptest_seq)Crash Findings
test_substr_extractTest file:
specbot/test_deeptest_seq.c(line 790)Observed failure:
ASSERTION VIOLATION—VERIFY(ext)failed atsrc/smt/seq/seq_nielsen.cpp:1444Test body (summarized):
The test encodes:
str.substr(x, 1, 3) == "ell","h" is a prefix of x,|x| == 5. Expected result:sat(the unique witness isx = "hello").Root cause hypothesis:
The assertion at line 1444 is:
generate_extensionsreturnsfalsewhen none of its 14 extension rules (deterministic modifiers, power rules, Nielsen splits, regex factorizations, etc.) can fire on the current node. TheVERIFYthen aborts the process.The trigger is the interaction of
str.substrwith a string-prefix constraint. Z3 expandsstr.substr(x, 1, 3)into internalstr.atcells and tail variables:x = h · seq.p.suffix1,str.substr2 = str.at3 · str.at4 · str.at5, etc. After this expansion is complete and the integer lengths are constrained (|str.at3|=|str.at4|=|str.at5|=1,|diseq.u'0|=0, …), the Nielsen graph reaches a node whose string-equality component still contains a residualdiseq.u'variable arising from the internal disequality encoding of thestr.atcells. The node is neither detected as a conflict nor as satisfiable, and none of the current extension rules recognises or matches this residual shape, sogenerate_extensionsexhausts all priorities and returnsfalse.In short: the Nielsen solver has no extension rule that handles the fully-expanded
str.substr/str.atresidual node, causing it to reach an unhandled state and panic instead of either producing a model or reporting satisfiability.The final HTML dump (emitted just before the abort) shows the solver correctly reduced all
diseq.wwidths to 0 and alldiseq.u'suffixes to 0 in all fourstr.atexpansion equations, but then stalled. This suggests the node is actually satisfiable at that point and the missing piece is a rule that recognises a "fully-ground, all-lengths-fixed" node as immediately SAT (or a rule that finalises the disequality/suffix cleanup and emits a SAT witness).Suggested fix:
In
src/smt/seq/seq_nielsen.cpp,nielsen_graph::search(around line 1440), replace the hardVERIFY(ext)with a graceful fallback:Beta Was this translation helpful? Give feedback.
All reactions