Avoid substituting Boolean term variables (#3022)
authorAndres Noetzli <andres.noetzli@gmail.com>
Mon, 27 May 2019 23:36:17 +0000 (16:36 -0700)
committerGitHub <noreply@github.com>
Mon, 27 May 2019 23:36:17 +0000 (16:36 -0700)
commit60173f62a82b4d71f2fbac51880d44d883ae5109
tree7063c98d4da6405545ffe25ca3962f222fcebe12
parent1c1c178db1755a441792d84465dcb8397f1f2011
Avoid substituting Boolean term variables (#3022)

Fixes #3020. Boolean terms that appear in other terms, e.g. a Boolean
array index, are replaced by `BOOLEAN_TERM_VARIABLE`s to make sure that
they are handled properly in theory combination. When doing this
replacement, an equality of the form `(= <Boolean term> <Boolean term
variable)` is added to the assertions. The problem was that
`Theory::ppAssert()` would derive a substitution when this equality was
registered. The commit fixes the problem by not allowing to add
substitutions for `BOOLEAN_TERM_VARIABLE`s.
src/theory/theory.cpp
test/regress/CMakeLists.txt
test/regress/regress0/arrays/bug3020.smt2 [new file with mode: 0644]