ABC: A System for Sequential Synthesis and Verification
 
Loading...
Searching...
No Matches
internal.h
Go to the documentation of this file.
1#ifndef _internal_h_INCLUDED
2#define _internal_h_INCLUDED
3
4#include "arena.h"
5#include "array.h"
6#include "assign.h"
7#include "averages.h"
8#include "check.h"
9#include "classify.h"
10#include "clause.h"
11#include "cover.h"
12#include "extend.h"
13#include "flags.h"
14#include "format.h"
15#include "frames.h"
16#include "heap.h"
17#include "kimits.h"
18#include "kissat.h"
19#include "literal.h"
20#include "mode.h"
21#include "options.h"
22#include "phases.h"
23#include "profile.h"
24#include "proof.h"
25#include "queue.h"
26#include "random.h"
27#include "reluctant.h"
28#include "rephase.h"
29#include "smooth.h"
30#include "stack.h"
31#include "statistics.h"
32#include "value.h"
33#include "vector.h"
34#include "watch.h"
35
36#include "global.h"
38
39typedef struct datarank datarank;
40
41struct datarank {
42 unsigned data;
43 unsigned rank;
44};
45
46typedef struct import import;
47
48struct import {
49 unsigned lit;
53};
54
55typedef struct termination termination;
56
58#ifdef COVERAGE
59 volatile uint64_t flagged;
60#else
61 volatile bool flagged;
62#endif
63 volatile void *state;
64 int (*volatile terminate) (void *);
65};
66
67// clang-format off
68
69typedef STACK (value) eliminated;
70typedef STACK (import) imports;
71typedef STACK (datarank) dataranks;
72typedef STACK (watch) statches;
73typedef STACK (watch *) patches;
74
75// clang-format on
76
77struct kitten;
78
79struct kissat {
80#if !defined(KISSAT_NDEBUG) || defined(METRICS)
81 bool backbone_computing;
82#endif
83#ifdef LOGGING
84 bool compacting;
85#endif
90 bool probing;
91#ifndef KISSAT_QUIET
92 bool sectioned;
93#endif
94 bool stable;
95#if !defined(KISSAT_NDEBUG) || defined(METRICS)
96 bool transitive_reducing;
97 bool vivifying;
98#endif
99 bool warming;
101
103
105
106 unsigned vars;
107 unsigned size;
108 unsigned active;
109 unsigned randec;
110
112 ints units;
113 imports import;
114 extensions extend;
115 unsigneds witness;
116
119
121
124
126 unsigneds etrail;
127
130
132 double scinc;
133
136
137 unsigned level;
139
140 unsigned_array trail;
141 unsigned *propagate;
142
145 unsigned unflushed;
146 unsigned unassigned;
147
148 unsigneds delayed;
149
150#if defined(LOGGING) || !defined(KISSAT_NDEBUG)
151 unsigneds resolvent;
152#endif
155
156 dataranks ranks;
157
158 unsigneds analyzed;
159 unsigneds levels;
160 unsigneds minimize;
161 unsigneds poisoned;
162 unsigneds promote;
163 unsigneds removable;
164 unsigneds shrinkable;
165
167
171
172 unsigneds clause;
173 unsigneds shadow;
174
180
182
183 sizes sorter;
184
187 unsigned tier1[2], tier2[2];
189
197 unsigned walked;
198
200
201 uint64_t ticks;
202
204 char *prefix;
205
206 statches antecedents[2];
207 statches gates[2];
208 patches xorted[2];
209 unsigneds resolvents;
211
212 struct kitten *kitten;
213#ifdef METRICS
214 uint64_t *gate_eliminated;
215#else
217#endif
219 unsigneds sweep_schedule;
220
221#if !defined(KISSAT_NDEBUG) || !defined(KISSAT_NPROOFS)
222 unsigneds added;
223 unsigneds removed;
224#endif
225
226#if !defined(KISSAT_NDEBUG) || !defined(KISSAT_NPROOFS) || defined(LOGGING)
227 ints original;
228 size_t offset_of_last_original_clause;
229#endif
230
231#ifndef KISSAT_QUIET
232 profiles profiles;
233#endif
234
235#ifndef KISSAT_NOPTIONS
236 options options;
237#endif
238
239#ifndef KISSAT_NDEBUG
240 checker *checker;
241#endif
242
243#ifndef KISSAT_NPROOFS
244 proof *proof;
245#endif
246
248};
249
250#define VARS (solver->vars)
251#define LITS (2 * solver->vars)
252
253#if 0
254#define TIEDX (GET_OPTION (focusedtiers) ? 0 : solver->stable)
255#define TIER1 (solver->tier1[TIEDX])
256#define TIER2 (solver->tier2[TIEDX])
257#else
258#define TIER1 (solver->tier1[0])
259#define TIER2 (solver->tier2[1])
260#endif
261
262#define SCORES (&solver->scores)
263
264static inline unsigned kissat_assigned (kissat *solver) {
265 KISSAT_assert (VARS >= solver->unassigned);
266 return VARS - solver->unassigned;
267}
268
269#define all_variables(IDX) \
270 unsigned IDX = 0, IDX##_END = solver->vars; \
271 IDX != IDX##_END; \
272 ++IDX
273
274#define all_literals(LIT) \
275 unsigned LIT = 0, LIT##_END = LITS; \
276 LIT != LIT##_END; \
277 ++LIT
278
279#define all_clauses(C) \
280 clause *C = (clause *) BEGIN_STACK (solver->arena), \
281 *const C##_END = (clause *) END_STACK (solver->arena), *C##_NEXT; \
282 C != C##_END && (C##_NEXT = kissat_next_clause (C), true); \
283 C = C##_NEXT
284
285#define capacity_last_learned \
286 (sizeof solver->last_learned / sizeof *solver->last_learned)
287
288#define real_end_last_learned (solver->last_learned + capacity_last_learned)
289
290#define really_all_last_learned(REF_PTR) \
291 reference *REF_PTR = solver->last_learned, \
292 *REF_PTR##_END = real_end_last_learned; \
293 REF_PTR != REF_PTR##_END; \
294 REF_PTR++
295
297
299
300#endif
#define ABC_NAMESPACE_HEADER_END
#define ABC_NAMESPACE_HEADER_START
NAMESPACES ///.
ABC_NAMESPACE_HEADER_START typedef uint64_t generator
Definition random.h:12
#define STACK(TYPE)
Definition stack.h:10
ABC_NAMESPACE_IMPL_START typedef signed char value
#define VARS
Definition internal.h:250
void kissat_reset_last_learned(kissat *solver)
Definition internal.c:22
#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
unsigned rank
Definition internal.h:43
unsigned data
Definition internal.h:42
Definition heap.h:19
bool eliminated
Definition internal.h:52
bool extension
Definition internal.h:50
bool imported
Definition internal.h:51
unsigned lit
Definition internal.h:49
unsigneds resolvents
Definition internal.h:209
unsigned walked
Definition internal.h:197
unsigned antecedent_size
Definition internal.h:154
statches gates[2]
Definition internal.h:207
unsigneds analyzed
Definition internal.h:158
reluctant reluctant
Definition internal.h:188
bool extended
Definition internal.h:86
unsigneds delayed
Definition internal.h:148
bool gate_eliminated
Definition internal.h:216
links * links
Definition internal.h:128
phases phases
Definition internal.h:123
reference last_irredundant
Definition internal.h:178
unsigned unflushed
Definition internal.h:145
limited limited
Definition internal.h:194
unsigneds sweep_schedule
Definition internal.h:219
unsigned unassigned
Definition internal.h:146
ints export_
Definition internal.h:111
unsigned * propagate
Definition internal.h:141
unsigned best_assigned
Definition internal.h:143
ints units
Definition internal.h:112
unsigneds levels
Definition internal.h:159
unsigned randec
Definition internal.h:109
heap schedule
Definition internal.h:134
unsigneds poisoned
Definition internal.h:161
sizes sorter
Definition internal.h:183
bool preprocessing
Definition internal.h:89
bool sweep_incomplete
Definition internal.h:218
bool stable
Definition internal.h:94
unsigneds shrinkable
Definition internal.h:164
watches * watches
Definition internal.h:179
double scoreshift
Definition internal.h:135
bool probing
Definition internal.h:90
flags * flags
Definition internal.h:118
unsigned target_assigned
Definition internal.h:144
kormat format
Definition internal.h:203
unsigneds clause
Definition internal.h:172
arena arena
Definition internal.h:175
heap scores
Definition internal.h:131
eliminated eliminated
Definition internal.h:125
classification classification
Definition internal.h:191
unsigneds etrail
Definition internal.h:126
statistics statistics_
Definition internal.h:247
unsigned_array trail
Definition internal.h:140
unsigned size
Definition internal.h:107
statches antecedents[2]
Definition internal.h:206
bool watching
Definition internal.h:100
unsigneds removable
Definition internal.h:163
bounds bounds
Definition internal.h:190
bool clause_satisfied
Definition internal.h:168
dataranks ranks
Definition internal.h:156
patches xorted[2]
Definition internal.h:208
termination termination
Definition internal.h:104
assigned * assigned
Definition internal.h:117
bool iterating
Definition internal.h:88
extensions extend
Definition internal.h:114
value * values
Definition internal.h:122
unsigned active
Definition internal.h:108
vectors vectors
Definition internal.h:176
reference last_learned[4]
Definition internal.h:181
reference first_reducible
Definition internal.h:177
struct kitten * kitten
Definition internal.h:212
mode mode
Definition internal.h:199
generator random
Definition internal.h:185
limits limits
Definition internal.h:195
unsigneds promote
Definition internal.h:162
averages averages[2]
Definition internal.h:186
bool clause_trivial
Definition internal.h:170
uint64_t ticks
Definition internal.h:201
remember last
Definition internal.h:196
bool clause_shrink
Definition internal.h:169
delays delays
Definition internal.h:192
unsigned tier2[2]
Definition internal.h:187
enabled enabled
Definition internal.h:193
frames frames
Definition internal.h:138
bool resolve_gate
Definition internal.h:210
unsigneds shadow
Definition internal.h:173
clause conflict
Definition internal.h:166
unsigneds witness
Definition internal.h:115
unsigned tier1[2]
Definition internal.h:187
char * prefix
Definition internal.h:204
double scinc
Definition internal.h:132
unsigned resolvent_size
Definition internal.h:153
mark * marks
Definition internal.h:120
unsigned vars
Definition internal.h:106
queue queue
Definition internal.h:129
unsigned level
Definition internal.h:137
bool warming
Definition internal.h:99
bool large_clauses_watched_after_binary_clauses
Definition internal.h:102
unsigneds minimize
Definition internal.h:160
bool inconsistent
Definition internal.h:87
volatile bool flagged
Definition internal.h:61
int(*volatile terminate)(void *)
Definition internal.h:64
volatile void * state
Definition internal.h:63
Definition watch.h:41
signed char mark
Definition value.h:8