ABC: A System for Sequential Synthesis and Verification
 
Loading...
Searching...
No Matches
Gluco2::SimpSolver Class Reference

#include <SimpSolver.h>

Inheritance diagram for Gluco2::SimpSolver:
Collaboration diagram for Gluco2::SimpSolver:

Classes

struct  ClauseDeleted
 
struct  ElimLt
 

Public Member Functions

 SimpSolver ()
 
 ~SimpSolver ()
 
Var newVar (bool polarity=true, bool dvar=true)
 
void addVar (Var v)
 
bool addClause (const vec< Lit > &ps)
 
bool addEmptyClause ()
 
bool addClause (Lit p)
 
bool addClause (Lit p, Lit q)
 
bool addClause (Lit p, Lit q, Lit r)
 
bool addClause_ (vec< Lit > &ps)
 
bool substitute (Var v, Lit x)
 
void setFrozen (Var v, bool b)
 
bool isEliminated (Var v) const
 
bool solve (const vec< Lit > &assumps, bool do_simp=true, bool turn_off_simp=false)
 
lbool solveLimited (const vec< Lit > &assumps, bool do_simp=true, bool turn_off_simp=false)
 
int solveLimited (int *lit0, int nlits, bool do_simp=false, bool turn_off_simp=false)
 
bool solve (bool do_simp=true, bool turn_off_simp=false)
 
bool solve (Lit p, bool do_simp=true, bool turn_off_simp=false)
 
bool solve (Lit p, Lit q, bool do_simp=true, bool turn_off_simp=false)
 
bool solve (Lit p, Lit q, Lit r, bool do_simp=true, bool turn_off_simp=false)
 
bool eliminate (bool turn_off_elim=false)
 
void prelocate (int base_var_num)
 
virtual void reset ()
 
virtual void garbageCollect ()
 
- Public Member Functions inherited from Gluco2::Solver
 Solver ()
 
virtual ~Solver ()
 
void sat_solver_set_var_fanin_lit (int, int, int)
 
void sat_solver_start_new_round ()
 
void sat_solver_mark_cone (int)
 
void sat_solver_set_jftr (int)
 
int sat_solver_jftr ()
 
void sat_solver_reset ()
 
Var newVar (bool polarity=true, bool dvar=true)
 
void addVar (Var v)
 
bool addClause (const vec< Lit > &ps)
 
bool addEmptyClause ()
 
bool addClause (Lit p)
 
bool addClause (Lit p, Lit q)
 
bool addClause (Lit p, Lit q, Lit r)
 
bool addClause_ (vec< Lit > &ps)
 
bool simplify ()
 
bool solve (const vec< Lit > &assumps)
 
lbool solveLimited (const vec< Lit > &assumps)
 
bool solve ()
 
bool solve (Lit p)
 
bool solve (Lit p, Lit q)
 
bool solve (Lit p, Lit q, Lit r)
 
bool okay () const
 
void toDimacs (FILE *f, const vec< Lit > &assumps)
 
void toDimacs (const char *file, const vec< Lit > &assumps)
 
void toDimacs (FILE *f, Clause &c, vec< Var > &map, Var &max)
 
void printLit (Lit l)
 
void printClause (CRef c)
 
void printInitialClause (CRef c)
 
void toDimacs (const char *file)
 
void toDimacs (const char *file, Lit p)
 
void toDimacs (const char *file, Lit p, Lit q)
 
void toDimacs (const char *file, Lit p, Lit q, Lit r)
 
void setPolarity (Var v, bool b)
 
void setDecisionVar (Var v, bool b, bool use_oheap=true)
 
lbool value (Var x) const
 
lbool value (Lit p) const
 
lbool modelValue (Var x) const
 
lbool modelValue (Lit p) const
 
int nAssigns () const
 
int nClauses () const
 
int nLearnts () const
 
int nVars () const
 
int nFreeVars () const
 
int * getCex () const
 
int level (Var x) const
 
void setIncrementalMode ()
 
void initNbInitialVars (int nb)
 
void printIncrementalStats ()
 
void setConfBudget (int64_t x)
 
void setPropBudget (int64_t x)
 
void budgetOff ()
 
void interrupt ()
 
void clearInterrupt ()
 
void checkGarbage (double gf)
 
void checkGarbage ()
 
void markTill (Var v0, int nlim)
 
void markApprox (Var v0, Var v1, int nlim)
 
void prelocate (int var_num)
 
void setVarFaninLits (Var v, Lit lit1, Lit lit2)
 
void setVarFaninLits (int v, int lit1, int lit2)
 
void setNewRound ()
 
void markCone (Var v)
 
void setJust (int njftr)
 
bool isRoundWatch (Var v) const
 
void justReset ()
 
double varActivity (int v) const
 
int varPolarity (int v)
 
int justUsage () const
 
int solveLimited (int *, int nlits)
 

Public Attributes

int parsing
 
int grow
 
int clause_lim
 
int subsumption_lim
 
double simp_garbage_frac
 
bool use_asymm
 
bool use_rcheck
 
bool use_elim
 
int merges
 
int asymm_lits
 
int eliminated_vars
 
int eliminated_clauses
 
- Public Attributes inherited from Gluco2::Solver
int SolverType
 
void * pCnfMan
 
int(* pCnfFunc )(void *p, int, int *)
 
int nCallConfl
 
bool terminate_search_early
 
int * pstop
 
uint64_t nRuntimeLimit
 
vec< int > user_vec
 
vec< Lituser_lits
 
int jftr
 
vec< lboolmodel
 
vec< Litconflict
 
int verbosity
 
int verbEveryConflicts
 
int showModel
 
double K
 
double R
 
double sizeLBDQueue
 
double sizeTrailQueue
 
int firstReduceDB
 
int incReduceDB
 
int specialIncReduceDB
 
unsigned int lbLBDFrozenClause
 
int lbSizeMinimizingClause
 
unsigned int lbLBDMinimizingClause
 
double var_decay
 
double clause_decay
 
double random_var_freq
 
double random_seed
 
int ccmin_mode
 
int phase_saving
 
bool rnd_pol
 
bool rnd_init_act
 
double garbage_frac
 
FILE * certifiedOutput
 
bool certifiedUNSAT
 
int64_t nbRemovedClauses
 
int64_t nbReducedClauses
 
int64_t nbDL2
 
int64_t nbBin
 
int64_t nbUn
 
int64_t nbReduceDB
 
int64_t solves
 
int64_t starts
 
int64_t decisions
 
int64_t rnd_decisions
 
int64_t propagations
 
int64_t conflicts
 
int64_t conflictsRestarts
 
int64_t nbstopsrestarts
 
int64_t nbstopsrestartssame
 
int64_t lastblockatrestart
 
