summaryrefslogtreecommitdiffstats
path: root/src/proof
diff options
context:
space:
mode:
authorAlan Mishchenko <alanmi@berkeley.edu>2013-09-13 19:44:54 -0700
committerAlan Mishchenko <alanmi@berkeley.edu>2013-09-13 19:44:54 -0700
commit60fae35d3635464ce7a727899b4b77bd405ca4e3 (patch)
treeab465018c7dfa31a3da5cabe68669d76da2d66ab /src/proof
parenta4087e45f030476cb071f20ccf60b4619320cd36 (diff)
downloadabc-60fae35d3635464ce7a727899b4b77bd405ca4e3.tar.gz
abc-60fae35d3635464ce7a727899b4b77bd405ca4e3.tar.bz2
abc-60fae35d3635464ce7a727899b4b77bd405ca4e3.zip
Fixing several bugs, which led to unsound results produced by 'pdr -a' with per-output timeout.
Diffstat (limited to 'src/proof')
-rw-r--r--src/proof/pdr/pdrCore.c14
-rw-r--r--src/proof/pdr/pdrInv.c2
-rw-r--r--src/proof/pdr/pdrSat.c3
3 files changed, 15 insertions, 4 deletions
diff --git a/src/proof/pdr/pdrCore.c b/src/proof/pdr/pdrCore.c
index 27426a60..5294e020 100644
--- a/src/proof/pdr/pdrCore.c
+++ b/src/proof/pdr/pdrCore.c
@@ -491,8 +491,16 @@ int Pdr_ManBlockCube( Pdr_Man_t * p, Pdr_Set_t * pCube )
// check other frames
assert( pPred == NULL );
for ( k = pThis->iFrame; k < kMax; k++ )
- if ( !Pdr_ManCheckCube( p, k, pCubeMin, NULL, 0 ) )
+ {
+ RetValue = Pdr_ManCheckCube( p, k, pCubeMin, NULL, 0 );
+ if ( RetValue == -1 )
+ {
+ Pdr_OblDeref( pThis );
+ return -1;
+ }
+ if ( !RetValue )
break;
+ }
// add new clause
if ( p->pPars->fVeryVerbose )
@@ -740,8 +748,8 @@ int Pdr_ManSolveInt( Pdr_Man_t * p )
p->pPars->nDropOuts++;
if ( p->pPars->vOutMap )
Vec_IntWriteEntry( p->pPars->vOutMap, p->iOutCur, -1 );
- if ( p->pPars->fVerbose )
- printf( "Timing out on output %d.\n", p->iOutCur );
+ if ( !p->pPars->fNotVerbose )
+ Abc_Print( 1, "Timing out on output %*d.\n", nOutDigits, p->iOutCur );
}
p->timeToStopOne = 0;
}
diff --git a/src/proof/pdr/pdrInv.c b/src/proof/pdr/pdrInv.c
index b1bff676..45bc3c35 100644
--- a/src/proof/pdr/pdrInv.c
+++ b/src/proof/pdr/pdrInv.c
@@ -336,7 +336,7 @@ void Pdr_ManVerifyInvariant( Pdr_Man_t * p )
kThis = Vec_PtrSize(p->vSolvers);
pSat = Pdr_ManCreateSolver( p, kThis );
// add the property output
- Pdr_ManSetPropertyOutput( p, kThis );
+// Pdr_ManSetPropertyOutput( p, kThis );
// add the clauses
Vec_PtrForEachEntry( Pdr_Set_t *, vCubes, pCube, i )
{
diff --git a/src/proof/pdr/pdrSat.c b/src/proof/pdr/pdrSat.c
index 31c05ce6..244d0311 100644
--- a/src/proof/pdr/pdrSat.c
+++ b/src/proof/pdr/pdrSat.c
@@ -185,6 +185,9 @@ void Pdr_ManSetPropertyOutput( Pdr_Man_t * p, int k )
// skip solved outputs
if ( p->vCexes && Vec_PtrEntry(p->vCexes, i) )
continue;
+ // skip timedout outputs
+ if ( p->pPars->vOutMap && Vec_IntEntry(p->pPars->vOutMap, i) == -1 )
+ continue;
Lit = toLitCond( Pdr_ObjSatVar(p, k, 1, pObj), 1 ); // neg literal
RetValue = sat_solver_addclause( pSat, &Lit, &Lit + 1 );
assert( RetValue == 1 );