[QF_S Benchmark] QF_S Benchmark: seq vs nseq — 2026-06-12 (c3 branch, f126b60) #9832
Closed
Replies: 1 comment
-
|
This discussion has been marked as outdated by QF_S String Solver Benchmark. A newer discussion is available at Discussion #9841. |
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.
-
Date: 2026-06-12
Branch: c3
Commit:
f126b60Workflow Run: #27388126663
Files benchmarked: 299 (from
tests/ostrich.zip, timeout 5 s per file, Z3 internal timeout 4 s)Z3 version: 4.17.0 — build hash
f126b603690007f08707515917a7737081a1c809Summary
Both solvers perform similarly on this benchmark set, with identical median times (10 ms). The
nseqsolver has a lower mean time (26 ms vs 44 ms), suggesting it handles many cases slightly faster. However,nseqhas 5 more timeouts (23 vs 18), and one critical correctness disagreement was detected.1 file where seq says
satbut nseq saysunsat(potential bug in nseq)indexof_const_index_sat.smt2The
seqsolver correctly returns sat with modela = "bhhh"(indexof"bhhh"for"hhh"starting at 0 is 1). Thenseqsolver incorrectly returns unsat and emits repetitive ZIPT trace output before concluding — indicating a bug innseq's handling ofstr.indexofwith a constant start position.Performance Comparison
seq-fast / nseq-slow (seq < 2 s, nseq timed out) — 10 files
parikh-constraints.smt2concat_backjump_bug.smt2word-equation-3.smt2contains-4.smt2str-leq5.smt2str-lt.smt2str.to_int_5.smt2str.to_int_6.smt2prefix-suffix.smt2str.from_int_6.smt2Patterns:
nseqlacks efficient support forstr.<=/str.<ordering,str.to_int/str.from_int, and simple prefix/suffix/contains reasoning.nseq-fast / seq-slow (nseq < 2 s, seq timed out) — 7 files
str.to_int_4.smt2concat-regex2.smt2noodles-unsat3.smt2nonlinear.smt2indexof-2.smt2regexdeep.smt2bigSubstrIdx.smt2Patterns:
nseqexcels at nonlinear constraints, deep regex, and Parikh-image unsat proofs.seq Trace Analysis
The
-tr:seqtrace option is not available in this build. Formula-level analysis of top seq-fast/nseq-slow cases:contains-4.smt2(9 ms): UNSAT —str.contains y z,x = y++y,not str.contains x z. Trivially UNSAT by monotonicity.nseqexhausts its 4 s budget.prefix-suffix.smt2(10 ms): UNSAT — provesprefixof(a,b) ∧ suffixof(b,a) ⟹ a=b.seqhas direct lemmas;nseqdoes not.parikh-constraints.smt2(20 ms): Composition ofstr.contains,str.replace,str.substr,str.indexof.nseqcannot efficiently handle this chain.str-leq5.smt2(66 ms):str.len x = 4andstr.<= x "cba".nseqlacks lexicographic order reasoning.concat_backjump_bug.smt2(72 ms): QF_SLIA with 13 variables, multiple regex intersections.sequses Nielsen backjumping;nseqZIPT loops.Raw Data
First 50 entries of benchmark-results.csv
Generated by the QF_S Benchmark workflow. To reproduce: check out the
c3branch, build Z3 in Release mode, and runz3 smt.string_solver=seq|nseq -T:4 <file.smt2>on files fromtests/ostrich.zip.Beta Was this translation helpful? Give feedback.
All reactions