| /**CFile**************************************************************** |
| |
| FileName [intInter.c] |
| |
| SystemName [ABC: Logic synthesis and verification system.] |
| |
| PackageName [Interpolation engine.] |
| |
| Synopsis [Experimental procedures to derive and compare interpolants.] |
| |
| Author [Alan Mishchenko] |
| |
| Affiliation [UC Berkeley] |
| |
| Date [Ver. 1.0. Started - June 24, 2008.] |
| |
| Revision [$Id: intInter.c,v 1.00 2005/06/20 00:00:00 alanmi Exp $] |
| |
| ***********************************************************************/ |
| |
| #include "intInt.h" |
| |
| ABC_NAMESPACE_IMPL_START |
| |
| |
| //////////////////////////////////////////////////////////////////////// |
| /// DECLARATIONS /// |
| //////////////////////////////////////////////////////////////////////// |
| |
| //////////////////////////////////////////////////////////////////////// |
| /// FUNCTION DEFINITIONS /// |
| //////////////////////////////////////////////////////////////////////// |
| |
| /**Function************************************************************* |
| |
| Synopsis [] |
| |
| Description [] |
| |
| SideEffects [] |
| |
| SeeAlso [] |
| |
| ***********************************************************************/ |
| Aig_Man_t * Inter_ManDupExpand( Aig_Man_t * pInter, Aig_Man_t * pOther ) |
| { |
| Aig_Man_t * pInterC; |
| assert( Aig_ManCiNum(pInter) <= Aig_ManCiNum(pOther) ); |
| pInterC = Aig_ManDupSimple( pInter ); |
| Aig_IthVar( pInterC, Aig_ManCiNum(pOther)-1 ); |
| assert( Aig_ManCiNum(pInterC) == Aig_ManCiNum(pOther) ); |
| return pInterC; |
| } |
| |
| /**Function************************************************************* |
| |
| Synopsis [] |
| |
| Description [] |
| |
| SideEffects [] |
| |
| SeeAlso [] |
| |
| ***********************************************************************/ |
| void Inter_ManVerifyInterpolant1( Inta_Man_t * pMan, Sto_Man_t * pCnf, Aig_Man_t * pInter ) |
| { |
| extern Aig_Man_t * Inta_ManDeriveClauses( Inta_Man_t * pMan, Sto_Man_t * pCnf, int fClausesA ); |
| Aig_Man_t * pLower, * pUpper, * pInterC; |
| int RetValue1, RetValue2; |
| |
| pLower = Inta_ManDeriveClauses( pMan, pCnf, 1 ); |
| pUpper = Inta_ManDeriveClauses( pMan, pCnf, 0 ); |
| Aig_ManFlipFirstPo( pUpper ); |
| |
| pInterC = Inter_ManDupExpand( pInter, pLower ); |
| RetValue1 = Inter_ManCheckContainment( pLower, pInterC ); |
| Aig_ManStop( pInterC ); |
| |
| pInterC = Inter_ManDupExpand( pInter, pUpper ); |
| RetValue2 = Inter_ManCheckContainment( pInterC, pUpper ); |
| Aig_ManStop( pInterC ); |
| |
| if ( RetValue1 && RetValue2 ) |
| printf( "Im is correct.\n" ); |
| if ( !RetValue1 ) |
| printf( "Property A => Im fails.\n" ); |
| if ( !RetValue2 ) |
| printf( "Property Im => !B fails.\n" ); |
| |
| Aig_ManStop( pLower ); |
| Aig_ManStop( pUpper ); |
| } |
| |
| /**Function************************************************************* |
| |
| Synopsis [] |
| |
| Description [] |
| |
| SideEffects [] |
| |
| SeeAlso [] |
| |
| ***********************************************************************/ |
| void Inter_ManVerifyInterpolant2( Intb_Man_t * pMan, Sto_Man_t * pCnf, Aig_Man_t * pInter ) |
| { |
| extern Aig_Man_t * Intb_ManDeriveClauses( Intb_Man_t * pMan, Sto_Man_t * pCnf, int fClausesA ); |
| Aig_Man_t * pLower, * pUpper, * pInterC; |
| int RetValue1, RetValue2; |
| |
| pLower = Intb_ManDeriveClauses( pMan, pCnf, 1 ); |
| pUpper = Intb_ManDeriveClauses( pMan, pCnf, 0 ); |
| Aig_ManFlipFirstPo( pUpper ); |
| |
| pInterC = Inter_ManDupExpand( pInter, pLower ); |
| //Aig_ManPrintStats( pLower ); |
| //Aig_ManPrintStats( pUpper ); |
| //Aig_ManPrintStats( pInterC ); |
| //Aig_ManDumpBlif( pInterC, "inter_c.blif", NULL, NULL ); |
| RetValue1 = Inter_ManCheckContainment( pLower, pInterC ); |
| Aig_ManStop( pInterC ); |
| |
| pInterC = Inter_ManDupExpand( pInter, pUpper ); |
| RetValue2 = Inter_ManCheckContainment( pInterC, pUpper ); |
| Aig_ManStop( pInterC ); |
| |
| if ( RetValue1 && RetValue2 ) |
| printf( "Ip is correct.\n" ); |
| if ( !RetValue1 ) |
| printf( "Property A => Ip fails.\n" ); |
| if ( !RetValue2 ) |
| printf( "Property Ip => !B fails.\n" ); |
| |
| Aig_ManStop( pLower ); |
| Aig_ManStop( pUpper ); |
| } |
| |
| //////////////////////////////////////////////////////////////////////// |
| /// END OF FILE /// |
| //////////////////////////////////////////////////////////////////////// |
| |
| |
| ABC_NAMESPACE_IMPL_END |
| |