42#define USE_SIMP_SOLVER 1
81 for (
int i = 0; i < nlits; i++,plits++)
84 while ((*plits)/2 >= S->nVars()) S->newVar();
85 assert((*plits)/2 < S->nVars());
90 return S->addClause(lits);
103 for (
int i=0;i<nlits;i++,plits++)
116 return S->nVars() - 1;
126 return S->model[ivar] ==
l_True;
234 return nRuntimeLimit;
265 int i, nlitsL, nlitsR, nresL, nresR, status;
268 assert( nlits - pivot >= 1 );
269 if ( nlits - pivot == 1 )
276 assert( nlits - pivot >= 2 );
277 nlitsL = (nlits - pivot) / 2;
278 nlitsR = (nlits - pivot) - nlitsL;
279 assert( nlitsL + nlitsR == nlits - pivot );
290 for ( i = 0; i < nlitsL; i++ )
291 array->
push(plits[pivot + i]);
292 for ( i = 0; i < nresL; i++ )
293 plits[pivot + i] = plits[pivot + nlitsL + i];
294 for ( i = 0; i < nlitsL; i++ )
295 plits[pivot + nresL + i] = (*array)[i];
303 return nresL + nresR;
310 Lits[0] = Abc_Var2Lit( iVar, !fCompl );
311 Lits[1] = Abc_Var2Lit( iVar0, fCompl0 );
315 Lits[0] = Abc_Var2Lit( iVar, !fCompl );
316 Lits[1] = Abc_Var2Lit( iVar1, fCompl1 );
320 Lits[0] = Abc_Var2Lit( iVar, fCompl );
321 Lits[1] = Abc_Var2Lit( iVar0, !fCompl0 );
322 Lits[2] = Abc_Var2Lit( iVar1, !fCompl1 );
333 assert( iVarA >= 0 && iVarB >= 0 && iVarC >= 0 );
335 Lits[0] = Abc_Var2Lit( iVarA, !fCompl );
336 Lits[1] = Abc_Var2Lit( iVarB, 1 );
337 Lits[2] = Abc_Var2Lit( iVarC, 1 );
341 Lits[0] = Abc_Var2Lit( iVarA, !fCompl );
342 Lits[1] = Abc_Var2Lit( iVarB, 0 );
343 Lits[2] = Abc_Var2Lit( iVarC, 0 );
347 Lits[0] = Abc_Var2Lit( iVarA, fCompl );
348 Lits[1] = Abc_Var2Lit( iVarB, 1 );
349 Lits[2] = Abc_Var2Lit( iVarC, 0 );
353 Lits[0] = Abc_Var2Lit( iVarA, fCompl );
354 Lits[1] = Abc_Var2Lit( iVarB, 0 );
355 Lits[2] = Abc_Var2Lit( iVarC, 1 );
420 for (
int i = 0; i < nlits; i++,plits++)
423 while ((*plits)/2 >= S->nVars()) S->newVar();
424 assert((*plits)/2 < S->nVars());
429 return S->addClause(lits);
436 S->nCallConfl = 1000;
442 for (
int i=0;i<nlits;i++,plits++)
455 return S->nVars() - 1;
465 return S->model[ivar] ==
l_True;
573 return nRuntimeLimit;
604 int i, nlitsL, nlitsR, nresL, nresR, status;
607 assert( nlits - pivot >= 1 );
608 if ( nlits - pivot == 1 )
615 assert( nlits - pivot >= 2 );
616 nlitsL = (nlits - pivot) / 2;
617 nlitsR = (nlits - pivot) - nlitsL;
618 assert( nlitsL + nlitsR == nlits - pivot );
629 for ( i = 0; i < nlitsL; i++ )
630 array->
push(plits[pivot + i]);
631 for ( i = 0; i < nresL; i++ )
632 plits[pivot + i] = plits[pivot + nlitsL + i];
633 for ( i = 0; i < nlitsL; i++ )
634 plits[pivot + nresL + i] = (*array)[i];
642 return nresL + nresR;
649 Lits[0] = Abc_Var2Lit( iVar, !fCompl );
650 Lits[1] = Abc_Var2Lit( iVar0, fCompl0 );
654 Lits[0] = Abc_Var2Lit( iVar, !fCompl );
655 Lits[1] = Abc_Var2Lit( iVar1, fCompl1 );
659 Lits[0] = Abc_Var2Lit( iVar, fCompl );
660 Lits[1] = Abc_Var2Lit( iVar0, !fCompl0 );
661 Lits[2] = Abc_Var2Lit( iVar1, !fCompl1 );
672 assert( iVarA >= 0 && iVarB >= 0 && iVarC >= 0 );
674 Lits[0] = Abc_Var2Lit( iVarA, !fCompl );
675 Lits[1] = Abc_Var2Lit( iVarB, 1 );
676 Lits[2] = Abc_Var2Lit( iVarC, 1 );
680 Lits[0] = Abc_Var2Lit( iVarA, !fCompl );
681 Lits[1] = Abc_Var2Lit( iVarB, 0 );
682 Lits[2] = Abc_Var2Lit( iVarC, 0 );
686 Lits[0] = Abc_Var2Lit( iVarA, fCompl );
687 Lits[1] = Abc_Var2Lit( iVarB, 1 );
688 Lits[2] = Abc_Var2Lit( iVarC, 0 );
692 Lits[0] = Abc_Var2Lit( iVarA, fCompl );
693 Lits[1] = Abc_Var2Lit( iVarB, 0 );
694 Lits[2] = Abc_Var2Lit( iVarC, 1 );
741 double cpu_time = (double)(
unsigned)clk / CLOCKS_PER_SEC;
746 printf(
"c nb ReduceDB : %-12d\n", (
int)s.
nbReduceDB);
748 printf(
"c nb learnts DL2 : %-12d\n", (
int)s.
nbDL2);
749 printf(
"c nb learnts size 2 : %-12d\n", (
int)s.
nbBin);
750 printf(
"c nb learnts size 1 : %-12d\n", (
int)s.
nbUn);
756 if (mem_used != 0) printf(
"Memory used : %.2f MB\n", mem_used);
775 char * pTemp;
int fComp,
Var, VarMax = 0;
777 for ( pTemp = pBuffer; *pTemp; pTemp++ )
779 if ( *pTemp ==
'c' || *pTemp ==
'p' ) {
780 while ( *pTemp !=
'\n' )
784 while ( *pTemp ==
' ' || *pTemp ==
'\t' || *pTemp ==
'\r' || *pTemp ==
'\n' )
793 if ( lits->
size() > 0 ) {
801 VarMax = Abc_MaxInt( VarMax,
Var );
804 while ( *pTemp >=
'0' && *pTemp <=
'9' )
827 S.setConfBudget( pPars->nConfls > 0 ? (int64_t)pPars->nConfls : -1 );
836 printf(
"c ============================[ Problem Statistics ]=============================\n");
838 printf(
"c | Number of variables: %12d |\n", S.nVars());
839 printf(
"c | Number of clauses: %12d |\n", S.nClauses());
845 printf(
"c Simplification removed %d variables and %d clauses. ", S.eliminated_vars, S.eliminated_clauses );
846 Abc_PrintTime( 1,
"Time", Abc_Clock() - clk );
851 S.toDimacs(pFileCnf);
852 printf(
"Finished dumping CNF after preprocessing into file \"%s\".\n", pFileCnf );
853 printf(
"SAT solving is not performed.\n" );
859 lbool ret = S.solveLimited(dummy, 0);
861 printf(ret ==
l_True ?
"SATISFIABLE" : ret ==
l_False ?
"UNSATISFIABLE" :
"INDETERMINATE");
862 Abc_PrintTime( 1,
" Time", Abc_Clock() - clk );
881 for (
int i = 0; i < pCnf->
nClauses; i++ )
884 for (
int * pLit = pCnf->
pClauses[i]; pLit < pCnf->pClauses[i+1]; pLit++ )
889 printf(
"CNF stats: Vars = %6d. Clauses = %7d. Literals = %8d. ", pCnf->
nVars, pCnf->
nClauses, pCnf->
nLiterals );
890 Abc_PrintTime( 1,
"Time", Abc_Clock() - clk );
899 for (
int i = 0; i < pCnf->
nClauses; i++ )
924 int fCreatePrime = 1;
925 int nCubes, nSupp = Vec_IntSize(vCiSatVars);
927 Vec_Int_t * vLits = Vec_IntAlloc( nSupp );
928 Vec_Str_t * vCube = Vec_StrAlloc( nSupp + 4 );
929 Vec_StrFill( vCube, nSupp,
'-' );
930 Vec_StrPrintF( vCube,
" 1\n\0" );
931 for ( nCubes = 0; !CubeLimit || nCubes < CubeLimit; nCubes++ )
933 int * pFinal, nFinal, iVar, i, k = 0;
939 Vec_IntClear( vLits );
946 Vec_IntShrink( vLits, nFinal );
947 pFinal = Vec_IntArray( vLits );
948 for ( i = 0; i < nFinal; i++ )
949 pFinal[i] = Abc_LitNot(pFinal[i]);
958 Vec_StrFill( vCube, nSupp,
'-' );
959 for ( i = 0; i < nFinal; i++ )
961 int Index = Vec_IntEntry(vVar2Index, Abc_Lit2Var(pFinal[i]));
964 pFinal[k++] = pFinal[i];
965 assert( Index >= 0 && Index < nSupp );
966 Vec_StrWriteEntry( vCube, Index, (
char)(
'0' + Abc_LitIsCompl(pFinal[i])) );
969 Vec_StrAppend( vSop, Vec_StrArray(vCube) );
975 Vec_IntFree( vLits );
976 Vec_StrFree( vCube );
977 Vec_StrPush( vSop,
'\0' );
986 int i, n, nVars = Gia_ManCiNum(
p),
Lit;
987 int iFirstVar = pCnf->
nVars - nVars;
988 assert( Gia_ManCoNum(
p) == 1 );
989 for ( n = 0; n < 2; n++ )
992 Lit = Abc_Var2Lit( 1, !n );
993 for ( i = 0; i < pCnf->
nClauses; i++ )
999 Vec_StrPrintF( vSop,
" %d\n\0", !n );
1007 Vec_Int_t * vVars = Vec_IntAlloc( 100 );
1008 Vec_Int_t * vVarMap = Vec_IntStartFull( iFirstVar + nVars );
1009 for ( i = 0; i < nVars; i++ )
1011 Vec_IntPush( vVars, iFirstVar+i );
1012 Vec_IntWriteEntry( vVarMap, iFirstVar+i, i );
1016 Vec_IntFree( vVarMap );
1017 Vec_IntFree( vVars );
1026 printf(
"%s", Vec_StrArray(vSop) );
1027 Vec_StrFree( vSop );
1031 Vec_Int_t * vCisUsed = Vec_IntAlloc( 100 );
1032 int i, ObjId, iNode = Abc_Lit2Var(
Lit );
1034 Vec_IntSort( vCisUsed, 0 );
1036 Vec_IntWriteEntry( vCisUsed, i, Gia_ManIdToCioId(
p, ObjId) );
1037 Vec_IntPrint( vCisUsed );
1039 Vec_IntFree( vCisUsed );
1056#define Gia_CubeForEachVar( pCube, Value, i ) \
1057 for ( i = 0; (pCube[i] != ' ') && (Value = pCube[i]); i++ )
1058#define Gia_SopForEachCube( pSop, nFanins, pCube ) \
1059 for ( pCube = (pSop); *pCube; pCube += (nFanins) + 3 )
1063 int i,
Lit, Counter, nCubes = 0;
1064 char Value, * pCube, * pSop = Vec_StrArray( vSop );
1065 Vec_Int_t * vCounts = Vec_IntStart( 2*Vec_IntSize(vCiVars) );
1066 Vec_IntClear( vDLits );
1073 Vec_IntAddToEntry( vCounts, 2*i, 1 );
1074 else if ( Value ==
'0' )
1075 Vec_IntAddToEntry( vCounts, 2*i+1, 1 );
1079 if ( Counter == nCubes )
1080 Vec_IntPush( vDLits, Abc_Var2Lit(Vec_IntEntry(vCiVars, Abc_Lit2Var(
Lit)), Abc_LitIsCompl(
Lit)) );
1081 Vec_IntSort( vDLits, 0 );
1082 Vec_IntFree( vCounts );
1098 int fSynthesize = 0;
1101 int i, CiId, ObjId, Res, nCubes = 0, nNodes, Count = 0, iNode = Abc_Lit2Var(iLit);
1102 Vec_Int_t * vCisUsed = Vec_IntAlloc( 100 );
1104 Vec_IntSort( vCisUsed, 0 );
1105 if ( vDLits ) Vec_IntClear( vDLits );
1110 Vec_IntWriteEntry( vCisUsed, i, Gia_ManIdToCioId(
p, ObjId) );
1113 assert( Gia_ManCiNum(pNew) == Vec_IntSize(vCisUsed) );
1114 nNodes = Gia_ManAndNum(pNew);
1119 if ( !pFuncCiToKeep( pData, CiId ) )
1126 if ( Gia_ManPoIsConst(pNew, 0) )
1128 int RetValue = Gia_ManPoIsConst1(pNew, 0);
1129 Vec_IntFree( vCisUsed );
1139 nCubes = Vec_StrCountEntry(vSop,
'\n');
1143 Vec_Int_t * vCisObjs = Vec_IntAlloc( Vec_IntSize(vCisUsed) );
1145 Vec_IntPush( vCisObjs, CiId + 1 );
1147 Vec_IntFree( vCisObjs );
1149 Vec_StrFree( vSop );
1151 if ( Gia_ManPoIsConst(pMan, 0) )
1153 int RetValue = Gia_ManPoIsConst1(pMan, 0);
1154 Vec_IntFree( vCisUsed );
1171 Vec_IntFree( vCisUsed );
1191 if ( (iVar = Gia_ObjCopyArray(
p, iObj)) >= 0 )
1193 pObj = Gia_ManObj(
p, iObj );
1194 assert( Gia_ObjIsCand(pObj) );
1195 if ( Gia_ObjIsAnd(pObj) )
1200 iVar = Vec_IntSize( vObjsUsed );
1201 Vec_IntPush( vObjsUsed, iObj );
1202 Gia_ObjSetCopyArray(
p, iObj, iVar );
1203 if ( vCiVars && Gia_ObjIsCi(pObj) )
1204 Vec_IntPush( vCiVars, iVar );
1217 if ( Gia_ObjIsAnd(pObj) )
1219 int iObj = Gia_ObjId(
p, pObj );
1220 int iVar = Gia_ObjCopyArray(
p, iObj);
1221 int iVar0 = Gia_ObjCopyArray(
p, Gia_ObjFaninId0(pObj, iObj));
1222 int iVar1 = Gia_ObjCopyArray(
p, Gia_ObjFaninId1(pObj, iObj));
1227 else if ( Gia_ObjIsConst0(pObj) )
1229 int Lit = Abc_Var2Lit( Gia_ObjCopyArray(
p, 0), 1 );
1242 assert( Gia_ManPiNum(pMan) == Vec_IntSize(vCiObjIds) );
1243 Gia_ManConst0(pMan)->Value = 0;
1245 pObj->
Value = Abc_Var2Lit( Vec_IntEntry(vCiObjIds, i), 0 );
1250 pObj->
Value = Gia_ManAppendAnd(
p, Gia_ObjFanin0Copy(pObj), Gia_ObjFanin1Copy(pObj) );
1251 pObj = Gia_ManPo(pMan, 0);
1252 Result = Gia_ObjFanin0Copy(pObj);
1258 Vec_Int_t * vObjsUsed = Vec_IntAlloc( 100 );
1259 Vec_Int_t * vCiVars = Vec_IntAlloc( 100 );
1261 int i, iVar, iVarLast,
Lit, RetValue, Count = 0, Result = -1;
1262 if ( vDLits ) Vec_IntClear( vDLits );
1265 if ( Vec_IntSize(&
p->vCopies) < Gia_ManObjNum(
p) )
1266 Vec_IntFillExtra( &
p->vCopies, Gia_ManObjNum(
p), -1 );
1268 iVar = Vec_IntSize(vObjsUsed);
1269 Vec_IntPush( vObjsUsed, 0 );
1270 Gia_ObjSetCopyArray(
p, 0, iVar );
1278 Lit = Abc_Var2Lit( iVarLast, !Abc_LitIsCompl(iLit) );
1285 Lit = Abc_Var2Lit( iVarLast, Abc_LitIsCompl(iLit) );
1313 vVarMap = Vec_IntStartFull( Vec_IntSize(vObjsUsed) );
1316 Gia_Obj_t * pObj = Gia_ManObj(
p, Vec_IntEntry(vObjsUsed, iVar) );
1317 assert( Gia_ObjIsCi(pObj) );
1318 if ( pFuncCiToKeep(pData, Gia_ObjCioId(pObj)) )
1319 Vec_IntWriteEntry( vVarMap, iVar, i ), Count++;
1321 if ( Count == 0 || Count == Vec_IntSize(vCiVars) )
1323 Result = Count == 0 ? 1 : iLit;
1331 Vec_IntWriteEntry( vCiVars, i, Vec_IntEntry(vObjsUsed, iVar) );
1336 RetValue = Gia_ManAndNum(
p);
1346 Gia_ObjSetCopyArray(
p, iVar, -1 );
1347 Vec_IntFree( vObjsUsed );
1348 Vec_IntFree( vCiVars );
1349 Vec_IntFreeP( &vVarMap );
1350 Vec_StrFreeP( &vSop );
1363 abctime clk1d = Abc_Clock()-clk1;
1367 abctime clk2d = Abc_Clock()-clk2;
1369 Abc_PrintTime( 1,
"Time1", clk1d );
1370 Abc_PrintTime( 1,
"Time2", clk2d );
1373 printf(
"Verification passed.\n" );
1375 printf(
"Verification FAILED.\n" );
1377 Gia_ManAppendCo(
p, iRes1 );
1378 Gia_ManAppendCo(
p, iRes2 );
1392 printf(
"Verification passed.\n" );
1395 printf(
"Verification FAILED.\n" );
1417 Vec_Int_t * vObjsUsed = Vec_IntAlloc( 100 );
1418 int i, iVar, iSatVar[2], iSatLit[2], Lits[2], status;
1419 if ( Vec_IntSize(&
p->vCopies) < Gia_ManObjNum(
p) )
1420 Vec_IntFillExtra( &
p->vCopies, Gia_ManObjNum(
p), -1 );
1423 iVar = Vec_IntSize(vObjsUsed);
1424 Vec_IntPush( vObjsUsed, 0 );
1425 Gia_ObjSetCopyArray(
p, 0, iVar );
1431 iSatLit[0] = Abc_Var2Lit( iSatVar[0], Abc_LitIsCompl(iLit0) );
1432 iSatLit[1] = Abc_Var2Lit( iSatVar[1], Abc_LitIsCompl(iLit1) );
1435 Gia_ObjSetCopyArray(
p, iVar, -1 );
1436 Vec_IntFree( vObjsUsed );
1440 Lits[0] = iSatLit[0];
1441 Lits[1] = Abc_LitNot(iSatLit[1]);
1445 Lits[0] = Abc_LitNot(iSatLit[0]);
1446 Lits[1] = iSatLit[1];
1453 Lits[0] = iSatLit[0];
1454 Lits[1] = iSatLit[1];
1463 for ( n = 0; n < 2; n++ )
1467 Gia_ObjFaninLit0p(
p, Gia_ManPo(
p, 0)),
1468 Gia_ObjFaninLit0p(
p, Gia_ManPo(
p, 1)),
1471 printf(
"%s %s.\n", n ?
"Equivalence" :
"Overlap", Res ?
"holds" :
"fails" );
1493 S.verbEveryConflicts = 50000;
1494 S.showModel =
false;
1496 S.setConfBudget( pPars->nConfls > 0 ? (int64_t)pPars->nConfls : -1 );
1504 printf(
"c ============================[ Problem Statistics ]=============================\n");
1506 printf(
"c | Number of variables: %12d |\n", S.nVars());
1507 printf(
"c | Number of clauses: %12d |\n", S.nClauses());
1513 printf(
"c Simplification removed %d variables and %d clauses. ", S.eliminated_vars, S.eliminated_clauses );
1514 Abc_PrintTime( 1,
"Time", Abc_Clock() - clk );
1518 lbool ret = S.solveLimited(dummy, 0);
1521 printf(ret ==
l_True ?
"SATISFIABLE" : ret ==
l_False ?
"UNSATISFIABLE" :
"INDETERMINATE");
1522 Abc_PrintTime( 1,
" Time", Abc_Clock() - clk );
1531 assert(Vec_IntEntry(vCnfIds,Gia_ObjId(
p, pObj))!=-1);
1532 if (S.model[Vec_IntEntry(vCnfIds,Gia_ObjId(
p, pObj))] ==
l_True)
1533 Abc_InfoSetBit(
p->pCexComb->pData, i);
1536 Vec_IntFree(vCnfIds);
int glucose_solver_read_cex_varvalue(Gluco::SimpSolver *S, int ivar)
#define Gia_SopForEachCube(pSop, nFanins, pCube)
void bmcg_sat_solver_mark_cone(bmcg_sat_solver *s, int var)
Vec_Str_t * Glucose_GenerateCubes(bmcg_sat_solver *pSat[2], Vec_Int_t *vCiSatVars, Vec_Int_t *vVar2Index, int CubeLimit)
void bmcg_sat_solver_start_new_round(bmcg_sat_solver *s)
void glucose_solver_setcallback(Gluco::SimpSolver *S, void *pman, int(*pfunc)(void *, int, int *))
int bmcg_sat_solver_conflictnum(bmcg_sat_solver *s)
void bmcg_sat_solver_reset(bmcg_sat_solver *s)
abctime bmcg_sat_solver_set_runtime_limit(bmcg_sat_solver *s, abctime Limit)
void bmcg_sat_solver_set_stop(bmcg_sat_solver *s, int *pstop)
int * glucose_solver_read_cex(Gluco::SimpSolver *S)
int * bmcg_sat_solver_read_cex(bmcg_sat_solver *s)
void glucose_print_stats(SimpSolver &s, abctime clk)
int bmcg_sat_solver_quantify(bmcg_sat_solver *pSats[], Gia_Man_t *p, int iLit, int fHash, int(*pFuncCiToKeep)(void *, int), void *pData, Vec_Int_t *vDLits)
int glucose_solver_addvar(Gluco::SimpSolver *S)
void bmcg_sat_solver_setcallback(bmcg_sat_solver *s, void *pman, int(*pfunc)(void *, int, int *))
int Gia_ManFactorSop(Gia_Man_t *p, Vec_Int_t *vCiObjIds, Vec_Str_t *vSop, int fHash)
int bmcg_solver_add_xor(bmcg_sat_solver *pSat, int iVarA, int iVarB, int iVarC, int fCompl)
int bmcg_sat_solver_learntnum(bmcg_sat_solver *s)
void Glucose_QuantifyAigTest(Gia_Man_t *p)
int bmcg_sat_solver_varnum(bmcg_sat_solver *s)
void Gia_ManQuantLoadCnf(Gia_Man_t *p, Vec_Int_t *vObjsUsed, bmcg_sat_solver *pSats[])
int bmcg_sat_solver_quantify_test(bmcg_sat_solver *pSats[], Gia_Man_t *p, int iLit, int fHash, int(*pFuncCiToKeep)(void *, int), void *pData, Vec_Int_t *vDLits)
SimpSolver * glucose_solver_start()
FUNCTION DEFINITIONS ///.
int bmcg_sat_solver_jftr(bmcg_sat_solver *s)
void Glucose_CheckTwoNodesTest(Gia_Man_t *p)
int bmcg_sat_solver_minimize_assumptions(bmcg_sat_solver *s, int *plits, int nlits, int pivot)
void Glucose_ReadDimacs(char *pFileName, SimpSolver &s)
int bmcg_sat_solver_addvar(bmcg_sat_solver *s)
void Glucose_SolveCnf(char *pFileName, Glucose_Pars *pPars, int fDumpCnf)
int Gia_ManSatAndCollect_rec(Gia_Man_t *p, int iObj, Vec_Int_t *vObjsUsed, Vec_Int_t *vCiVars)
#define Gia_CubeForEachVar(pCube, Value, i)
bmcg_sat_solver * bmcg_sat_solver_start()
MACRO DEFINITIONS ///.
int bmcg_sat_solver_solve(bmcg_sat_solver *s, int *plits, int nlits)
int bmcg_sat_solver_addclause(bmcg_sat_solver *s, int *plits, int nlits)
void bmcg_sat_solver_var_set_frozen(bmcg_sat_solver *s, int v, int freeze)
void bmcg_sat_solver_set_conflict_budget(bmcg_sat_solver *s, int Limit)
void bmcg_sat_generate_dvars(Vec_Int_t *vCiVars, Vec_Str_t *vSop, Vec_Int_t *vDLits)
int bmcg_sat_solver_read_cex_varvalue(bmcg_sat_solver *s, int ivar)
Vec_Int_t * Glucose_SolverFromAig2(Gia_Man_t *p, SimpSolver &S)
Vec_Str_t * bmcg_sat_solver_sop(Gia_Man_t *p, int CubeLimit)
void glucose_solver_setstop(Gluco::SimpSolver *S, int *pstop)
void bmcg_sat_solver_print_sop(Gia_Man_t *p)
void bmcg_sat_solver_set_var_fanin_lit(bmcg_sat_solver *s, int var, int lit0, int lit1)
int bmcg_sat_solver_eliminate(bmcg_sat_solver *s, int turn_off_elim)
void glucose_solver_reset(Gluco::SimpSolver *S)
void bmcg_sat_solver_print_sop_lit(Gia_Man_t *p, int Lit)
int bmcg_sat_solver_quantify2(Gia_Man_t *p, int iLit, int fHash, int(*pFuncCiToKeep)(void *, int), void *pData, Vec_Int_t *vDLits)
void bmcg_sat_solver_set_nvars(bmcg_sat_solver *s, int nvars)
int bmcg_sat_solver_elim_varnum(bmcg_sat_solver *s)
Vec_Int_t * Glucose_SolverFromAig(Gia_Man_t *p, SimpSolver &s)
void bmcg_sat_solver_set_jftr(bmcg_sat_solver *s, int jftr)
int bmcg_sat_solver_clausenum(bmcg_sat_solver *s)
void bmcg_sat_solver_stop(bmcg_sat_solver *s)
int bmcg_sat_solver_var_is_elim(bmcg_sat_solver *s, int v)
int bmcg_sat_solver_add_and(bmcg_sat_solver *s, int iVar, int iVar0, int iVar1, int fCompl0, int fCompl1, int fCompl)
int bmcg_sat_solver_equiv_overlap_check(bmcg_sat_solver *pSat, Gia_Man_t *p, int iLit0, int iLit1, int fEquiv)
int Gia_ManCiIsToKeep(void *pData, int i)
void glucose_solver_stop(Gluco::SimpSolver *S)
int bmcg_sat_solver_final(bmcg_sat_solver *s, int **ppArray)
int glucose_solver_addclause(Gluco::SimpSolver *S, int *plits, int nlits)
int glucose_solver_solve(Gluco::SimpSolver *S, int *plits, int nlits)
int Glucose_SolveAig(Gia_Man_t *p, Glucose_Pars *pPars)
#define GLUCOSE_UNSAT
INCLUDES ///.
typedefABC_NAMESPACE_HEADER_START struct Glucose_Pars_ Glucose_Pars
BASIC TYPES ///.
ABC_DLL Gia_Man_t * Abc_SopSynthesizeOne(char *pSop, int fClp)
#define ABC_NAMESPACE_IMPL_START
#define ABC_NAMESPACE_IMPL_END
typedefABC_NAMESPACE_IMPL_START struct Vec_Int_t_ Vec_Int_t
DECLARATIONS ///.
struct Vec_Str_t_ Vec_Str_t
bool addClause(const vec< Lit > &ps)
int64_t lastblockatrestart
void setIncrementalMode()
int64_t nbstopsrestartssame
void clear(bool dealloc=false)
struct Cnf_Dat_t_ Cnf_Dat_t
void Cnf_DataFree(Cnf_Dat_t *p)
void Gia_ManStop(Gia_Man_t *p)
#define Gia_ManForEachAnd(p, pObj, i)
#define Gia_ManForEachPi(p, pObj, i)
struct Gia_Obj_t_ Gia_Obj_t
Gia_Man_t * Gia_ManDupExist(Gia_Man_t *p, int iVar)
struct Gia_Man_t_ Gia_Man_t
#define Gia_ManForEachObjVec(vVec, p, pObj, i)
int Gia_ManHashAnd(Gia_Man_t *p, int iLit0, int iLit1)
Gia_Man_t * Gia_ManDupConeSupp(Gia_Man_t *p, int iLit, Vec_Int_t *vCiIds)
#define Gia_ManForEachCi(p, pObj, i)
void Gia_ManCollectCis(Gia_Man_t *p, int *pNodes, int nNodes, Vec_Int_t *vSupp)
int Gia_ManDupConeBack(Gia_Man_t *p, Gia_Man_t *pNew, Vec_Int_t *vCiIds)
void * Mf_ManGenerateCnf(Gia_Man_t *pGia, int nLutSize, int fCnfObjIds, int fAddOrCla, int fMapping, int fVerbose)
int Gia_ManQuantExist(Gia_Man_t *p, int iLit, int(*pFuncCiToKeep)(void *, int), void *pData)
ABC_NAMESPACE_IMPL_START Abc_Cex_t * Abc_CexAlloc(int nRegs, int nRealPis, int nFrames)
DECLARATIONS ///.
#define Vec_IntForEachEntry(vVec, Entry, i)
MACRO DEFINITIONS ///.