14#ifndef OR_TOOLS_SAT_DRAT_CHECKER_H_
15#define OR_TOOLS_SAT_DRAT_CHECKER_H_
23#include "absl/container/flat_hash_set.h"
24#include "absl/strings/string_view.h"
25#include "absl/types/span.h"
103 int first_literal_index;
129 std::vector<ClauseIndex> deleted_clauses;
132 bool is_needed_for_proof =
false;
136 bool tmp_is_needed_for_proof_step =
false;
138 Clause(
int first_literal_index,
int num_literals);
141 bool IsDeleted(ClauseIndex clause_index)
const;
150 struct LiteralToAssign {
158 ClauseIndex source_clause_index;
164 explicit ClauseHash(
DratChecker* checker) : checker(checker) {}
165 std::size_t operator()(
const ClauseIndex clause_index)
const;
171 explicit ClauseEquiv(
DratChecker* checker) : checker(checker) {}
172 bool operator()(
const ClauseIndex clause_index1,
173 const ClauseIndex clause_index2)
const;
177 ClauseIndex AddClause(absl::Span<const Literal> clause);
180 void RemoveLastClause();
183 absl::Span<const Literal> Literals(
const Clause& clause)
const;
189 void WatchClause(ClauseIndex clause_index);
196 bool HasRupProperty(ClauseIndex num_clauses,
197 absl::Span<const Literal> clause);
207 ClauseIndex AssignAndPropagate(ClauseIndex num_clauses, Literal
literal,
208 ClauseIndex source_clause_index);
215 void MarkAsNeededForProof(Clause* clause);
220 std::vector<std::vector<Literal>> GetClausesNeededForProof(
221 ClauseIndex begin, ClauseIndex
end)
const;
223 void LogStatistics(int64_t duration_nanos)
const;
227 ClauseIndex first_infered_clause_index_;
236 absl::flat_hash_set<ClauseIndex, ClauseHash, ClauseEquiv> clause_set_;
239 std::vector<Literal> literals_;
249 std::vector<Literal> assigned_;
252 VariablesAssignment assignment_;
266 std::vector<LiteralToAssign> high_priority_literals_to_assign_;
270 std::vector<LiteralToAssign> low_priority_literals_to_assign_;
285 std::vector<ClauseIndex> single_literal_clauses_;
289 std::vector<ClauseIndex> unit_stack_;
292 VariablesAssignment tmp_assignment_;
313bool Resolve(absl::Span<const Literal> clause,
314 absl::Span<const Literal> other_clause,
315 Literal complementary_literal, VariablesAssignment* assignment,
316 std::vector<Literal>* resolvent);
327 DratChecker* drat_checker);
338 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
SharedClausesManager * clauses
DEFINE_STRONG_INDEX_TYPE(ClauseIndex)
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)
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