93 {
95 return false;
100 const unsigned not_lit =
NOT (
lit);
107 unsigned exported = 0;
108#if !defined(KISSAT_QUIET) || !defined(KISSAT_NDEBUG)
109 size_t occs[2] = {0, 0};
110#endif
111 for (
unsigned sign = 0;
sign < 2;
sign++) {
112 const unsigned except =
sign ? not_lit :
lit;
118 } else {
123 }
124#if !defined(KISSAT_QUIET) || !defined(KISSAT_NDEBUG)
126#endif
127 exported++;
128 }
129 }
130 bool res = false;
131 LOG (
"exported %u = %zu + %zu environment clauses to sub-solver",
132 exported, occs[0], occs[1]);
133 INC (definitions_checked);
134 const size_t limit =
GET_OPTION (definitionticks);
138 LOG (
"sub-solver result UNSAT shows definition exists");
141 LOG (
"1st sub-solver core of size %u original clauses out of %u",
142 reduced, exported);
143 for (
int i = 2; i <=
GET_OPTION (definitioncores); i++) {
149 if (!tmp) {
150 LOG (
"aborting core extraction");
151 goto ABORT;
152 }
153#ifndef KISSAT_NDEBUG
154 unsigned previous = reduced;
155#endif
157 LOG (
"%s sub-solver core of size %u original clauses out of %u",
160#if defined(KISSAT_QUIET) && defined(KISSAT_NDEBUG)
161 (void) reduced;
162#endif
163 }
164 INC (definitions_extracted);
169#if !defined(KISSAT_QUIET) || !defined(KISSAT_NDEBUG)
171#ifdef METRICS
174 "definition extracted[%" PRIu64 "] "
175 "size %u = %zu + %zu clauses %.0f%% "
176 "of %u = %zu + %zu (checked %" PRIu64 ")",
177 solver->statistics.definitions_extracted, reduced,
size[0],
size[1],
178 kissat_percent (reduced, exported), exported, occs[0], occs[1],
179 solver->statistics.definitions_checked);
180#else
182 "definition extracted with core "
183 "size %u = %zu + %zu clauses %.0f%% "
184 "of %u = %zu + %zu",
186 kissat_percent (reduced, exported), exported,
187 occs[0], occs[1]);
188#endif
189#endif
192 unit = not_lit;
196
198 INC (definition_units);
199
201 "definition extraction yields "
202 "failed literal");
203#if !defined(KISSAT_NDEBUG) || !defined(KISSAT_NPROOFS)
204 if (false
207#endif
210#endif
211 ) {
212 lemma_extractor extractor;
214 extractor.unit = unit;
215 extractor.lemmas = 0;
217 traverse_one_sided_core_lemma);
218 } else
219#endif
221 }
223 solver->resolve_gate =
true;
224 res = true;
225 } else {
226 ABORT:
227 LOG (
"sub-solver failed to show that definition exists");
228 }
231 return res;
232}
void kissat_learned_unit(kissat *solver, unsigned lit)
#define GATE_ELIMINATED(...)
#define KISSAT_assert(ignore)
int kitten_solve(kitten *kitten)
void kitten_shrink_to_clausal_core(kitten *kitten)
void kitten_traverse_core_clauses(kitten *kitten, void *state, void(*traverse)(void *, bool, size_t, const unsigned *))
void kitten_traverse_core_ids(kitten *kitten, void *state, void(*traverse)(void *, unsigned))
void kitten_track_antecedents(kitten *kitten)
void kitten_clause_with_id_and_exception(kitten *kitten, unsigned id, size_t size, const unsigned *elits, unsigned except)
void kitten_set_ticks_limit(kitten *kitten, uint64_t delta)
unsigned kitten_compute_clausal_core(kitten *kitten, uint64_t *learned_ptr)
void kitten_shuffle_clauses(kitten *kitten)
void kitten_clear(kitten *kitten)
#define kissat_extremely_verbose(...)
ABC_NAMESPACE_HEADER_START typedef unsigned reference
#define all_binary_large_watches(WATCH, WATCHES)