[QF_S Benchmark] QF_S Benchmark: seq vs nseq — c3 branch (2026-06-10) #9802
Closed
Replies: 1 comment
-
|
This discussion has been marked as outdated by QF_S String Solver Benchmark. A newer discussion is available at Discussion #9809. |
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-10 Branch: c3 Commit:
89a2ac1Workflow Run: #27246388375
Benchmark source:
tests/ostrich.zip(shipped in thec3branch)Files benchmarked: 299 (all files, timeout 5 s per file, Z3 internal timeout 4 s)
Summary
Both solvers are extremely close in aggregate performance.
nseqsolves 1 more file thanseq;seqhas 5 fewer timeouts. The difference is within noise.Performance Comparison
seq-fast / nseq-slow (seq < 2 s, nseq timed out) — 11 files
Potential regression risk for
nseq:Pattern:
str.to_int/str.from_intconversions, string ordering (str-lt*), indexof, Parikh constraints, prefix/suffix/contains all challengenseq.nseq-fast / seq-slow (nseq < 2 s, seq timed out) — 9 files
nseqperformance advantages:Pattern: nonlinear string constraints (
nonlinear.smt2,noodles-*), deep regex (regexdeep.smt2,concat-regex2.smt2), large substring indexing (bigSubstrIdx.smt2). The ZIPT-basednseqshows clear wins on complex regex and nonlinear string arithmetic.Correctness
Disagreements (seq=
satvs nseq=unsator vice versa): 0 ✅Both solvers agree on all cases where both produce a definitive answer.
Near-disagreements (unknown vs sat/unsat)
In all
unknownvssatcases,nseqprovides the definitive answer — suggestingnseqhandles incomplete rewrite cases better thanseq.seq Trace Analysis
Trace collection via
-tr:seqis not supported in the Release build (option not recognized). A Debug build with tracing enabled would be needed for deeper analysis.Top seq-fast/nseq-slow benchmark descriptions:
str.indexof x0 "===" 0with> n 0— indexof with positive startstr.containson doubled string,(= x (str.++ y y))Generated by the QF_S Benchmark workflow. To reproduce: build Z3 from
c3and runz3 smt.string_solver=seq|nseq -T:4 <file.smt2>. Full CSV available on request.Beta Was this translation helpful? Give feedback.
All reactions