diff options
author | Haniel Barbosa <hanielbbarbosa@gmail.com> | 2021-04-22 11:33:38 -0300 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-04-22 09:33:38 -0500 |
commit | bc928d24d7454d81f39006b4129a29286fcd10eb (patch) | |
tree | 7daf38a8285dc7aad89ae61666e61809cecd8912 /src/prop/prop_engine.cpp | |
parent | 3527400d2af35d96a47971db83891b31c47f57ef (diff) |
Reconciling proofs and unsat cores (#6405)
This commit changes how defaults are set and how the SMT solver is initialized so that proofs can be used fully with (new) unsat cores. Three modes of unsat cores are established now:
the upcoming assumption-based cores, which are incompatible with producing proofs (but enable proofs for preprocessing)
cores based on the SAT proof, which are incompatible with producing proofs (but enable proofs for preprocessing and the SAT solver)
cores based on the full proof, which are unrestricted
All the modes activate proofs but lead to errors if the user requires proofs but is not in the full proofs mode for cores.
Diffstat (limited to 'src/prop/prop_engine.cpp')
-rw-r--r-- | src/prop/prop_engine.cpp | 9 |
1 files changed, 6 insertions, 3 deletions
diff --git a/src/prop/prop_engine.cpp b/src/prop/prop_engine.cpp index 2eaa3a812..646da84b2 100644 --- a/src/prop/prop_engine.cpp +++ b/src/prop/prop_engine.cpp @@ -122,7 +122,7 @@ PropEngine::PropEngine(TheoryEngine* te, d_ppm.reset( new PropPfManager(userContext, pnm, d_satSolver, d_pfCnfStream.get())); } - else if (options::unsatCores()) + else if (options::unsatCoresMode() == options::UnsatCoresMode::OLD_PROOF) { ProofManager::currentPM()->initCnfProof(d_cnfStream, userContext); } @@ -246,8 +246,11 @@ void PropEngine::assertTrustedLemmaInternal(theory::TrustNode trn, Node node = trn.getNode(); Debug("prop::lemmas") << "assertLemma(" << node << ")" << std::endl; bool negated = trn.getKind() == theory::TrustNodeKind::CONFLICT; - Assert(!isProofEnabled() || trn.getGenerator() != nullptr - || options::unsatCores() || options::unsatCoresNew()); + Assert( + !isProofEnabled() || trn.getGenerator() != nullptr + || options::unsatCores() + || (options::unsatCores() + && options::unsatCoresMode() != options::UnsatCoresMode::FULL_PROOF)); assertInternal(trn.getNode(), negated, removable, false, trn.getGenerator()); } |