ICP-based solver for nonlinear arithmetic (#5017)
authorGereon Kremer <gereon.kremer@cs.rwth-aachen.de>
Tue, 22 Sep 2020 15:49:46 +0000 (17:49 +0200)
committerGitHub <noreply@github.com>
Tue, 22 Sep 2020 15:49:46 +0000 (17:49 +0200)
commite969318f12d4e8ee01b12933e9e60fafafd96963
tree0157471f7eadbcad561088c6842c5e1408b57dec
parent71ab2d154b2f8b983562c495fe589cdd5a3a9862
ICP-based solver for nonlinear arithmetic (#5017)

This PR adds a new icp-based solver to be integrated into the nonlinear extension.
It is not meant to be used as a stand-alone ICP solver. It does not implement splits (only propagations) and implements a rather aggressive budget mechanism that aims to quickly stop propagation to allow other solvers to take over. Additionally, it enforces a maximum bit size to avoid divergence.
22 files changed:
src/CMakeLists.txt
src/options/arith_options.toml
src/theory/arith/inference_id.h
src/theory/arith/nl/icp/candidate.cpp [new file with mode: 0644]
src/theory/arith/nl/icp/candidate.h [new file with mode: 0644]
src/theory/arith/nl/icp/contraction_origins.cpp [new file with mode: 0644]
src/theory/arith/nl/icp/contraction_origins.h [new file with mode: 0644]
src/theory/arith/nl/icp/icp_solver.cpp [new file with mode: 0644]
src/theory/arith/nl/icp/icp_solver.h [new file with mode: 0644]
src/theory/arith/nl/icp/intersection.cpp [new file with mode: 0644]
src/theory/arith/nl/icp/intersection.h [new file with mode: 0644]
src/theory/arith/nl/icp/interval.h [new file with mode: 0644]
src/theory/arith/nl/icp/variable_bounds.cpp [new file with mode: 0644]
src/theory/arith/nl/icp/variable_bounds.h [new file with mode: 0644]
src/theory/arith/nl/nonlinear_extension.cpp
src/theory/arith/nl/nonlinear_extension.h
src/theory/arith/nl/poly_conversion.cpp
src/theory/arith/nl/poly_conversion.h
src/theory/arith/normal_form.cpp
src/theory/arith/normal_form.h
src/theory/theory_inference_manager.cpp
src/theory/theory_inference_manager.h