ABC: A System for Sequential Synthesis and Verification
 
Loading...
Searching...
No Matches
propinitially.c
Go to the documentation of this file.
1#include "propinitially.h"
2#include "analyze.h"
3#include "fastassign.h"
4#include "print.h"
5#include "trail.h"
6
8
9#define PROPAGATE_LITERAL initially_propagate_literal
10#define PROPAGATION_TYPE "initially"
11
12#include "proplit.h"
13
14static inline void
15update_initial_propagation_statistics (kissat *solver,
16 const unsigned *saved_propagate) {
17 KISSAT_assert (saved_propagate <= solver->propagate);
18 const unsigned propagated = solver->propagate - saved_propagate;
19
20 LOG ("propagated %u literals", propagated);
21 LOG ("propagation took %" PRIu64 " ticks", solver->ticks);
22
23 ADD (propagations, propagated);
24 ADD (ticks, solver->ticks);
25}
26
27static clause *initially_propagate (kissat *solver) {
28 clause *res = 0;
29 unsigned *propagate = solver->propagate;
30 while (!res && propagate != END_ARRAY (solver->trail))
31 res = initially_propagate_literal (solver, *propagate++);
32 solver->propagate = propagate;
33 return res;
34}
35
37 KISSAT_assert (!solver->probing);
38 KISSAT_assert (solver->watching);
39 KISSAT_assert (!solver->inconsistent);
40
41 START (propagate);
42
43 solver->ticks = 0;
44 const unsigned *saved_propagate = solver->propagate;
45 clause *conflict = initially_propagate (solver);
46 update_initial_propagation_statistics (solver, saved_propagate);
47 kissat_update_conflicts_and_trail (solver, conflict, true);
48 if (conflict) {
49 int res = kissat_analyze (solver, conflict);
50 KISSAT_assert (solver->inconsistent);
51 KISSAT_assert (res == 20);
52 (void) res;
53 }
54
55 STOP (propagate);
56
57 return !conflict;
58}
59
#define ABC_NAMESPACE_IMPL_START
#define ABC_NAMESPACE_IMPL_END
int kissat_analyze(kissat *solver, clause *conflict)
Definition analyze.c:529
#define END_ARRAY
Definition array.h:51
#define ADD(NAME, DELTA)
#define LOG(...)
#define KISSAT_assert(ignore)
Definition global.h:13
#define solver
Definition kitten.c:211
#define STOP(P)
Definition profile.hpp:158
#define START(P)
Definition profile.hpp:150
bool kissat_initially_propagate(kissat *solver)