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_;
310 bool 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,
341 #endif // OR_TOOLS_SAT_DRAT_CHECKER_H_ std::vector< std::vector< Literal > > GetOptimizedProof() const
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 PrintClauses(const std::string &file_path, SatFormat format, const std::vector< std::vector< Literal >> &clauses, int num_variables)
std::vector< std::vector< Literal > > GetUnsatSubProblem() const
void DeleteClause(absl::Span< const Literal > clause)
Status Check(double max_time_in_seconds)
const ClauseIndex kNoClauseIndex(-1)
void AddProblemClause(absl::Span< const Literal > clause)
void AddInferedClause(absl::Span< const Literal > clause)
Collection of objects used to extend the Constraint Solver library.
const LiteralIndex kNoLiteralIndex(-1)
bool AddProblemClauses(const std::string &file_path, DratChecker *drat_checker)
int num_variables() const
bool Resolve(absl::Span< const Literal > clause, absl::Span< const Literal > other_clause, Literal complementary_literal, VariablesAssignment *assignment, std::vector< Literal > *resolvent)