File: NEWS.md

package info (click to toggle)
cvc5 1.3.2-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 87,260 kB
  • sloc: cpp: 383,850; java: 12,207; python: 12,090; sh: 5,679; ansic: 4,729; lisp: 763; perl: 208; makefile: 38
file content (704 lines) | stat: -rw-r--r-- 29,557 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
This file contains a summary of important user-visible changes.

cvc5 1.3.2
==========

## Changes

- Fixes a bug related to variable elimination for quantified formulas that have
  variable shadowing.
- We now use a more efficient version of resolution by default in CPC proofs
  (proof rule `CHAIN_M_RESOLUTION`) for representing SAT proofs from Minisat.
- CPC proofs now have no mixed arithmetic by default.
- Updates to the linear and non-linear arithmetic solver, including a new
  lemma schema for multiplication (`--nl-ext-flatten-mon`), as well as
  minor improvements to the Diophantine Equation solver.
- Minor updates and fixes to the CPC proof signature. The current CPC proofs are
  checkable by Ethos 0.2.2 (`./contrib/get-ethos-checker`).

cvc5 1.3.1
==========

## Changes

- **API**
  * The C++ methods `Term TermManager::mkString(const std::wstring& s)` and
    `std::wstring Term::getStringValue()` are now deprecated in favor of
    the new methods `Term TermManager::mkString(const std::u32string& s)` and
    `std::u32string Term::getU32StringValue()` which use `std::u32string`
    to represent Unicode strings instead of `std::wstring`.
    Unlike `std::wstring`, whose character type `wchar_t` is 16 bits on
    Windows and 32 bits on Linux and macOS, the character type of
    `std::u32string`, `char32_t`, is guaranteed to be at least 32 bits on
    all platforms.
    Similarly, the C API functions `cvc5_mk_string_from_wchar` and
    `cvc5_term_get_string_value` are now deprecated in favor of
    the new functions `cvc5_mk_string_from_char32` and
    `cvc5_term_get_u32string_value`.
- A build configuration `stable-mode` is available via our configure script.
  Similar to the build configuration `safe-mode`, this configuration guards
  against all cvc5 features that are not robust, but in constrast it does not
  guarantee full proof and model support.
- Minor updates to the CPC proof signature. The current CPC proofs are checkable
  by Ethos 0.2.1 (`./contrib/get-ethos-checker`).

cvc5 1.3.0
==========

## New Features

- A build configuration `safe-mode` is available via our configure script
  which guards all cvc5 features that are either not robust or do not have
  full proof and model support. It is also possible to guard against these
  features using the command line option `--safe-mode=safe`. The definition
  of what is allowable in safe mode coincides with our fuzzing guidelines,
  see https://github.com/cvc5/cvc5/wiki/Fuzzing-cvc5.
- We have significantly increased coverage of proofs in the Cooperating Proof
  Calculus (CPC) proof format. In particular, we expect that CPC proofs are
  complete for *all* theories and features allowed in safe mode. These proofs
  may be obtained by the `(get-proof)` SMT-LIB command, or via the API using
  the method `Solver::getProof`, and are checkable by Ethos 0.2.0
  (`./contrib/get-ethos-checker`).
- We now support the SMT-LIB version 2.7 standard syntax for arithmetic
  bit-vector conversion functions whose smt2 syntax is `int_to_bv`, `ubv_to_int`
  and `sbv_to_int`. The first maps to the existing kind `Kind::INT_TO_BITVECTOR`.
  The kinds `Kind::BITVECTOR_UBV_TO_INT` and `Kind::BITVECTOR_SBV_TO_INT`
  are added to the API for the latter two. Note the syntax `int2bv` and `bv2nat`
  as well as the kind `Kind::BITVECTOR_TO_NAT` are now deprecated.

## Changes

- Bumped CaDiCaL to version 2.1.3.
- The proof granularity is now `dsl-rewrite` by default. The regression test
  `make regress-dsl-proof` is deleted and is now equivalent to
  `make regress-proof`.
- Following the SMT-LIB standard, we now print parentheses around all proof
  outputs.
