Bug fixes:
- TSolverHandler: Remove dependency on the global objects initialization order
- ScatterSplitter: Fix the implementation of scattering
Performance improvements:
- ArithLogic: Improved computation of substitutions from equalities
- ScatterSplitter: Limit sizes of shared literal representations
New features:
- The shared clause representation is now portable between solvers for all terms
Build:
- Support for Apple M1
Bug fixes:
- Logic: Fix use of uninitialized value
Bug fixes:
- Fix handling of scoped
define-funs in incremental mode
Performance improvements:
- CoreSMTSolver: Use Luby restart scheme
- CoreSMTSolver: Sticky polarities with phase flipping
- CoreSMTSolver: Do not delete learned clauses with glue score < 4
New features:
- A library for use in parallel SMT solving
- Support for the theory of arrays with extensionality (QF_AX)
Bug fixes:
- STP: Fix crash on problems with no theory variables
- UF+Interpolation: Fix bug in congruence graph coloring
Build:
- Support building statically linked executable
Bug fixes:
- Fix crash on non-standard SMT-LIB scripts
Various improvements:
- Small performance improvements for Arithmetic theories
- Small performance improvements for preprocessing
Build:
- Fix version number in CMake files
Performance improvements:
- Arithmetic: Pooling of
mpq_classobjects for memory reuse. - UF: Avoid unnecessary
Enodeinstances (negated booleans) - UF: Simplified
Enoderepresentation of terms. - Integer arithmetic: Support of cuts-from-proofs algorithm to better avoid divergence.
Bug fixes:
- UF: Fix internal error on top-level distinct in incremental mode.
- LIA+Interpolation: Fix interpolation in incremental mode when split clauses are involved.
- UF+Interpolation: Fix interpolation in the presence of
distincts. - Logic+Parser: Fix handling of (unusual) quoted identifiers.
- Logic+Parser: Fix handling of qualified terms (operator
as).
API changes:
- Logic:
Logicnow takes SMT-LIB logic type as a constructor parameter to determine which terms it should support. - Logic: Support for sorts with arity > 0.
- Logic: Unification of all arithmetic
Logics into a singleArithLogic.
New features:
- Support for theory combination: QF_UFLRA, QF_UFLIA.
Build:
- The default build does not depend on line editing libraries.
Various improvements:
- Fix several memory leaks mostly related to string manipulation.
API changes:
- LA: Inequalities with multiple arguments are now handled according to SMT-LIB standard.
- Logic: Refactoring of methods for term creation (added overloads for taking arguments as r-value reference).
Bug fixes:
- LA: Fix bound store not being cleared properly between consecutive
(check-sat)commands. - LA: Fix incorrect update of bounds after split.
Build:
- Switch to C++17.
Various improvements:
- Interpolation mode now also uses theory propagation.
- LA: Arithmetic equalities are now normalized in the same way as inequalities are.
API changes:
- Single
Logiccan now be used by multipleMainSolvers. MainSolver, when provied with aLogic, is now responsible for all other compenents in the solver.- Standalone
Modelobject can now be obtained fromMainSolverin sat state usingMainSolver::getModel. This model object can be queried for value of various terms. - Interpolants are now computed using a standalone
InterpolationContextobject that can be obtained fromMainSolverusingMainSolver::getInterpolationContext. - Methods for term rewriting has been moved to separate classes. This includes term substitution and rewriting of mod/div operations or distinct terms.
- Support for parallel / distributed solving with
SMTSis removed for this release, but is being currently developed in a different branch.
Various improvements:
- Parser: Improved processing of nested let terms.
- Terms: Better processing of ITE terms.
- LIA: Inequalities are strengthened when created in
LIALogic. - LIA: Various performance improvements through better memory usage
- LIA: Added support for interpolation in
QF_LIA. - LIA: Allow the use of div and mod in the api and through an option in smtlib2 files
- SMT-LIB: The output of
(get-interpolants)command now conforms to the interpolation proposal. - Data structures: Added
MapWithKeysthat supports easy and efficient iteration over map's keys. - SMT-LIB: Added dedicated solvers for
QF_RDLandQF_IDL. - Models: Enable producing models in
QF_UF. - Interpolation: Determinising theory interpolation
Bug fixes:
FastRationals: Fixed undefined behaviour inFastRational::absValFastRationals: Fixed overflow in subtraction.FastRationals: Faster implementations for operators- UF: Fixed various issues with handling boolean terms inside uninterpreted functions.
- Interpret: Support correctly push and pop commands with integer argument.
- Interpret: Standard-compliant handling of
declare-const - Interpret: fix the methods for unbuffered reading from pipe
- Data structures: Do not use
mtl::vecwhen the stored type is not trivially copyable. - Fixed handling of distinct that are not on the top level of the input formula.
- Interpolating mode: Fixed incremental solving with empty frames.
Build:
OpenSMT's executable is now created directly in the build directory.OpenSMT's libraries are created in lib subdirectory of the build directory.OpenSMTnow provides and installsCMakepackage for easier integration in projects usingCMake.