(proof-new) Refactor theory preprocessing (#5835)
authorAndrew Reynolds <andrew.j.reynolds@gmail.com>
Tue, 2 Feb 2021 20:48:59 +0000 (14:48 -0600)
committerGitHub <noreply@github.com>
Tue, 2 Feb 2021 20:48:59 +0000 (14:48 -0600)
commit3393c0c828b44f88c92e52a2b49d8a572b2a9b93
tree4067ab99a209911548ccaa5b0413a1e016c27845
parent478638868ec11c18882b9036850cafe4ff36f4bb
(proof-new) Refactor theory preprocessing (#5835)

This simplifies our algorithm for theory preprocessing. The motivation is two-fold:
(1) Proofs are currently incorrect in rare cases due to incorrectly tracking pre vs post rewrites.
(2) We can avoid traversing Boolean connectives with term formula removal. Note that this PR relies on the observation that term formula removal leaves Boolean structure unchanged and can apply locally to theory atoms.

Furthermore, notice that our handling of lemmas generated by term formula removal is now more uniform. In the second algorithm, term formula removal is not applied to fixed point anymore. In other words, we do not remove skolems from lemmas generated by term formula removal recursively. Instead, since lemmas are theory-preprocessed recursively, we use the fixed point that runs outside the above algorithm instead of relying on the inner fixed point in term formula removal.

This PR resolves several open issues with proof production on proof-new.

I will performance test this change on SMT-LIB.
src/theory/theory_preprocessor.cpp
src/theory/theory_preprocessor.h