int64_t dec_vars
 
int64_t clauses_literals
 
int64_t learnts_literals
 
int64_t max_literals
 
int64_t tot_literals
 
vec< LitJustModel
 

Protected Member Functions

lbool solve_ (bool do_simp=true, bool turn_off_simp=false)
 
bool asymm (Var v, CRef cr)
 
bool asymmVar (Var v)
 
void updateElimHeap (Var v)
 
void gatherTouchedClauses ()
 
bool merge (const Clause &_ps, const Clause &_qs, Var v, vec< Lit > &out_clause)
 
bool merge (const Clause &_ps, const Clause &_qs, Var v, int &size)
 
bool backwardSubsumptionCheck (bool verbose=false)
 
bool eliminateVar (Var v)
 
void extendModel ()
 
void removeClause (CRef cr)
 
bool strengthenClause (CRef cr, Lit l)
 
void cleanUpClauses ()
 
bool implied (const vec< Lit > &c)
 
void relocAll (ClauseAllocator &to)
 
- Protected Member Functions inherited from Gluco2::Solver
void insertVarOrder (Var x)
 
Lit pickBranchLit ()
 
void newDecisionLevel ()
 
void uncheckedEnqueue (Lit p, CRef from=CRef_Undef)
 
bool enqueue (Lit p, CRef from=CRef_Undef)
 
CRef propagate ()
 
void cancelUntil (int level)
 
void analyze (CRef confl, vec< Lit > &out_learnt, vec< Lit > &selectors, int &out_btlevel, unsigned int &nblevels, unsigned int &szWithoutSelectors)
 
void analyzeFinal (Lit p, vec< Lit > &out_conflict)
 
bool litRedundant (Lit p, uint32_t abstract_levels)
 
lbool search (int nof_conflicts)
 
lbool solve_ ()
 
void reduceDB ()
 
void removeSatisfied (vec< CRef > &cs)
 
void rebuildOrderHeap ()
 
void varDecayActivity ()
 
void varBumpActivity (Var v, double inc)
 
void varBumpActivity (Var v)
 
void claDecayActivity ()
 
void claBumpActivity (Clause &c)
 
void attachClause (CRef cr)
 
void detachClause (CRef cr, bool strict=false)
 
void removeClause (CRef cr)
 
bool locked (const Clause &c) const
 
bool satisfied (const Clause &c) const
 
unsigned int computeLBD (const vec< Lit > &lits, int end=-1)
 
unsigned int computeLBD (const Clause &c)
 
void minimisationWithBinaryResolution (vec< Lit > &out_learnt)
 
void relocAll (ClauseAllocator &to)
 
int decisionLevel () const
 
uint32_t abstractLevel (Var x) const
 
CRef reason (Var x) const
 
double progressEstimate () const
 
bool withinBudget () const
 
bool isSelector (Var v)
 
void uncheckedEnqueue2 (Lit p, CRef from=CRef_Undef)
 
void addJwatch (Var host, Var member, int index)
 
void inplace_sort (Var v)
 
bool isTwoFanin (Var v) const
 
bool isAND (Var v) const
 
bool isJReason (Var v) const
 
Lit getFaninLit0 (Var v) const
 
Lit getFaninLit1 (Var v) const
 
bool getFaninC0 (Var v) const
 
bool getFaninC1 (Var v) const
 
Var getFaninVar0 (Var v) const
 
Var getFaninVar1 (Var v) const
 
Lit getFaninPlt0 (Var v) const
 
Lit getFaninPlt1 (Var v) const
 
Lit maxActiveLit (Lit lit0, Lit lit1) const
 
Lit gateJustFanin (Var v) const
 
void gateAddJwatch (Var v, int index)
 
CRef gatePropagateCheck (Var v, Var t)
 
CRef gatePropagateCheckThis (Var v)
 
CRef gatePropagateCheckFanout (Var v, Lit lfo)
 
void setItpcSize (int sz)
 
void updateJustActivity (Var v)
 
void ResetJustData (bool fCleanMemory)
 
Lit pickJustLit (int &index)
 
void justCheck ()
 
void pushJustQueue (Var v, int index)
 
void restoreJustQueue (int level)
 
void gateClearJwatch (Var v, int backtrack_level)
 
CRef gatePropagate (Lit p)
 
CRef interpret (Var v, Var t)
 
CRef castCRef (Lit p)
 
CRef getConfClause (CRef r)
 
CRef Var2CRef (Var v) const
 
Var CRef2Var (CRef cr) const
 
bool isGateCRef (CRef cr) const
 
void loadJust_rec (Var v)
 
void loadJust ()
 

Protected Attributes

int elimorder
 
bool use_simplification
 
vec< uint32_telimclauses
 
vec< char > touched
 
OccLists< Var, vec< CRef >, ClauseDeletedoccurs
 
vec< int > n_occ
 
Heap< ElimLtelim_heap
 
Queue< CRefsubsumption_queue
 
vec< char > frozen
 
vec< char > eliminated
 
int bwdsub_assigns
 
int n_touched
 
CRef bwdsub_tmpunit
 
- Protected Attributes inherited from Gluco2::Solver
long curRestart
 
int lastIndexRed
 
bool ok
 
double cla_inc
 
vec< double > activity
 
double var_inc
 
OccLists< Lit, vec< Watcher >, WatcherDeletedwatches
 
OccLists< Lit, vec< Watcher >, WatcherDeletedwatchesBin
 
vec< CRefclauses
 
vec< CReflearnts
 
vec< lboolassigns
 
vec< char > polarity
 
vec< char > decision
 
vec< Littrail
 
vec< int > nbpos
 
vec< int > trail_lim
 
vec< VarDatavardata
 
int qhead
 
int simpDB_assigns
 
int64_t simpDB_props
 
vec< Litassumptions
 
Heap< VarOrderLtorder_heap
 
double progress_estimate
 
bool remove_satisfied
 
vec< unsigned int > permDiff
 
ClauseAllocator ca
 
int nbclausesbeforereduce
 
bqueue< unsigned int > trailQueue
 
bqueue< unsigned int > lbdQueue
 
float sumLBD
 
int sumAssumptions
 
vec< char > seen
 
vec< Litanalyze_stack
 
vec< Litanalyze_toclear
 
vec< Litadd_tmp
 
unsigned int MYFLAG
 
double max_learnts
 
double learntsize_adjust_confl
 
int learntsize_adjust_cnt
 
int64_t conflict_budget
 
int64_t propagation_budget
 
bool asynch_interrupt
 
int incremental
 
int nbVarsInitialFormula
 
double totalTime4Sat
 
double totalTime4Unsat
 
int nbSatCalls
 
int nbUnsatCalls
 
vec< int > assumptionPositions
 
