summaryrefslogtreecommitdiff
path: root/src/theory/arith/nl/cad_solver.cpp
AgeCommit message (Collapse)Author
2020-11-29Merge remote-tracking branch 'origin/master' into fixClangWarningsAndres Noetzli
2020-11-29updateAndres Noetzli
2020-11-26Make CAD solver work for empty set of assertions (#5535)Gereon Kremer
When called with no assertions, the CAD solver would still go to work and then segfault when trying to access the first variable. This PR adds an explicit check for this case and adds a regression. Fixes #5534 .
2020-10-30Use BoundInference in nonlinear extension (#5359)Gereon Kremer
Currently the NonlinearExtensions uses a custom logic to eliminate redundant bounds and perform tightening on bound integer terms. As these replacements are not recorded, incorrect conflicts are being sent to the InferenceManager. This PR replaces this logic by the BoundInference class and fixes the issues with conflicts by - allowing BoundInference to collect bounds on arbitrary left hand sides (instead of only variables), - improving origin tracking in BoundInference by explicitly constructing the new bound constraints, - adding tightening of integer bounds, - emitting lemmas instead of conflicts, and finally - replacing the current logic by using the BoundInference class.
2020-10-27Enable --nl-cad by default (#5345)Gereon Kremer
This PR enables `--nl-cad` for QF_NRA (and QF_UFNRA) by default to improve nonlinear arithmetic solving. Furthermore, it takes care of disabling it when libpoly is not available. It also adds a fix to the CadSolver that avoids incorrect SATs in the presence of theory combination.
2020-10-01Allow to use the initial assignment for CAD (#5177)Gereon Kremer
While the CAD subsolver already provided for a way to use the linear model to seed the model search, it was not actually used yet. This PR now does use it, though it is disabled by a Boolean flag.
2020-09-22Update copyright header script to support CMake and Python files (#5067)Mathias Preiner
This PR updates the update-copyright.pl script to also update/add copyright headers to CMake specific files. It further fixes a small typo in the header.
2020-09-04Fix non-lib-poly-build issues (#5028)Haniel Barbosa
2020-09-04Use arith::InferenceManager for CAD lemmas (#5015)Gereon Kremer
This makes the CAD solver use the new arith::InferenceManager instead of the previously used lemma collection scheme.
2020-09-03Basic integration of arith::InferenceManager (#4999)Gereon Kremer
This PR adds a first basic integration of the arith::InferenceManager into the arithmetic theory and the nonlinear extension in particular. While the lemma collection mechanism (in the nonlinear extension) remains unchanged, the lemmas are ultimately not directly pushed to the output channel but instead added to the inference manager. Additionally, we no longer use the cache within the nonlinear extension but instead rely on the inference manager. This PR is based on #4960.
2020-09-02Add ArithLemma and arith::InferenceManager (#4960)Gereon Kremer
This PR adds a new ArithLemma that is essentiall NlLemma, but derived from the new theory::Lemma and meant to be used all across the arithmetic theory. Also, based on theory::InferenceManagerBuffered this PR adds arith::InferenceManager that shall become the sole interface between the arithmetic theory and the OutputChannel.
2020-08-28(cad-solver) Fixed excluding lemma generation. (#4958)Gereon Kremer
The lemma generation for partial cad checks had a number of issues that have been fixed in this PR. The previous version had both soundness issues and a very naive approach to handling algebraic numbers. This new version is sound (fingers crossed) and allows to construct more precise, but also more complex lemmas. To avoid constructing very large lemmas, a (somewhat arbitrary) limit based on the size of coefficients was added.
2020-08-19(cad solver) Add a partial check method. (#4904)Gereon Kremer
This PR extends the CAD-based solver to enable partial checks. Essentially, we only collect the first interval that is excluded for the first variable and return that one as a lemma. This does not leave a lot of choice on "how partial" the check should be, but it is fairly easy to implement and does not add additional overhead. It also fixes some confusion in excluding_interval_to_lemma...
2020-08-04Add dummy returns if libpoly is unavailable. (#4845)Gereon Kremer
This PR adds dummy return statements do CadSolver in case libpoly is not available.
2020-08-04Add CAD-based solver (#4834)Gereon Kremer
Based on #4774, this PR adds a new CadSolver class that allows the NonlinearExtension to actually employ the CAD-based method. In more detail: add --nl-cad option add CadSolver class that wraps cad::CDCAC with support for checks, model construction and conflict generation add new Inference types for the NlLemma class use CadSolver in NonlinearExtension (if --nl-cad is given)
generated by cgit on debian on lair
contact matthew@masot.net with questions or feedback