Simplify and fix decision engine's handling of skolem definitions (#5888)
authorAndrew Reynolds <andrew.j.reynolds@gmail.com>
Fri, 12 Feb 2021 09:45:29 +0000 (03:45 -0600)
committerGitHub <noreply@github.com>
Fri, 12 Feb 2021 09:45:29 +0000 (10:45 +0100)
commitd47a8708171f1cf488fe9ce05f56f2566db53093
treed9c1e5b69d5acb3d44483c42750aa4de4b01082c
parentdd89a91a12afb86ae34497f2e8b2ebe95ec377a5
Simplify and fix decision engine's handling of skolem definitions (#5888)

This PR changes the front end of prop engine to distinguish input formulas from skolem definitions, which is required by the decision engine. This PR breaks the dependency of PropEngine on the AssertionsPipeline, as now the determining of whether an input formula is a skolem definition is handled externally, in SmtSolver.

With this PR, we should not be required to satisfy skolem definitions that are not relevant based on the techniques already implemented in the decision engine. Currently, we are not distinguishing input formulas from skolem definitions properly, meaning we assert more literals than we need to.

This also simplifies related interfaces within decision engine.

We should test this PR with --decision=justification on SMT-LIB.
13 files changed:
src/decision/decision_engine.cpp
src/decision/decision_engine.h
src/decision/decision_strategy.h
src/decision/justification_heuristic.cpp
src/decision/justification_heuristic.h
src/preprocessing/assertion_pipeline.h
src/preprocessing/passes/ite_removal.cpp
src/preprocessing/passes/theory_preprocess.cpp
src/prop/prop_engine.cpp
src/prop/prop_engine.h
src/prop/theory_proxy.cpp
src/smt/smt_solver.cpp
src/smt/term_formula_removal.h