vec< int > initialPositions
 
bool heap_rescale
 
vec< NodeDatavar2NodeData
 
vec< unsigned > var2TravId
 
vec< Litvar2Fanout0
 
vec< Litvar2FanoutN
 
CRef itpc
 
unsigned travId_prev
 
unsigned travId
 
int jhead
 
Heap2< JustOrderLt2, JustKeyjheap
 
vec< int > jlevel
 
vec< int > jnext
 
int nSkipMark
 
vec< VarvMarked
 

Additional Inherited Members

- Static Protected Member Functions inherited from Gluco2::Solver
static VarData mkVarData (CRef cr, int l)
 
static double drand (double &seed)
 
static int irand (double &seed, int size)
 
static NodeData mkNodeData ()
 

Detailed Description

Definition at line 36 of file SimpSolver.h.

Constructor & Destructor Documentation

◆ SimpSolver()

SimpSolver::SimpSolver ( )

Definition at line 48 of file SimpSolver2.cpp.

48 :
49 grow (opt_grow)
50 , clause_lim (opt_clause_lim)
51 , subsumption_lim (opt_subsumption_lim)
52 , simp_garbage_frac (opt_simp_garbage_frac)
53 , use_asymm (opt_use_asymm)
54 , use_rcheck (opt_use_rcheck)
55 , use_elim (opt_use_elim)
56 , merges (0)
57 , asymm_lits (0)
58 , eliminated_vars (0)
60 , elimorder (1)
61 , use_simplification (true)
64 , bwdsub_assigns (0)
65 , n_touched (0)
66{
67 vec<Lit> dummy(1,lit_Undef);
68 ca.extra_clause_field = true; // NOTE: must happen before allocating the dummy clause below.
69 bwdsub_tmpunit = ca.alloc(dummy);
70 remove_satisfied = false;
71 parsing = 0;
72}
Heap< ElimLt > elim_heap
Definition SimpSolver.h:153
OccLists< Var, vec< CRef >, ClauseDeleted > occurs
Definition SimpSolver.h:151
ClauseAllocator ca
Definition Solver.h:267
bool remove_satisfied
Definition Solver.h:259
const Lit lit_Undef
Definition SolverTypes.h:83

◆ ~SimpSolver()

SimpSolver::~SimpSolver ( )

Definition at line 75 of file SimpSolver2.cpp.

76{
77}

Member Function Documentation

◆ addClause() [1/4]

bool Gluco2::SimpSolver::addClause ( const vec< Lit > & ps)
inline

Definition at line 198 of file SimpSolver.h.

198{ ps.copyTo(add_tmp); return addClause_(add_tmp); }
bool addClause_(vec< Lit > &ps)
vec< Lit > add_tmp
Definition Solver.h:282
Here is the call graph for this function:
Here is the caller graph for this function:

◆ addClause() [2/4]

bool Gluco2::SimpSolver::addClause ( Lit p)
inline

Definition at line 200 of file SimpSolver.h.

200{ add_tmp.clear(); add_tmp.push(p); return addClause_(add_tmp); }
Cube * p
Definition exorList.c:222
Here is the call graph for this function:

◆ addClause() [3/4]

bool Gluco2::SimpSolver::addClause ( Lit p,
Lit q )
inline

Definition at line 201 of file SimpSolver.h.

201{ add_tmp.clear(); add_tmp.push(p); add_tmp.push(q); return addClause_(add_tmp); }
Here is the call graph for this function:

◆ addClause() [4/4]

bool Gluco2::SimpSolver::addClause ( Lit p,
Lit q,
Lit r )
inline

Definition at line 202 of file SimpSolver.h.

202{ add_tmp.clear(); add_tmp.push(p); add_tmp.push(q); add_tmp.push(r); return addClause_(add_tmp); }
Here is the call graph for this function:

◆ addClause_()

bool SimpSolver::addClause_ ( vec< Lit > & ps)

Definition at line 139 of file SimpSolver2.cpp.

140{
141#ifndef NDEBUG
142 for (int i = 0; i < ps.size(); i++)
143 assert(!isEliminated(var(ps[i])));
144#endif
145 int nclauses = clauses.size();
146
147 if (use_rcheck && implied(ps))
148 return true;
149
150 if (!Solver::addClause_(ps))
151 return false;
152
153 if(!parsing && certifiedUNSAT) {
154 for (int i = 0; i < ps.size(); i++)
155 fprintf(certifiedOutput, "%i " , (var(ps[i]) + 1) * (-2 * sign(ps[i]) + 1) );
156 fprintf(certifiedOutput, "0\n");
157 }
158
159 if (use_simplification && clauses.size() == nclauses + 1){
160 CRef cr = clauses.last();
161 const Clause& c = ca[cr];
162
163 // NOTE: the clause is added to the queue immediately and then
164 // again during 'gatherTouchedClauses()'. If nothing happens
165 // in between, it will only be checked once. Otherwise, it may
166 // be checked twice unnecessarily. This is an unfortunate
167 // consequence of how backward subsumption is used to mimic
168 // forward subsumption.
169 subsumption_queue.insert(cr);
170 for (int i = 0; i < c.size(); i++){
171 occurs[var(c[i])].push(cr);
172 n_occ[toInt(c[i])]++;
173 touched[var(c[i])] = 1;
174 n_touched++;
175 if (elim_heap.inHeap(var(c[i])))
176 elim_heap.increase(var(c[i]));
177 }
178 }
179
180 return true;
181}
bool implied(const vec< Lit > &c)
vec< char > touched
Definition SimpSolver.h:149
Queue< CRef > subsumption_queue
Definition SimpSolver.h:154
bool isEliminated(Var v) const
Definition SimpSolver.h:190
bool addClause_(vec< Lit > &ps)
Definition Glucose2.cpp:268
vec< CRef > clauses
Definition Solver.h:243
bool certifiedUNSAT
Definition Solver.h:195
FILE * certifiedOutput
Definition Solver.h:194
int size(void) const
Definition Vec.h:65
bool sign(Lit p)
Definition SolverTypes.h:72
int var(Lit p)
Definition SolverTypes.h:73
RegionAllocator< uint32_t >::Ref CRef
int toInt(Var v)
Definition SolverTypes.h:76
#define assert(ex)
Definition util_old.h:213
Here is the call graph for this function:
Here is the caller graph for this function:

◆ addEmptyClause()

bool Gluco2::SimpSolver::addEmptyClause ( )
inline

Definition at line 199 of file SimpSolver.h.

199{ add_tmp.clear(); return addClause_(add_tmp); }
Here is the call graph for this function:

◆ addVar()

void Gluco2::SimpSolver::addVar ( Var v)
inline

Definition at line 223 of file SimpSolver.h.

