Add finishInit method to PropEngine (#4895)
authorAndrew Reynolds <andrew.j.reynolds@gmail.com>
Sat, 15 Aug 2020 11:41:28 +0000 (06:41 -0500)
committerGitHub <noreply@github.com>
Sat, 15 Aug 2020 11:41:28 +0000 (06:41 -0500)
commitdc2748198fb2c404b31a144fcad67379b3089e3d
tree24b2d5335af2f1c84b8e51ca9284d8a7fde49216
parent3b230077d51c8445328f0b5d5ff94bbd988d1c83
Add finishInit method to PropEngine (#4895)

This changes an initialization issue in regarding PropEngine and TheoryEngine.

In the constructor for PropEngine, we convert and assert literals for true and false to CNF stream. Doing so triggers several things, including calls that preregister these literals with the associated TheoryEngine. This means that literals are preregistered to TheoryEngine before it has been fully initialized (TheoryEngine::finishInit). This is not currently an issue since this only involves modules that are constructed statically (e.g. SharedTermsDatabase), but this will lead to issues when the TheoryEngine is more configurable.

The solution is to additionally have a PropEngine::finishInit, which is called after TheoryEngine::finishInit, which does this step. The PropEngine should not assert anything to CNF before this method is called.
src/prop/prop_engine.cpp
src/prop/prop_engine.h
src/smt/smt_solver.cpp