[QF_S Benchmark] QF_S Benchmark: seq vs nseq — 2026-06-10 (c3 branch) #9809
Closed
Replies: 1 comment
-
|
This discussion has been marked as outdated by QF_S String Solver Benchmark. A newer discussion is available at Discussion #9818. |
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:
dbb3f70Workflow Run: #27279442767
Files benchmarked: 299 (from
tests/ostrich.zip, timeout 5 s/file, Z3 internal timeout 4 s)Summary
Both solvers achieve near-identical median performance (10 ms).
nseqhas a lower mean (30 ms vs 36 ms) but slightly more timeouts (23 vs 18), suggestingnseqis faster on the problems it solves but has coverage gaps on specific benchmark categories.Performance Comparison
seq-fast / nseq-slow (seq < 2 s, nseq timed out) — 11 files
Affected categories:
indexOfwith variable indices, Parikh constraints, lexicographic ordering (str-lt),str.to_int/str.from_intwith constraints, word equations, prefix/suffix with negation.nseq-fast / seq-slow (nseq < 2 s, seq timed out) — 9 files
nseqexcels at: nonlinear word equations (noodles-*,nonlinear.smt2), deep regex (regexdeep.smt2,concat-regex2.smt2), large substring index queries, and certainstr.to_int/indexOfin negative contexts.Correctness
Disagreements (seq=
satbut nseq=unsator vice versa): 0 ✅Both solvers are in full agreement on all benchmarks where both produce a definitive answer. No soundness issues detected.
seq Trace Analysis (seq-fast / nseq-slow cases)
The
seqsolver uses an iterative depth/length-increase strategy:smt.seq :increase-depth N— widens string unfolding depth to Nsmt.seq :increase-length var N— widens length bound for variablevarconcat_backjump_bug.smt2 (seq=70 ms, nseq=timeout):
indexof.smt2 (seq=32 ms, nseq=timeout):
parikh-constraints.smt2 (seq=20 ms, nseq=timeout):
contains-4.smt2, prefix-suffix.smt2: Solved immediately (no depth/length iterations).
Interpretation:
seq's bounded unfolding finds solutions at shallow depth for these cases.nseq(ZIPT-based) appears to have higher setup overhead for symbolic transducer encodings, making it slower even on shallow instances.Generated by the QF_S Benchmark workflow. Reproduce: build Z3 from the
c3branch and runz3 smt.string_solver=seq|nseq -T:4 <file.smt2>. Benchmark suite:tests/ostrich.zip.Beta Was this translation helpful? Give feedback.
All reactions