- The option `--safe-options` is renamed to `--safe-mode=safe`. We additionally
  support the option `--safe-mode=stable`, which disables experimental
  features but does not insist on complete proofs or models.
- The quantifier instatiation strategy `--mbqi-fast-sygus` has been renamed to
  `--mbqi-enum`.
- **API**
  + Added support for multiple `TermManager` instances within the same thread and
    across threads. Previously, all `TermManager` objects in a thread shared
    a single memory reference and could not be shared across threads.
    Instances can now be shared across threads, but they are not thread-safe and
    must be protected from concurrent access.


cvc5 1.2.1
==========

## New Features

- Updates to the `cpc` proof signature. The 0.1.1 release of Ethos can check
  proofs generated by this version of cvc5 (`./contrib/get-ethos-checker`).

- Increased coverage for proofs, in particular for theories allowed by
  `--safe-options`.

- Added support for `SymbolManager::getNamedTerms()` to retrieve the set of
  terms that have been given names by the SMT-LIB attribute `:named`.

- Added option `--parsing-mode` to allow configuration of both more strict but
  also more lenient parsing than default. Already existing option
  `--strict-parsing` is an alias `--parsing-mode=strict`.
  Parsing symbols that start with `.` or `@` (used for internally freshly
  introduced symbols) in lenient parsing mode (`--parsing-mode=lenient`).

## Changes

- The option `--safe-options` now **disables experimental** theories and their
  extensions in cvc5. This includes the theory of bags, the theory of finite
  fields, the theory of separation logic, higher-order extensions to the theory
  of equality, as well as extensions of the theory of arithmetic for
  transcendental functions, integer-and, and power functions, and the theory of
  arrays for constant arrays. These theories are still enabled by default and
  further more can be used in combination with safe options by the options e.g.
  `--arith-exp` **prior** to setting `--safe-options`.

- Renamed the flag `--sets-ext` to `--sets-exp`, which enables non-standard
  extensions of the sets theory.

- Fixed a soundness bug in the solver for `set.filter`.

- When printing with tags `-o pre-asserts` or `-o post-asserts`, by default we
  now ensure that declarations are printed in a deterministic order.

- Bumped CaDiCaL to version 2.0.0.


cvc5 1.2.0
==========

## New Features

- New **C API**, implemented as a thin wrapper around the C++ API.
   - Documentation: https://cvc5.github.io/docs-ci/docs-main/api/c/c.html
   - Examples: https://github.com/cvc5/cvc5/tree/main/examples/api/c

