23#if !defined(__PORTABLE_PLATFORM__)
26#include "absl/memory/memory.h"
27#include "absl/types/span.h"
38 : variable_index_(0), drat_checker_(new
DratChecker()) {}
43 drat_writer_(new
DratWriter(in_binary_format, output)) {
45 drat_checker_ = absl::make_unique<DratChecker>();
52 for (BooleanVariable v(0); v < mapping.
size(); ++v) {
53 const BooleanVariable image = mapping[v];
55 if (image >= new_mapping.
size())
59 v < reverse_mapping_.
size() ? reverse_mapping_[v] : v;
68 while (reverse_mapping_.
size() < num_variables) {
69 reverse_mapping_.
push_back(BooleanVariable(variable_index_++));
74 reverse_mapping_.
push_back(BooleanVariable(variable_index_++));
78 if (drat_checker_ !=
nullptr) {
79 drat_checker_->AddProblemClause(clause);
85 if (drat_checker_ !=
nullptr) {
86 drat_checker_->AddInferedClause(values_);
88 if (drat_writer_ !=
nullptr) {
89 drat_writer_->AddClause(values_);
95 if (drat_checker_ !=
nullptr) {
96 drat_checker_->DeleteClause(values_);
98 if (drat_writer_ !=
nullptr) {
99 drat_writer_->DeleteClause(values_);
104 if (drat_checker_ !=
nullptr) {
106 drat_checker_->AddInferedClause({});
107 return drat_checker_->Check(max_time_in_seconds);
109 return DratChecker::Status::UNKNOWN;
112void DratProofHandler::MapClause(absl::Span<const Literal> clause) {
114 for (
const Literal l : clause) {
116 const Literal original_literal =
117 Literal(reverse_mapping_[l.Variable()], l.IsPositive());
118 values_.push_back(original_literal);
124 std::sort(values_.begin(), values_.end(), [](Literal
a, Literal
b) {
125 return std::abs(a.SignedValue()) > std::abs(b.SignedValue());
#define CHECK_LT(val1, val2)
#define CHECK_EQ(val1, val2)
#define CHECK_GE(val1, val2)
#define CHECK_NE(val1, val2)
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.