}
}
+bool ProofManager::unsatCoreAvailable() const {
+ return d_satProof->derivedEmptyClause();
+}
+
void ProofManager::getLemmasInUnsatCore(theory::TheoryId theory, std::vector<Node> &lemmas) {
Assert(PROOF_ON(), "Cannot compute unsat core when proofs are off");
+ Assert(unsatCoreAvailable(), "Cannot get unsat core at this time. Mabye the input is SAT?" );
d_satProof->constructProof();
assertions_iterator end_unsat_core() const { return d_outputCoreFormulas.end(); }
size_t size_unsat_core() const { return d_outputCoreFormulas.size(); }
+ bool unsatCoreAvailable() const;
void getLemmasInUnsatCore(theory::TheoryId theory, std::vector<Node> &lemmas);
int nextId() { return d_nextId++; }
void constructProof(ClauseId id);
void constructProof() { constructProof(d_emptyClauseId); }
void collectClauses(ClauseId id);
+ bool derivedEmptyClause() const;
prop::SatClause* buildClause(ClauseId id);
virtual void printResolution(ClauseId id, std::ostream& out,
return clause;
}
+template <class Solver>
+bool TSatProof<Solver>::derivedEmptyClause() const {
+ return hasResolutionChain(d_emptyClauseId);
+}
+
template <class Solver>
void TSatProof<Solver>::collectClauses(ClauseId id) {
if (d_seenInputs.find(id) != d_seenInputs.end() ||