- Exposed creation and maintenance of **Skolem functions** to the API. Skolem
  functions are symbols that are internally introduced by cvc5 during solving.
  They are formalized via an identifier (see
  https://cvc5.github.io/docs-ci/docs-main/skolem-ids.html for details) as well
  as a (possibly empty) set of indices.
  + The **API** methods `Term::isSkolem()`, `Term::getSkolemId()`, and
    `Term::getSkolemIndices()`may now be used to identify terms corresponding
    to skolems.

- We now export kinds `BITVECTOR_FROM_BOOLS`, `BITVECTOR_BIT`, `DIVISION_TOTAL`,
  `INTS_DIVISION_TOTAL`, `INTS_MODULUS_TOTAL` which may appear in terms
  resulting from simplification or terms appearing in proofs.

- Proof rules corresponding to rewrite rules are now exported in the API via
  the enum `ProofRewriteRule`.

- A new `Plugin` class is available in our API. This class allows a user
  to be notified when SAT clauses or theory lemmas are learned internally
  by cvc5. The plugin class also contains a callback for the user to introduce
  new learned clauses into the state of cvc5 during solving.

- Added a new strategy `--mbqi-fast-sygus` (disabled by default) for **quantifier
  instantiation** which uses SyGuS enumeration to augment instantiations from
  model-based quantifier instantiation.

## Changes

- We now require CMake >= 3.16.

- **API**
  All APIs have been refactored to expose a TermManager to the API. A term
  manager manages creation and maintenance of all terms and sorts (across
  potentially several solver instances within a thread).
  Corresponding functions that were previously associated with a solver
  instance and are now associated with a term manager are now deprecated
  and will be removed in a future release.
  * Python:
    - Constructor `SymbolManager(Solver)` is now deprecated and replaced
      by `SymbolManager(TermManager)`.
  * Pythonic:
    - Unsat cores and proofs are now available via the `Solver` methods
      `unsat_core()` and `proof()`, respectively.

- The default proof format of cvc5 has been renamed to the
  **Cooperating Proof Calculus (CPC) proof format**. This proof format coincides
  with proof objects in our API.
  * **API**
    + The option `--proof-format=cpc` prints proofs in the CPC format.
      This option is now enabled by default.
  * The **Ethos** proof checker is available, which can check proofs in this
    format. In particular, the 0.1.0 release of Ethos can check proofs generated
    by this version of cvc5. This checker is the second generation of the
    AletheLF checker (`alfc`). Ethos inherits the code base of alfc and is based
    on a logical framework called **Eunoia** (formerly called AletheLF).
    See https://github.com/cvc5/ethos for more details. Note that the
    development version of Ethos is available for download via the script
    `./contrib/get-ethos-checker`, which will be kept in sync with further
    development versions of cvc5.
  * The rules of this format have been formalized in Eunoia and are available
    in the cvc5 repository under the directory `./proofs/eo/cpc/`.

- The semantics of `SQRT` was changed to assume the result is positive.

- Fixed a bug involving how sequence terms are printed in model values.


cvc5 1.1.2
==========

## New Features

- Added support for **nullable** sorts and lift operator to the theory of
  **datatypes**.

- Added a new strategy `--sub-cbqi` (disabled by default) for **quantifier
  instantiation** which uses subsolvers to compute unsat cores of instantiations
  that are used in proofs of unsatisfiability.

- Add support for the kind `BITVECTOR_NEGO` corresponding to bitvector
  negation overflow detection.

## Changes

- SAT clauses are no longer marked as removable in MiniSat. This change
  **improves performance** overall on quantifier-free logics with arithmetic and
  strings.
- **API**
  * Functions `kindToString(Kind)` and `sortKindToString(SortKind)` are now
    deprecated and replaced by `std::to_string(Kind)` and
    `std::to_string(SortKind)`. They will be removed in the next minor release.
- Minor changes to the output format for proofs. Proofs in the AletheLF
  proof format generated by cvc5 now correspond directly to their representation
  in proof objects obtained in via the API (the `Proof` class). Moreover,
  proofs now use SMT-LIB compliant syntax for quantified formulas and unary
  arithmetic negation.
- The option `--safe-options` now disallows cases where more than one regular
  option is used.
- Fixes the parsing of `define-fun-rec` and `define-funs-rec` in interactive
  mode.
- Renamed `bag.duplicate_removal` to `bag.setof`.
- Improvements to handling of constant production rules (`Constant`) in SyGuS
  grammars.

cvc5 1.1.1
==========

## New Features

- Added support for **forward declarations** (feature `:fwd-decls`) in **SyGuS**
  inputs. This allows functions-to-synthesize to include previous
  functions-to-synthesize in their grammars. This feature is enabled by default
  for all SyGuS inputs.

## Changes

- Fixed a bug when piping input from stdin, which caused cvc5 to have degraded
  performance. This bug could also cause cvc5 to throw spurious parser errors.


cvc5 1.1.0
==========

## New Features

- **API**
  * The **signature** of functions `Solver::mkFiniteFieldSort(const std::string&)`
    and `Solver::mkFiniteFieldElem(const std::string&, const Sort&)` is now
    extended with an additional (optional) parameter to
    `Solver::mkFiniteFieldSort(const std::string& size, uint32_t base)` and
    `Solver::mkFiniteFieldElem(const string& value, const Sort& sort, uint32_t base)`
    to configure the base of the string representation of the given string
    parameters.
  * A **new API for proofs** is available. The new `Proof` class represents a node
    of the proof tree. Function
    `Solver::getProof(modes::ProofComponent c = modes::ProofComponent::FULL)`
    returns the root proof nodes of a proof component as a vector. Function
    `Solver::proofToString(std::vector<Proof> proof, modes::ProofFormat format, modes::ProofComponent component)`
    can be used to print proof components to a string with a specified proof
    format.
  * Added support for **parsing** inputs from file, string, or input stream. We
    provide an `InputParser`, `SymbolManager`, and `Command` class for reading
    inputs (see `include/cvc5_parser.h`). Example use cases of these classes
    are available at https://cvc5.github.io/docs/cvc5-1.1.1/examples/parser.html
    and https://cvc5.github.io/docs/cvc5-1.1.1/examples/parser_sym_manager.html.
    These interfaces are also available in the Java and Python APIs.
  * Added a variant of **timeout cores** that accepts a set of assumptions. This
    is available via the API method `Solver::getTimeoutCoreAssuming` or the
    SMT-LIB command `get-timeout-core-assuming`, which accept a list of
    formulas to assume, while all current assertions are implicitly included
    in the core.
  * Added new method `Solver::getUnsatCoreLemmas` which returns the set of
    theory lemmas that were relevant to showing the last query was
    unsatisfiable. This is also avialable via the SMT-LIB command
    `get-unsat-core-lemmas`.

- Support for the **AletheLF (ALF) proof format**. This format combines the
  strengths of the Alethe and LFSC proof formats, namely it borrows much of the
  syntax of Alethe, while being based on a logical framework like LFSC.
  * **API**
    + The option `--proof-format=alf` prints proofs in the AletheLF format.
      This option is enabled by default.
  * The ALF proof checker (alfc) is available for download via the script
    `./contrib/get-alf-checker`.

- **CaDiCaL** is now integrated via the IPASIR-UP interface as **CDCL(T) SAT
  solver**. The CDCL(T) SAT solver can be configured via option `--sat-solver`.
  Currently, MiniSat is still default. Note that CaDiCaL cannot be used as the
  CDCL(T) SAT engine when proof production is enabled. In that case, option
  `--sat-solver` will default back to MiniSat.

## Changes

- Various bug fixes.


cvc5 1.0.9
==========

Note: This is a pre-release version for the upcoming version 1.1.0.

## New Features

- **API**
  + Added the ability to query the logic that has been set in the solver via
    `Solver::isLogicSet` and `Solver::getLogic`.

## Changes

- **SMT-LIB**
  * The syntax for 0-ary tuples has been changed for the purposes of
    disambiguation. The new syntax for 0-ary tuple sort is `UnitTuple` whose
    0-ary constructor is `tuple.unit` (the previous syntax had overloaded
    `Tuple` and `tuple`, with no arguments).


cvc5 1.0.8
==========

Note: This is a pre-release version for the upcoming version 1.1.0.

## Changes

- **API**
  + C++ enums are now enum classes
  + Added argument `fresh` to `Solver::declareFun` which distinguishes whether
    the solver should construct a new term or (when applicable) return a
    term constructed with the same name and sort. An analogous flag is added
    to `Solver::declareSort`. The option `--fresh-declarations` determines
    whether the parser constructs fresh terms and sorts for each declaration
    (true by default, which matches the previous behavior).


cvc5 1.0.7
==========

## Changes

- Various bug fixes

cvc5 1.0.6
==========

## New Features

- **API**
  + New API function `Solver::mkFloatingPoint(const Term& sign, const Term& exp, const Term& sig)`,
  returns a floating-point value from the three IEEE-754 bit-vector value.
  + Added support for querying the values of real algebraic numbers in the API.
    In particular, the methods
    `Term::isRealAlgebraicNumber()`,
    `Term::getRealAlgebraicNumberDefiningPolynomial()`,
    `Term::getRealAlgebraicNumberLowerBound()`, and
    `Term::getRealAlgebraicNumberUpperBound()` may now be used to query the
    contents of terms corresponding to real algebraic numbers.

- Support for timeout cores
  * **API**
    + New API function `Solver::getTimeoutCore()` when applicable returns a
      subset of the current assertions that cause the solver to timeout without
      a provided timeout (option `--timeout-core-timeout`).
  * **SMT-LIB**
    + New command `(get-timeout-core)` which invokes the above method.

- Support for new interfaces to the SyGuS solver.
  * **API**
    + New API function `Solver::findSynth` which takes an identifier specifying
      a target term to synthesize and (optionally) a grammar. This method can
      be used to directly enumerate terms in a provided grammar
      (`FindSynthTarget::ENUM`), or as a way of finding other terms of interest,
      e.g,. a rewrite rule that is applicable to the current set of assertions
      (`FindSynthTarget::REWRITE_INPUT`).
    + New API function `Solver::findSynthNext` which gets the next term in the
      enumeration.
  * **SMT-LIB**
    + New commands `find-synth` and `find-synth-next` which invoke the above
      methods.

## Changes

- Removed support for the ANTLR parser and parsing for the TPTP language.
      components.
- **API**
  + Simplified the `Solver::mkTuple` method. The sorts of the elements no longer
    need to be provided.
  + Option `--print-unsat-cores-full` has been renamed to `--print-cores-full`.
    Setting this option to true will print all assertions in the unsat core,
    regardless of whether they are named. This option also impacts how timeout
    cores are printed.
  + Removed API support for the deprecated SyGuS 2.0 command `Solver::synthInv`.
    This method is equivalent to `Solver::synthFun` with a Boolean range sort.


cvc5 1.0.5
==========

## New Features

- A new (hand-written) parser is available and enabled by default.
  * **Note**: the previous parser can be enabled using command line options
    `--no-flex-parser --no-stdin-input-per-line`. These options will be
    available until version 1.1 is released.


cvc5 1.0.4
==========

## New Features

- Support for the theory of (prime-order) **finite fields**:
  * Sorts are created with
    * C++: `Solver::makeFiniteFieldSort`
    * SMT-LIB: `(_ FiniteField P)` for prime order `P`
  * Constants are created with
    * C++: `Solver::makeFiniteFieldElem`
    * SMT-LIB: `(as ffN F)` for integer `N` and field sort `F`
  * The operators are multiplication, addition and negation
    * C++: kinds `FF_MUL`, `FF_ADD`, and `FF_NEG`
    * SMT-LIB: operators `ff.mul`, `ff.add`, and `ff.neg`
  * The only predicate is equality


cvc5 1.0.3
==========

## New Features

- **API**
  * New API function `Solver::getVersion()`, returns a string representation
    of the solver version.
- Support for **bit-vector overflow** detection operators:
  * `BITVECTOR_UADDO` unsigned addition overflow detection
  * `BITVECTOR_SADDO` signed addition overflow detection
  * `BITVECTOR_UMULO` unsigned multiplication overflow detection
  * `BITVECTOR_SMULO` signed multiplication overflow detection
  * `BITVECTOR_USUBO` unsigned subtraction overflow detection
  * `BITVECTOR_SSUBO` signed subtraction overflow detection
  * `BITVECTOR_SDIVO` signed division overflow detection
- Support for **Web Assembly** compilation using Emscripten.

## Changes

- The (non-standard) operators `BITVECTOR_TO_NAT` and `INT_TO_BITVECTOR` now
  belong to the UF theory. A logic that includes UF is required to use them.
- The sort for (non-standard) bit-vector operators `BITVECTOR_REDAND` and
  `BITVECTOR_REDOR` is now `(_ BitVec 1)` (was Boolean), following the
  definition of reduction operators in Verilog (their origin).
- Reenable functionality that allows `(get-model)` commands after answering
  `unknown` when `:produce-models` is set to `true`. Note that there is no
  guarantee that building a model succeeds in this case.


cvc5 1.0.2
==========

## Changes

- **API**
  * Previously, it was not possible to share Sort, Term, Op, Grammar and
    datatype objects between Solver instances. This is now allowed for solvers
    that belong to the same thread.


cvc5 1.0.1
==========

## New Features

- Support for cross-compiling an **ARM** binary of cvc5 on x86 macOS.
- Support for declaring **oracle functions** in the API via the method
  `declareOracleFun`. This allows users to declare functions whose semantics
  are associated with a provided executable implementation.

## Changes

- Removed support for non-standard `declare-funs`, `declare-consts`, and
  `declare-sorts` commands.
- The kind for integer constants is now `CONST_INTEGER`, while real constants
  continue to have kind `CONST_RATIONAL`.
- Type rules for (dis)equality and if-then-else no longer allow mixing
  integers and reals. Type rules for other operators like `APPLY_UF` now
  require their arguments to match the type of the function being applied, and
  do not assume integer/real subtyping.
- The API method `mkTuple` no longer supports casting integers to reals when
  constructing tuples.


cvc5 1.0
=========

## Website

https://cvc5.github.io

## Documentation

https://cvc5.github.io/docs

## System Description
**cvc5: A Versatile and Industrial-Strength SMT Solver.**  
Barbosa H., Barrett C., Brain M., Kremer G., Lachnitt H., Mann M., Mohamed A.,
Mohamed M., Niemetz A., Nötzli A., Ozdemir A., Preiner M., Reynolds A., Sheng
Y., Tinelli C., and Zohar Y., TACAS 2022.
[http://dx.doi.org/10.1007/978-3-030-99524-9_24](http://dx.doi.org/10.1007/978-3-030-99524-9_24)

## New Features

### Streamlined C++ API

Documentation: https://cvc5.github.io/docs/latest/api/cpp/cpp.html

### Two new Python language bindings

- Base module: Feature complete with C++ API
- Pythonic module: A pythonic wrapper around the base module
- Documentation: https://cvc5.github.io/docs/latest/api/python/python.html

### New Java language bindings

Documentation: https://cvc5.github.io/docs/latest/api/java/java.html

### Theory of Bags (Multisets)

A new theory of bags, which are collections that allow duplicates. It
supports basic operators like union disjoint, union max, intersection,
difference subtract, difference remove, duplicate removal, and multiplicity
of an element in a bag.

### Theory of Sequences
- A new parametric theory of sequences whose syntax is compatible with the
  syntax for sequences used by Z3.
- A new array-inspired procedure (option `--seq-array`).

### Arithmetic

Nonlinear real arithmetic is now solved using a new solver based on
cylindrical algebraic coverings. Includes full support for non-rational
models and a number of options `--nl-cov-*` for, e.g., different projection
operators, Lazard's lifting or variable elimination.
The new solver requires the libpoly library, and Lazard's lifting
additionally requires CoCoALib.

### Arrays

Added support for an `eqrange` predicate. `(eqrange a b i j)` is true
if arrays `a` and `b` are equal on all indices within indices `i` and `j`.

### Bit-vectors
- New bit-vector solver with CaDiCaL as default SAT back-end.
- New approach for solving bit-vectors as integers (option `--solve-bv-as-int`).

### Datatypes
Support for generic datatype updaters `((_ update s) t u)` which replaces
the field specified by selector `s` of `t` by the value `u`.

### Integers

- Support for an integer operator `(_ iand n)` that returns the bitwise `and`
  of two integers, seen as integers modulo n.
- Support for an integer operator `int.pow2`, used as `(int.pow2 x)` which
  represents 2 to the power of x.

### Quantifiers
- Improved support for enumerative instantiation (option `--enum-inst`).
- SyGuS-based quantifier instantiation (option `--sygus-inst`).

### Strings

- Improved performance using new techniques, including model-based
  reductions, eager context-dependent simplification, and equality-based
  conflict finding.
- Support for `str.indexof_re(s, r, n)`, which returns the index of the first
  occurrence of a regular expression `r` in a string `s` after index `n` or
  -1 if `r` does not match a substring after `n`.

### Proofs

- Documentation available at:
  https://cvc5.github.io/docs/latest/proofs/proofs.html
- When used after an unsatisfiable response to `checkSat`, `getProof`
  returns a representation of the refutation proof for the current set of
  assertions (get-proof in SMT-LIB).
- Preliminary support for translations to external proof formats LFSC and Alethe.

### Difficulty Estimation

The API method `getDifficulty` returns a map from asserted formulas to
integers which estimates how much that formula contributed to the
difficulty of the overall problem (`get-difficulty` in SMT-LIB).

### Learned Literals

The API method `getLearnedLiterals` gets a list of literals that are
entailed by the current set of assertions that were learned during solving
(`get-learned-literals` in SMT-LIB).

### Abduction and Interpolation

- The API method `getAbduct` can be used to find an abduct for the current set
  of assertions and provided goal (get-abduct in SMT-LIB). Optionally, a
  SyGuS grammar can be provided to restrict the shape of possible abducts.
  If using the text inferace, the grammar may be provided using the same
  syntax for grammars as in SyGuS IF format.
- The API method `getInterpolant` can be used to find an interpolant for the
  current set of assertions and provided goal (get-interpolant in SMT-LIB).
  Like abduction, grammars may be provided to restrict the shape of
  interpolants.

### Support for Incremental Synthesis Queries

- The core SyGuS solver now supports getting multiple solutions for a
  synthesis conjecture via the API. The method `checkSynthNext` finds the
  next SyGuS solution to the current set of SyGuS constraints
  (`check-synth-next` in SyGuS IF).
- `getAbductNext` finds the next abduct for the current set of
  assertions and provided goal (`get-abduct-next` in SMT-LIB).
- `getInterpolantNext` finds the next interpolant for the current set of
  assertions and provided goal (`get-interpolant-next` in SMT-LIB).

### Pool-based Quantifier Instantiation

- The API method `declarePool` declares symbol sets of terms called pools
  (`declare-pool` in SMT-LIB).
- Pools can be used in annotations of quantified formulas for fine grained
  control over quantifier instantiations (`:inst-pool`, `:inst-add-to-pool`,
  `:skolem-add-to-pool` in SMT-LIB).

### Diagnostic Outputs

The option `-o TAG` can be used to enable a class of useful diagnostic
information, such as the state of the input formula before and after
pre-preprocessing, quantifier instantiations, literals learned
during solving, among others. For SyGuS problems, it can be used to
show candidate solutions and grammars that the solver has generated.

### Unsat cores
- Production modes based on the new proof infrastructure
  (`--unsat-cores-mode=sat-proof`) and on the solving-under-assumption
  feature of Minisat (`--unsat-cores-mode=assumptions`). The mode based on
  SAT assumptions + preprocessing proofs is the new default.
- Computing minimal unsat cores (option `--minimal-unsat-cores`).

### Blocking Models
- The API method `blockModels` can be used to block the current model using
  various policies for how to exclude the values of terms (`block-model` in
  SMT-LIB).
- The API method `blockModelValues` can be used to block the current model
  for a provided set of terms (`block-model-values` in SMT-LIB).

### Model Cores
- The API method `isModelCoreSymbol` can be used to query whether the value
  for a symbol was critical to whether the model satisfies the current set of
  assertions.
- Models can be limited to show only model core symbols (option `--model-cores`).

## Changes

* CaDiCaL and SymFPU are now required dependencies. CaDiCaL 1.4.1 is now the
  version used by default.
* Options have been extensively refactored, please refer to the cvc5
  documentation for further information.
* Removed support for the CVC language.
* SyGuS: Removed support for SyGuS-IF 1.0.
* Removed support for the (non-standard) `define` command.
* Removed the legacy API along with the Java and Python bindings for it.
* Interactive shell: the GPL-licensed Readline library has been replaced the
  BSD-licensed Editline. Compiling with `--best` now enables Editline, instead
  of Readline. Without selecting optional GPL components, Editline-enabled cvc5
  builds will be BSD licensed.
* The `competition` build type includes the dependencies used for SMT-COMP by
  default. Note that this makes this build type produce GPL-licensed binaries.
* Bit-vector operator `bvxnor` was previously mistakenly marked as
  left-assoicative in SMT-LIB. This has recently been corrected in SMT-LIB. We
  now restrict `bvxnor` to only allow two operands in order to avoid confusion
  about the semantics, since the behavior of n-ary operands to `bvxnor` is now
  undefined in SMT-LIB.
* SMT-LIB output for `get-model` command now conforms with the standard,
  and does *not* begin with the keyword `model`. The output
  is the same as before, only with this word removed from the beginning.
* Building with Python 2 is now deprecated.
* The SMT-LIB syntax for some extensions has been changed. Notably, set
  operators are now prefixed by `set.`, and relations by `rel.`. For example,
  `union` is now written `set.union`.
* Removed support for redundant logics `ALL_SUPPORTED` and `QF_ALL_SUPPORTED`,
  use `ALL` and `QF_ALL` instead.