223{ while (v >= nVars()) newVar(); }
Var newVar(bool polarity=true, bool dvar=true)
int nVars() const
Definition Solver.h:569
Here is the call graph for this function:
Here is the caller graph for this function:

◆ asymm()

bool SimpSolver::asymm ( Var v,
CRef cr )
protected

Definition at line 418 of file SimpSolver2.cpp.

419{
420 Clause& c = ca[cr];
421 assert(decisionLevel() == 0);
422
423 if (c.mark() || satisfied(c)) return true;
424
425 trail_lim.push(trail.size());
426 Lit l = lit_Undef;
427 for (int i = 0; i < c.size(); i++)
428 if (var(c[i]) != v && value(c[i]) != l_False)
429 uncheckedEnqueue(~c[i]);
430 else
431 l = c[i];
432
433 if (propagate() != CRef_Undef){
434 cancelUntil(0);
435 asymm_lits++;
436 if (!strengthenClause(cr, l))
437 return false;
438 }else
439 cancelUntil(0);
440
441 return true;
442}
#define l_False
Definition bmcBmcS.c:36
ABC_NAMESPACE_IMPL_START typedef signed char value
bool strengthenClause(CRef cr, Lit l)
vec< Lit > trail
Definition Solver.h:249
void cancelUntil(int level)
Definition Glucose2.cpp:515
int decisionLevel() const
Definition Solver.h:560
vec< int > trail_lim
Definition Solver.h:251
void uncheckedEnqueue(Lit p, CRef from=CRef_Undef)
Definition Glucose2.cpp:925
bool satisfied(const Clause &c) const
Definition Glucose2.cpp:396
const CRef CRef_Undef
Here is the call graph for this function:
Here is the caller graph for this function:

◆ asymmVar()

bool SimpSolver::asymmVar ( Var v)
protected

Definition at line 445 of file SimpSolver2.cpp.

446{
448
449 const vec<CRef>& cls = occurs.lookup(v);
450
451 if (value(v) != l_Undef || cls.size() == 0)
452 return true;
453
454 for (int i = 0; i < cls.size(); i++)
455 if (!asymm(v, cls[i]))
456 return false;
457
459}
#define l_Undef
Definition bmcBmcS.c:34
bool asymm(Var v, CRef cr)
bool backwardSubsumptionCheck(bool verbose=false)
Here is the call graph for this function:
Here is the caller graph for this function:

◆ backwardSubsumptionCheck()

bool SimpSolver::backwardSubsumptionCheck ( bool verbose = false)
protected

Definition at line 351 of file SimpSolver2.cpp.

