You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
No issues were recommended for closure in this run. All open soundness and bug issues appear to still reproduce on current Z3 versions based on the reports and lack of fix confirmations.
Potential Duplicates / Merge Candidates
Cluster 1 — Floating-Point Invalid Model / Soundness
These issues share a root cause in Z3's floating-point theory model generation and BV+FP interaction:
Suggested fix direction: The seq.nth_i k!0 0 term reveals that a Skolem variable (k!0) introduced during solving is not being concretized in the model. The model builder for sequences involving parametric datatypes fails to substitute a concrete value for the sequence element. Fix: ensure all seq.nth_i applications are eliminated during model completion.
#9022 — FPA soundness issue in incremental solving (still exists)
Suggested fix direction: PR Fix FPA soundness issue in incremental (push/pop) solving #8712 did not fully address the push/pop interaction with quantifier pattern triggers for the FP theory. When push is called after FP quantifier instantiation, the instantiation history may not be properly backtracked. Investigate whether the FP theory's push_scope/pop_scope correctly resets quantifier trigger caches.
Suggested fix direction: The model assigns x = (Flt (_ NaN 8 24)) despite (distinct x (Flt (_ NaN 8 24))). The datatype + FP path does not check distinct constraints when assigning canonical NaN. Fix: ensure the datatype model builder propagates FP distinctness constraints.
Relevant source files: src/sat/smt/euf_solver.cpp, src/sat/smt/ theory plugins
Suggested fix direction: The wrong verdict appears only on the finalcheck-sat in an incremental sequence with sat.smt=true. This suggests a state management issue in incremental inprocessing — possibly irredundant clauses being incorrectly deleted or not reconstructed. The sat.smt mode is still experimental.
Suggested fix direction: The model builds id.ma as as-array k!143 where composed functions yield 0 for values that should be 6 or 8. Fix: verify that the as-array interpretation correctly handles composed partial functions for large BV-indexed arrays (possible off-by-one in bit-vector range evaluation).
Suggested fix direction: Regression between 4.15.4 and 4.15.8 in QF_LIA. cvc5 confirms sat. The constraint system is a product-of-integers modular arithmetic problem. This may be a regression in the LP/NLA solver boundary or arithmetic tactic selection.
#8893 — String solver performance regression in 4.16
Suggested fix direction: 25× slowdown in QF_SLIA between 4.15.2 and 4.16.0 on a regex membership + length constraint. Likely a regression in regex automaton construction or the interaction between the new nseq solver introduced in 4.16 and legacy benchmarks. Bisect commits between these tags.
Suggested fix direction: The PartialOrder helper generates quantified axioms without explicit :pattern triggers, leading MBQI to loop when chaining the transitivity axiom. Add :pattern annotations to the generated axioms or document that PartialOrder should not be used with ground quantifier queries.
Suggested fix direction: Setting fp.spacer.native_mbp=false produces correct unsat in earlier versions. The native MBP path (fp.spacer.native_mbp=true, now default) has a soundness regression. Investigate changes to the native MBP implementation between 4.13.3 and 4.15.2.
Suggested fix direction: Both involve str.substr + str.to_int in push/pop sequences. The model validator fails, suggesting that after backtracking, the string solver does not correctly re-derive string values. Review theory_seq's pop_scope to ensure substring interpretation is reset.
Suggested fix direction: Eldarica gives unsat with a proof. The CHC involves Array Int Int operations within Horn invariants. Check whether the interpolation procedure handles array theories soundly in the context of Spacer's model-guided unfolding.
Suggested fix direction: Z3 returns unsat for a QF_BVFP formula that cvc5 shows is satisfiable. The formula involves to_fp_unsigned + bvsdiv + fp.sqrt/fp.mul chains. This may be a corner case in to_fp_unsigned conversion or the interaction between fp.sqrt and fp.sub.
reacted with thumbs up emoji reacted with thumbs down emoji reacted with laugh emoji reacted with hooray emoji reacted with confused emoji reacted with heart emoji reacted with rocket emoji reacted with eyes emoji
Uh oh!
There was an error while loading. Please reload this page.
-
Issue Backlog Analysis - 2026-03-21
Executive Summary
(set-option :sat.smt true)#7990, PartialOrder hangs when reasoning about bottom element #7592, String solver performance regression in 4.16 #8893Issues Recommended for Closure
No issues were recommended for closure in this run. All open soundness and bug issues appear to still reproduce on current Z3 versions based on the reports and lack of fix confirmations.
Potential Duplicates / Merge Candidates
Cluster 1 — Floating-Point Invalid Model / Soundness
These issues share a root cause in Z3's floating-point theory model generation and BV+FP interaction:
unsat, cvc5 sayssatwith validated modelfp.fma+ RNA roundingfp.eq+fp.to_realthrough intermediate variablefp.to_fpNaNdespitedistinctconstraint:produce-proofs true+ String constraintfp.to_fpwithsat.euf=trueRoot component:
src/smt/theory_fpa.cpp,src/ast/fpa/fpa_rewriter.cpp,src/smt/smt_model_generator.cppCluster 2 — String Solver Invalid Model
str.substr+str.to_intstr.replace/str.from_intQF_SLIAfoldl,nth,++define-fun-recover Seqseq.nth_i k!0leaking outRoot component:
src/smt/seq_model.cpp,src/smt/seq_*.cppCluster 3 — Performance Regressions
unknowninstead ofsatCluster 4 — Spacer / HORN Soundness
satanswer on HORNunsat, Eldarica confirmssatinstead ofunsatfp.spacer.native_mbp=truetriggers itunknownwhen fp.validate=trueRoot component:
src/muz/spacer/,src/muz/bmc/Issues with Suggested Fixes
#9063 — Free variable in the model
src/smt/seq_model.cpp,src/smt/smt_model_generator.cppseq.nth_i k!0 0term reveals that a Skolem variable (k!0) introduced during solving is not being concretized in the model. The model builder for sequences involving parametric datatypes fails to substitute a concrete value for the sequence element. Fix: ensure allseq.nth_iapplications are eliminated during model completion.#9022 — FPA soundness issue in incremental solving (still exists)
src/smt/theory_fpa.cpp,src/smt/smt_context.cpppushis called after FP quantifier instantiation, the instantiation history may not be properly backtracked. Investigate whether the FP theory'spush_scope/pop_scopecorrectly resets quantifier trigger caches.#7842 — Incorrect model (FP + datatypes)
src/smt/theory_datatypes.cpp,src/smt/theory_fpa.cppx = (Flt (_ NaN 8 24))despite(distinct x (Flt (_ NaN 8 24))). The datatype + FP path does not checkdistinctconstraints when assigning canonical NaN. Fix: ensure the datatype model builder propagates FP distinctness constraints.#7990 — Wrong verdict with
sat.smt=truesrc/sat/smt/)src/sat/smt/euf_solver.cpp,src/sat/smt/theory pluginscheck-satin an incremental sequence withsat.smt=true. This suggests a state management issue in incremental inprocessing — possibly irredundant clauses being incorrectly deleted or not reconstructed. Thesat.smtmode is still experimental.#7132 — Unsound model with ABV logic
src/smt/theory_array.cpp,src/smt/smt_model_generator.cppid.maasas-array k!143where composed functions yield 0 for values that should be 6 or 8. Fix: verify that theas-arrayinterpretation correctly handles composed partial functions for large BV-indexed arrays (possible off-by-one in bit-vector range evaluation).#8740 — Z3 Regression:
unknowninstead ofsatsrc/math/lp/,src/smt/theory_arith.cppsat. The constraint system is a product-of-integers modular arithmetic problem. This may be a regression in the LP/NLA solver boundary or arithmetic tactic selection.#8893 — String solver performance regression in 4.16
src/smt/seq_regex.cpp,src/smt/theory_seq.cppnseqsolver introduced in 4.16 and legacy benchmarks. Bisect commits between these tags.#7592 — PartialOrder hangs with bottom element
src/api/python/z3/z3.py(PartialOrder definition)PartialOrderhelper generates quantified axioms without explicit:patterntriggers, leading MBQI to loop when chaining the transitivity axiom. Add:patternannotations to the generated axioms or document thatPartialOrdershould not be used with ground quantifier queries.#7730 — Spacer returns
satinstead ofunsatsrc/muz/spacer/spacer_context.cpp,src/muz/spacer/spacer_mbc.cppfp.spacer.native_mbp=falseproduces correctunsatin earlier versions. The native MBP path (fp.spacer.native_mbp=true, now default) has a soundness regression. Investigate changes to the native MBP implementation between 4.13.3 and 4.15.2.#6982 / #7841 — Incremental string solver invalid models
src/smt/theory_seq.cpp,src/smt/seq_*.cppstr.substr+str.to_intin push/pop sequences. The model validator fails, suggesting that after backtracking, the string solver does not correctly re-derive string values. Reviewtheory_seq'spop_scopeto ensure substring interpretation is reset.#7417 — Z3 returning wrong
satanswer on HORNsrc/muz/spacer/,src/muz/bmc/unsatwith a proof. The CHC involvesArray Int Intoperations within Horn invariants. Check whether the interpolation procedure handles array theories soundly in the context of Spacer's model-guided unfolding.#7135 — Refutational soundness issue (QF_BVFP)
src/smt/theory_fpa.cpp,src/ast/fpa/fpa_rewriter.cpp,src/util/mpf.cppunsatfor a QF_BVFP formula that cvc5 shows is satisfiable. The formula involvesto_fp_unsigned+bvsdiv+fp.sqrt/fp.mulchains. This may be a corner case into_fp_unsignedconversion or the interaction betweenfp.sqrtandfp.sub.Issues Needing More Information
file $(which python3))Notable Issues Deserving Attention
Issues that are particularly impactful, long-standing, or high-severity:
sat.smt=truesatvs expectedunsatunknowninstead ofsatregressionAutomated Workflow Notes
(set-option :sat.smt true)#7990, String solver performance regression in 4.16 #8893[aw] No-Op Runs) and [code-simplifier] Simplify extract_var_bound in qe_lite_tactic.cpp via operator normalization #9061 ([code-simplifier]) are automation-generated and tracked separatelyAutomated by Issue Backlog Processor — runs every 2 days
Beta Was this translation helpful? Give feedback.
All reactions