20 const unsigned back =
solver->level - 1;
23 const unsigned delta = back - jump;
24 const unsigned limit = backjump_limit (
solver);
30 LOG (
"using identical backtrack and jump level %u", res);
31 }
else if (delta > limit) {
33 LOG (
"backjumping over %u levels (%u - %u) considered inefficient",
35 LOG (
"backtracking chronologically to backtrack level %u", res);
39 LOG (
"backjumping over %u levels (%u - %u) considered efficient", delta,
41 LOG (
"backjumping non-chronologically to jump level %u", res);
46static void learn_unit (
kissat *
solver,
unsigned not_uip) {
48 LOG (
"learned unit clause %s triggers iteration",
LOGLIT (not_uip));
58static void learn_binary (
kissat *
solver,
unsigned not_uip) {
60 const unsigned jump_level =
LEVEL (other);
61 const unsigned new_level =
89 unsigned *q = lits + 1;
90 unsigned jump_lit = *q;
91 unsigned jump_level =
LEVEL (jump_lit);
93 const unsigned backtrack_level =
solver->level - 1;
95 for (
unsigned *
p = lits + 2;
p != end;
p++) {
96 const unsigned lit = *
p;
97 const unsigned idx =
IDX (
lit);
98 const unsigned level = all_assigned[idx].
level;
99 if (jump_level >= level)
104 if (level == backtrack_level)
113 const unsigned new_level =
122 INC (clauses_learned);
123 LOG (
"learned[%" PRIu64
"] clause glue %u size %u",
GET (clauses_learned),
127 ADD (literals_learned, size);
147static void eagerly_subsume_last_learned (
kissat *
solver) {
154 unsigned subsumed = 0;
166 unsigned c_size = c->
size;
167 if (c_size <= clause_size)
169 LOGCLS2 (c,
"trying to eagerly subsume");
170 unsigned needed = clause_size;
171 unsigned remain = c_size;
173 if (marks[
lit] && !--needed)
175 else if (--remain < needed)
180 LOGCLS (c,
"eagerly subsumed");
184 INC (eagerly_subsumed);
189 flush_last_learned (
solver);
202 learn_unit (
solver, not_uip);
204 learn_binary (
solver, not_uip);
206 ref = learn_reference (
solver, not_uip, glue);
208 eagerly_subsume_last_learned (
solver);
210 insert_last_learned (
solver, ref);
#define ABC_NAMESPACE_IMPL_START
#define ABC_NAMESPACE_IMPL_END
void kissat_learned_unit(kissat *solver, unsigned lit)
void kissat_assign_binary(kissat *solver, unsigned lit, unsigned other)
void kissat_assign_reference(kissat *solver, unsigned lit, reference ref, clause *reason)
void kissat_backtrack_after_conflict(kissat *solver, unsigned new_level)
#define all_stack(T, E, S)
ABC_NAMESPACE_IMPL_START typedef signed char value
reference kissat_new_redundant_clause(kissat *solver, unsigned glue)
void kissat_mark_clause_as_garbage(kissat *solver, clause *c)
#define UPDATE_AVERAGE(A, Y)
#define all_literals_in_clause(LIT, C)
#define KISSAT_assert(ignore)
void kissat_learn_clause(kissat *solver)
unsigned kissat_determine_new_level(kissat *solver, unsigned jump)
void kissat_update_learned(kissat *solver, unsigned glue, unsigned size)
ABC_NAMESPACE_HEADER_START typedef unsigned reference
void kissat_tick_reluctant(reluctant *reluctant)