1aeac83dab36c86db912260bf245314f14c6e0e2
[cvc5.git] / NEWS
1 This file contains a summary of important user-visible changes.
2
3 Changes since 1.8
4 =================
5
6 New Features:
7 * A new parametric theory of sequences whose syntax is compatible with the
8 syntax for sequences used by Z3.
9 * Arrays: Added support for an `eqrange` predicate. `(eqrange a b i j)` is true
10 if arrays `a` and `b` are equal on all indices within indices `i` and `j`.
11 * Support for an integer operator `(_ iand n)` that returns the bitwise `and`
12 of two integers, seen as integers modulo n.
13
14 Improvements:
15 * New API: Added functions to retrieve the heap/nil term when using separation
16 logic.
17
18 Changes:
19 * SyGuS: Removed support for SyGuS-IF 1.0.
20 * Removed Java and Python bindings for the legacy API
21 * Interactive shell: the GPL-licensed Readline library has been replaced the
22 BSD-licensed Editline. Compiling with `--best` now enables Editline, instead
23 of Readline. Without selecting optional GPL components, Editline-enabled CVC4
24 builds will be BSD licensed.
25 * The semantics for division and remainder operators in the CVC language now
26 correspond to SMT-LIB 2.6 semantics (i.e. a division by zero or a zero
27 modulus results in a constant value, instead of an uninterpreted one).
28 Similarly, when no language is set, the API semantics now correspond to the
29 SMT-LIB 2.6 semantics.
30 * The `competition` build type includes the dependencies used for SMT-COMP by
31 default. Note that this makes this build type produce GPL-licensed binaries.
32 * Bit-vector operator bvxnor was previously mistakenly marked as
33 left-assoicative in SMT-LIB. This has recently been corrected in SMT-LIB. We
34 now restrict bvxnor to only allow two operands in order to avoid confusion
35 about the semantics, since the behavior of n-ary operands to bvxnor is now
36 undefined in SMT-LIB.
37 * SMT-LIB output for `get-model` command now conforms with the standard,
38 and does *not* begin with the keyword `model`. The output
39 is the same as before, only with this word removed from the beginning.
40 * Building with Python 2 is now deprecated.
41
42
43 Changes since 1.7
44 =================
45
46 New Features:
47 * New C++ and Python API: CVC4 has a new, more streamlined API. We plan to
48 make CVC4 1.8 the last version that ships with the legacy API.
49 * Strings: Full support of the new SMT-LIB standard for the theory of strings,
50 including:
51 * Support for `str.replace_re`, `str.replace_re_all`, `str.is_digit`,
52 `str.from_code`, `re.diff`, and `re.comp`
53 * Support for new operator names (e.g. `str.in_re` instead of `str.in.re`),
54 new escape sequences. The new syntax is enabled by default for smt2 files.
55 * Support for syntax-guided synthesis (SyGuS) problems in the new API. C++
56 examples of the SyGuS API can be found in `./examples/api/sygus_*.cpp`.
57 * Support for higher-order constraints. This includes treating function sorts
58 (constructible by `->`) as first-class sorts and handling partially applied
59 function symbols. Support for higher-order constraints can be enabled by
60 the option `--uf-ho`.
61 * Support for set comprehension binders `comprehension`.
62 * Eager bit-blasting: Support for SAT solver Kissat.
63
64 Improvements:
65 * API: Function definitions can now be requested to be global. If the `global`
66 parameter is set to true, they persist after popping the user context.
67 * Java/Python bindings: The bindings now allow users to catch exceptions
68 * Arithmetic: Performance improvements
69 * Linear solver: New lemmas inspired by unit-cube tests
70 * Non-linear solver: Expanded set of axioms
71 * Ackermannization: The Ackermannization preprocessing pass now supports
72 uninterpreted sorts and as a result all QF_UFBV problems are supported in
73 combination with eager bit blasting.
74
75 Changes:
76 * CVC language: Models printed in the CVC language now include an explicit end
77 marker to facilitate the communication over pipes with CVC4.
78 * API change: `SmtEngine::query()` has been renamed to
79 `SmtEngine::checkEntailed()` and `Result::Validity` has been renamed to
80 `Result::Entailment` along with corresponding changes to the enum values.
81 * Java API change: The name of CVC4's package is now `edu.stanford.CVC4`
82 instead of `edu.nyu.acsys.CVC4`.
83 * The default output language is changed from CVC to SMT-LIB 2.6. The
84 default output language is used when the problem language cannot be
85 easily inferred (for example when CVC4 is used from the API).
86 * Printing of BV constants: previously CVC4 would print BV constant
87 values as indexed symbols by default and in binary notation with the
88 option --bv-print-consts-in-binary. To be SMT-LIB compliant the
89 default behavior is now to print BV constant values in binary
90 notation and as indexed symbols with the new option
91 --bv-print-consts-as-indexed-symbols. The option
92 --bv-print-consts-in-binary has been removed.
93 * Updated to SyGuS language version 2.0 by default. This is the last release
94 that will support the SyGuS language version 1.0 (`--lang=sygus1`). A
95 script is provided to convert version 1.0 files to version 2.0, see
96 `./contrib/sygus-v1-to-v2.sh`.
97 * Support for user-provided rewrite rule quantifiers have been removed.
98 * Support for certain option aliases have been removed.
99 * Support for parallel portfolio builds has been removed.
100
101 Changes since 1.6
102 =================
103
104 New Features:
105 * Proofs:
106 * Support for bit-vector proofs with eager bitblasting (older versions only
107 supported proofs with lazy bitblasting).
108 * Strings:
109 * Support for `str.replaceall` operator.
110 * New option `--re-elim` to reduce regular expressions to extended string
111 operators, resulting in better performance on regular expression benchmarks
112 (enabled by default).
113 * SyGuS:
114 * Support for abduction (`--sygus-abduct`). Given a formula, this option uses
115 CVC4's SyGuS solver to find a sufficient condition such that the
116 conjunction of the condition and the formula is unsatisfiable.
117 * Support for two new term enumerator strategies: variable agnostic
118 (`--sygus-active-gen=var-agnostic`) and fast (`--sygus-active-gen=enum`).
119 By default, CVC4 tries to choose the best term enumerator strategy
120 automatically based on the input (`--sygus-active-gen=auto`).
121 * Support for streaming solutions of increasingly smaller size when using the
122 PBE solver (`--sygus-stream --sygus-pbe`). After the first solution is found
123 and printed, the solver will continue to look for new solutions and print
124 those, if any, that are smaller than previously printed solutions.
125 * Support for unification-based techniques in non-separable specifications
126 (`--sygus-unif`). For solving invariant problems a dedicate mode
127 (`--sygus-unif-boolean-heuristic-dt`) is available that builds candidate
128 solutions using heuristic decision tree learning.
129
130 Improvements:
131 * Strings:
132 * Significantly better performance on string benchmarks over the core theory
133 and those with extended string functions like substring, contains, and
134 replace.
135
136 Changes:
137 * API change: Expr::iffExpr() is renamed to Expr::eqExpr() to reflect its
138 actual behavior.
139 * Compiling the language bindings now requires SWIG 3 instead of SWIG 2.
140 * The CVC3 compatibility layer has been removed.
141 * The build system now uses CMake instead of Autotools. Please refer to
142 [INSTALL.md](https://github.com/CVC4/CVC4/blob/master/INSTALL.md) for
143 up-to-date instructions on how to build CVC4.
144
145 Changes since 1.5
146 =================
147
148 New Features:
149 * A new theory of floating points.
150 * Novel approach for solving quantified bit-vectors (BV).
151 * Eager bit-blasting: Support for SAT solver CaDiCaL.
152 * A new Gaussian Elimination preprocessing pass for the theory of bit-vectors.
153 * Support for transcendental functions (sin, cos, exp). In SMT2 input, this
154 can be enabled by adding T to the logic (e.g., QF_NRAT).
155 * Support for new operators in strings, including string inequality (str.<=)
156 and string code (str.code).
157 * Support for automated rewrite rule generation from sygus (*.sy) inputs using
158 syntax-guided enumeration (option --sygus-rr).
159
160 Improvements:
161 * Incremental unsat core support.
162 * Further development of rewrite rules for the theory of strings and regular
163 expressions.
164 * Many optimizations for syntax-guided synthesis, including improved symmetry
165 breaking for enumerative search and specialized algorithms for
166 programming-by-examples conjectures.
167
168 Changes:
169 * Eager bit-blasting: Removed support for SAT solver CryptoMinisat 4, added
170 support for CryptoMinisat 5.
171 * The LFSC proof checker now resides in its own repository on GitHub at
172 https://github.com/CVC4/LFSC. It is not distributed with CVC4 anymore.
173
174 Changes since 1.4
175 =================
176
177 * Improved heuristics for reasoning about non-linear arithmetic.
178 * Native support for syntax-guided synthesis (sygus).
179 * Support for many new heuristics for reasoning with quantifiers, including
180 finite model finding.
181 * Support for proofs for uninterpreted functions, arrays, bitvectors, and
182 their combinations.
183 * Performance improvements to existing theories.
184 * A new theory of sets with cardinality and relations.
185 * A new theory of strings.
186 * Support for unsat cores.
187 * Support for separation logic constraints.
188 * Simplification mode "incremental" no longer supported.
189 * Support for array constants in constraints.
190 * Syntax for array models has changed in some language front-ends.
191 * New input/output languages supported: "smt2.0" and "smtlib2.0" to
192 force SMT-LIB v2.0; "smt2.5" and "smtlib2.5" to force SMT-LIB v2.5;
193 "smt2.6" and "smtlib2.6" to force SMT-LIB v2.6;
194 "smt", "smtlib", "smt2", and "smtlib2" all refer to the current standard
195 version 2.6. If an :smt-lib-version is set in the input, that overrides
196 the command line.
197 * Abstract values in SMT-LIB models are now ascribed types (with "as").
198 * In SMT-LIB model output, real-sorted but integer-valued constants are
199 now printed in accordance with the standard (e.g. "1.0").
200
201 Changes since 1.3
202 =================
203
204 * CVC4 now supports libc++ in addition to libstdc++ (this especially
205 helps on Mac OS Mavericks).
206 * The LFSC proof checker has been incorporated into CVC4 sources.
207 * Theory of finite sets, handling the MLSS fragment (singleton, union,
208 intersection, set subtraction, membership and subset).
209 * By default, CVC4 builds in "production" mode (optimized, with fewer
210 internal checks on). The common alternative is a "debug" build, which
211 is much slower. By default, CVC4 builds with no GPL'ed dependences.
212 However, this is not the best-performing version; for that, you should
213 configure with "--enable-gpl --best", which links against GPL'ed
214 libraries that improve usability and performance. For details on
215 licensing and dependences, see the README file.
216 * Small API adjustments to Datatypes to even out the API and make it
217 function better in Java.
218 * Timed statistics are now properly updated even on process abort.
219 * Better automatic handling of output language setting when using CVC4
220 via API. Previously, the "automatic" language setting was sometimes
221 (though not always) defaulting to the internal "AST" language; it
222 should now (correctly) default to the same as the input language
223 (if the input language is supported as an output language), or the
224 "CVC4" native output language if no input language setting is applied.
225 * The SmtEngine cannot be safely copied with the copy constructor.
226 Previous versions inadvertently permitted clients to do this via the
227 API. This has been corrected, copy and assignment of the SmtEngine
228 is no longer permitted.
229
230 Changes since 1.2
231 =================
232
233 New features:
234 * SMT-LIB-compliant support for abs, to_real, to_int, is_int, which were
235 previously missing
236 * New bv2nat/int2bv operators for bitvector/integer inter-compatibility.
237 * Support in linear logics for /, div, and mod by constants (with the
238 --rewrite-divk command line option).
239 * Parsing support for TPTP's TFF and TFA formats.
240 * A new theory of strings: word (dis-)equations, length constraints,
241 regular expressions.
242 * Increased compliance to SMT-LIBv2, numerous bugs and usability issues
243 resolved.
244 * New :command-verbosity SMT option to silence success and error messages
245 on a per-command basis, and API changes to Command infrastructure to
246 support this.
247
248 Behavioral changes:
249 * It is no longer permitted to request model or proof generation if there's
250 been an intervening push/pop.
251 * User-defined symbols (define-funs) are no longer reported in the output
252 of get-model commands.
253 * Exit codes are now more standard for UNIX command-line tools. Exit code
254 zero means no error---but the result could be sat, unsat, or unknown---and
255 nonzero means error.
256
257 API changes:
258 * Expr::substitute() now capable of substituting operators (e.g.,
259 function symbols under an APPLY_UF)
260 * Numerous improvements to the Java language bindings
261
262 Changes since 1.1
263 =================
264
265 * Real arithmetic now has three simplex solvers for exact precision linear
266 arithmetic: the classical dual solver and two new solvers based on
267 techniques for minimizing the sum of infeasibilities. GLPK can now be used
268 as a heuristic backup to the exact precision solvers. GLPK must be enabled
269 at configure time. See --help for more information on enabling these solvers.
270 * added support for "bit0" and "bit1" bitvector constants in SMT-LIB v1.2
271 * support for theory "alternates": new ability to prototype new decision
272 procedures that are selectable at runtime
273 * various bugfixes
274
275 Changes since 1.0
276 =================
277
278 * bit-vector solver now has a specialized decision procedure for unsigned bit-
279 vector inequalities
280 * numerous important bug fixes, performance improvements, and usability
281 improvements
282 * support for multiline input in interactive mode
283 * Win32-building support via mingw
284 * SMT-LIB get-model output now is easier to machine-parse: contains (model...)
285 * user patterns for quantifier instantiation are now supported in the
286 SMT-LIBv1.2 parser
287 * --finite-model-find was incomplete when using --incremental, now fixed
288 * the E-matching procedure is slightly improved
289 * Boolean terms are now supported in datatypes
290 * tuple and record support have been added to the compatibility library
291 * driver verbosity change: for printing all commands as they're executed, you
292 now need verbosity level >= 3 (e.g., -vvv) instead of level 1 (-v). This
293 allows tracing the solver's activities (with -v and -vv) without having too
294 much output.
295 * to make CVC4 quieter in abnormal (e.g., "warning" conditions), you can
296 use -q. Previously, this would silence all output (including "sat" or
297 "unsat") as well. Now, single -q silences messages and warnings, and
298 double -qq silences all output (except on exception or signal).