352{
353 int cnt = 0;
354 int subsumed = 0;
355 int deleted_literals = 0;
356 assert(decisionLevel() == 0);
357
358 while (subsumption_queue.size() > 0 || bwdsub_assigns < trail.size()){
359
360 // Empty subsumption queue and return immediately on user-interrupt:
361 if (asynch_interrupt){
362 subsumption_queue.clear();
363 bwdsub_assigns = trail.size();
364 break; }
365
366 // Check top-level assignments by creating a dummy clause and placing it in the queue:
367 if (subsumption_queue.size() == 0 && bwdsub_assigns < trail.size()){
368 Lit l = trail[bwdsub_assigns++];
369 ca[bwdsub_tmpunit][0] = l;
370 ca[bwdsub_tmpunit].calcAbstraction();
372
373 CRef cr = subsumption_queue.peek(); subsumption_queue.pop();
374 Clause& c = ca[cr];
375
376 if (c.mark()) continue;
377
378 if (verbose && verbosity >= 2 && cnt++ % 1000 == 0)
379 printf("subsumption left: %10d (%10d subsumed, %10d deleted literals)\r", subsumption_queue.size(), subsumed, deleted_literals);
380
381 assert(c.size() > 1 || value(c[0]) == l_True); // Unit-clauses should have been propagated before this point.
382
383 // Find best variable to scan:
384 Var best = var(c[0]);
385 for (int i = 1; i < c.size(); i++)
386 if (occurs[var(c[i])].size() < occurs[best].size())
387 best = var(c[i]);
388
389 // Search all candidates:
390 vec<CRef>& _cs = occurs.lookup(best);
391 CRef* cs = (CRef*)_cs;
392
393 for (int j = 0; j < _cs.size(); j++)
394 if (c.mark())
395 break;
396 else if (!ca[cs[j]].mark() && cs[j] != cr && (subsumption_lim == -1 || ca[cs[j]].size() < subsumption_lim)){
397 Lit l = c.subsumes(ca[cs[j]]);
398
399 if (l == lit_Undef)
400 subsumed++, removeClause(cs[j]);
401 else if (l != lit_Error){
402 deleted_literals++;
403
404 if (!strengthenClause(cs[j], ~l))
405 return false;
406
407 // Did current candidate get deleted from cs? Then check candidate at index j again:
408 if (var(l) == best)
409 j--;
410 }
411 }
412 }
413
414 return true;
415}
#define l_True
Definition bmcBmcS.c:35
Lit subsumes(const Clause &other) const
void removeClause(CRef cr)
bool asynch_interrupt
Definition Solver.h:294
lbool value(Var x) const
Definition Solver.h:562
int Var
Definition SolverTypes.h:54
const Lit lit_Error
Definition SolverTypes.h:84
unsigned long long size
Definition giaNewBdd.h:39
signed char mark
Definition value.h:8
Here is the call graph for this function:
Here is the caller graph for this function:

◆ cleanUpClauses()

void SimpSolver::cleanUpClauses ( )
protected

Definition at line 703 of file SimpSolver2.cpp.

704{
705 occurs.cleanAll();
706 int i,j;
707 for (i = j = 0; i < clauses.size(); i++)
708 if (ca[clauses[i]].mark() == 0)
709 clauses[j++] = clauses[i];
710 clauses.shrink_(i - j);
711}
Here is the caller graph for this function:

◆ eliminate()

bool SimpSolver::eliminate ( bool turn_off_elim = false)

Definition at line 611 of file SimpSolver2.cpp.

612{
613 //abctime clk = Abc_Clock();
614 if (!simplify())
615 return false;
616 else if (!use_simplification)
617 return true;
618
619 // Main simplification loop:
620 //
621
622 int toPerform = clauses.size()<=4800000;
623
624 if(!toPerform) {
625 printf("c Too many clauses... No preprocessing\n");
626 }
627
628 while (toPerform && (n_touched > 0 || bwdsub_assigns < trail.size() || elim_heap.size() > 0)){
629
631 // printf(" ## (time = %6.2f s) BWD-SUB: queue = %d, trail = %d\n", cpuTime(), subsumption_queue.size(), trail.size() - bwdsub_assigns);
632 if ((subsumption_queue.size() > 0 || bwdsub_assigns < trail.size()) &&
634 ok = false; goto cleanup; }
635
636 // Empty elim_heap and return immediately on user-interrupt:
637 if (asynch_interrupt){
638 assert(bwdsub_assigns == trail.size());
639 assert(subsumption_queue.size() == 0);
640 assert(n_touched == 0);
641 elim_heap.clear();
642 goto cleanup; }
643
644 // printf(" ## (time = %6.2f s) ELIM: vars = %d\n", cpuTime(), elim_heap.size());
645 for (int cnt = 0; !elim_heap.empty(); cnt++){
646 Var elim = elim_heap.removeMin();
647
648 if (asynch_interrupt) break;
649
650 if (isEliminated(elim) || value(elim) != l_Undef) continue;
651
652 if (verbosity >= 2 && cnt % 100 == 0)
653 printf("elimination left: %10d\r", elim_heap.size());
654
655 if (use_asymm){
656 // Temporarily freeze variable. Otherwise, it would immediately end up on the queue again:
657 bool was_frozen = frozen[elim] != 0;
658 frozen[elim] = true;
659 if (!asymmVar(elim)){
660 ok = false; goto cleanup; }
661 frozen[elim] = was_frozen; }
662
663 // At this point, the variable may have been set by assymetric branching, so check it
664 // again. Also, don't eliminate frozen variables:
665 if (use_elim && value(elim) == l_Undef && !frozen[elim] && !eliminateVar(elim)){
666 ok = false; goto cleanup; }
667
669 }
670
671 assert(subsumption_queue.size() == 0);
672 }
673 cleanup:
674
675 // If no more simplification is needed, free all simplification-related data structures:
676 if (turn_off_elim){
677 touched .clear(true);
678 occurs .clear(true);
679 n_occ .clear(true);
680 elim_heap.clear(true);
681 subsumption_queue.clear(true);
682
683 use_simplification = false;
684 remove_satisfied = true;
685 ca.extra_clause_field = false;
686
687 // Force full cleanup (this is safe and desirable since it only happens once):
690 }else{
691 // Cheaper cleanup:
692 cleanUpClauses(); // TODO: can we make 'cleanUpClauses()' not be linear in the problem size somehow?
693 checkGarbage();
694 }
695
696 if (verbosity >= 1 && elimclauses.size() > 0)
697 printf("c | Eliminated clauses: %10.2f Mb |\n",
698 double(elimclauses.size() * sizeof(uint32_t)) / (1024*1024));
699 return ok;
700}
unsigned int uint32_t
Definition Fxch.h:32
vec< char > frozen
Definition SimpSolver.h:155
bool eliminateVar(Var v)
vec< uint32_t > elimclauses
Definition SimpSolver.h:148
virtual void garbageCollect()
void rebuildOrderHeap()
void checkGarbage()
Definition Solver.h:525
Here is the call graph for this function:
Here is the caller graph for this function:

◆ eliminateVar()

bool SimpSolver::eliminateVar ( Var v)
protected

Definition at line 495 of file SimpSolver2.cpp.

496{
497 int i, j;
498 assert(!frozen[v]);
499 assert(!isEliminated(v));
500 assert(value(v) == l_Undef);
501
502 // Split the occurrences into positive and negative:
503 //
504 const vec<CRef>& cls = occurs.lookup(v);
505 vec<CRef> pos, neg;
506 for (i = 0; i < cls.size(); i++)
507 (find(ca[cls[i]], mkLit(v)) ? pos : neg).push(cls[i]);
508
509 // Check wether the increase in number of clauses stays within the allowed ('grow'). Moreover, no
510 // clause must exceed the limit on the maximal clause size (if it is set):
511 //
512 int cnt = 0;
513 int clause_size = 0;
514
515 for (i = 0; i < pos.size(); i++)
516 for (j = 0; j < neg.size(); j++)
517 if (merge(ca[pos[i]], ca[neg[j]], v, clause_size) &&
518 (++cnt > cls.size() + grow || (clause_lim != -1 && clause_size > clause_lim)))
519 return true;
520
521 // Delete and store old clauses:
522 eliminated[v] = true;
523 setDecisionVar(v, false);
525
526 if (pos.size() > neg.size()){
527 for (i = 0; i < neg.size(); i++)
528 mkElimClause(elimclauses, v, ca[neg[i]]);
529 mkElimClause(elimclauses, mkLit(v));
530 eliminated_clauses += neg.size();
531 }else{
532 for (i = 0; i < pos.size(); i++)
533 mkElimClause(elimclauses, v, ca[pos[i]]);
534 mkElimClause(elimclauses, ~mkLit(v));
535 eliminated_clauses += pos.size();
536 }
537
538
539 // Produce clauses in cross product:
540 vec<Lit>& resolvent = add_tmp;
541 for (i = 0; i < pos.size(); i++)
542 for (j = 0; j < neg.size(); j++)
543 if (merge(ca[pos[i]], ca[neg[j]], v, resolvent) && !addClause_(resolvent))
544 return false;
545
546 for (i = 0; i < cls.size(); i++)
547 removeClause(cls[i]);
548
549 // Free occurs list for this variable:
550 occurs[v].clear(true);
551
552 // Free watchers lists for this variable, if possible:
553 if (watches[ mkLit(v)].size() == 0) watches[ mkLit(v)].clear(true);
554 if (watches[~mkLit(v)].size() == 0) watches[~mkLit(v)].clear(true);
555
557}
bool merge(const Clause &_ps, const Clause &_qs, Var v, vec< Lit > &out_clause)
vec< char > eliminated
Definition SimpSolver.h:156
OccLists< Lit, vec< Watcher >, WatcherDeleted > watches
Definition Solver.h:240
void setDecisionVar(Var v, bool b, bool use_oheap=true)
Definition Solver.h:573
bool pos
Definition globals.c:30
Lit mkLit(Var var, bool sign=false)
Definition SolverTypes.h:69
Here is the call graph for this function:
Here is the caller graph for this function:

◆ extendModel()

void SimpSolver::extendModel ( )
protected

Definition at line 594 of file SimpSolver2.cpp.

595{
596 int i, j;
597 Lit x;
598
599 for (i = elimclauses.size()-1; i > 0; i -= j){
600 for (j = elimclauses[i--]; j > 1; j--, i--)
602 goto next;
603
604 x = toLit(elimclauses[i]);
605 model[var(x)] = lbool(!sign(x));
606 next:;
607 }
608}
vec< lbool > model
Definition Solver.h:158
lbool modelValue(Var x) const
Definition Solver.h:564
Lit toLit(int i)
Definition SolverTypes.h:78
signed char lbool
Definition satVec.h:135
Here is the call graph for this function:
Here is the caller graph for this function:

◆ garbageCollect()

void SimpSolver::garbageCollect ( )
virtual

Reimplemented from Gluco2::Solver.

Definition at line 742 of file SimpSolver2.cpp.

743{
744 // Initialize the next region to a size corresponding to the estimated utilization degree. This
745 // is not precise but should avoid some unnecessary reallocations for the new region:
746 ClauseAllocator to(ca.size() - ca.wasted());
747
749 to.extra_clause_field = ca.extra_clause_field; // NOTE: this is important to keep (or lose) the extra fields.
750 relocAll(to);
752 if (verbosity >= 2)
753 printf("| Garbage collection: %12d bytes => %12d bytes |\n",
755 to.moveTo(ca);
756}
void relocAll(ClauseAllocator &to)
void relocAll(ClauseAllocator &to)
Here is the call graph for this function:
Here is the caller graph for this function:

◆ gatherTouchedClauses()

void SimpSolver::gatherTouchedClauses ( )
protected

Definition at line 302 of file SimpSolver2.cpp.

303{
304 if (n_touched == 0) return;
305
306 int i,j;
307 for (i = j = 0; i < subsumption_queue.size(); i++)
308 if (ca[subsumption_queue[i]].mark() == 0)
309 ca[subsumption_queue[i]].mark(2);
310
311 for (i = 0; i < touched.size(); i++)
312 if (touched[i]){
313 const vec<CRef>& cs = occurs.lookup(i);
314 for (j = 0; j < cs.size(); j++)
315 if (ca[cs[j]].mark() == 0){
316 subsumption_queue.insert(cs[j]);
317 ca[cs[j]].mark(2);
318 }
319 touched[i] = 0;
320 }
321
322 for (i = 0; i < subsumption_queue.size(); i++)
323 if (ca[subsumption_queue[i]].mark() == 2)
324 ca[subsumption_queue[i]].mark(0);
325
326 n_touched = 0;
327}
Here is the call graph for this function:
Here is the caller graph for this function:

◆ implied()

bool SimpSolver::implied ( const vec< Lit > & c)
protected

Definition at line 330 of file SimpSolver2.cpp.

331{
332 assert(decisionLevel() == 0);
333
334 trail_lim.push(trail.size());
335 for (int i = 0; i < c.size(); i++)
336 if (value(c[i]) == l_True){
337 cancelUntil(0);
338 return false;
339 }else if (value(c[i]) != l_False){
340 assert(value(c[i]) == l_Undef);
341 uncheckedEnqueue(~c[i]);
342 }
343
344 bool result = propagate() != CRef_Undef;
345 cancelUntil(0);
346 return result;
347}
Here is the call graph for this function:
Here is the caller graph for this function:

◆ isEliminated()

bool Gluco2::SimpSolver::isEliminated ( Var v) const
inline

Definition at line 190 of file SimpSolver.h.

190{ return eliminated.size() > 0 ? eliminated[v] != 0 : 0; }
Here is the caller graph for this function:

◆ merge() [1/2]

bool SimpSolver::merge ( const Clause & _ps,
const Clause & _qs,
Var v,
int & size )
protected

Definition at line 272 of file SimpSolver2.cpp.

273{
274 merges++;
275
276 bool ps_smallest = _ps.size() < _qs.size();
277 const Clause& ps = ps_smallest ? _qs : _ps;
278 const Clause& qs = ps_smallest ? _ps : _qs;
279 const Lit* __ps = (const Lit*)ps;
280 const Lit* __qs = (const Lit*)qs;
281
282 size = ps.size()-1;
283
284 for (int i = 0; i < qs.size(); i++){
285 if (var(__qs[i]) != v){
286 for (int j = 0; j < ps.size(); j++)
287 if (var(__ps[j]) == var(__qs[i])) {
288 if (__ps[j] == ~__qs[i])
289 return false;
290 else
291 goto next;
292 }
293 size++;
294 }
295 next:;
296 }
297
298 return true;
299}
Here is the call graph for this function:

◆ merge() [2/2]

bool SimpSolver::merge ( const Clause & _ps,
const Clause & _qs,
Var v,
vec< Lit > & out_clause )
protected

Definition at line 239 of file SimpSolver2.cpp.

240{
241 merges++;
242 out_clause.clear();
243
244 bool ps_smallest = _ps.size() < _qs.size();
245 const Clause& ps = ps_smallest ? _qs : _ps;
246 const Clause& qs = ps_smallest ? _ps : _qs;
247
248 int i, j;
249 for (i = 0; i < qs.size(); i++){
250 if (var(qs[i]) != v){
251 for (j = 0; j < ps.size(); j++)
252 if (var(ps[j]) == var(qs[i])) {
253 if (ps[j] == ~qs[i])
254 return false;
255 else
256 goto next;
257 }
258 out_clause.push(qs[i]);
259 }
260 next:;
261 }
262
263 for (i = 0; i < ps.size(); i++)
264 if (var(ps[i]) != v)
265 out_clause.push(ps[i]);
266
267 return true;
268}
void push(void)
Definition Vec.h:77
void clear(bool dealloc=false)
Definition Vec.h:141
Here is the call graph for this function:
Here is the caller graph for this function:

◆ newVar()

Var SimpSolver::newVar ( bool polarity = true,
bool dvar = true )

Definition at line 80 of file SimpSolver2.cpp.

80 {
81 Var v = Solver::newVar(sign, dvar);
82
83 frozen .push((char)false);
84 eliminated.push((char)false);
85
87 n_occ .push(0);
88 n_occ .push(0);
89 occurs .init(v);
90 touched .push(0);
91 elim_heap .insert(v);
92 }
93 return v; }
Var newVar(bool polarity=true, bool dvar=true)
Definition Glucose2.cpp:223
Here is the call graph for this function:
Here is the caller graph for this function:

◆ prelocate()

void Gluco2::SimpSolver::prelocate ( int base_var_num)
inline

Definition at line 71 of file SimpSolver.h.

71 {
72 Solver::prelocate(base_var_num);
73 frozen .prelocate( base_var_num );
74 eliminated.prelocate( base_var_num );
75
77 n_occ .prelocate( base_var_num << 1 );
78 occurs .prelocate( base_var_num );
79 touched .prelocate( base_var_num );
80 elim_heap .prelocate( base_var_num );
81 }
82 }
void prelocate(int var_num)
Here is the call graph for this function:

