Make nonlinear extension account for relevant term set (#6147)
authorAndrew Reynolds <andrew.j.reynolds@gmail.com>
Mon, 15 Mar 2021 19:08:03 +0000 (14:08 -0500)
committerGitHub <noreply@github.com>
Mon, 15 Mar 2021 19:08:03 +0000 (19:08 +0000)
commit216f3c9fb07a08909942b91a2a4739cd178f5a72
tree00de2d826d1b4ad6124856536923a2463c4d8641
parent6cbb7824dabd7ab8e85472a22ba30ad2498afebc
Make nonlinear extension account for relevant term set (#6147)

This fixes a subtle issue with non-linear and theory combination.

It currently could use irrelevant terms preregistered to the ExtTheory for its model-based refinement. This means that the non-linear extension could accidentally modify values for terms that are not included in its term set, violating theory combination.

In particular, in the minimized example from #5662, (* a k) was a stale term in ExtTheory, and non-linear extension falsely believed that a was a term whose model value could be modified, since moreover a was not a shared term. In reality, a was not a shared term since it only was registered to UF.

Fixes #5662.
src/theory/arith/nl/nonlinear_extension.cpp
src/theory/arith/nl/nonlinear_extension.h
src/theory/arith/theory_arith.cpp
test/regress/CMakeLists.txt
test/regress/regress1/nl/issue5662-nl-tc-min.smt2 [new file with mode: 0644]
test/regress/regress1/nl/issue5662-nl-tc.smt2 [new file with mode: 0644]