summaryrefslogtreecommitdiffstats
path: root/src/proof
diff options
context:
space:
mode:
authorAlan Mishchenko <alanmi@berkeley.edu>2015-11-23 23:42:20 +0700
committerAlan Mishchenko <alanmi@berkeley.edu>2015-11-23 23:42:20 +0700
commit56880eab5294d8a13e012eeca1e68255f0bf0e68 (patch)
tree8dc6f8948253493ae7f4d6f46e8b3b2d6c164969 /src/proof
parent63fcf25aead4055e260201a1820a190e8f2fbfab (diff)
downloadabc-56880eab5294d8a13e012eeca1e68255f0bf0e68.tar.gz
abc-56880eab5294d8a13e012eeca1e68255f0bf0e68.tar.bz2
abc-56880eab5294d8a13e012eeca1e68255f0bf0e68.zip
New command %psinv.
Diffstat (limited to 'src/proof')
-rw-r--r--src/proof/pdr/pdrCore.c5
-rw-r--r--src/proof/pdr/pdrInt.h1
-rw-r--r--src/proof/pdr/pdrInv.c20
3 files changed, 26 insertions, 0 deletions
diff --git a/src/proof/pdr/pdrCore.c b/src/proof/pdr/pdrCore.c
index 20db8f67..78cc16c1 100644
--- a/src/proof/pdr/pdrCore.c
+++ b/src/proof/pdr/pdrCore.c
@@ -19,6 +19,7 @@
***********************************************************************/
#include "pdrInt.h"
+#include "base/main/main.h"
ABC_NAMESPACE_IMPL_START
@@ -910,6 +911,10 @@ int Pdr_ManSolve( Aig_Man_t * pAig, Pdr_Par_t * pPars )
RetValue = Pdr_ManSolveInt( p );
if ( RetValue == 0 )
assert( pAig->pSeqModel != NULL || p->vCexes != NULL );
+ if ( RetValue == 1 )
+ Abc_FrameSetInv( Pdr_ManCountFlopsInv(p) );
+ else
+ Abc_FrameSetInv( NULL );
if ( p->vCexes )
{
assert( p->pAig->vSeqModelVec == NULL );
diff --git a/src/proof/pdr/pdrInt.h b/src/proof/pdr/pdrInt.h
index 0eb6bd81..bd9fe87c 100644
--- a/src/proof/pdr/pdrInt.h
+++ b/src/proof/pdr/pdrInt.h
@@ -163,6 +163,7 @@ extern sat_solver * Pdr_ManNewSolver( sat_solver * pSat, Pdr_Man_t * p, int k
/*=== pdrCore.c ==========================================================*/
extern int Pdr_ManCheckContainment( Pdr_Man_t * p, int k, Pdr_Set_t * pSet );
/*=== pdrInv.c ==========================================================*/
+extern Vec_Int_t * Pdr_ManCountFlopsInv( Pdr_Man_t * p );
extern void Pdr_ManPrintProgress( Pdr_Man_t * p, int fClose, abctime Time );
extern void Pdr_ManPrintClauses( Pdr_Man_t * p, int kStart );
extern void Pdr_ManDumpClauses( Pdr_Man_t * p, char * pFileName, int fProved );
diff --git a/src/proof/pdr/pdrInv.c b/src/proof/pdr/pdrInv.c
index eef24b83..860462c3 100644
--- a/src/proof/pdr/pdrInv.c
+++ b/src/proof/pdr/pdrInv.c
@@ -168,6 +168,26 @@ Vec_Ptr_t * Pdr_ManCollectCubes( Pdr_Man_t * p, int kStart )
/**Function*************************************************************
+ Synopsis []
+
+ Description []
+
+ SideEffects []
+
+ SeeAlso []
+
+***********************************************************************/
+Vec_Int_t * Pdr_ManCountFlopsInv( Pdr_Man_t * p )
+{
+ int kStart = Pdr_ManFindInvariantStart(p);
+ Vec_Ptr_t *vCubes = Pdr_ManCollectCubes(p, kStart);
+ Vec_Int_t * vInv = Pdr_ManCountFlops( p, vCubes );
+ Vec_PtrFree(vCubes);
+ return vInv;
+}
+
+/**Function*************************************************************
+
Synopsis [Counts the number of variables used in the clauses.]
Description []