◆ relocAll()

void SimpSolver::relocAll ( ClauseAllocator & to)
protected

Definition at line 718 of file SimpSolver2.cpp.

719{
720 int i;
721 if (!use_simplification) return;
722
723 // All occurs lists:
724 //
725 for (i = 0; i < nVars(); i++){
726 vec<CRef>& cs = occurs[i];
727 for (int j = 0; j < cs.size(); j++)
728 ca.reloc(cs[j], to);
729 }
730
731 // Subsumption queue:
732 //
733 for (i = 0; i < subsumption_queue.size(); i++)
734 ca.reloc(subsumption_queue[i], to);
735
736 // Temporary clause:
737 //
738 ca.reloc(bwdsub_tmpunit, to);
739}
Here is the call graph for this function:
Here is the caller graph for this function:

◆ removeClause()

void SimpSolver::removeClause ( CRef cr)
protected

Definition at line 184 of file SimpSolver2.cpp.

185{
186 const Clause& c = ca[cr];
187
189 for (int i = 0; i < c.size(); i++){
190 n_occ[toInt(c[i])]--;
191 updateElimHeap(var(c[i]));
192 occurs.smudge(var(c[i]));
193 }
194
196}
void updateElimHeap(Var v)
Definition SimpSolver.h:191
void removeClause(CRef cr)
Definition Glucose2.cpp:377
Here is the call graph for this function:
Here is the caller graph for this function:

