ABC: A System for Sequential Synthesis and Verification
 
Loading...
Searching...
No Matches
trail.c
Go to the documentation of this file.
1#include "trail.h"
2#include "backtrack.h"
3#include "inline.h"
4#include "propsearch.h"
5
7
9 KISSAT_assert (!solver->level);
10 KISSAT_assert (solver->unflushed);
11 KISSAT_assert (!solver->inconsistent);
12 KISSAT_assert (kissat_propagated (solver));
13 KISSAT_assert (SIZE_ARRAY (solver->trail) == solver->unflushed);
14 LOG ("flushed %zu units from trail", SIZE_ARRAY (solver->trail));
15 CLEAR_ARRAY (solver->trail);
16 kissat_reset_propagate (solver);
17 solver->unflushed = 0;
18}
19
21 LOG ("starting marking reason clauses at clause[%" REFERENCE_FORMAT "]",
22 start);
23 KISSAT_assert (!solver->unflushed);
24#ifdef LOGGING
25 unsigned reasons = 0;
26#endif
27 ward *arena = BEGIN_STACK (solver->arena);
28 for (all_stack (unsigned, lit, solver->trail)) {
29 assigned *a = ASSIGNED (lit);
30 KISSAT_assert (a->level > 0);
31 if (a->binary)
32 continue;
33 const reference ref = a->reason;
35 if (ref == DECISION_REASON)
36 continue;
37 if (ref < start)
38 continue;
39 clause *c = (clause *) (arena + ref);
40 KISSAT_assert (kissat_clause_in_arena (solver, c));
41 c->reason = true;
42#ifdef LOGGING
43 reasons++;
44#endif
45 }
46 LOG ("marked %u reason clauses", reasons);
47}
48
50 reference start) {
51 KISSAT_assert (solver->watching);
52 KISSAT_assert (!solver->inconsistent);
53 KISSAT_assert (kissat_propagated (solver));
54
55 if (solver->unflushed) {
56 LOG ("need to flush %u units from trail", solver->unflushed);
58 } else {
59 LOG ("no need to flush units from trail (all units already flushed)");
61 }
62
63 return true;
64}
65
67 LOG ("starting unmarking reason clauses at clause[%" REFERENCE_FORMAT "]",
68 start);
69 KISSAT_assert (!solver->unflushed);
70#ifdef LOGGING
71 unsigned reasons = 0;
72#endif
73 ward *arena = BEGIN_STACK (solver->arena);
74 for (all_stack (unsigned, lit, solver->trail)) {
75 assigned *a = ASSIGNED (lit);
76 KISSAT_assert (a->level > 0);
77 if (a->binary)
78 continue;
79 const reference ref = a->reason;
81 if (ref == DECISION_REASON)
82 continue;
83 if (ref < start)
84 continue;
85 clause *c = (clause *) (arena + ref);
86 KISSAT_assert (kissat_clause_in_arena (solver, c));
88 c->reason = false;
89#ifdef LOGGING
90 reasons++;
91#endif
92 }
93 LOG ("unmarked %u reason clauses", reasons);
94}
95
#define ABC_NAMESPACE_IMPL_START
#define ABC_NAMESPACE_IMPL_END
ABC_NAMESPACE_HEADER_START typedef word ward
Definition arena.h:12
#define SIZE_ARRAY
Definition array.h:24
#define CLEAR_ARRAY
Definition array.h:45
#define DECISION_REASON
Definition assign.h:9
#define ASSIGNED(LIT)
Definition assign.h:31
#define UNIT_REASON
Definition assign.h:10
void kissat_backtrack_propagate_and_flush_trail(kissat *solver)
Definition backtrack.c:165
#define BEGIN_STACK(S)
Definition stack.h:46
#define all_stack(T, E, S)
Definition stack.h:94
#define LOG(...)
#define KISSAT_assert(ignore)
Definition global.h:13
#define solver
Definition kitten.c:211
ABC_NAMESPACE_HEADER_START typedef unsigned reference
Definition reference.h:9
#define REFERENCE_FORMAT
Definition reference.h:11
int lit
Definition satVec.h:130
bool binary
Definition assign.h:23
unsigned reason
Definition assign.h:28
unsigned level
Definition assign.h:19
bool reason
Definition clause.h:27
void kissat_unmark_reason_clauses(kissat *solver, reference start)
Definition trail.c:66
void kissat_mark_reason_clauses(kissat *solver, reference start)
Definition trail.c:20
bool kissat_flush_and_mark_reason_clauses(kissat *solver, reference start)
Definition trail.c:49
ABC_NAMESPACE_IMPL_START void kissat_flush_trail(kissat *solver)
Definition trail.c:8