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);
111 return S->solveLimited(plits, nlits, 0);
117 return S->nVars() - 1;
127 return S->model[ivar] ==
l_True;
137 S->markApprox(v0, v1, nlim);
244 return nRuntimeLimit;
275 int i, nlitsL, nlitsR, nresL, nresR, status;
278 assert( nlits - pivot >= 1 );
279 if ( nlits - pivot == 1 )
286 assert( nlits - pivot >= 2 );
287 nlitsL = (nlits - pivot) / 2;
288 nlitsR = (nlits - pivot) - nlitsL;
289 assert( nlitsL + nlitsR == nlits - pivot );
300 for ( i = 0; i < nlitsL; i++ )
301 array->
push(plits[pivot + i]);
302 for ( i = 0; i < nresL; i++ )
303 plits[pivot + i] = plits[pivot + nlitsL + i];
304 for ( i = 0; i < nlitsL; i++ )
305 plits[pivot + nresL + i] = (*array)[i];
313 return nresL + nresR;
320 Lits[0] = Abc_Var2Lit( iVar, !fCompl );
321 Lits[1] = Abc_Var2Lit( iVar0, fCompl0 );
325 Lits[0] = Abc_Var2Lit( iVar, !fCompl );
326 Lits[1] = Abc_Var2Lit( iVar1, fCompl1 );
330 Lits[0] = Abc_Var2Lit( iVar, fCompl );
331 Lits[1] = Abc_Var2Lit( iVar0, !fCompl0 );
332 Lits[2] = Abc_Var2Lit( iVar1, !fCompl1 );
343 assert( iVarA >= 0 && iVarB >= 0 && iVarC >= 0 );
345 Lits[0] = Abc_Var2Lit( iVarA, !fCompl );
346 Lits[1] = Abc_Var2Lit( iVarB, 1 );
347 Lits[2] = Abc_Var2Lit( iVarC, 1 );
351 Lits[0] = Abc_Var2Lit( iVarA, !fCompl );
352 Lits[1] = Abc_Var2Lit( iVarB, 0 );
353 Lits[2] = Abc_Var2Lit( iVarC, 0 );
357 Lits[0] = Abc_Var2Lit( iVarA, fCompl );
358 Lits[1] = Abc_Var2Lit( iVarB, 1 );
359 Lits[2] = Abc_Var2Lit( iVarC, 0 );
363 Lits[0] = Abc_Var2Lit( iVarA, fCompl );
364 Lits[1] = Abc_Var2Lit( iVarB, 0 );
365 Lits[2] = Abc_Var2Lit( iVarC, 1 );
433 for (
int i = 0; i < nlits; i++,plits++)
436 while ((*plits)/2 >= S->nVars()) S->newVar();
437 assert((*plits)/2 < S->nVars());
442 return S->addClause(lits);
449 S->nCallConfl = 1000;
455 for (
int i=0;i<nlits;i++,plits++)
468 return S->nVars() - 1;
478 return S->model[ivar] ==
l_True;
488 S->markApprox(v0, v1, nlim);
596 return nRuntimeLimit;
627 int i, nlitsL, nlitsR, nresL, nresR, status;
630 assert( nlits - pivot >= 1 );
631 if ( nlits - pivot == 1 )
638 assert( nlits - pivot >= 2 );
639 nlitsL = (nlits - pivot) / 2;
640 nlitsR = (nlits - pivot) - nlitsL;
641 assert( nlitsL + nlitsR == nlits - pivot );
652 for ( i = 0; i < nlitsL; i++ )
653 array->
push(plits[pivot + i]);
654 for ( i = 0; i < nresL; i++ )
655 plits[pivot + i] = plits[pivot + nlitsL + i];
656 for ( i = 0; i < nlitsL; i++ )
657 plits[pivot + nresL + i] = (*array)[i];
665 return nresL + nresR;
672 Lits[0] = Abc_Var2Lit( iVar, !fCompl );
673 Lits[1] = Abc_Var2Lit( iVar0, fCompl0 );
677 Lits[0] = Abc_Var2Lit( iVar, !fCompl );
678 Lits[1] = Abc_Var2Lit( iVar1, fCompl1 );
682 Lits[0] = Abc_Var2Lit( iVar, fCompl );
683 Lits[1] = Abc_Var2Lit( iVar0, !fCompl0 );
684 Lits[2] = Abc_Var2Lit( iVar1, !fCompl1 );
691int bmcg2_solver_add_xor(
bmcg2_sat_solver * pSat,
int iVarA,
int iVarB,
int iVarC,
int fCompl )
695 assert( iVarA >= 0 && iVarB >= 0 && iVarC >= 0 );
697 Lits[0] = Abc_Var2Lit( iVarA, !fCompl );
698 Lits[1] = Abc_Var2Lit( iVarB, 1 );
699 Lits[2] = Abc_Var2Lit( iVarC, 1 );
703 Lits[0] = Abc_Var2Lit( iVarA, !fCompl );
704 Lits[1] = Abc_Var2Lit( iVarB, 0 );
705 Lits[2] = Abc_Var2Lit( iVarC, 0 );
709 Lits[0] = Abc_Var2Lit( iVarA, fCompl );
710 Lits[1] = Abc_Var2Lit( iVarB, 1 );
711 Lits[2] = Abc_Var2Lit( iVarC, 0 );
715 Lits[0] = Abc_Var2Lit( iVarA, fCompl );
716 Lits[1] = Abc_Var2Lit( iVarB, 0 );
717 Lits[2] = Abc_Var2Lit( iVarC, 1 );
768 double cpu_time = (double)(
unsigned)clk / CLOCKS_PER_SEC;
773 printf(
"c nb ReduceDB : %-12d\n", (
int)s.
nbReduceDB);
775 printf(
"c nb learnts DL2 : %-12d\n", (
int)s.
nbDL2);
776 printf(
"c nb learnts size 2 : %-12d\n", (
int)s.
nbBin);
777 printf(
"c nb learnts size 1 : %-12d\n", (
int)s.
nbUn);
783 if (mem_used != 0) printf(
"Memory used : %.2f MB\n", mem_used);
802 char * pTemp;
int fComp,
Var, VarMax = 0;
804 for ( pTemp = pBuffer; *pTemp; pTemp++ )
806 if ( *pTemp ==
'c' || *pTemp ==
'p' ) {
807 while ( *pTemp !=
'\n' )
811 while ( *pTemp ==
' ' || *pTemp ==
'\t' || *pTemp ==
'\r' || *pTemp ==
'\n' )
820 if ( lits->
size() > 0 ) {
828 VarMax = Abc_MaxInt( VarMax,
Var );
831 while ( *pTemp >=
'0' && *pTemp <=
'9' )
854 S.setConfBudget( pPars->nConfls > 0 ? (int64_t)pPars->nConfls : -1 );
863 printf(
"c ============================[ Problem Statistics ]=============================\n");
865 printf(
"c | Number of variables: %12d |\n", S.nVars());
866 printf(
"c | Number of clauses: %12d |\n", S.nClauses());
872 printf(
"c Simplification removed %d variables and %d clauses. ", S.eliminated_vars, S.eliminated_clauses );
873 Abc_PrintTime( 1,
"Time", Abc_Clock() - clk );
877 lbool ret = S.solveLimited(dummy, 0);
879 printf(ret ==
l_True ?
"SATISFIABLE" : ret ==
l_False ?
"UNSATISFIABLE" :
"INDETERMINATE");
880 Abc_PrintTime( 1,
" Time", Abc_Clock() - clk );
899 for (
int i = 0; i < pCnf->
nClauses; i++ )
902 for (
int * pLit = pCnf->
pClauses[i]; pLit < pCnf->pClauses[i+1]; pLit++ )
907 printf(
"CNF stats: Vars = %6d. Clauses = %7d. Literals = %8d. ", pCnf->
nVars, pCnf->
nClauses, pCnf->
nLiterals );
908 Abc_PrintTime( 1,
"Time", Abc_Clock() - clk );
917 for (
int i = 0; i < pCnf->
nClauses; i++ )
942 int fCreatePrime = 1;
943 int nCubes, nSupp = Vec_IntSize(vCiSatVars);
945 Vec_Int_t * vLits = Vec_IntAlloc( nSupp );
946 Vec_Str_t * vCube = Vec_StrAlloc( nSupp + 4 );
947 Vec_StrFill( vCube, nSupp,
'-' );
948 Vec_StrPrintF( vCube,
" 1\n\0" );
949 for ( nCubes = 0; !CubeLimit || nCubes < CubeLimit; nCubes++ )
951 int * pFinal, nFinal, iVar, i, k = 0;
957 Vec_IntClear( vLits );
964 Vec_IntShrink( vLits, nFinal );
965 pFinal = Vec_IntArray( vLits );
966 for ( i = 0; i < nFinal; i++ )
967 pFinal[i] = Abc_LitNot(pFinal[i]);
976 Vec_StrFill( vCube, nSupp,
'-' );
977 for ( i = 0; i < nFinal; i++ )
979 int Index = Vec_IntEntry(vVar2Index, Abc_Lit2Var(pFinal[i]));
982 pFinal[k++] = pFinal[i];
983 assert( Index >= 0 && Index < nSupp );
984 Vec_StrWriteEntry( vCube, Index, (
char)(
'0' + Abc_LitIsCompl(pFinal[i])) );
987 Vec_StrAppend( vSop, Vec_StrArray(vCube) );
993 Vec_IntFree( vLits );
994 Vec_StrFree( vCube );
995 Vec_StrPush( vSop,
'\0' );
1004 int i, n, nVars = Gia_ManCiNum(
p),
Lit;
1005 int iFirstVar = pCnf->
nVars - nVars;
1006 assert( Gia_ManCoNum(
p) == 1 );
1007 for ( n = 0; n < 2; n++ )
1010 Lit = Abc_Var2Lit( 1, !n );
1011 for ( i = 0; i < pCnf->
nClauses; i++ )
1017 Vec_StrPrintF( vSop,
" %d\n\0", !n );
1025 Vec_Int_t * vVars = Vec_IntAlloc( 100 );
1026 Vec_Int_t * vVarMap = Vec_IntStartFull( iFirstVar + nVars );
1027 for ( i = 0; i < nVars; i++ )
1029 Vec_IntPush( vVars, iFirstVar+i );
1030 Vec_IntWriteEntry( vVarMap, iFirstVar+i, i );
1034 Vec_IntFree( vVarMap );
1035 Vec_IntFree( vVars );
1044 printf(
"%s", Vec_StrArray(vSop) );
1045 Vec_StrFree( vSop );
1049 Vec_Int_t * vCisUsed = Vec_IntAlloc( 100 );
1050 int i, ObjId, iNode = Abc_Lit2Var(
Lit );
1052 Vec_IntSort( vCisUsed, 0 );
1054 Vec_IntWriteEntry( vCisUsed, i, Gia_ManIdToCioId(
p, ObjId) );
1055 Vec_IntPrint( vCisUsed );
1057 Vec_IntFree( vCisUsed );
1074#define Gia_CubeForEachVar( pCube, Value, i ) \
1075 for ( i = 0; (pCube[i] != ' ') && (Value = pCube[i]); i++ )
1076#define Gia_SopForEachCube( pSop, nFanins, pCube ) \
1077 for ( pCube = (pSop); *pCube; pCube += (nFanins) + 3 )
1081 int i,
Lit, Counter, nCubes = 0;
1082 char Value, * pCube, * pSop = Vec_StrArray( vSop );
1083 Vec_Int_t * vCounts = Vec_IntStart( 2*Vec_IntSize(vCiVars) );
1084 Vec_IntClear( vDLits );
1091 Vec_IntAddToEntry( vCounts, 2*i, 1 );
1092 else if ( Value ==
'0' )
1093 Vec_IntAddToEntry( vCounts, 2*i+1, 1 );
1097 if ( Counter == nCubes )
1098 Vec_IntPush( vDLits, Abc_Var2Lit(Vec_IntEntry(vCiVars, Abc_Lit2Var(
Lit)), Abc_LitIsCompl(
Lit)) );
1099 Vec_IntSort( vDLits, 0 );
1100 Vec_IntFree( vCounts );
1116 int fSynthesize = 0;
1119 int i, CiId, ObjId, Res, nCubes = 0, nNodes, Count = 0, iNode = Abc_Lit2Var(iLit);
1120 Vec_Int_t * vCisUsed = Vec_IntAlloc( 100 );
1122 Vec_IntSort( vCisUsed, 0 );
1123 if ( vDLits ) Vec_IntClear( vDLits );
1128 Vec_IntWriteEntry( vCisUsed, i, Gia_ManIdToCioId(
p, ObjId) );
1131 assert( Gia_ManCiNum(pNew) == Vec_IntSize(vCisUsed) );
1132 nNodes = Gia_ManAndNum(pNew);
1137 if ( !pFuncCiToKeep( pData, CiId ) )
1144 if ( Gia_ManPoIsConst(pNew, 0) )
1146 int RetValue = Gia_ManPoIsConst1(pNew, 0);
1147 Vec_IntFree( vCisUsed );
1157 nCubes = Vec_StrCountEntry(vSop,
'\n');
1161 Vec_Int_t * vCisObjs = Vec_IntAlloc( Vec_IntSize(vCisUsed) );
1163 Vec_IntPush( vCisObjs, CiId + 1 );
1165 Vec_IntFree( vCisObjs );
1167 Vec_StrFree( vSop );
1169 if ( Gia_ManPoIsConst(pMan, 0) )
1171 int RetValue = Gia_ManPoIsConst1(pMan, 0);
1172 Vec_IntFree( vCisUsed );
1189 Vec_IntFree( vCisUsed );
1209 if ( (iVar = Gia_ObjCopyArray(
p, iObj)) >= 0 )
1211 pObj = Gia_ManObj(
p, iObj );
1212 assert( Gia_ObjIsCand(pObj) );
1213 if ( Gia_ObjIsAnd(pObj) )
1218 iVar = Vec_IntSize( vObjsUsed );
1219 Vec_IntPush( vObjsUsed, iObj );
1220 Gia_ObjSetCopyArray(
p, iObj, iVar );
1221 if ( vCiVars && Gia_ObjIsCi(pObj) )
1222 Vec_IntPush( vCiVars, iVar );
1235 if ( Gia_ObjIsAnd(pObj) )
1237 int iObj = Gia_ObjId(
p, pObj );
1238 int iVar = Gia_ObjCopyArray(
p, iObj);
1239 int iVar0 = Gia_ObjCopyArray(
p, Gia_ObjFaninId0(pObj, iObj));
1240 int iVar1 = Gia_ObjCopyArray(
p, Gia_ObjFaninId1(pObj, iObj));
1245 else if ( Gia_ObjIsConst0(pObj) )
1247 int Lit = Abc_Var2Lit( Gia_ObjCopyArray(
p, 0), 1 );
1260 assert( Gia_ManPiNum(pMan) == Vec_IntSize(vCiObjIds) );
1261 Gia_ManConst0(pMan)->Value = 0;
1263 pObj->
Value = Abc_Var2Lit( Vec_IntEntry(vCiObjIds, i), 0 );
1268 pObj->
Value = Gia_ManAppendAnd(
p, Gia_ObjFanin0Copy(pObj), Gia_ObjFanin1Copy(pObj) );
1269 pObj = Gia_ManPo(pMan, 0);
1270 Result = Gia_ObjFanin0Copy(pObj);
1276 Vec_Int_t * vObjsUsed = Vec_IntAlloc( 100 );
1277 Vec_Int_t * vCiVars = Vec_IntAlloc( 100 );
1279 int i, iVar, iVarLast,
Lit, RetValue, Count = 0, Result = -1;
1280 if ( vDLits ) Vec_IntClear( vDLits );
1283 if ( Vec_IntSize(&
p->vCopies) < Gia_ManObjNum(
p) )
1284 Vec_IntFillExtra( &
p->vCopies, Gia_ManObjNum(
p), -1 );
1286 iVar = Vec_IntSize(vObjsUsed);
1287 Vec_IntPush( vObjsUsed, 0 );
1288 Gia_ObjSetCopyArray(
p, 0, iVar );
1296 Lit = Abc_Var2Lit( iVarLast, !Abc_LitIsCompl(iLit) );
1303 Lit = Abc_Var2Lit( iVarLast, Abc_LitIsCompl(iLit) );
1331 vVarMap = Vec_IntStartFull( Vec_IntSize(vObjsUsed) );
1334 Gia_Obj_t * pObj = Gia_ManObj(
p, Vec_IntEntry(vObjsUsed, iVar) );
1335 assert( Gia_ObjIsCi(pObj) );
1336 if ( pFuncCiToKeep(pData, Gia_ObjCioId(pObj)) )
1337 Vec_IntWriteEntry( vVarMap, iVar, i ), Count++;
1339 if ( Count == 0 || Count == Vec_IntSize(vCiVars) )
1341 Result = Count == 0 ? 1 : iLit;
1349 Vec_IntWriteEntry( vCiVars, i, Vec_IntEntry(vObjsUsed, iVar) );
1354 RetValue = Gia_ManAndNum(
p);
1364 Gia_ObjSetCopyArray(
p, iVar, -1 );
1365 Vec_IntFree( vObjsUsed );
1366 Vec_IntFree( vCiVars );
1367 Vec_IntFreeP( &vVarMap );
1368 Vec_StrFreeP( &vSop );
1381 abctime clk1d = Abc_Clock()-clk1;
1385 abctime clk2d = Abc_Clock()-clk2;
1387 Abc_PrintTime( 1,
"Time1", clk1d );
1388 Abc_PrintTime( 1,
"Time2", clk2d );
1391 printf(
"Verification passed.\n" );
1393 printf(
"Verification FAILED.\n" );
1395 Gia_ManAppendCo(
p, iRes1 );
1396 Gia_ManAppendCo(
p, iRes2 );
1410 printf(
"Verification passed.\n" );
1413 printf(
"Verification FAILED.\n" );
1435 Vec_Int_t * vObjsUsed = Vec_IntAlloc( 100 );
1436 int i, iVar, iSatVar[2], iSatLit[2], Lits[2], status;
1437 if ( Vec_IntSize(&
p->vCopies) < Gia_ManObjNum(
p) )
1438 Vec_IntFillExtra( &
p->vCopies, Gia_ManObjNum(
p), -1 );
1441 iVar = Vec_IntSize(vObjsUsed);
1442 Vec_IntPush( vObjsUsed, 0 );
1443 Gia_ObjSetCopyArray(
p, 0, iVar );
1449 iSatLit[0] = Abc_Var2Lit( iSatVar[0], Abc_LitIsCompl(iLit0) );
1450 iSatLit[1] = Abc_Var2Lit( iSatVar[1], Abc_LitIsCompl(iLit1) );
1453 Gia_ObjSetCopyArray(
p, iVar, -1 );
1454 Vec_IntFree( vObjsUsed );
1458 Lits[0] = iSatLit[0];
1459 Lits[1] = Abc_LitNot(iSatLit[1]);
1463 Lits[0] = Abc_LitNot(iSatLit[0]);
1464 Lits[1] = iSatLit[1];
1471 Lits[0] = iSatLit[0];
1472 Lits[1] = iSatLit[1];
1481 for ( n = 0; n < 2; n++ )
1485 Gia_ObjFaninLit0p(
p, Gia_ManPo(
p, 0)),
1486 Gia_ObjFaninLit0p(
p, Gia_ManPo(
p, 1)),
1489 printf(
"%s %s.\n", n ?
"Equivalence" :
"Overlap", Res ?
"holds" :
"fails" );
1511 S.verbEveryConflicts = 50000;
1512 S.showModel =
false;
1514 S.setConfBudget( pPars->nConfls > 0 ? (int64_t)pPars->nConfls : -1 );
1522 printf(
"c ============================[ Problem Statistics ]=============================\n");
1524 printf(
"c | Number of variables: %12d |\n", S.nVars());
1525 printf(
"c | Number of clauses: %12d |\n", S.nClauses());
1531 printf(
"c Simplification removed %d variables and %d clauses. ", S.eliminated_vars, S.eliminated_clauses );
1532 Abc_PrintTime( 1,
"Time", Abc_Clock() - clk );
1536 lbool ret = S.solveLimited(dummy, 0);
1539 printf(ret ==
l_True ?
"SATISFIABLE" : ret ==
l_False ?
"UNSATISFIABLE" :
"INDETERMINATE");
1540 Abc_PrintTime( 1,
" Time", Abc_Clock() - clk );
1549 assert(Vec_IntEntry(vCnfIds,Gia_ObjId(
p, pObj))!=-1);
1550 if (S.model[Vec_IntEntry(vCnfIds,Gia_ObjId(
p, pObj))] ==
l_True)
1551 Abc_InfoSetBit(
p->pCexComb->pData, i);
1554 Vec_IntFree(vCnfIds);
int bmcg2_sat_solver_addclause(bmcg2_sat_solver *s, int *plits, int nlits)
#define Gia_SopForEachCube(pSop, nFanins, pCube)
int bmcg2_sat_solver_minimize_assumptions(bmcg2_sat_solver *s, int *plits, int nlits, int pivot)
void glucose2_solver_stop(Gluco2::SimpSolver *S)
int glucose2_solver_addvar(Gluco2::SimpSolver *S)
void glucose2_solver_setcallback(Gluco2::SimpSolver *S, void *pman, int(*pfunc)(void *, int, int *))
int bmcg2_sat_solver_quantify2(Gia_Man_t *p, int iLit, int fHash, int(*pFuncCiToKeep)(void *, int), void *pData, Vec_Int_t *vDLits)
int Gia_ManSatAndCollect2_rec(Gia_Man_t *p, int iObj, Vec_Int_t *vObjsUsed, Vec_Int_t *vCiVars)
int bmcg2_sat_solver_final(bmcg2_sat_solver *s, int **ppArray)
void bmcg2_sat_solver_set_var_fanin_lit(bmcg2_sat_solver *s, int var, int lit0, int lit1)
int * glucose2_solver_read_cex(Gluco2::SimpSolver *S)
int bmcg2_sat_solver_elim_varnum(bmcg2_sat_solver *s)
int bmcg2_sat_solver_learntnum(bmcg2_sat_solver *s)
void bmcg2_sat_solver_var_set_frozen(bmcg2_sat_solver *s, int v, int freeze)
int Gia_ManFactorSop2(Gia_Man_t *p, Vec_Int_t *vCiObjIds, Vec_Str_t *vSop, int fHash)
void bmcg2_sat_solver_stop(bmcg2_sat_solver *s)
void glucose2_solver_reset(Gluco2::SimpSolver *S)
int bmcg2_sat_solver_add_xor(bmcg2_sat_solver *pSat, int iVarA, int iVarB, int iVarC, int fCompl)
abctime bmcg2_sat_solver_set_runtime_limit(bmcg2_sat_solver *s, abctime Limit)
int bmcg2_sat_solver_var_is_elim(bmcg2_sat_solver *s, int v)
int glucose2_solver_read_cex_varvalue(Gluco2::SimpSolver *S, int ivar)
int bmcg2_sat_solver_solve(bmcg2_sat_solver *s, int *plits, int nlits)
void bmcg2_sat_generate_dvars(Vec_Int_t *vCiVars, Vec_Str_t *vSop, Vec_Int_t *vDLits)
void bmcg2_sat_solver_set_jftr(bmcg2_sat_solver *s, int jftr)
void Glucose2_SolveCnf(char *pFileName, Glucose2_Pars *pPars)
void bmcg2_sat_solver_mark_cone(bmcg2_sat_solver *s, int var)
void Glucose_ReadDimacs(char *pFileName, SimpSolver &s)
int glucose2_solver_addclause(Gluco2::SimpSolver *S, int *plits, int nlits)
void bmcg2_sat_solver_setcallback(bmcg2_sat_solver *s, void *pman, int(*pfunc)(void *, int, int *))
void Glucose2_QuantifyAigTest(Gia_Man_t *p)
int bmcg2_sat_solver_quantify(bmcg2_sat_solver *pSats[], Gia_Man_t *p, int iLit, int fHash, int(*pFuncCiToKeep)(void *, int), void *pData, Vec_Int_t *vDLits)
#define Gia_CubeForEachVar(pCube, Value, i)
int bmcg2_sat_solver_read_cex_varvalue(bmcg2_sat_solver *s, int ivar)
int Glucose2_SolveAig(Gia_Man_t *p, Glucose2_Pars *pPars)
void bmcg2_sat_solver_print_sop(Gia_Man_t *p)
Vec_Int_t * Glucose_SolverFromAig2(Gia_Man_t *p, SimpSolver &S)
int bmcg2_sat_solver_varnum(bmcg2_sat_solver *s)
SimpSolver * glucose2_solver_start()
FUNCTION DEFINITIONS ///.
bmcg2_sat_solver * bmcg2_sat_solver_start()
MACRO DEFINITIONS ///.
int glucose2_solver_solve(Gluco2::SimpSolver *S, int *plits, int nlits)
int Gia_ManCiIsToKeep2(void *pData, int i)
void glucose2_print_stats(SimpSolver &s, abctime clk)
void bmcg2_sat_solver_print_sop_lit(Gia_Man_t *p, int Lit)
int bmcg2_sat_solver_clausenum(bmcg2_sat_solver *s)
void bmcg2_sat_solver_reset(bmcg2_sat_solver *s)
void Gia_ManQuantLoadCnf2(Gia_Man_t *p, Vec_Int_t *vObjsUsed, bmcg2_sat_solver *pSats[])
int * bmcg2_sat_solver_read_cex(bmcg2_sat_solver *s)
int bmcg2_sat_solver_conflictnum(bmcg2_sat_solver *s)
Vec_Int_t * Glucose_SolverFromAig(Gia_Man_t *p, SimpSolver &s)
int bmcg2_sat_solver_add_and(bmcg2_sat_solver *s, int iVar, int iVar0, int iVar1, int fCompl0, int fCompl1, int fCompl)
void bmcg2_sat_solver_prelocate(bmcg2_sat_solver *s, int var_num)
Vec_Str_t * bmcg2_sat_solver_sop(Gia_Man_t *p, int CubeLimit)
void bmcg2_sat_solver_markapprox(bmcg2_sat_solver *s, int v0, int v1, int nlim)
int bmcg2_sat_solver_eliminate(bmcg2_sat_solver *s, int turn_off_elim)
void bmcg2_sat_solver_set_stop(bmcg2_sat_solver *s, int *pstop)
void glucose2_markapprox(Gluco2::SimpSolver *S, int v0, int v1, int nlim)
Vec_Str_t * Glucose2_GenerateCubes(bmcg2_sat_solver *pSat[2], Vec_Int_t *vCiSatVars, Vec_Int_t *vVar2Index, int CubeLimit)
void bmcg2_sat_solver_set_nvars(bmcg2_sat_solver *s, int nvars)
int bmcg2_sat_solver_addvar(bmcg2_sat_solver *s)
int bmcg2_sat_solver_quantify_test(bmcg2_sat_solver *pSats[], Gia_Man_t *p, int iLit, int fHash, int(*pFuncCiToKeep)(void *, int), void *pData, Vec_Int_t *vDLits)
int bmcg2_sat_solver_jftr(bmcg2_sat_solver *s)
void glucose2_solver_setstop(Gluco2::SimpSolver *S, int *pstop)
void Glucose2_CheckTwoNodesTest(Gia_Man_t *p)
void bmcg2_sat_solver_start_new_round(bmcg2_sat_solver *s)
int bmcg2_sat_solver_equiv_overlap_check(bmcg2_sat_solver *pSat, Gia_Man_t *p, int iLit0, int iLit1, int fEquiv)
void bmcg2_sat_solver_set_conflict_budget(bmcg2_sat_solver *s, int Limit)
typedefABC_NAMESPACE_HEADER_START struct Glucose2_Pars_ Glucose2_Pars
BASIC TYPES ///.
#define GLUCOSE_UNSAT
INCLUDES ///.
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
int64_t nbstopsrestartssame
void setIncrementalMode()
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 ///.