12 LOG (
"all %zu eliminated variables are unassigned", size_eliminated);
16 LOG (
"unassigning %zu eliminated variables %.0f%%", size_etrail,
17 kissat_percent (size_etrail, size_eliminated));
25 LOG2 (
"unassigned eliminated[%u] external variable",
pos);
33 const unsigned idx =
ABS (
lit);
34 import *import = &PEEK_STACK (solver->import, idx);
37 const unsigned pos =
import->lit;
42 LOG (
"assigned eliminated[%u] external literal %d",
pos,
value * idx);
53 undo_eliminated_assignment (
solver);
55 LOG (
"extending solution with reconstruction stack of size %zu",
61 const import *const imports = BEGIN_STACK (solver->import);
72 unsigned pos = UINT_MAX;
73 bool satisfied =
false;
86 const int elit = ext.
lit;
94 const unsigned eidx =
ABS (elit);
96 const import *const import = imports + eidx;
100 const unsigned tmp =
import->lit;
108 LOG2 (
"previously assigned eliminated literal %d "
112 }
else if (!
value && (!eliminated ||
pos < tmp)) {
115 LOG2 (
"earlier unassigned eliminated literal %d", elit);
117 LOG2 (
"found unassigned eliminated literal %d", elit);
123 const unsigned ilit =
import->lit;
131 LOG2 (
"internal literal %s satisfies clause",
LOGLIT (ilit));
142 if (eliminated && eliminated != blocking) {
144 "assigning eliminated unassigned external literal %d "
145 "to satisfy size %zu witness labelled clause at",
147 extend_assign (
solver, evalues, eliminated);
155 const unsigned blocking_idx =
ABS (blocking);
158 const unsigned blocking_pos = imports[blocking_idx].lit;
160 const value blocking_value = evalues[blocking_pos];
162 "%s blocking external literal %d "
163 "to satisfy size %zu witness labelled clause at",
164 blocking_value ?
"flipping" :
"assigning", blocking, size);
170 extend_assign (
solver, evalues, blocking);
175 LOG (
"assigned %zu external variables %.0f%% out of %zu eliminated",
177 LOG (
"flipped %zu external variables %.0f%% out of %zu assigned", flipped,
179 LOG (
"extended assignment complete");
#define ABC_NAMESPACE_IMPL_START
#define ABC_NAMESPACE_IMPL_END
ABC_NAMESPACE_IMPL_START typedef signed char value
void kissat_extend(kissat *solver)
int kissat_value(kissat *solver, int elit)
#define KISSAT_assert(ignore)