◆ reset()

void SimpSolver::reset ( )
virtual

Reimplemented from Gluco2::Solver.

Definition at line 758 of file SimpSolver2.cpp.

759{
761 grow = opt_grow;
763
764 subsumption_queue.clear(false);
765 vec<Lit> dummy(1,lit_Undef);
766 ca.extra_clause_field = true; // NOTE: must happen before allocating the dummy clause below.
767 bwdsub_tmpunit = ca.alloc(dummy);
768 remove_satisfied = false;
769
770 occurs.clear(false);
771
772 touched .shrink_( touched .size() );
773 n_occ .shrink_( n_occ .size() );
774 eliminated .shrink_( eliminated .size() );
775 frozen .shrink_( frozen .size() );
776 elimclauses .shrink_( elimclauses .size() );
777
778 elim_heap .clear_(false);
779}
virtual void reset()
Here is the call graph for this function:

◆ setFrozen()

void Gluco2::SimpSolver::setFrozen ( Var v,
bool b )
inline

Definition at line 203 of file SimpSolver.h.

203{ frozen[v] = (char)b; if (use_simplification && !b) { updateElimHeap(v); } }
Here is the call graph for this function:
Here is the caller graph for this function:

◆ solve() [1/5]

bool Gluco2::SimpSolver::solve ( bool do_simp = true,
bool turn_off_simp = false )
inline

Definition at line 205 of file SimpSolver.h.

205{ budgetOff(); assumptions.clear(); return solve_(do_simp, turn_off_simp) == l_True; }
void budgetOff()
Definition Solver.h:585
vec< Lit > assumptions
Definition Solver.h:256
Here is the call graph for this function:

◆ solve() [2/5]

bool Gluco2::SimpSolver::solve ( const vec< Lit > & assumps,
bool do_simp = true,
bool turn_off_simp = false )
inline

Definition at line 209 of file SimpSolver.h.

209 {
210 budgetOff(); assumps.copyTo(assumptions); return solve_(do_simp, turn_off_simp) == l_True; }
Here is the call graph for this function:

◆ solve() [3/5]

bool Gluco2::SimpSolver::solve ( Lit p,
bool do_simp = true,
bool turn_off_simp = false )
inline

Definition at line 206 of file SimpSolver.h.

206{ budgetOff(); assumptions.clear(); assumptions.push(p); return solve_(do_simp, turn_off_simp) == l_True; }
Here is the call graph for this function:

◆ solve() [4/5]

bool Gluco2::SimpSolver::solve ( Lit p,
Lit q,
bool do_simp = true,
bool turn_off_simp = false )
inline

Definition at line 207 of file SimpSolver.h.

207{ budgetOff(); assumptions.clear(); assumptions.push(p); assumptions.push(q); return solve_(do_simp, turn_off_simp) == l_True; }
Here is the call graph for this function:

◆ solve() [5/5]

bool Gluco2::SimpSolver::solve ( Lit p,
Lit q,
Lit r,
bool do_simp = true,
bool turn_off_simp = false )
inline

Definition at line 208 of file SimpSolver.h.

208{ budgetOff(); assumptions.clear(); assumptions.push(p); assumptions.push(q); assumptions.push(r); return solve_(do_simp, turn_off_simp) == l_True; }
Here is the call graph for this function:

◆ solve_()

lbool SimpSolver::solve_ ( bool do_simp = true,
bool turn_off_simp = false )
protected

Definition at line 97 of file SimpSolver2.cpp.

98{
99 vec<Var> extra_frozen;
100 lbool result = l_True;
101
102 do_simp &= use_simplification;
103
104 if (do_simp){
105 // Assumptions must be temporarily frozen to run variable elimination:
106 for (int i = 0; i < assumptions.size(); i++){
107 Var v = var(assumptions[i]);
108
109 // If an assumption has been eliminated, remember it.
110 assert(!isEliminated(v));
111
112 if (!frozen[v]){
113 // Freeze and store.
114 setFrozen(v, true);
115 extra_frozen.push(v);
116 } }
117
118 result = lbool(eliminate(turn_off_simp));
119 }
120
121 if (result == l_True)
122 result = Solver::solve_();
123 else if (verbosity >= 1)
124 printf("===============================================================================\n");
125
126 if (result == l_True)
127 extendModel();
128
129 if (do_simp)
130 // Unfreeze the assumptions that were frozen:
131 for (int i = 0; i < extra_frozen.size(); i++)
132 setFrozen(extra_frozen[i], false);
133
134 return result;
135}
bool eliminate(bool turn_off_elim=false)
void setFrozen(Var v, bool b)
Definition SimpSolver.h:203
Here is the call graph for this function:

◆ solveLimited() [1/2]

lbool Gluco2::SimpSolver::solveLimited ( const vec< Lit > & assumps,
bool do_simp = true,
bool turn_off_simp = false )
inline

Definition at line 212 of file SimpSolver.h.

212 {
213 assumps.copyTo(assumptions); return solve_(do_simp, turn_off_simp); }
Here is the call graph for this function:

◆ solveLimited() [2/2]

int Gluco2::SimpSolver::solveLimited ( int * lit0,
int nlits,
bool do_simp = false,
bool turn_off_simp = false )
inline

Definition at line 215 of file SimpSolver.h.

215 {
216 assumptions.clear();
217 for(int i = 0; i < nlits; i ++)
218 assumptions.push(toLit(lit0[i]));
219 lbool res = solve_(do_simp, turn_off_simp);
220 return res == l_True ? 1 : (res == l_False ? -1 : 0);
221}
Here is the call graph for this function:

