Use BoundInference in nonlinear extension (#5359)
authorGereon Kremer <gereon.kremer@cs.rwth-aachen.de>
Fri, 30 Oct 2020 08:07:53 +0000 (09:07 +0100)
committerGitHub <noreply@github.com>
Fri, 30 Oct 2020 08:07:53 +0000 (09:07 +0100)
commit42fe4ae0e866d78dd7743214eb1b1ccb92900c5a
treed755a372928ac084d82b84ab4078a3e749c25f89
parent21fd193bdaad1a952845326aa1c84654cfce1503
Use BoundInference in nonlinear extension (#5359)

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.
12 files changed:
src/theory/arith/bound_inference.cpp
src/theory/arith/bound_inference.h
src/theory/arith/inference_manager.cpp
src/theory/arith/inference_manager.h
src/theory/arith/nl/cad_solver.cpp
src/theory/arith/nl/icp/contraction_origins.cpp
src/theory/arith/nl/icp/contraction_origins.h
src/theory/arith/nl/icp/icp_solver.cpp
src/theory/arith/nl/icp/icp_solver.h
src/theory/arith/nl/nonlinear_extension.cpp
src/theory/arith/nl/nonlinear_extension.h
src/theory/arith/nl/poly_conversion.cpp