ABC: A System for Sequential Synthesis and Verification
 
Loading...
Searching...
No Matches
Solver.h
Go to the documentation of this file.
1/****************************************************************************************[Solver.h]
2Copyright (c) 2003-2006, Niklas Een, Niklas Sorensson
3Copyright (c) 2007-2010, Niklas Sorensson
4
5Permission is hereby granted, free of charge, to any person obtaining a copy of this software and
6associated documentation files (the "Software"), to deal in the Software without restriction,
7including without limitation the rights to use, copy, modify, merge, publish, distribute,
8sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is
9furnished to do so, subject to the following conditions:
10
11The above copyright notice and this permission notice shall be included in all copies or
12substantial portions of the Software.
13
14THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT
15NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
16NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
17DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT
18OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
19**************************************************************************************************/
20
21#ifndef Minisat_Solver_h
22#define Minisat_Solver_h
23
24#include "sat/bsat2/Vec.h"
25#include "sat/bsat2/Heap.h"
26#include "sat/bsat2/Alg.h"
27#include "sat/bsat2/Options.h"
29
31
32namespace Minisat {
33
34//=================================================================================================
35// Solver -- the main class:
36
37class Solver {
38public:
39
40 // Constructor/Destructor:
41 //
42 Solver();
43 virtual ~Solver();
44
45 // Problem specification:
46 //
47 Var newVar (bool polarity = true, bool dvar = true); // Add a new variable with parameters specifying variable mode.
48
49 bool addClause (const vec<Lit>& ps); // Add a clause to the solver.
50 bool addEmptyClause(); // Add the empty clause, making the solver contradictory.
51 bool addClause (Lit p); // Add a unit clause to the solver.
52 bool addClause (Lit p, Lit q); // Add a binary clause to the solver.
53 bool addClause (Lit p, Lit q, Lit r); // Add a ternary clause to the solver.
54 bool addClause_( vec<Lit>& ps); // Add a clause to the solver without making superflous internal copy. Will
55 // change the passed vector 'ps'.
56
57 // Solving:
58 //
59 bool simplify (); // Removes already satisfied clauses.
60 bool solve (const vec<Lit>& assumps); // Search for a model that respects a given set of assumptions.
61 lbool solveLimited (const vec<Lit>& assumps); // Search for a model that respects a given set of assumptions (With resource constraints).
62 bool solve (); // Search without assumptions.
63 bool solve (Lit p); // Search for a model that respects a single assumption.
64 bool solve (Lit p, Lit q); // Search for a model that respects two assumptions.
65 bool solve (Lit p, Lit q, Lit r); // Search for a model that respects three assumptions.
66 bool okay () const; // FALSE means solver is in a conflicting state
67
68 void toDimacs (FILE* f, const vec<Lit>& assumps); // Write CNF to file in DIMACS-format.
69 void toDimacs (const char *file, const vec<Lit>& assumps);
70 void toDimacs (FILE* f, Clause& c, vec<Var>& map, Var& max);
71
72 // Convenience versions of 'toDimacs()':
73 void toDimacs (const char* file);
74 void toDimacs (const char* file, Lit p);
75 void toDimacs (const char* file, Lit p, Lit q);
76 void toDimacs (const char* file, Lit p, Lit q, Lit r);
77
78 // Variable mode:
79 //
80 void setPolarity (Var v, bool b); // Declare which polarity the decision heuristic should use for a variable. Requires mode 'polarity_user'.
81 void setDecisionVar (Var v, bool b); // Declare if a variable should be eligible for selection in the decision heuristic.
82
83 // Read state:
84 //
85 lbool value (Var x) const; // The current value of a variable.
86 lbool value (Lit p) const; // The current value of a literal.
87 lbool modelValue (Var x) const; // The value of a variable in the last model. The last call to solve must have been satisfiable.
88 lbool modelValue (Lit p) const; // The value of a literal in the last model. The last call to solve must have been satisfiable.
89 int nAssigns () const; // The current number of assigned literals.
90 int nClauses () const; // The current number of original clauses.
91 int nLearnts () const; // The current number of learnt clauses.
92 int nVars () const; // The current number of variables.
93 int nFreeVars () const;
94
95 // Resource contraints:
96 //
97 void setConfBudget(int64_t x);
98 void setPropBudget(int64_t x);
99 void budgetOff();
100 void interrupt(); // Trigger a (potentially asynchronous) interruption of the solver.
101 void clearInterrupt(); // Clear interrupt indicator flag.
102
103 // Memory managment:
104 //
105 virtual void garbageCollect();
106 void checkGarbage(double gf);
107 void checkGarbage();
108
109 // Extra results: (read-only member variable)
110 //
111 vec<lbool> model; // If problem is satisfiable, this vector contains the model (if any).
112 vec<Lit> conflict; // If problem is unsatisfiable (possibly under assumptions),
113 // this vector represent the final conflict clause expressed in the assumptions.
114
115 // Mode of operation:
116 //
118 double var_decay;
123 int ccmin_mode; // Controls conflict clause minimization (0=none, 1=basic, 2=deep).
124 int phase_saving; // Controls the level of phase saving (0=none, 1=limited, 2=full).
125 bool rnd_pol; // Use random polarities for branching heuristics.
126 bool rnd_init_act; // Initialize variable activities with a small random value.
127 double garbage_frac; // The fraction of wasted memory allowed before a garbage collection is triggered.
128
129 int restart_first; // The initial restart limit. (default 100)
130 double restart_inc; // The factor with which the restart limit is multiplied in each restart. (default 1.5)
131 double learntsize_factor; // The intitial limit for learnt clauses is a factor of the original clauses. (default 1 / 3)
132 double learntsize_inc; // The limit for learnt clauses is multiplied with this factor each restart. (default 1.1)
133
136
137 // Statistics: (read-only member variable)
138 //
141
142protected:
143
144 // Helper structures:
145 //
146 struct VarData { CRef reason; int level; };
147 static inline VarData mkVarData(CRef cr, int l){ VarData d = {cr, l}; return d; }
148
149 struct Watcher {
152 Watcher(CRef cr, Lit p) : cref(cr), blocker(p) {}
153 bool operator==(const Watcher& w) const { return cref == w.cref; }
154 bool operator!=(const Watcher& w) const { return cref != w.cref; }
155 };
156
158 {
160 WatcherDeleted(const ClauseAllocator& _ca) : ca(_ca) {}
161 bool operator()(const Watcher& w) const { return ca[w.cref].mark() == 1; }
162 };
163
164 struct VarOrderLt {
166 bool operator () (Var x, Var y) const { return activity[x] > activity[y]; }
167 VarOrderLt(const vec<double>& act) : activity(act) { }
168 };
169
170 // Solver state:
171 //
172 bool ok; // If FALSE, the constraints are already unsatisfiable. No part of the solver state may be used!
173 vec<CRef> clauses; // List of problem clauses.
174 vec<CRef> learnts; // List of learnt clauses.
175 double cla_inc; // Amount to bump next clause with.
176 vec<double> activity; // A heuristic measurement of the activity of a variable.
177 double var_inc; // Amount to bump next variable with.
179 watches; // 'watches[lit]' is a list of constraints watching 'lit' (will go there if literal becomes true).
180 vec<lbool> assigns; // The current assignments.
181 vec<char> polarity; // The preferred polarity of each variable.
182 vec<char> decision; // Declares if a variable is eligible for selection in the decision heuristic.
183 vec<Lit> trail; // Assignment stack; stores all assigments made in the order they were made.
184 vec<int> trail_lim; // Separator indices for different decision levels in 'trail'.
185 vec<VarData> vardata; // Stores reason and level for each variable.
186 int qhead; // Head of queue (as index into the trail -- no more explicit propagation queue in MiniSat).
187 int simpDB_assigns; // Number of top-level assignments since last execution of 'simplify()'.
188 int64_t simpDB_props; // Remaining number of propagations that must be made before next execution of 'simplify()'.
189 vec<Lit> assumptions; // Current set of assumptions provided to solve by the user.
190 Heap<VarOrderLt> order_heap; // A priority queue of variables ordered with respect to the variable activity.
191 double progress_estimate;// Set by 'search()'.
192 bool remove_satisfied; // Indicates whether possibly inefficient linear scan for satisfied clauses should be performed in 'simplify'.
193
195
196 // Temporaries (to reduce allocation overhead). Each variable is prefixed by the method in which it is
197 // used, exept 'seen' wich is used in several places.
198 //
203
207
208 // Resource contraints:
209 //
210 int64_t conflict_budget; // -1 means no budget.
211 int64_t propagation_budget; // -1 means no budget.
213
214 // Main internal methods:
215 //
216 void insertVarOrder (Var x); // Insert a variable in the decision order priority queue.
217 Lit pickBranchLit (); // Return the next decision variable.
218 void newDecisionLevel (); // Begins a new decision level.
219 void uncheckedEnqueue (Lit p, CRef from = CRef_Undef); // Enqueue a literal. Assumes value of literal is undefined.
220 bool enqueue (Lit p, CRef from = CRef_Undef); // Test if fact 'p' contradicts current state, enqueue otherwise.
221 CRef propagate (); // Perform unit propagation. Returns possibly conflicting clause.
222 void cancelUntil (int level); // Backtrack until a certain level.
223 void analyze (CRef confl, vec<Lit>& out_learnt, int& out_btlevel); // (bt = backtrack)
224 void analyzeFinal (Lit p, vec<Lit>& out_conflict); // COULD THIS BE IMPLEMENTED BY THE ORDINARIY "analyze" BY SOME REASONABLE GENERALIZATION?
225 bool litRedundant (Lit p, uint32_t abstract_levels); // (helper method for 'analyze()')
226 lbool search (int nof_conflicts); // Search for a given number of conflicts.
227 lbool solve_ (); // Main solve method (assumptions given in 'assumptions').
228 void reduceDB (); // Reduce the set of learnt clauses.
229 void removeSatisfied (vec<CRef>& cs); // Shrink 'cs' to contain only non-satisfied clauses.
230 void rebuildOrderHeap ();
231
232 // Maintaining Variable/Clause activity:
233 //
234 void varDecayActivity (); // Decay all variables with the specified factor. Implemented by increasing the 'bump' value instead.
235 void varBumpActivity (Var v, double inc); // Increase a variable with the current 'bump' value.
236 void varBumpActivity (Var v); // Increase a variable with the current 'bump' value.
237 void claDecayActivity (); // Decay all clauses with the specified factor. Implemented by increasing the 'bump' value instead.
238 void claBumpActivity (Clause& c); // Increase a clause with the current 'bump' value.
239
240 // Operations on clauses:
241 //
242 void attachClause (CRef cr); // Attach a clause to watcher lists.
243 void detachClause (CRef cr, bool strict = false); // Detach a clause to watcher lists.
244 void removeClause (CRef cr); // Detach and free a clause.
245 bool locked (const Clause& c) const; // Returns TRUE if a clause is a reason for some implication in the current state.
246 bool satisfied (const Clause& c) const; // Returns TRUE if a clause is satisfied in the current state.
247
248 void relocAll (ClauseAllocator& to);
249
250 // Misc:
251 //
252 int decisionLevel () const; // Gives the current decisionlevel.
253 uint32_t abstractLevel (Var x) const; // Used to represent an abstraction of sets of decision levels.
254 CRef reason (Var x) const;
255 int level (Var x) const;
256 double progressEstimate () const; // DELETE THIS ?? IT'S NOT VERY USEFUL ...
257 bool withinBudget () const;
258
259 // Static helpers:
260 //
261
262 // Returns a random float 0 <= x < 1. Seed must never be 0.
263 static inline double drand(double& seed) {
264 seed *= 1389796;
265 int q = (int)(seed / 2147483647);
266 seed -= (double)q * 2147483647;
267 return seed / 2147483647; }
268
269 // Returns a random integer 0 <= x < size. Seed must never be 0.
270 static inline int irand(double& seed, int size) {
271 return (int)(drand(seed) * size); }
272};
273
274
275//=================================================================================================
276// Implementation of inline methods:
277
278inline CRef Solver::reason(Var x) const { return vardata[x].reason; }
279inline int Solver::level (Var x) const { return vardata[x].level; }
280
282 if (!order_heap.inHeap(x) && decision[x]) order_heap.insert(x); }
283
284inline void Solver::varDecayActivity() { var_inc *= (1 / var_decay); }
286inline void Solver::varBumpActivity(Var v, double inc) {
287 if ( (activity[v] += inc) > 1e100 ) {
288 // Rescale:
289 for (int i = 0; i < nVars(); i++)
290 activity[i] *= 1e-100;
291 var_inc *= 1e-100; }
292
293 // Update order_heap with respect to new activity:
294 if (order_heap.inHeap(v))
295 order_heap.decrease(v); }
296
299 if ( (c.activity() += cla_inc) > 1e20 ) {
300 // Rescale:
301 for (int i = 0; i < learnts.size(); i++)
302 ca[learnts[i]].activity() *= (float)1e-20;
303 cla_inc *= 1e-20; } }
304
306inline void Solver::checkGarbage(double gf){
307 if (ca.wasted() > ca.size() * gf)
308 garbageCollect(); }
309
310// NOTE: enqueue does not set the ok flag! (only public methods do)
311inline bool Solver::enqueue (Lit p, CRef from) { return value(p) != l_Undef ? value(p) != l_False : (uncheckedEnqueue(p, from), true); }
312inline bool Solver::addClause (const vec<Lit>& ps) { ps.copyTo(add_tmp); return addClause_(add_tmp); }
313inline bool Solver::addEmptyClause () { add_tmp.clear(); return addClause_(add_tmp); }
314inline bool Solver::addClause (Lit p) { add_tmp.clear(); add_tmp.push(p); return addClause_(add_tmp); }
315inline bool Solver::addClause (Lit p, Lit q) { add_tmp.clear(); add_tmp.push(p); add_tmp.push(q); return addClause_(add_tmp); }
316inline bool Solver::addClause (Lit p, Lit q, Lit r) { add_tmp.clear(); add_tmp.push(p); add_tmp.push(q); add_tmp.push(r); return addClause_(add_tmp); }
317inline bool Solver::locked (const Clause& c) const { return value(c[0]) == l_True && reason(var(c[0])) != CRef_Undef && ca.lea(reason(var(c[0]))) == &c; }
318inline void Solver::newDecisionLevel() { trail_lim.push(trail.size()); }
319
320inline int Solver::decisionLevel () const { return trail_lim.size(); }
321inline uint32_t Solver::abstractLevel (Var x) const { return 1 << (level(x) & 31); }
322inline lbool Solver::value (Var x) const { return assigns[x]; }
323inline lbool Solver::value (Lit p) const { return assigns[var(p)] ^ sign(p); }
324inline lbool Solver::modelValue (Var x) const { return model[x]; }
325inline lbool Solver::modelValue (Lit p) const { return model[var(p)] ^ sign(p); }
326inline int Solver::nAssigns () const { return trail.size(); }
327inline int Solver::nClauses () const { return clauses.size(); }
328inline int Solver::nLearnts () const { return learnts.size(); }
329inline int Solver::nVars () const { return vardata.size(); }
330inline int Solver::nFreeVars () const { return (int)dec_vars - (trail_lim.size() == 0 ? trail.size() : trail_lim[0]); }
331inline void Solver::setPolarity (Var v, bool b) { polarity[v] = b; }
332inline void Solver::setDecisionVar(Var v, bool b)
333{
334 if ( b && !decision[v]) dec_vars++;
335 else if (!b && decision[v]) dec_vars--;
336
337 decision[v] = b;
339}
340inline void Solver::setConfBudget(int64_t x){ conflict_budget = conflicts + x; }
342inline void Solver::interrupt(){ asynch_interrupt = true; }
345inline bool Solver::withinBudget() const {
346 return !asynch_interrupt &&
347 (conflict_budget < 0 || conflicts < (uint64_t)conflict_budget) &&
349
350// FIXME: after the introduction of asynchronous interrruptions the solve-versions that return a
351// pure bool do not give a safe interface. Either interrupts must be possible to turn off here, or
352// all calls to solve must return an 'lbool'. I'm not yet sure which I prefer.
353inline bool Solver::solve () { budgetOff(); assumptions.clear(); return solve_() == l_True; }
354inline bool Solver::solve (Lit p) { budgetOff(); assumptions.clear(); assumptions.push(p); return solve_() == l_True; }
355inline bool Solver::solve (Lit p, Lit q) { budgetOff(); assumptions.clear(); assumptions.push(p); assumptions.push(q); return solve_() == l_True; }
356inline bool Solver::solve (Lit p, Lit q, Lit r) { budgetOff(); assumptions.clear(); assumptions.push(p); assumptions.push(q); assumptions.push(r); return solve_() == l_True; }
357inline bool Solver::solve (const vec<Lit>& assumps){ budgetOff(); assumps.copyTo(assumptions); return solve_() == l_True; }
358inline lbool Solver::solveLimited (const vec<Lit>& assumps){ assumps.copyTo(assumptions); return solve_(); }
359inline bool Solver::okay () const { return ok; }
360
361inline void Solver::toDimacs (const char* file){ vec<Lit> as; toDimacs(file, as); }
362inline void Solver::toDimacs (const char* file, Lit p){ vec<Lit> as; as.push(p); toDimacs(file, as); }
363inline void Solver::toDimacs (const char* file, Lit p, Lit q){ vec<Lit> as; as.push(p); as.push(q); toDimacs(file, as); }
364inline void Solver::toDimacs (const char* file, Lit p, Lit q, Lit r){ vec<Lit> as; as.push(p); as.push(q); as.push(r); toDimacs(file, as); }
365
366
367//=================================================================================================
368// Debug etc:
369
370
371//=================================================================================================
372}
373
375
376#endif
unsigned int uint32_t
Definition Fxch.h:32
#define ABC_NAMESPACE_CXX_HEADER_START
#define ABC_NAMESPACE_CXX_HEADER_END
#define l_True
Definition bmcBmcS.c:35
#define l_Undef
Definition bmcBmcS.c:34
#define l_False
Definition bmcBmcS.c:36
ABC_NAMESPACE_IMPL_START typedef signed char value
float & activity()
double learntsize_factor
Definition Solver.h:131
void clearInterrupt()
Definition Solver.h:343
vec< Lit > conflict
Definition Solver.h:112
int64_t simpDB_props
Definition Solver.h:188
vec< double > activity
Definition Solver.h:176
Lit pickBranchLit()
Definition Solver.cpp:227
uint64_t tot_literals
Definition Solver.h:140
int nFreeVars() const
Definition Solver.h:330
bool addClause_(vec< Lit > &ps)
Definition Solver.cpp:134
uint64_t clauses_literals
Definition Solver.h:140
CRef propagate()
Definition Solver.cpp:451
lbool search(int nof_conflicts)
Definition Solver.cpp:616
vec< Lit > analyze_stack
Definition Solver.h:200
void toDimacs(FILE *f, const vec< Lit > &assumps)
Definition Solver.cpp:833
uint64_t starts
Definition Solver.h:139
double learntsize_inc
Definition Solver.h:132
double random_seed
Definition Solver.h:121
int simpDB_assigns
Definition Solver.h:187
uint64_t propagations
Definition Solver.h:139
vec< lbool > assigns
Definition Solver.h:180
lbool solveLimited(const vec< Lit > &assumps)
Definition Solver.h:358
int nLearnts() const
Definition Solver.h:328
void checkGarbage()
Definition Solver.h:305
void cancelUntil(int level)
Definition Solver.cpp:209
void budgetOff()
Definition Solver.h:344
void claDecayActivity()
Definition Solver.h:297
void varDecayActivity()
Definition Solver.h:284
bool litRedundant(Lit p, uint32_t abstract_levels)
Definition Solver.cpp:363
bool remove_satisfied
Definition Solver.h:192
void claBumpActivity(Clause &c)
Definition Solver.h:298
lbool modelValue(Var x) const
Definition Solver.h:324
int nVars() const
Definition Solver.h:329
virtual void garbageCollect()
Definition Solver.cpp:915
double progressEstimate() const
Definition Solver.cpp:710
uint64_t rnd_decisions
Definition Solver.h:139
void relocAll(ClauseAllocator &to)
Definition Solver.cpp:878
int64_t propagation_budget
Definition Solver.h:211
vec< char > seen
Definition Solver.h:199
bool locked(const Clause &c) const
Definition Solver.h:317
void removeClause(CRef cr)
Definition Solver.cpp:190
int64_t conflict_budget
Definition Solver.h:210
double var_inc
Definition Solver.h:177
void reduceDB()
Definition Solver.cpp:527
void newDecisionLevel()
Definition Solver.h:318
bool rnd_init_act
Definition Solver.h:126
void detachClause(CRef cr, bool strict=false)
Definition Solver.cpp:173
double clause_decay
Definition Solver.h:119
CRef reason(Var x) const
Definition Solver.h:278
double restart_inc
Definition Solver.h:130
void rebuildOrderHeap()
Definition Solver.cpp:561
void setPropBudget(int64_t x)
Definition Solver.h:341
void analyze(CRef confl, vec< Lit > &out_learnt, int &out_btlevel)
Definition Solver.cpp:266
void attachClause(CRef cr)
Definition Solver.cpp:164
int level(Var x) const
Definition Solver.h:279
bool luby_restart
Definition Solver.h:122
vec< Lit > add_tmp
Definition Solver.h:202
void removeSatisfied(vec< CRef > &cs)
Definition Solver.cpp:547
static double drand(double &seed)
Definition Solver.h:263
void analyzeFinal(Lit p, vec< Lit > &out_conflict)
Definition Solver.cpp:401
uint64_t conflicts
Definition Solver.h:139
double var_decay
Definition Solver.h:118
bool solve()
Definition Solver.h:353
double random_var_freq
Definition Solver.h:120
void insertVarOrder(Var x)
Definition Solver.h:281
bool addClause(const vec< Lit > &ps)
Definition Solver.h:312
bool okay() const
Definition Solver.h:359
uint64_t learnts_literals
Definition Solver.h:140
double max_learnts
Definition Solver.h:204
vec< int > trail_lim
Definition Solver.h:184
int learntsize_adjust_cnt
Definition Solver.h:206
bool withinBudget() const
Definition Solver.h:345
double cla_inc
Definition Solver.h:175
uint32_t abstractLevel(Var x) const
Definition Solver.h:321
vec< char > polarity
Definition Solver.h:181
bool addEmptyClause()
Definition Solver.h:313
vec< lbool > model
Definition Solver.h:111
OccLists< Lit, vec< Watcher >, WatcherDeleted > watches
Definition Solver.h:179
vec< Lit > trail
Definition Solver.h:183
ClauseAllocator ca
Definition Solver.h:194
static int irand(double &seed, int size)
Definition Solver.h:270
static VarData mkVarData(CRef cr, int l)
Definition Solver.h:147
virtual ~Solver()
Definition Solver.cpp:104
void varBumpActivity(Var v, double inc)
Definition Solver.h:286
uint64_t dec_vars
Definition Solver.h:140
vec< VarData > vardata
Definition Solver.h:185
void setConfBudget(int64_t x)
Definition Solver.h:340
vec< char > decision
Definition Solver.h:182
lbool solve_()
Definition Solver.cpp:753
uint64_t max_literals
Definition Solver.h:140
vec< Lit > analyze_toclear
Definition Solver.h:201
void setPolarity(Var v, bool b)
Definition Solver.h:331
int decisionLevel() const
Definition Solver.h:320
Var newVar(bool polarity=true, bool dvar=true)
Definition Solver.cpp:116
int nAssigns() const
Definition Solver.h:326
double garbage_frac
Definition Solver.h:127
bool simplify()
Definition Solver.cpp:579
void setDecisionVar(Var v, bool b)
Definition Solver.h:332
vec< Lit > assumptions
Definition Solver.h:189
vec< CRef > learnts
Definition Solver.h:174
double learntsize_adjust_inc
Definition Solver.h:135
double learntsize_adjust_confl
Definition Solver.h:205
double progress_estimate
Definition Solver.h:191
lbool value(Var x) const
Definition Solver.h:322
vec< CRef > clauses
Definition Solver.h:173
uint64_t decisions
Definition Solver.h:139
int nClauses() const
Definition Solver.h:327
void interrupt()
Definition Solver.h:342
void uncheckedEnqueue(Lit p, CRef from=CRef_Undef)
Definition Solver.cpp:431
uint64_t solves
Definition Solver.h:139
int restart_first
Definition Solver.h:129
bool asynch_interrupt
Definition Solver.h:212
bool enqueue(Lit p, CRef from=CRef_Undef)
Definition Solver.h:311
Heap< VarOrderLt > order_heap
Definition Solver.h:190
int learntsize_adjust_start_confl
Definition Solver.h:134
bool satisfied(const Clause &c) const
Definition Solver.cpp:200
void copyTo(vec< T > &copy) const
Definition Vec.h:92
void push(void)
Definition Vec.h:75
void map()
Cube * p
Definition exorList.c:222
Definition Alg.h:28
const CRef CRef_Undef
int var(Lit p)
Definition SolverTypes.h:64
RegionAllocator< uint32_t >::Ref CRef
bool sign(Lit p)
Definition SolverTypes.h:63
VarOrderLt(const vec< double > &act)
Definition Solver.h:167
bool operator()(Var x, Var y) const
Definition Solver.h:166
const vec< double > & activity
Definition Solver.h:165
bool operator()(const Watcher &w) const
Definition Solver.h:161
const ClauseAllocator & ca
Definition Solver.h:159
WatcherDeleted(const ClauseAllocator &_ca)
Definition Solver.h:160
Watcher(CRef cr, Lit p)
Definition Solver.h:152
bool operator==(const Watcher &w) const
Definition Solver.h:153
bool operator!=(const Watcher &w) const
Definition Solver.h:154
Definition file.h:23