18 #include "absl/memory/memory.h"
26 : variable_index_(0), drat_checker_(new
DratChecker()) {}
31 drat_writer_(new
DratWriter(in_binary_format, output)) {
33 drat_checker_ = absl::make_unique<DratChecker>();
40 for (BooleanVariable v(0); v < mapping.
size(); ++v) {
41 const BooleanVariable image = mapping[v];
43 if (image >= new_mapping.
size())
47 v < reverse_mapping_.
size() ? reverse_mapping_[v] : v;
51 std::swap(new_mapping, reverse_mapping_);
55 CHECK_GE(num_variables, reverse_mapping_.
size());
56 while (reverse_mapping_.
size() < num_variables) {
57 reverse_mapping_.
push_back(BooleanVariable(variable_index_++));
62 reverse_mapping_.
push_back(BooleanVariable(variable_index_++));
66 if (drat_checker_ !=
nullptr) {
67 drat_checker_->AddProblemClause(clause);
73 if (drat_checker_ !=
nullptr) {
74 drat_checker_->AddInferedClause(values_);
76 if (drat_writer_ !=
nullptr) {
77 drat_writer_->AddClause(values_);
83 if (drat_checker_ !=
nullptr) {
84 drat_checker_->DeleteClause(values_);
86 if (drat_writer_ !=
nullptr) {
87 drat_writer_->DeleteClause(values_);
92 if (drat_checker_ !=
nullptr) {
94 drat_checker_->AddInferedClause({});
95 return drat_checker_->Check(max_time_in_seconds);
100 void DratProofHandler::MapClause(absl::Span<const Literal> clause) {
102 for (
const Literal l : clause) {
103 CHECK_LT(l.Variable(), reverse_mapping_.
size());
104 const Literal original_literal =
105 Literal(reverse_mapping_[l.Variable()], l.IsPositive());
106 values_.push_back(original_literal);
112 std::sort(values_.begin(), values_.end(), [](Literal
a, Literal
b) {
113 return std::abs(a.SignedValue()) > std::abs(b.SignedValue());