281 lines
4.7 KiB
C
281 lines
4.7 KiB
C
#ifndef _internal_h_INCLUDED
|
|
#define _internal_h_INCLUDED
|
|
|
|
#include "arena.h"
|
|
#include "assign.h"
|
|
#include "averages.h"
|
|
#include "check.h"
|
|
#include "clause.h"
|
|
#include "clueue.h"
|
|
#include "cover.h"
|
|
#include "extend.h"
|
|
#include "smooth.h"
|
|
#include "flags.h"
|
|
#include "format.h"
|
|
#include "frames.h"
|
|
#include "heap.h"
|
|
#include "kissat.h"
|
|
#include "limits.h"
|
|
#include "literal.h"
|
|
#include "mode.h"
|
|
#include "options.h"
|
|
#include "phases.h"
|
|
#include "profile.h"
|
|
#include "proof.h"
|
|
#include "queue.h"
|
|
#include "random.h"
|
|
#include "reluctant.h"
|
|
#include "rephase.h"
|
|
#include "stack.h"
|
|
#include "statistics.h"
|
|
#include "literal.h"
|
|
#include "value.h"
|
|
#include "vector.h"
|
|
#include "watch.h"
|
|
#include "cvec.h"
|
|
|
|
typedef struct temporary temporary;
|
|
|
|
struct temporary
|
|
{
|
|
bool satisfied;
|
|
bool shrink;
|
|
bool trivial;
|
|
unsigneds lits;
|
|
};
|
|
|
|
typedef struct idxrank idxrank;
|
|
|
|
struct idxrank
|
|
{
|
|
unsigned idx;
|
|
unsigned rank;
|
|
};
|
|
|
|
typedef struct import import;
|
|
|
|
struct import
|
|
{
|
|
unsigned lit:30;
|
|
bool imported:1;
|
|
bool eliminated:1;
|
|
};
|
|
|
|
// *INDENT-OFF*
|
|
|
|
typedef STACK (value) eliminated;
|
|
typedef STACK (import) imports;
|
|
typedef STACK (idxrank) idxranks;
|
|
typedef STACK (watch) statches;
|
|
typedef STACK (watch *) patches;
|
|
|
|
// *INDENT-ON*
|
|
|
|
struct kissat
|
|
{
|
|
int dps_ticks;
|
|
int (* cbkImportUnit) (void *);
|
|
int (* cbkImportClause)(void *, int *, cvec *);
|
|
void (* cbkExportClause)(void *, int, cvec *);
|
|
int (* cbkWaitSharing) (void *);
|
|
void (* cbkFreeClause) (void *); // callback for clause learning
|
|
int share_dps;
|
|
int share_dps_period;
|
|
cvec *importedClause;
|
|
cvec *exportedClause;
|
|
void *issuer;
|
|
int nconflict;
|
|
int reseting;
|
|
int max_var;
|
|
#ifdef LOGGING
|
|
bool compacting;
|
|
#endif
|
|
bool extended;
|
|
bool inconsistent;
|
|
bool iterating;
|
|
bool probing;
|
|
#ifndef QUIET
|
|
bool sectioned;
|
|
#endif
|
|
bool stable;
|
|
bool watching;
|
|
#ifdef COVERAGE
|
|
volatile unsigned terminate;
|
|
#else
|
|
volatile bool terminate;
|
|
#endif
|
|
|
|
unsigned vars;
|
|
unsigned size;
|
|
unsigned active;
|
|
|
|
ints exportk;
|
|
ints units;
|
|
imports import;
|
|
extensions extend;
|
|
unsigneds witness;
|
|
|
|
assigned *assigned;
|
|
flags *flags;
|
|
|
|
mark *marks;
|
|
|
|
value *values;
|
|
phase *phases;
|
|
|
|
eliminated eliminated;
|
|
unsigneds etrail;
|
|
|
|
links *links;
|
|
queue queue;
|
|
|
|
rephased rephased;
|
|
|
|
heap scores;
|
|
double scinc;
|
|
|
|
// CHB
|
|
heap scores_chb;
|
|
unsigned *conflicted_chb;
|
|
double step_chb;
|
|
double step_dec_chb;
|
|
double step_min_chb;
|
|
|
|
// MAB
|
|
unsigned heuristic;
|
|
bool mab;
|
|
double mabc;
|
|
double mab_reward[2];
|
|
unsigned mab_select[2];
|
|
unsigned mab_heuristics;
|
|
double mab_decisions;
|
|
unsigned *mab_chosen;
|
|
unsigned mab_chosen_tot;
|
|
|
|
heap schedule;
|
|
|
|
unsigned level;
|
|
frames frames;
|
|
|
|
unsigneds trail;
|
|
unsigned propagated;
|
|
|
|
unsigned best_assigned;
|
|
unsigned consistently_assigned;
|
|
unsigned target_assigned;
|
|
unsigned unflushed;
|
|
unsigned unassigned;
|
|
|
|
unsigneds delayed;
|
|
|
|
#if defined(LOGGING) || !defined(NDEBUG)
|
|
unsigneds resolvent_lits;
|
|
#endif
|
|
unsigned resolvent_size;
|
|
unsigned antecedent_size;
|
|
|
|
unsigned transitive;
|
|
|
|
unsigneds analyzed;
|
|
idxranks bump;
|
|
unsigneds levels;
|
|
unsigneds minimize;
|
|
unsigneds poisoned;
|
|
unsigneds promote;
|
|
unsigneds removable;
|
|
|
|
clause conflict;
|
|
|
|
temporary clause;
|
|
|
|
arena arena;
|
|
clueue clueue;
|
|
vectors vectors;
|
|
reference first_reducible;
|
|
reference last_irredundant;
|
|
watches *watches;
|
|
|
|
sizes sorter;
|
|
|
|
generator random;
|
|
averages averages[2];
|
|
reluctant reluctant;
|
|
|
|
bounds bounds;
|
|
delays delays;
|
|
enabled enabled;
|
|
limited limited;
|
|
limits limits;
|
|
waiting waiting;
|
|
|
|
statistics statistics;
|
|
mode mode;
|
|
|
|
uint64_t ticks;
|
|
|
|
format format;
|
|
|
|
statches antecedents[2];
|
|
statches gates[2];
|
|
patches xorted[2];
|
|
unsigneds resolvents;
|
|
bool resolve_gate;
|
|
|
|
#ifndef NMETRICS
|
|
uint64_t *gate_eliminated;
|
|
#else
|
|
bool gate_eliminated;
|
|
#endif
|
|
|
|
#if !defined(NDEBUG) || !defined(NPROOFS)
|
|
unsigneds added;
|
|
unsigneds removed;
|
|
#endif
|
|
|
|
#if !defined(NDEBUG) || !defined(NPROOFS) || defined(LOGGING)
|
|
ints original;
|
|
size_t offset_of_last_original_clause;
|
|
#endif
|
|
|
|
#ifndef QUIET
|
|
profiles profiles;
|
|
#endif
|
|
|
|
#ifndef NOPTIONS
|
|
options options;
|
|
#endif
|
|
|
|
#ifndef NDEBUG
|
|
checker *checker;
|
|
#endif
|
|
|
|
#ifndef NPROOFS
|
|
proof *proof;
|
|
#endif
|
|
};
|
|
|
|
#define VARS (solver->vars)
|
|
#define LITS (2*solver->vars)
|
|
|
|
static inline unsigned
|
|
kissat_assigned (kissat * solver)
|
|
{
|
|
assert (VARS >= solver->unassigned);
|
|
return VARS - solver->unassigned;
|
|
}
|
|
|
|
#define all_variables(IDX) \
|
|
unsigned IDX = 0, IDX_END = solver->vars; IDX != IDX_END; ++IDX
|
|
|
|
#define all_literals(LIT) \
|
|
unsigned LIT = 0, LIT_END = LITS; LIT != LIT_END; ++LIT
|
|
|
|
#define all_clauses(C) \
|
|
clause * C = (clause*) BEGIN_STACK (solver->arena), \
|
|
* C_END = (clause*) END_STACK (solver->arena), \
|
|
* C_NEXT; \
|
|
C != C_END && (C_NEXT = kissat_next_clause (C), true); \
|
|
C = C_NEXT
|
|
|
|
#endif
|