Updates to theory preprocess equality (#5776)
authorAndrew Reynolds <andrew.j.reynolds@gmail.com>
Thu, 14 Jan 2021 13:28:55 +0000 (07:28 -0600)
committerGitHub <noreply@github.com>
Thu, 14 Jan 2021 13:28:55 +0000 (07:28 -0600)
commiteb6155c5f078a26b7cdddddad6e209fad0f825f8
treebe9519b18c6eb61e69af0966c4339c483a534af0
parent9fd4e5758df5e1085a3d6c80e3a6162d61b36566
Updates to theory preprocess equality (#5776)

This makes 3 changes related to arithmetic preprocessing of equalities which revert to the original behavior of master before a129c57.

For background, the commit a129c57 unintentionally changed the default behavior slightly in 3 ways (each corrected in this PR), which led a performance regression on QF_LIA in current master.

The 3 fixes are:
(1) Rewrite equalities should be applied as a post-rewrite, not a pre-rewrite in the theory-rewrite-eq preprocessing pass. This is particularly important for equalities between ITE terms that contain other equalities recursively.
(2) theory-rewrite-eq should apply after rewriting and just before the normal theory preprocessing.
(3) The arith-brab test should call ppRewrite on the arithmetic equality it introduces, as it has a choice of whether to eliminate the equality before the lemma is sent out.
src/preprocessing/passes/theory_rewrite_eq.cpp
src/smt/process_assertions.cpp
src/theory/arith/theory_arith_private.cpp
src/theory/engine_output_channel.cpp