Only consider relevant terms for integer branches (#6181)
authorGereon Kremer <gereon.kremer@cs.rwth-aachen.de>
Wed, 24 Mar 2021 15:24:25 +0000 (16:24 +0100)
committerGitHub <noreply@github.com>
Wed, 24 Mar 2021 15:24:25 +0000 (15:24 +0000)
commitcfe207563479a1e9e13d52bdd93446a8c816636a
treeb627d7b238df9ba500cc63ef7ddee62f3bc96d3f
parent31bba4ba83354f41c756e9800489672ff1c9711c
Only consider relevant terms for integer branches (#6181)

Linear arithmetic simply tried to branch on the first integer variable that had a non-integral assignment.
If it holds stale variables that are not part of the current input, these branches can be emitted and are processed by the solver, but the resulting new assertions will not be considered relevant and thus not added to the theory.
As it still triggers a new theory check, linear arithmetic repeats the same procedure and causes an infinite loop.
This PR explicitly tracks the currently relevant nodes by storing all preregistered nodes and only allows branching on variables from this set.
Fixes #6146.
src/theory/arith/theory_arith_private.cpp
src/theory/arith/theory_arith_private.h
test/regress/CMakeLists.txt
test/regress/regress0/arith/integers/issue6146-stale-vars.smt2 [new file with mode: 0644]