92 absl::Span<const ClauseId> unit_ids,
93 absl::Span<const RatIds> rat = {});
100 bool Valid()
const {
return valid_; }
105 if (valid_ && !complete_) {
106 error_message_ =
"empty clause not inferred";
119 auto it = clauses_.find(
id);
120 if (it == clauses_.end())
return {};
125 bool AddClauseInternal(ClauseId
id, absl::Span<const Literal> clause,
126 bool is_problem_clause,
127 absl::Span<const ClauseId> unit_ids,
128 absl::Span<const RatIds> rat);
130 void InitializeOccurrences();
132 bool Error(ClauseId
id, std::string_view error);
134 int num_variables_ = 0;
140 absl::flat_hash_map<ClauseId, FixedCapacityVector<Literal>> clauses_;
145 bool occurrences_needed_ =
false;
149 std::string error_message_;
152 int64_t num_problem_clauses_ = 0;
153 int64_t num_inferred_clauses_ = 0;
154 int64_t num_processed_rup_literals_ = 0;
155 int64_t num_processed_rup_clauses_ = 0;
156 int64_t num_unneeded_rup_literals_ = 0;
157 int64_t num_unneeded_rup_clauses_ = 0;
158 int64_t num_processed_rat_literals_ = 0;
159 int64_t num_processed_rat_clauses_ = 0;
160 int64_t num_unneeded_rat_literals_ = 0;
161 int64_t num_unneeded_rat_clauses_ = 0;
162 int64_t num_deleted_clauses_ = 0;
163 int64_t num_deleted_clauses_not_found_ = 0;
167 bool complete_ =
false;
174 absl::flat_hash_set<ClauseId> tmp_clause_ids_;
*Either clause and the r resolvant_id clause have two pairs of *Or all the r unit_ids clauses must become unit and eventually empty bool AddInferredClause(ClauseId id, absl::Span< const Literal > clause, absl::Span< const ClauseId > unit_ids, absl::Span< const RatIds > rat={})