1#ifndef _external_hpp_INCLUDED
2#define _external_hpp_INCLUDED
9#include <unordered_map>
155 inline int vidx (
int elit)
const {
158 int res = abs (elit);
163 inline int vlit (
int elit)
const {
173 int eidx = abs (elit);
211 const int idx = abs (elit) - 1;
213 return 2u * idx + (elit < 0);
218 return ulit <
map.size () ?
map[ulit] :
false;
223 if (ulit >=
map.size ())
224 map.resize (ulit + 1,
false);
230 if (ulit <
map.size ())
255 void melt (
int elit);
260 int eidx = abs (elit);
273 void enlarge (
int new_max_var);
274 void init (
int new_max_var,
319 int solve (
bool preprocess_only);
325 inline int ival (
int elit)
const {
327 int eidx = abs (elit);
329 if (eidx <=
max_var && (
size_t) eidx <
vals.size ())
333 return val ? elit : -elit;
336 bool flip (
int elit);
364 void implied (std::vector<int> &entrailed);
371 int fixed (
int elit)
const;
375 void phase (
int elit);
446 inline int sol (
int elit)
const {
449 int eidx = abs (elit);
459 return value > 0 ? elit : -elit;
#define ABC_NAMESPACE_CXX_HEADER_START
#define ABC_NAMESPACE_CXX_HEADER_END
#define CADICAL_assert(ignore)
ABC_NAMESPACE_IMPL_START typedef signed char value
void check_shrunken_clause(Clause *c)
bool traverse_all_non_frozen_units_as_witnesses(WitnessIterator &)
void enlarge(int new_max_var)
int propagate_assumptions()
bool is_witness(int elit)
CaDiCaL::CubesWithStatus generate_cubes(int, int)
void check_learned_unit_clause(int unit)
void update_molten_literals()
void check_solution_on_learned_unit_clause(int unit)
bool traverse_witnesses_backward(WitnessIterator &)
bool is_valid_input(int elit)
vector< bool > is_observed
void push_witness_literal_on_extension_stack(int ilit)
void reset_observed_vars()
void export_learned_empty_clause()
bool traverse_witnesses_forward(WitnessIterator &)
bool marked(const vector< bool > &map, int elit) const
void check_learned_empty_clause()
bool is_decision(int elit)
void export_learned_unit_clause(int ilit)
void check_no_solution_after_learning_empty_clause()
void check_solution_on_shrunken_clause(Clause *)
void restore_clause(const vector< int >::const_iterator &begin, const vector< int >::const_iterator &end, const int64_t id)
void push_id_on_extension_stack(int64_t id)
void push_external_clause_and_witness_on_extension_stack(const vector< int > &clause, const vector< int > &witness, int64_t id)
void implied(std::vector< int > &entrailed)
void check_unsatisfiable()
unsigned elit2ulit(int elit) const
vector< int64_t > ext_units
void check_assignment(int(External::*assignment)(int) const)
unordered_map< uint64_t, vector< int > > forgettable_original
void push_zero_on_extension_stack()
void remove_observed_var(int elit)
void add_observed_var(int elit)
void copy_flags(External &other) const
bool traverse_all_frozen_units_as_clauses(ClauseIterator &)
vector< unsigned > frozentab
void push_clause_literal_on_extension_stack(int ilit)
void check_learned_clause()
void mark(vector< bool > &map, int elit)
void check_assumptions_satisfied()
int solve(bool preprocess_only)
void check_solution_on_learned_clause()
FixedAssignmentListener * fixed_listener
void export_learned_large_clause(const vector< int > &)
void check_constraint_satisfied()
void push_binary_clause_on_extension_stack(int64_t id, int witness, int other)
void force_backtrack(size_t new_level)
void init(int new_max_var, bool extension=false)
void push_clause_on_extension_stack(Clause *)
ExternalPropagator * propagator
int fixed(int elit) const
void unmark(vector< bool > &map, int elit)
void check_solve_result(int res)
vector< int > assumptions
int internalize(int, bool extension=false)