Use side effect utility for non-linear lemmas (#3780)
authorAndrew Reynolds <andrew.j.reynolds@gmail.com>
Wed, 26 Feb 2020 22:39:39 +0000 (16:39 -0600)
committerGitHub <noreply@github.com>
Wed, 26 Feb 2020 22:39:39 +0000 (16:39 -0600)
commit8e476f1efeb7f8b3188ea1795ccd27f98f41e4d2
tree518e5e881b33aa2fdaa409aa03a814713a43b69b
parent2405b98feeed522d7304207280591a71ee6c319a
Use side effect utility for non-linear lemmas (#3780)

Fixes #3647.

Previously, when doing incremental linearization for transcedental functions, we would add points to the list of secant points at the time when linearization lemmas were generated. However, our strategy has been updated such that lemmas may be abandoned (say in the case that a higher priority lemma is found). Thus, our list of secant points had spurious points corresponding to lemmas that weren't sent. This led to assertion failures, and likely led to gaps in our linearization, hindering our ability to say sat/unsat.

This PR introduces a "lemma side effect" class to ensure that modifications to the state of the nonlinear solver are in sync with the lemmas we send out.
src/CMakeLists.txt
src/theory/arith/nl_lemma_utils.h [new file with mode: 0644]
src/theory/arith/nonlinear_extension.cpp
src/theory/arith/nonlinear_extension.h
test/regress/CMakeLists.txt
test/regress/regress1/nl/issue3647.smt2 [new file with mode: 0644]