ABC: A System for Sequential Synthesis and Verification
 
Loading...
Searching...
No Matches
flags.c
Go to the documentation of this file.
1#include "inline.h"
2#include "inlineheap.h"
3#include "inlinequeue.h"
4
6
7static inline void activate_literal (kissat *solver, unsigned lit) {
8 const unsigned idx = IDX (lit);
9 flags *f = FLAGS (idx);
10 if (f->active)
11 return;
12 lit = STRIP (lit);
13 LOG ("activating %s", LOGVAR (idx));
14 f->active = true;
15 KISSAT_assert (!f->fixed);
17 solver->active++;
18 INC (variables_activated);
19 kissat_enqueue (solver, idx);
20 const double score = 1.0 - 1.0 / solver->statistics_.variables_activated;
21 kissat_update_heap (solver, &solver->scores, idx, score);
22 if (solver->stable) {
23 const unsigned lit = LIT (idx);
24 if (!VALUE (lit))
25 kissat_push_heap (solver, &solver->scores, idx);
26 }
27 KISSAT_assert (solver->unassigned < UINT_MAX);
28 solver->unassigned++;
29 kissat_mark_removed_literal (solver, lit);
30 kissat_mark_added_literal (solver, lit);
33 KISSAT_assert (!SAVED (idx));
34 KISSAT_assert (!TARGET (idx));
35 KISSAT_assert (!BEST (idx));
36}
37
38static inline void deactivate_variable (kissat *solver, flags *f,
39 unsigned idx) {
40 KISSAT_assert (solver->flags + idx == f);
41 LOG ("deactivating %s", LOGVAR (idx));
44 f->active = false;
45 KISSAT_assert (solver->active > 0);
46 solver->active--;
47 kissat_dequeue (solver, idx);
48 if (kissat_heap_contains (SCORES, idx))
49 kissat_pop_heap (solver, SCORES, idx);
50}
51
53 activate_literal (solver, lit);
54}
55
57 unsigned *lits) {
58 for (unsigned i = 0; i < size; i++)
59 activate_literal (solver, lits[i]);
60}
61
63 KISSAT_assert (VALUE (lit) > 0);
64 const unsigned idx = IDX (lit);
65 LOG ("marking internal %s as fixed", LOGVAR (idx));
66 flags *f = FLAGS (idx);
69 KISSAT_assert (!f->fixed);
70 f->fixed = true;
71 deactivate_variable (solver, f, idx);
72 INC (units);
73 int elit = kissat_export_literal (solver, lit);
74 KISSAT_assert (elit);
75 PUSH_STACK (solver->units, elit);
76 LOG ("pushed external unit literal %d (internal %u)", elit, lit);
77}
78
80 const unsigned lit = LIT (idx);
82 LOG ("marking internal %s as eliminated", LOGVAR (idx));
83 flags *f = FLAGS (idx);
86 KISSAT_assert (!f->fixed);
87 f->eliminated = true;
88 deactivate_variable (solver, f, idx);
89 int elit = kissat_export_literal (solver, lit);
90 KISSAT_assert (elit);
91 KISSAT_assert (elit != INT_MIN);
92 unsigned eidx = ABS (elit);
93 import *import = &PEEK_STACK (solver->import, eidx);
97 size_t pos = SIZE_STACK (solver->eliminated);
98 KISSAT_assert (pos < (1u << 30));
99 import->lit = pos;
100 import->eliminated = true;
101 PUSH_STACK (solver->eliminated, (value) 0);
102 LOG ("marked external variable %u as eliminated", eidx);
103 KISSAT_assert (solver->unassigned > 0);
104 solver->unassigned--;
105}
106
108 unsigned *lits) {
109 for (unsigned i = 0; i < size; i++)
110 kissat_mark_removed_literal (solver, lits[i]);
111}
112
114 unsigned *lits) {
115 for (unsigned i = 0; i < size; i++)
116 kissat_mark_added_literal (solver, lits[i]);
117}
118
#define ABC_NAMESPACE_IMPL_START
#define ABC_NAMESPACE_IMPL_END
#define SIZE_STACK(S)
Definition stack.h:19
#define PUSH_STACK(S, E)
Definition stack.h:39
#define INC(NAME)
#define LOG(...)
ABC_NAMESPACE_IMPL_START typedef signed char value
#define FLAGS
bool pos
Definition globals.c:30
void kissat_activate_literal(kissat *solver, unsigned lit)
Definition flags.c:52
void kissat_mark_removed_literals(kissat *solver, unsigned size, unsigned *lits)
Definition flags.c:107
void kissat_activate_literals(kissat *solver, unsigned size, unsigned *lits)
Definition flags.c:56
void kissat_mark_fixed_literal(kissat *solver, unsigned lit)
Definition flags.c:62
void kissat_mark_added_literals(kissat *solver, unsigned size, unsigned *lits)
Definition flags.c:113
void kissat_mark_eliminated_variable(kissat *solver, unsigned idx)
Definition flags.c:79
#define SCORES
Definition internal.h:262
#define KISSAT_assert(ignore)
Definition global.h:13
#define solver
Definition kitten.c:211
#define TARGET(IDX)
Definition phases.h:23
#define BEST(IDX)
Definition phases.h:17
#define SAVED(IDX)
Definition phases.h:20
int lit
Definition satVec.h:130
#define LIT(IDX)
Definition literal.h:31
#define IDX(LIT)
Definition literal.h:28
#define NOT(LIT)
Definition literal.h:33
#define STRIP(LIT)
Definition literal.h:37
Definition flags.h:11
bool active
Definition flags.h:12
bool fixed
Definition flags.h:18
bool eliminated
Definition flags.h:16
bool eliminated
Definition internal.h:52
bool imported
Definition internal.h:51
unsigned lit
Definition internal.h:49
#define ABS(a)
Definition util_old.h:250
#define VALUE(LIT)
Definition value.h:10