14#ifndef OR_TOOLS_SAT_DRAT_CHECKER_H_
15#define OR_TOOLS_SAT_DRAT_CHECKER_H_
21#include "absl/container/flat_hash_set.h"
22#include "absl/types/span.h"
100 int first_literal_index;
126 std::vector<ClauseIndex> deleted_clauses;
129 bool is_needed_for_proof =
false;
133 bool tmp_is_needed_for_proof_step =
false;
135 Clause(
int first_literal_index,
int num_literals);
138 bool IsDeleted(ClauseIndex clause_index)
const;
147 struct LiteralToAssign {
155 ClauseIndex source_clause_index;
161 explicit ClauseHash(
DratChecker* checker) : checker(checker) {}
162 std::size_t operator()(
const ClauseIndex clause_index)
const;
168 explicit ClauseEquiv(
DratChecker* checker) : checker(checker) {}
169 bool operator()(
const ClauseIndex clause_index1,
170 const ClauseIndex clause_index2)
const;
174 ClauseIndex AddClause(absl::Span<const Literal> clause);
177 void RemoveLastClause();
180 absl::Span<const Literal> Literals(
const Clause& clause)
const;
186 void WatchClause(ClauseIndex clause_index);
193 bool HasRupProperty(ClauseIndex num_clauses,
194 absl::Span<const Literal> clause);
204 ClauseIndex AssignAndPropagate(ClauseIndex num_clauses, Literal
literal,
205 ClauseIndex source_clause_index);
212 void MarkAsNeededForProof(Clause* clause);
217 std::vector<std::vector<Literal>> GetClausesNeededForProof(
218 ClauseIndex begin, ClauseIndex
end)
const;
220 void LogStatistics(int64_t duration_nanos)
const;
224 ClauseIndex first_infered_clause_index_;
233 absl::flat_hash_set<ClauseIndex, ClauseHash, ClauseEquiv> clause_set_;
236 std::vector<Literal> literals_;
246 std::vector<Literal> assigned_;
249 VariablesAssignment assignment_;
263 std::vector<LiteralToAssign> high_priority_literals_to_assign_;
267 std::vector<LiteralToAssign> low_priority_literals_to_assign_;
282 std::vector<ClauseIndex> single_literal_clauses_;
286 std::vector<ClauseIndex> unit_stack_;
289 VariablesAssignment tmp_assignment_;
310bool Resolve(absl::Span<const Literal> clause,
311 absl::Span<const Literal> other_clause,
312 Literal complementary_literal, VariablesAssignment* assignment,
313 std::vector<Literal>* resolvent);
324 DratChecker* drat_checker);
335 const std::vector<std::vector<Literal>>& clauses,
void AddInferedClause(absl::Span< const Literal > clause)
void DeleteClause(absl::Span< const Literal > clause)
Status Check(double max_time_in_seconds)
std::vector< std::vector< Literal > > GetUnsatSubProblem() const
void AddProblemClause(absl::Span< const Literal > clause)
int num_variables() const
std::vector< std::vector< Literal > > GetOptimizedProof() const
const LiteralIndex kNoLiteralIndex(-1)
bool PrintClauses(const std::string &file_path, SatFormat format, const std::vector< std::vector< Literal > > &clauses, int num_variables)
bool Resolve(absl::Span< const Literal > clause, absl::Span< const Literal > other_clause, Literal complementary_literal, VariablesAssignment *assignment, std::vector< Literal > *resolvent)
DEFINE_INT_TYPE(ClauseIndex, int)
bool AddInferedAndDeletedClauses(const std::string &file_path, DratChecker *drat_checker)
bool ContainsLiteral(absl::Span< const Literal > clause, Literal literal)
bool AddProblemClauses(const std::string &file_path, DratChecker *drat_checker)
const ClauseIndex kNoClauseIndex(-1)
Collection of objects used to extend the Constraint Solver library.
std::optional< int64_t > end