packages feed

z3-408.2: CHANGES.md

# Release Notes

## 408.2

Tested (sort of) with Z3 4.8.8.

* Added Optimization API. (David Cao)
* Added Sequences and regular expressions API. (Carlo Nucera)
* Added z3_solver_get_proof. ("0xd34df00d")
* Added MonadZ3 instance for ReaderT. ("0xd34df00d")
* Fixed two typos in docs. (Mauro Bringolf)

## 408.1

Tested (sort of) with Z3 4.8.4.

* Added bindings to `substitute` and `isEqAST`. (Hengchu Zhang)
* Added `MonadFail` instance for `Z3`, required by GHC >=8.6. (Conal Elliott)
* Updated `Z3_get_error_msg` signature (Z3 C API 4.8.7). (Kevin Quick)
* Removed bindings to `Z3_fixedpoint_push` and `Z3_fixedpoint_pop` (Z3 C API 4.8.5). (Eric Walkingshaw)
* Replaced `z3_get_error_msg_ex` with `z3_get_error_msg` (Z3 C API 4.8.5). (Alexander Knauth)
* Added semigroups to dependencies for GHC <= 7. (Hogeyama)

## 408.0

* Enabled support for Z3 4.8. (Carlo Nucera)
    - Required removing the Inteprolation API, `z3_get_parser_error` and other functions!
* Do not crash on empty lists. (M Farkas-Dyck)
* Added binding for `Z3_mk_finite_domain_sort`. (M Farkas-Dyck)
* Implemented workaround for `Z3.Base.toBool` to work on OS X. (Matthew Doty)

By the way, you have read correctly, this new version is _408.0_.
Find more details about the new version policy in the [README](README.md).

## 4.3.1

* Fixed compatibility with base 4.11 due to SMP. (M Farkas-Dyck)

NOTE: This version didn't make it into Hackage.

## 4.3

### Fixes

* Fixed memory leak due to typo in ```Z3.Base.C```. (Deian Stefan)

### New API support

* Added partial support for _Fixedpoint_ API. (David Heath)
* Added more bindings to the _Models_ API. (Daniel Gröber)
* Added _Parser interface_ API. (Tristan Knoth)

### Misc

* After many requests, I have moved the repository to GitHub: https://github.com/IagoAbal/haskell-z3.
* From now on the revision number (aka patch level) 0 will be omitted (so x.y instead of x.y.0).

## 4.2.0

This release removes support for SMT-LIB 1.x in order to be compatible with Z3 4.6.

## 4.1.2

This minor release extends the supported quantifiers API, and adds
partial support for Z3's proof tactics.

* Improved support for theorem proving with quantifiers. (Jakub Daniel)

## 4.1.1

Another small release, made possible thanks to third-party contributions.

* Added bindings for getting the accessors of datatype constructors. (William Hallahan)
* Added bindings for declaring mutually recursive datatypes. (William Hallahan)
* Added partial support for the _Interpolation_ API. (Jakub Daniel)
* Added bindings for deconstructing function applications. (Jakub Daniel)
* Added bindings for ```simplify``` and ```simplifyEx```. (Gleb Popov)
* Some code cleanup. (Jakub Daniel and Iago Abal)

## 4.1.0

Small maintenance release that however introduces one API breaking change.

* Added bindings for the _Set_ API. (Nadia Polikarpova)
* Fix #4: Replace the now deprecated Z3_eval with Z3_model_eval.
* Fix #5: Check error codes right after an API call. (David Castro)

To fix #4 we had to change the type of ```modelEval```, which now takes
an extra ```Bool``` parameter (to force model completion).

## 4.0.0

This release brings support for the new Z3 4.x API,
and *removes* support for the old API.
We are following a new version policy, yet compatible with Haskell's PVP.
So new versions are of the form *x.y.z*,
where *x* is the version of Z3 API supported,
*y* is a major revision of the bindings,
and *z* is a minor revision of the bindings.
Consequently, we bumped the version to *4.0.0* :-).

Special thanks to Nadia Polikarpova,
who diagnosed a problem in our use of ```ForeignPtr``` finalizers,
and proposed a fix.

### Cabal package

* Relaxed dependencies, and removed upper bounds.

### New features and API functions

* Switched to Z3 4.x API.
* Reference counting is managed by the gargabe collector.
* Algebraic datatypes. (KC Sivaramakrishnan)
* ```Z3_get_ast_kind```, ```Z3_solver_check_assumptions```, ```Z3_solver_get_unsat_core```. (Nadia Polikarpova)
* ```Z3_mk_fresh_const```, ```Z3_mk_fresh_func_decl```. (KC Sivaramakrishnan)
* ```MonadFix``` instance for the ```Z3``` monad. (Pepe Iborra)
* Hspec test-suite, with just a couple of tests, more to come...
* A few more helpers for creating numerals, evaluating expressions, and so on.
* Module ```Z3.Base.C```, a very low-level interface to Z3 C API, is now exported.
  Just in case you want to write your own marshaling layer ;-)

### Removals and API-breaking changes

* No more support for the old Z3 3.x API.
* Removed ```Z3.Lang``` module, this should re-appear as a separate package soon.
* ```MonadZ3``` instances must be ```Applicative```.
* Numerals API is now closer to Z3 C API.
  So, for instance, ```mkInt``` now takes both an integer and a sort.
  You can use ```mkInteger``` or ```mkIntNum``` instead.
* ```Z3.Monad.assertCnstr``` is now called ```Z3.Monad.assert```.

### Refactoring and clean-up

* Reduce boilerplate in Z3.Base.
* Fix docs to distinguish Z3 API functions and helpers.

## 0.3.2

Thanks to Scott West and Nadia Polikarpova for contributing to this release.

### Fixes

* Fixed _solverCheckAndGetModel_ to return a model from an unknown satisfiability result, if one exists. (Nadia Polikarpova)
* Fixed mkMap API function to do **not** take the number of arrays as an input parameter, this should be equals to the length of the input array list.
  Strictly speaking this is a minor break of the API but it was considered a but and therefore fixed.

### Refactoring and clean-up

* Reduced marshalling boilerplate in Z3.Base.
  This is a very important step towards supporting Z3 4.0 API.
* Improved API documentation.
  If you are having difficulties due to (presumably) poor API or source documentation, please let us know.

### New features

* Support running multiple queries under the same logical context, using _evalZ3WithEnv_. (Scott West)

### Newly supported API functions

* Many solver-related API functions (Scott West and Nadia Polikarpova).
* z3_mk_forall_const (Scott West), z3_mk_exists_const.
* Z3_get_version.

### Deprecations

* We deprecate _showContext_, _showModel_ and _getModel_; since we prefer to avoid deviations from Z3 API names.
  Use _contextToString_, _modelToString_ and _checkAndGetModel_ instead.
* We deprecate the Z3.Lang interface, that will be moved to a separate pacakge.
  Few people is using this (_DSL_ish) interface and it is arguably more unstable than Z3.Base or Z3.Monad.
  It also introduces dependencies with GHC extensions like type families that we prefer to avoid in a more stable package.

### Misc

* Add SMT to categories in z3.cabal.