72 {
77#if defined(LOGGING) || !defined(KISSAT_NDEBUG)
79#endif
80 if (conflict->
size > 2)
81 mark_clause_as_used (
solver, conflict);
83 solver->antecedent_size = 0;
84 solver->resolvent_size = 0;
85 unsigned unresolved_on_current_level = 0, conflict_size = 0;
91 conflict_size++;
92 if (analyze_literal (
solver, all_assigned, frames,
lit))
93 unresolved_on_current_level++;
94 }
96 LOG (
"starting with %u unresolved literals on current decision level",
97 unresolved_on_current_level);
103 unsigned resolved = 0;
105 for (;;) {
106 do {
108 uip = *--t;
111 if (unresolved_on_current_level == 1)
112 break;
115 solver->antecedent_size = 1;
116 resolved++;
118 const unsigned other = a->
reason;
120 if (analyze_literal (
solver, all_assigned, frames, other))
121 unresolved_on_current_level++;
122 } else {
125 clause *reason = kissat_dereference_clause (
solver, ref);
128 analyze_literal (
solver, all_assigned, frames,
lit))
129 unresolved_on_current_level++;
130 mark_clause_as_used (
solver, reason);
131 }
133 unresolved_on_current_level--;
134 LOG (
"after resolving %s there are %u literals left "
135 "on current decision level",
136 LOGLIT (uip), unresolved_on_current_level);
139#if defined(LOGGING) || !defined(KISSAT_NDEBUG)
140 LOG2 (
"actual antecedent size %u",
solver->antecedent_size);
144#endif
145 if (otfs &&
solver->antecedent_size > 2 &&
152 if (resolved == 1 &&
solver->resolvent_size < conflict_size) {
156 }
158 return res;
159 }
160 }
162 LOG (
"first unique implication point %s (1st UIP)",
LOGLIT (uip));
165 LOGTMP (
"deduced not yet minimized 1st UIP");
169 return 0;
170}
#define REMOVE_STACK(T, S, E)
#define POKE_STACK(S, N, E)
#define all_literals_in_clause(LIT, C)
#define KISSAT_assert(ignore)
ABC_NAMESPACE_HEADER_START typedef unsigned reference
void kissat_on_the_fly_subsume(kissat *solver, clause *c, clause *d)
clause * kissat_on_the_fly_strengthen(kissat *solver, clause *c, unsigned lit)