Make equality solver the entry point for all equality engine explanations in arithmet...
authorAndrew Reynolds <andrew.j.reynolds@gmail.com>
Wed, 4 May 2022 19:44:39 +0000 (14:44 -0500)
committerGitHub <noreply@github.com>
Wed, 4 May 2022 19:44:39 +0000 (19:44 +0000)
commit65e8b07964b4115bedee139cb88e5f866b3a8df6
treeaa87e81cadefdff33bceeb3e06b345df15a2b490
parent3db254027b7e73d009dc7e587b4582b3372bb5ad
Make equality solver the entry point for all equality engine explanations in arithmetic (#8719)

This makes it so that EqSolver is the main entry point for all equality engine explanations in arithmetic; it still defers to the CongruenceManager to compute these explanations.

To do this, when the core linear solver depends on an explanation from the equality engine, it instead provides a placeholder. Since explanations are computed recursively in TheoryEngine, this will trigger another call to TheoryArith::explain, which will then be handled by the EqSolver. Thus, there should be no net effect on the overall explanations in this commit.

This is work towards eliminating the dependency of the linear solver on the equality engine.
src/theory/arith/equality_solver.cpp
src/theory/arith/linear/congruence_manager.cpp
src/theory/arith/linear/congruence_manager.h
src/theory/arith/linear/constraint.cpp
src/theory/arith/linear/constraint.h
src/theory/arith/linear/theory_arith_private.cpp
src/theory/arith/theory_arith.cpp