◆ strengthenClause()

bool SimpSolver::strengthenClause ( CRef cr,
Lit l )
protected

Definition at line 199 of file SimpSolver2.cpp.

200{
201 Clause& c = ca[cr];
202 assert(decisionLevel() == 0);
204
205 // FIX: this is too inefficient but would be nice to have (properly implemented)
206 // if (!find(subsumption_queue, &c))
207 subsumption_queue.insert(cr);
208
209 if (certifiedUNSAT) {
210 for (int i = 0; i < c.size(); i++)
211 if (c[i] != l) fprintf(certifiedOutput, "%i " , (var(c[i]) + 1) * (-2 * sign(c[i]) + 1) );
212 fprintf(certifiedOutput, "0\n");
213 }
214
215 if (c.size() == 2){
216 removeClause(cr);
217 c.strengthen(l);
218 }else{
219 if (certifiedUNSAT) {
220 fprintf(certifiedOutput, "d ");
221 for (int i = 0; i < c.size(); i++)
222 fprintf(certifiedOutput, "%i " , (var(c[i]) + 1) * (-2 * sign(c[i]) + 1) );
223 fprintf(certifiedOutput, "0\n");
224 }
225
226 detachClause(cr, true);
227 c.strengthen(l);
228 attachClause(cr);
229 remove(occurs[var(l)], cr);
230 n_occ[toInt(l)]--;
232 }
233
234 return c.size() == 1 ? enqueue(c[0]) && propagate() == CRef_Undef : true;
235}
void strengthen(Lit p)
bool enqueue(Lit p, CRef from=CRef_Undef)
Definition Solver.h:531
void detachClause(CRef cr, bool strict=false)
Definition Glucose2.cpp:350
void attachClause(CRef cr)
Definition Glucose2.cpp:333
Here is the call graph for this function:
Here is the caller graph for this function:

◆ substitute()

bool SimpSolver::substitute ( Var v,
Lit x )

Definition at line 560 of file SimpSolver2.cpp.

561{
562 assert(!frozen[v]);
563 assert(!isEliminated(v));
564 assert(value(v) == l_Undef);
565
566 if (!ok) return false;
567
568 eliminated[v] = true;
569 setDecisionVar(v, false);
570 const vec<CRef>& cls = occurs.lookup(v);
571
572 vec<Lit>& subst_clause = add_tmp;
573 for (int i = 0; i < cls.size(); i++){
574 Clause& c = ca[cls[i]];
575
576 subst_clause.clear();
577 for (int j = 0; j < c.size(); j++){
578 Lit p = c[j];
579 subst_clause.push(var(p) == v ? x ^ sign(p) : p);
580 }
581
582
583 if (!addClause_(subst_clause))
584 return ok = false;
585
586 removeClause(cls[i]);
587
588 }
589
590 return true;
591}
Here is the call graph for this function:

◆ updateElimHeap()

void Gluco2::SimpSolver::updateElimHeap ( Var v)
inlineprotected

Definition at line 191 of file SimpSolver.h.

191 {
193 // if (!frozen[v] && !isEliminated(v) && value(v) == l_Undef)
194 if (elim_heap.inHeap(v) || (!frozen[v] && !isEliminated(v) && value(v) == l_Undef))
195 elim_heap.update(v); }
Here is the call graph for this function:
Here is the caller graph for this function:

Member Data Documentation

◆ asymm_lits

int Gluco2::SimpSolver::asymm_lits

Definition at line 115 of file SimpSolver.h.

◆ bwdsub_assigns

int Gluco2::SimpSolver::bwdsub_assigns
protected

Definition at line 157 of file SimpSolver.h.

◆ bwdsub_tmpunit

CRef Gluco2::SimpSolver::bwdsub_tmpunit
protected

Definition at line 162 of file SimpSolver.h.

◆ clause_lim

int Gluco2::SimpSolver::clause_lim

Definition at line 103 of file SimpSolver.h.

◆ elim_heap

Heap<ElimLt> Gluco2::SimpSolver::elim_heap
protected

Definition at line 153 of file SimpSolver.h.

◆ elimclauses

vec<uint32_t> Gluco2::SimpSolver::elimclauses
protected

Definition at line 148 of file SimpSolver.h.

◆ eliminated

vec<char> Gluco2::SimpSolver::eliminated
protected

Definition at line 156 of file SimpSolver.h.

◆ eliminated_clauses

int Gluco2::SimpSolver::eliminated_clauses

Definition at line 117 of file SimpSolver.h.

◆ eliminated_vars

int Gluco2::SimpSolver::eliminated_vars

Definition at line 116 of file SimpSolver.h.

◆ elimorder

int Gluco2::SimpSolver::elimorder
protected

Definition at line 146 of file SimpSolver.h.

◆ frozen

vec<char> Gluco2::SimpSolver::frozen
protected

Definition at line 155 of file SimpSolver.h.

◆ grow

int Gluco2::SimpSolver::grow

Definition at line 102 of file SimpSolver.h.

◆ merges

int Gluco2::SimpSolver::merges

Definition at line 114 of file SimpSolver.h.

◆ n_occ

vec<int> Gluco2::SimpSolver::n_occ
protected

Definition at line 152 of file SimpSolver.h.

◆ n_touched

int Gluco2::SimpSolver::n_touched
protected

Definition at line 158 of file SimpSolver.h.

◆ occurs

OccLists<Var, vec<CRef>, ClauseDeleted> Gluco2::SimpSolver::occurs
protected

Definition at line 151 of file SimpSolver.h.

◆ parsing

int Gluco2::SimpSolver::parsing

Definition at line 101 of file SimpSolver.h.

◆ simp_garbage_frac

double Gluco2::SimpSolver::simp_garbage_frac

Definition at line 106 of file SimpSolver.h.

◆ subsumption_lim

int Gluco2::SimpSolver::subsumption_lim

Definition at line 105 of file SimpSolver.h.

◆ subsumption_queue

Queue<CRef> Gluco2::SimpSolver::subsumption_queue
protected

Definition at line 154 of file SimpSolver.h.

◆ touched

vec<char> Gluco2::SimpSolver::touched
protected

Definition at line 149 of file SimpSolver.h.

◆ use_asymm

bool Gluco2::SimpSolver::use_asymm

Definition at line 108 of file SimpSolver.h.

◆ use_elim

bool Gluco2::SimpSolver::use_elim

Definition at line 110 of file SimpSolver.h.

◆ use_rcheck

bool Gluco2::SimpSolver::use_rcheck

Definition at line 109 of file SimpSolver.h.

◆ use_simplification

bool Gluco2::SimpSolver::use_simplification
protected

Definition at line 147 of file SimpSolver.h.


The documentation for this class was generated from the following files: