75 assert( Gia_ManRegNum(pAig) > 0 );
77 pFrames->
pName = Abc_UtilStrsav( pAig->pName );
78 pFrames->
pSpec = Abc_UtilStrsav( pAig->pSpec );
80 Gia_ManConst0(pAig)->Value = 0;
81 for ( f = 0; f < nFrames; f++ )
84 pObj->
Value = f ? Gia_ObjRoToRi( pAig, pObj )->Value : 0;
86 pObj->
Value = Gia_ManAppendCi( pFrames );
90 pObj->
Value = Gia_ObjFanin0Copy(pObj);
93 Gia_ManAppendCo( pFrames, pObj->
Value );
112 *pvCiMap = Vec_IntAlloc( 100 );
114 Vec_IntPush( *pvCiMap, pCnf->pVarNums[ Gia_ObjId(pNew, pObj) ] );
142 assert( Gia_ManPiNum(pSuff) == Gia_ManCiNum(
p) );
150 vLits = Vec_IntAlloc( 1000 );
153 Vec_IntClear( vLits );
154 for ( k = 0; k < Limit; k++ )
157 Lit = Vec_IntEntry( vSop, i + k );
158 Vec_IntPush( vLits, Abc_LitNot(Lit) );
160 if ( !
sat_solver_addclause( pSat, Vec_IntArray(vLits), Vec_IntArray(vLits) + Vec_IntSize(vLits) ) )
162 Vec_IntFree( vLits );
169 Vec_IntFree( vLits );
171 *pvCoMap = Vec_IntAlloc( 100 );
174 pObj = Gia_ManPi( pNew, i + Gia_ManPiNum(
p) );
175 Vec_IntPush( *pvCoMap, pCnf->
pVarNums[ Gia_ObjId(pNew, pObj) ] );
200 Vec_IntClear(
p->vImage );
208 return INT2_COMPUTED;
211 Vec_IntClear(
p->vAssign );
213 Vec_IntPush(
p->vAssign, sat_solver_var_value(
p->pSatSuff, iVar) );
217 status =
sat_solver_solve(
p->pSatPref, Vec_IntArray(vCube), Vec_IntArray(vCube) + Vec_IntSize(vCube), 0, 0, 0, 0 );
220 int k, nCoreLits, * pCoreLits;
221 nCoreLits = sat_solver_final(
p->pSatPref, &pCoreLits );
223 Vec_IntClear( vCube );
224 Vec_IntPush( vImage, nCoreLits );
225 for ( k = 0; k < nCoreLits; k++ )
227 Vec_IntPush( vCube, pCoreLits[k] );
228 Vec_IntPush( vImage, pCoreLits[k] );
231 if ( !
sat_solver_addclause(
p->pSatSuff, Vec_IntArray(vCube), Vec_IntArray(vCube) + Vec_IntSize(vCube) ) )
233 Vec_IntFree( vCube );
234 return INT2_COMPUTED;
237 Vec_IntFree( vCube );
239 return INT2_TIME_OUT;
241 return INT2_FALSE_NEG;
262 int f, i, RetValue = -1;
263 abctime clk, clkTotal = Abc_Clock(), timeTemp = 0;
264 abctime nTimeToStop = pPars->nSecLimit ? pPars->nSecLimit * CLOCKS_PER_SEC + Abc_Clock() : 0;
267 assert( Gia_ManPiNum(pInit) > 0 );
268 assert( Gia_ManPoNum(pInit) > 0 );
269 assert( Gia_ManRegNum(pInit) > 0 );
272 p = Int2_ManCreate( pInit, pPars );
277 sat_solver_set_runtime_limit(
p->pSatPref, nTimeToStop );
280 for ( i = 0; i < Gia_ManPoNum(pInit); i++ )
281 Vec_IntPush(
p->vPrefCos, i );
288 for ( f = pPars->nFramesS; f < p->nFramesMax; f++ )
290 for ( i = 0; i <
p->nFramesMax; i++ )
293 sat_solver_set_runtime_limit(
p->pSatSuff, nTimeToStop );
294 Vec_IntFreeP( &vImageOne );
296 Vec_IntFree( vCoMap );
298 if ( nTimeToStop && Abc_Clock() > nTimeToStop )
300 if ( vImageOne == NULL )
304 printf(
"Satisfiable in frame %d.\n", f );
305 Vec_IntFree( vCiMap );
312 Vec_IntAppend( vImagesAll, vImageOne );
315 Vec_IntFree( vCiMap );
318 Abc_PrintTime(
"Time", Abc_Clock() - clk );
321p->timeSatPref += Abc_Clock() - clk;
#define ABC_NAMESPACE_IMPL_START
#define ABC_NAMESPACE_IMPL_END
typedefABC_NAMESPACE_IMPL_START struct Vec_Int_t_ Vec_Int_t
DECLARATIONS ///.
#define sat_solver_addclause
struct Cnf_Dat_t_ Cnf_Dat_t
void Cnf_DataFree(Cnf_Dat_t *p)
void Gia_ManStop(Gia_Man_t *p)
#define Gia_ManForEachRo(p, pObj, i)
#define Gia_ManForEachPo(p, pObj, i)
#define Gia_ManForEachAnd(p, pObj, i)
void Gia_ManHashAlloc(Gia_Man_t *p)
#define Gia_ManForEachPi(p, pObj, i)
Gia_Man_t * Gia_ManStart(int nObjsMax)
FUNCTION DEFINITIONS ///.
struct Gia_Obj_t_ Gia_Obj_t
struct Gia_Man_t_ Gia_Man_t
Gia_Man_t * Gia_ManCleanup(Gia_Man_t *p)
int Gia_ManHashAnd(Gia_Man_t *p, int iLit0, int iLit1)
void Gia_ManHashStop(Gia_Man_t *p)
#define Gia_ManForEachRi(p, pObj, i)
Gia_Man_t * Jf_ManDeriveCnf(Gia_Man_t *p, int fCnfObjIds)
void Int2_ManCreateFrames(Int2_Man_t *p, int iFrame, Vec_Int_t *vPrefCos)
int Int2_ManCheckBmc(Int2_Man_t *p, Vec_Int_t *vCube)
Gia_Man_t * Int2_ManUnroll(Gia_Man_t *p, int nFrames)
Vec_Int_t * Int2_ManComputePreimage(Gia_Man_t *pSuff, sat_solver *pSatPref, sat_solver *pSatSuff, Vec_Int_t *vCiMap, Vec_Int_t *vCoMap, Vec_Int_t *vPrio)
sat_solver * Int2_ManPrepareSuffix(Gia_Man_t *p, Vec_Int_t *vImageOne, Vec_Int_t *vImagesAll, Vec_Int_t **pvCoMap, Gia_Man_t **ppSuff)
ABC_NAMESPACE_IMPL_START void Int2_ManSetDefaultParams(Int2_ManPars_t *p)
DECLARATIONS ///.
sat_solver * Int2_ManPreparePrefix(Gia_Man_t *p, int f, Vec_Int_t **pvCiMap)
int Int2_ManPerformInterpolation(Gia_Man_t *pInit, Int2_ManPars_t *pPars)
typedefABC_NAMESPACE_HEADER_START struct Int2_Man_t_ Int2_Man_t
INCLUDES ///.
Vec_Int_t * Int2_ManRefineCube(Gia_Man_t *p, Vec_Int_t *vAssign, Vec_Int_t *vPrio)
Gia_Man_t * Int2_ManProbToGia(Gia_Man_t *p, Vec_Int_t *vSop)
typedefABC_NAMESPACE_HEADER_START struct Int2_ManPars_t_ Int2_ManPars_t
INCLUDES ///.
void * Cnf_DataWriteIntoSolver(Cnf_Dat_t *p, int nFrames, int fInit)
sat_solver * sat_solver_new(void)
void sat_solver_setnvars(sat_solver *s, int n)
void sat_solver_delete(sat_solver *s)
#define Vec_IntForEachEntry(vVec, Entry, i)
MACRO DEFINITIONS ///.
#define Vec_IntForEachEntryStart(vVec, Entry, i, Start)