6static inline int minimized_index (
kissat *
solver,
bool minimizing,
9#if !defined(LOGGING) && defined(KISSAT_NDEBUG)
34 if (minimizing || !depth) {
37 LOG2 (
"can not remove singleton frame literal %s",
LOGLIT (
lit));
47static inline bool minimize_reference (
kissat *
solver,
bool minimizing,
49 unsigned lit,
unsigned depth) {
50 const unsigned next_depth = (depth == UINT_MAX) ? depth : depth + 1;
51 const unsigned not_lit =
NOT (
lit);
56 if (other != not_lit &&
57 !minimize_literal (
solver, minimizing,
assigned, other, next_depth))
62static inline bool minimize_binary (
kissat *
solver,
bool minimizing,
67 for (
unsigned next =
lit;;) {
68 const unsigned next_idx =
IDX (next);
70 int tmp = minimized_index (
solver, minimizing, a, next, next_idx, 1);
77 const unsigned next_depth = (depth == UINT_MAX) ? depth : depth + 1;
88 for (
const unsigned *
p = begin;
p != end;
p++)
91 for (
const unsigned *
p = begin;
p != end;
p++)
97static bool minimize_literal (
kissat *
solver,
bool minimizing,
100 LOG (
"trying to minimize literal %s at recursion depth %d",
LOGLIT (
lit),
105 if (depth >= (
unsigned)
GET_OPTION (minimizedepth))
107 const unsigned idx =
IDX (
lit);
109 int tmp = minimized_index (
solver, minimizing, a,
lit, idx, depth);
115 const unsigned not_lit =
NOT (
lit);
119 const unsigned other = a->
reason;
120 LOGBINARY2 (not_lit, other,
"minimizing along %s reason",
122 res = minimize_binary (
solver, minimizing,
assigned, other, depth);
125 LOGREF2 (ref,
"minimizing along %s reason",
LOGLIT (not_lit));
139 bool lit_in_clause) {
171 const unsigned not_uip = lits[0];
174 for (
const unsigned *
p = lits;
p != end;
p++)
182 unsigned minimized = 0;
184 for (
unsigned *
p = end; --
p > lits;) {
185 const unsigned lit = *
p;
196 for (
const unsigned *
p = lits;
p != end;
p++) {
197 const unsigned lit = *
p;
203 LOG (
"clause minimization removed %u literals", minimized);
206 ADD (literals_minimized, minimized);
208 LOGTMP (
"minimized learned");
#define ABC_NAMESPACE_IMPL_START
#define ABC_NAMESPACE_IMPL_END
#define all_stack(T, E, S)
#define SET_END_OF_STACK(S, P)
#define all_literals_in_clause(LIT, C)
#define KISSAT_assert(ignore)
void kissat_reset_poisoned(kissat *solver)
bool kissat_minimize_literal(kissat *solver, unsigned lit, bool lit_in_clause)
void kissat_minimize_clause(kissat *solver)
ABC_NAMESPACE_HEADER_START typedef unsigned reference