Fix remove term formula policy for terms beneath quantifiers (#5497)
authorAndrew Reynolds <andrew.j.reynolds@gmail.com>
Fri, 20 Nov 2020 23:49:27 +0000 (17:49 -0600)
committerGitHub <noreply@github.com>
Fri, 20 Nov 2020 23:49:27 +0000 (17:49 -0600)
commit6edbfc98df1e9302f5051e33accc328ad7250c2b
tree773ca11be3344097fbab85211c1fa2459b20105e
parent6a02b2e28ee8d0560c923eaf0073c2fdce8fbfa2
Fix remove term formula policy for terms beneath quantifiers (#5497)

Now that extended arithmetic symbols are not eliminated during expandDefinitions, this allowed for a chain of events that would not apply theory preprocessing on certain terms.

In particular, a term t would not have theory preprocessing applied to it if it was a strict subterm of ITE-term s that occurred in a term position in a quantified formula body, and s did not have free variables. In this case, term formula removal would add a lemma corresponding to the ITE skolem definition, whose subterms did not have theory preprocessing applied. This meant that a (div a d) term was not being preprocessed in #5482, leading to solution unsoundness.

This changes the policy in term formula removal to be in sync with theory preprocessing: term formula removal and theory preprocessing only apply to terms that are not beneath quantifiers. In particular, this means that ground terms in quantifier bodies are left untouched until they are introduced e.g. by instantiation.

This fixes the solution soundness issue (fixes #5482).
src/smt/term_formula_removal.cpp
src/theory/theory_engine.cpp
src/theory/theory_preprocessor.cpp
test/regress/CMakeLists.txt
test/regress/regress1/quantifiers/issue5482-rtf-no-fv.smt2 [new file with mode: 0644]