diff options
author | Alan Mishchenko <alanmi@berkeley.edu> | 2012-12-09 09:47:48 -0800 |
---|---|---|
committer | Alan Mishchenko <alanmi@berkeley.edu> | 2012-12-09 09:47:48 -0800 |
commit | b65ae7349af7de36390ec916701b997cac2a00ed (patch) | |
tree | 47ce553bcffa963d3debafc0459701a9f6d5ecaa /src/proof/pdr/pdrSat.c | |
parent | 79aa1f00d6c00118442a240dab12d100e01fdd03 (diff) | |
download | abc-b65ae7349af7de36390ec916701b997cac2a00ed.tar.gz abc-b65ae7349af7de36390ec916701b997cac2a00ed.tar.bz2 abc-b65ae7349af7de36390ec916701b997cac2a00ed.zip |
Enabling multi-output solving in 'pdr'.
Diffstat (limited to 'src/proof/pdr/pdrSat.c')
-rw-r--r-- | src/proof/pdr/pdrSat.c | 20 |
1 files changed, 14 insertions, 6 deletions
diff --git a/src/proof/pdr/pdrSat.c b/src/proof/pdr/pdrSat.c index 50402ee5..f0aff8bb 100644 --- a/src/proof/pdr/pdrSat.c +++ b/src/proof/pdr/pdrSat.c @@ -45,6 +45,8 @@ ABC_NAMESPACE_IMPL_START sat_solver * Pdr_ManCreateSolver( Pdr_Man_t * p, int k ) { sat_solver * pSat; + Aig_Obj_t * pObj; + int i; assert( Vec_PtrSize(p->vSolvers) == k ); assert( Vec_VecSize(p->vClauses) == k ); assert( Vec_IntSize(p->vActVars) == k ); @@ -55,7 +57,9 @@ sat_solver * Pdr_ManCreateSolver( Pdr_Man_t * p, int k ) Vec_VecExpand( p->vClauses, k ); Vec_IntPush( p->vActVars, 0 ); // add property cone - Pdr_ObjSatVar( p, k, Aig_ManCo(p->pAig, (p->pPars->iOutput==-1)?0:p->pPars->iOutput ) ); +// Pdr_ObjSatVar( p, k, Aig_ManCo(p->pAig, (p->pPars->iOutput==-1)?0:p->pPars->iOutput ) ); + Saig_ManForEachPo( p->pAig, pObj, i ) + Pdr_ObjSatVar( p, k, pObj ); return pSat; } @@ -173,11 +177,15 @@ Vec_Int_t * Pdr_ManCubeToLits( Pdr_Man_t * p, int k, Pdr_Set_t * pCube, int fCom void Pdr_ManSetPropertyOutput( Pdr_Man_t * p, int k ) { sat_solver * pSat; - int Lit, RetValue; + Aig_Obj_t * pObj; + int Lit, RetValue, i; pSat = Pdr_ManSolver(p, k); - Lit = toLitCond( Pdr_ObjSatVar(p, k, Aig_ManCo(p->pAig, (p->pPars->iOutput==-1)?0:p->pPars->iOutput)), 1 ); // neg literal - RetValue = sat_solver_addclause( pSat, &Lit, &Lit + 1 ); - assert( RetValue == 1 ); + Saig_ManForEachPo( p->pAig, pObj, i ) + { + Lit = toLitCond( Pdr_ObjSatVar(p, k, pObj), 1 ); // neg literal + RetValue = sat_solver_addclause( pSat, &Lit, &Lit + 1 ); + assert( RetValue == 1 ); + } sat_solver_compress( pSat ); } @@ -279,7 +287,7 @@ int Pdr_ManCheckCube( Pdr_Man_t * p, int k, Pdr_Set_t * pCube, Pdr_Set_t ** ppPr if ( pCube == NULL ) // solve the property { clk = clock(); - Lit = toLit( Pdr_ObjSatVar(p, k, Aig_ManCo(p->pAig, (p->pPars->iOutput==-1)?0:p->pPars->iOutput)) ); // pos literal (property fails) + Lit = toLit( Pdr_ObjSatVar(p, k, Aig_ManCo(p->pAig, p->iOutCur)) ); // pos literal (property fails) RetValue = sat_solver_solve( pSat, &Lit, &Lit + 1, nConfLimit, 0, 0, 0 ); if ( RetValue == l_Undef ) return -1; |