Connect the relevance manager to TheoryEngine and use it in non-linear arithmetic...
authorAndrew Reynolds <andrew.j.reynolds@gmail.com>
Fri, 21 Aug 2020 17:08:14 +0000 (12:08 -0500)
committerGitHub <noreply@github.com>
Fri, 21 Aug 2020 17:08:14 +0000 (12:08 -0500)
commitb8301cde27c455c8da3e9017072a577a0816939b
tree816d1cccdda0625419b1b088644bafb85a857d14
parent905dc2b51fd0145e0bb69a166c06a1731ef4c44b
Connect the relevance manager to TheoryEngine and use it in non-linear arithmetic (#4930)

This PR activates the use of the relevance manager in TheoryEngine and makes use of it (via Valuation) in the non-linear extension in arith. It removes a deprecated hack (addTautology) for doing this.

This addresses CVC4/cvc4-projects#113.

Note that the best method for relevance is interleaving, where roughly you gain on SMT-LIB:

QF_NIA: +484-53 unsat +792-440 sat
QF_NRA: +32-19 unsat +57-23 sat
However, this PR does not (yet) enable this method by default.

Note that more work is necessary to determine which lemmas require NEEDS_JUSTIFY, this PR identifies 2 cases of lemmas that need justification (skolemization and strings reductions). Regardless, the use of the relevance manager is limited to non-linear arithmetic for now, which is only able to answer "sat" when only arithmetic is present in assertions.
20 files changed:
src/options/arith_options.toml
src/options/theory_options.toml
src/smt/set_defaults.cpp
src/theory/arith/nl/nl_model.cpp
src/theory/arith/nl/nl_model.h
src/theory/arith/nl/nonlinear_extension.cpp
src/theory/arith/nl/nonlinear_extension.h
src/theory/output_channel.cpp
src/theory/output_channel.h
src/theory/quantifiers_engine.cpp
src/theory/strings/inference_manager.cpp
src/theory/theory_engine.cpp
src/theory/theory_engine.h
src/theory/valuation.cpp
src/theory/valuation.h
test/regress/regress0/quantifiers/cegqi-nl-simp.cvc
test/regress/regress1/nl/issue3647.smt2
test/regress/regress1/nl/sin1-deq-sat.smt2
test/regress/regress1/nl/sin1-sat.smt2
test/regress/regress1/sygus/issue3648.smt2