14 #ifndef OR_TOOLS_SAT_DRAT_CHECKER_H_
15 #define OR_TOOLS_SAT_DRAT_CHECKER_H_
20 #include "absl/container/flat_hash_set.h"
21 #include "absl/types/span.h"
99 int first_literal_index;
125 std::vector<ClauseIndex> deleted_clauses;
128 bool is_needed_for_proof =
false;
132 bool tmp_is_needed_for_proof_step =
false;
134 Clause(
int first_literal_index,
int num_literals);
137 bool IsDeleted(ClauseIndex clause_index)
const;
146 struct LiteralToAssign {
154 ClauseIndex source_clause_index;
160 explicit ClauseHash(
DratChecker* checker) : checker(checker) {}
161 std::size_t operator()(
const ClauseIndex clause_index)
const;
167 explicit ClauseEquiv(
DratChecker* checker) : checker(checker) {}
168 bool operator()(
const ClauseIndex clause_index1,
169 const ClauseIndex clause_index2)
const;
173 ClauseIndex AddClause(absl::Span<const Literal> clause);
176 void RemoveLastClause();
179 absl::Span<const Literal> Literals(
const Clause& clause)
const;
185 void WatchClause(ClauseIndex clause_index);
192 bool HasRupProperty(ClauseIndex num_clauses,
193 absl::Span<const Literal> clause);
203 ClauseIndex AssignAndPropagate(ClauseIndex num_clauses, Literal
literal,
204 ClauseIndex source_clause_index);
211 void MarkAsNeededForProof(Clause* clause);
216 std::vector<std::vector<Literal>> GetClausesNeededForProof(
217 ClauseIndex begin, ClauseIndex end)
const;
219 void LogStatistics(
int64 duration_nanos)
const;
223 ClauseIndex first_infered_clause_index_;
232 absl::flat_hash_set<ClauseIndex, ClauseHash, ClauseEquiv> clause_set_;
235 std::vector<Literal> literals_;
245 std::vector<Literal> assigned_;
248 VariablesAssignment assignment_;
262 std::vector<LiteralToAssign> high_priority_literals_to_assign_;
266 std::vector<LiteralToAssign> low_priority_literals_to_assign_;
281 std::vector<ClauseIndex> single_literal_clauses_;
285 std::vector<ClauseIndex> unit_stack_;
288 VariablesAssignment tmp_assignment_;
309 bool Resolve(absl::Span<const Literal> clause,
310 absl::Span<const Literal> other_clause,
311 Literal complementary_literal, VariablesAssignment* assignment,
312 std::vector<Literal>* resolvent);
323 DratChecker* drat_checker);
334 const std::vector<std::vector<Literal>>& clauses,
340 #endif // OR_TOOLS_SAT_DRAT_CHECKER_H_