23 #if !defined(__PORTABLE_PLATFORM__)
26 #include "absl/types/span.h"
37 : variable_index_(0), drat_checker_(new
DratChecker()) {}
42 drat_writer_(new
DratWriter(in_binary_format, output)) {
44 drat_checker_ = std::make_unique<DratChecker>();
51 for (BooleanVariable v(0); v < mapping.
size(); ++v) {
52 const BooleanVariable image = mapping[v];
54 if (image >= new_mapping.
size())
58 v < reverse_mapping_.
size() ? reverse_mapping_[v] : v;
66 CHECK_GE(num_variables, reverse_mapping_.
size());
67 while (reverse_mapping_.
size() < num_variables) {
68 reverse_mapping_.
push_back(BooleanVariable(variable_index_++));
73 reverse_mapping_.
push_back(BooleanVariable(variable_index_++));
77 if (drat_checker_ !=
nullptr) {
78 drat_checker_->AddProblemClause(clause);
84 if (drat_checker_ !=
nullptr) {
85 drat_checker_->AddInferedClause(values_);
87 if (drat_writer_ !=
nullptr) {
88 drat_writer_->AddClause(values_);
94 if (drat_checker_ !=
nullptr) {
95 drat_checker_->DeleteClause(values_);
97 if (drat_writer_ !=
nullptr) {
98 drat_writer_->DeleteClause(values_);
103 if (drat_checker_ !=
nullptr) {
105 drat_checker_->AddInferedClause({});
106 return drat_checker_->Check(max_time_in_seconds);
108 return DratChecker::Status::UNKNOWN;
111 void DratProofHandler::MapClause(absl::Span<const Literal> clause) {
113 for (
const Literal l : clause) {
114 CHECK_LT(l.Variable(), reverse_mapping_.
size());
115 const Literal original_literal =
116 Literal(reverse_mapping_[l.Variable()], l.IsPositive());
117 values_.push_back(original_literal);
123 std::sort(values_.begin(), values_.end(), [](Literal
a, Literal
b) {
124 return std::abs(a.SignedValue()) > std::abs(b.SignedValue());
void resize(size_type new_size)
void push_back(const value_type &x)
void SetNumVariables(int num_variables)
void DeleteClause(absl::Span< const Literal > clause)
DratChecker::Status Check(double max_time_in_seconds)
void AddProblemClause(absl::Span< const Literal > clause)
void ApplyMapping(const absl::StrongVector< BooleanVariable, BooleanVariable > &mapping)
void AddClause(absl::Span< const Literal > clause)
void swap(IdMap< K, V > &a, IdMap< K, V > &b)
const BooleanVariable kNoBooleanVariable(-1)
Collection of objects used to extend the Constraint Solver library.