blob: 4830b12ed3ea77be9e25cc440b7523cd983b9031 [file] [log] [blame]
/**CFile****************************************************************
FileName [msat.h]
PackageName [A C version of SAT solver MINISAT, originally developed
in C++ by Niklas Een and Niklas Sorensson, Chalmers University of
Technology, Sweden: http://www.cs.chalmers.se/~een/Satzoo.]
Synopsis [External definitions of the solver.]
Author [Alan Mishchenko <alanmi@eecs.berkeley.edu>]
Affiliation [UC Berkeley]
Date [Ver. 1.0. Started - January 1, 2004.]
Revision [$Id: msat.h,v 1.6 2004/05/12 06:30:20 satrajit Exp $]
***********************************************************************/
#ifndef ABC__sat__msat__msat_h
#define ABC__sat__msat__msat_h
////////////////////////////////////////////////////////////////////////
/// INCLUDES ///
////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////
/// PARAMETERS ///
////////////////////////////////////////////////////////////////////////
ABC_NAMESPACE_HEADER_START
////////////////////////////////////////////////////////////////////////
/// STRUCTURE DEFINITIONS ///
////////////////////////////////////////////////////////////////////////
typedef struct Msat_Solver_t_ Msat_Solver_t;
// the vector of intergers and of clauses
typedef struct Msat_IntVec_t_ Msat_IntVec_t;
typedef struct Msat_ClauseVec_t_ Msat_ClauseVec_t;
typedef struct Msat_VarHeap_t_ Msat_VarHeap_t;
// the return value of the solver
typedef enum { MSAT_FALSE = -1, MSAT_UNKNOWN = 0, MSAT_TRUE = 1 } Msat_Type_t;
// representation of variables and literals
// the literal (l) is the variable (v) and the sign (s)
// s = 0 the variable is positive
// s = 1 the variable is negative
#define MSAT_VAR2LIT(v,s) (2*(v)+(s))
#define MSAT_LITNOT(l) ((l)^1)
#define MSAT_LITSIGN(l) ((l)&1)
#define MSAT_LIT2VAR(l) ((l)>>1)
////////////////////////////////////////////////////////////////////////
/// GLOBAL VARIABLES ///
////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////
/// MACRO DEFINITIONS ///
////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////
/// FUNCTION DECLARATIONS ///
////////////////////////////////////////////////////////////////////////
/*=== satRead.c ============================================================*/
extern int Msat_SolverParseDimacs( FILE * pFile, Msat_Solver_t ** p, int fVerbose );
/*=== satSolver.c ===========================================================*/
// adding vars, clauses, simplifying the database, and solving
extern int Msat_SolverAddVar( Msat_Solver_t * p, int Level );
extern int Msat_SolverAddClause( Msat_Solver_t * p, Msat_IntVec_t * pLits );
extern int Msat_SolverSimplifyDB( Msat_Solver_t * p );
extern int Msat_SolverSolve( Msat_Solver_t * p, Msat_IntVec_t * pVecAssumps, int nBackTrackLimit, int nTimeLimit );
// printing stats, assignments, and clauses
extern void Msat_SolverPrintStats( Msat_Solver_t * p );
extern void Msat_SolverPrintAssignment( Msat_Solver_t * p );
extern void Msat_SolverPrintClauses( Msat_Solver_t * p );
extern void Msat_SolverWriteDimacs( Msat_Solver_t * p, char * pFileName );
// access to the solver internal data
extern int Msat_SolverReadVarNum( Msat_Solver_t * p );
extern int Msat_SolverReadClauseNum( Msat_Solver_t * p );
extern int Msat_SolverReadVarAllocNum( Msat_Solver_t * p );
extern int * Msat_SolverReadAssignsArray( Msat_Solver_t * p );
extern int * Msat_SolverReadModelArray( Msat_Solver_t * p );
extern unsigned Msat_SolverReadTruth( Msat_Solver_t * p );
extern int Msat_SolverReadBackTracks( Msat_Solver_t * p );
extern int Msat_SolverReadInspects( Msat_Solver_t * p );
extern void Msat_SolverSetVerbosity( Msat_Solver_t * p, int fVerbose );
extern void Msat_SolverSetProofWriting( Msat_Solver_t * p, int fProof );
extern void Msat_SolverSetVarTypeA( Msat_Solver_t * p, int Var );
extern void Msat_SolverSetVarMap( Msat_Solver_t * p, Msat_IntVec_t * vVarMap );
extern void Msat_SolverMarkLastClauseTypeA( Msat_Solver_t * p );
extern void Msat_SolverMarkClausesStart( Msat_Solver_t * p );
extern float * Msat_SolverReadFactors( Msat_Solver_t * p );
// returns the solution after incremental solving
extern int Msat_SolverReadSolutions( Msat_Solver_t * p );
extern int * Msat_SolverReadSolutionsArray( Msat_Solver_t * p );
extern Msat_ClauseVec_t * Msat_SolverReadAdjacents( Msat_Solver_t * p );
extern Msat_IntVec_t * Msat_SolverReadConeVars( Msat_Solver_t * p );
extern Msat_IntVec_t * Msat_SolverReadVarsUsed( Msat_Solver_t * p );
/*=== satSolverSearch.c ===========================================================*/
extern void Msat_SolverRemoveLearned( Msat_Solver_t * p );
extern void Msat_SolverRemoveMarked( Msat_Solver_t * p );
/*=== satSolverApi.c ===========================================================*/
// allocation, cleaning, and freeing the solver
extern Msat_Solver_t * Msat_SolverAlloc( int nVars, double dClaInc, double dClaDecay, double dVarInc, double dVarDecay, int fVerbose );
extern void Msat_SolverResize( Msat_Solver_t * pMan, int nVarsAlloc );
extern void Msat_SolverClean( Msat_Solver_t * p, int nVars );
extern void Msat_SolverPrepare( Msat_Solver_t * pSat, Msat_IntVec_t * vVars );
extern void Msat_SolverFree( Msat_Solver_t * p );
/*=== satVec.c ===========================================================*/
extern Msat_IntVec_t * Msat_IntVecAlloc( int nCap );
extern Msat_IntVec_t * Msat_IntVecAllocArray( int * pArray, int nSize );
extern Msat_IntVec_t * Msat_IntVecAllocArrayCopy( int * pArray, int nSize );
extern Msat_IntVec_t * Msat_IntVecDup( Msat_IntVec_t * pVec );
extern Msat_IntVec_t * Msat_IntVecDupArray( Msat_IntVec_t * pVec );
extern void Msat_IntVecFree( Msat_IntVec_t * p );
extern void Msat_IntVecFill( Msat_IntVec_t * p, int nSize, int Entry );
extern int * Msat_IntVecReleaseArray( Msat_IntVec_t * p );
extern int * Msat_IntVecReadArray( Msat_IntVec_t * p );
extern int Msat_IntVecReadSize( Msat_IntVec_t * p );
extern int Msat_IntVecReadEntry( Msat_IntVec_t * p, int i );
extern int Msat_IntVecReadEntryLast( Msat_IntVec_t * p );
extern void Msat_IntVecWriteEntry( Msat_IntVec_t * p, int i, int Entry );
extern void Msat_IntVecGrow( Msat_IntVec_t * p, int nCapMin );
extern void Msat_IntVecShrink( Msat_IntVec_t * p, int nSizeNew );
extern void Msat_IntVecClear( Msat_IntVec_t * p );
extern void Msat_IntVecPush( Msat_IntVec_t * p, int Entry );
extern int Msat_IntVecPushUnique( Msat_IntVec_t * p, int Entry );
extern void Msat_IntVecPushUniqueOrder( Msat_IntVec_t * p, int Entry, int fIncrease );
extern int Msat_IntVecPop( Msat_IntVec_t * p );
extern void Msat_IntVecSort( Msat_IntVec_t * p, int fReverse );
/*=== satHeap.c ===========================================================*/
extern Msat_VarHeap_t * Msat_VarHeapAlloc();
extern void Msat_VarHeapSetActivity( Msat_VarHeap_t * p, double * pActivity );
extern void Msat_VarHeapStart( Msat_VarHeap_t * p, int * pVars, int nVars, int nVarsAlloc );
extern void Msat_VarHeapGrow( Msat_VarHeap_t * p, int nSize );
extern void Msat_VarHeapStop( Msat_VarHeap_t * p );
extern void Msat_VarHeapPrint( FILE * pFile, Msat_VarHeap_t * p );
extern void Msat_VarHeapCheck( Msat_VarHeap_t * p );
extern void Msat_VarHeapCheckOne( Msat_VarHeap_t * p, int iVar );
extern int Msat_VarHeapContainsVar( Msat_VarHeap_t * p, int iVar );
extern void Msat_VarHeapInsert( Msat_VarHeap_t * p, int iVar );
extern void Msat_VarHeapUpdate( Msat_VarHeap_t * p, int iVar );
extern void Msat_VarHeapDelete( Msat_VarHeap_t * p, int iVar );
extern double Msat_VarHeapReadMaxWeight( Msat_VarHeap_t * p );
extern int Msat_VarHeapCountNodes( Msat_VarHeap_t * p, double WeightLimit );
extern int Msat_VarHeapReadMax( Msat_VarHeap_t * p );
extern int Msat_VarHeapGetMax( Msat_VarHeap_t * p );
ABC_NAMESPACE_HEADER_END
#endif
////////////////////////////////////////////////////////////////////////
/// END OF FILE ///
////////////////////////////////////////////////////////////////////////