40static int Dec_FactorVerify(
char * pSop,
Dec_Graph_t * pFForm );
41static Mvc_Cover_t * Dec_ConvertSopToMvc(
char * pSop );
64 return Dec_GraphCreateConst0();
66 return Dec_GraphCreateConst1();
69 pCover = Dec_ConvertSopToMvc( pSop );
83 eRoot = Dec_Factor_rec( pFForm, pCover );
85 Dec_GraphSetRoot( pFForm, eRoot );
88 Dec_GraphComplement( pFForm );
120 return Dec_FactorTrivial( pFForm, pCover );
132 eNode = Dec_FactorLF_rec( pFForm, pCover, pQuo );
146 eNodeDiv = Dec_Factor_rec( pFForm, pDiv );
147 eNodeQuo = Dec_Factor_rec( pFForm, pQuo );
150 eNodeAnd = Dec_GraphAddNodeAnd( pFForm, eNodeDiv, eNodeQuo );
158 eNodeRem = Dec_Factor_rec( pFForm, pRem );
160 return Dec_GraphAddNodeOr( pFForm, eNodeAnd, eNodeRem );
171 eNode = Dec_FactorLF_rec( pFForm, pCover, pCom );
204 eNodeQuo = Dec_Factor_rec( pFForm, pQuo );
206 eNodeAnd = Dec_GraphAddNodeAnd( pFForm, eNodeDiv, eNodeQuo );
214 eNodeRem = Dec_Factor_rec( pFForm, pRem );
216 return Dec_GraphAddNodeOr( pFForm, eNodeAnd, eNodeRem );
241 Vec_IntClear( vEdgeCubes );
244 eNode = Dec_FactorTrivialCube( pFForm, pCover, pCube, vEdgeLits );
245 Vec_IntPush( vEdgeCubes, Dec_EdgeToInt_(eNode) );
248 return Dec_FactorTrivialTree_rec( pFForm, (
Dec_Edge_t *)vEdgeCubes->pArray, vEdgeCubes->nSize, 1 );
267 Vec_IntClear( vEdgeLits );
271 eNode = Dec_EdgeCreate( iBit/2, iBit%2 );
272 Vec_IntPush( vEdgeLits, Dec_EdgeToInt_(eNode) );
275 return Dec_FactorTrivialTree_rec( pFForm, (
Dec_Edge_t *)vEdgeLits->pArray, vEdgeLits->nSize, 0 );
292 int nNodes1, nNodes2;
299 nNodes2 = nNodes - nNodes1;
304 eNode1 = Dec_FactorTrivialTree_rec( pFForm, peNodes, nNodes1, fNodeOr );
305 eNode2 = Dec_FactorTrivialTree_rec( pFForm, peNodes + nNodes1, nNodes2, fNodeOr );
308 return Dec_GraphAddNodeOr( pFForm, eNode1, eNode2 );
310 return Dec_GraphAddNodeAnd( pFForm, eNode1, eNode2 );
351 else if ( Value ==
'1' )
371int Dec_FactorVerify(
char * pSop,
Dec_Graph_t * pFForm )
373 extern DdNode * Abc_ConvertSopToBdd( DdManager * dd,
char * pSop, DdNode ** pbVars );
374 extern DdNode * Dec_GraphDeriveBdd( DdManager * dd,
Dec_Graph_t * pGraph );
376 DdNode * bFunc1, * bFunc2;
378 bFunc1 = Abc_ConvertSopToBdd( dd, pSop, NULL ); Cudd_Ref( bFunc1 );
379 bFunc2 = Dec_GraphDeriveBdd( dd, pFForm ); Cudd_Ref( bFunc2 );
382 RetValue = (bFunc1 == bFunc2);
383 if ( bFunc1 != bFunc2 )
390 Cudd_RecursiveDeref( dd, bFunc1 );
391 Cudd_RecursiveDeref( dd, bFunc2 );
ABC_DLL int Abc_SopIsConst0(char *pSop)
#define Abc_CubeForEachVar(pCube, Value, i)
#define Abc_SopForEachCube(pSop, nFanins, pCube)
ABC_DLL int Abc_SopGetVarNum(char *pSop)
ABC_DLL int Abc_SopIsComplement(char *pSop)
ABC_DLL int Abc_SopIsConst1(char *pSop)
#define ABC_NAMESPACE_IMPL_START
#define ABC_NAMESPACE_IMPL_END
ABC_DLL void * Abc_FrameReadManDd()
ABC_DLL void * Abc_FrameReadManDec()
typedefABC_NAMESPACE_IMPL_START struct Vec_Int_t_ Vec_Int_t
DECLARATIONS ///.
Dec_Graph_t * Dec_Factor(char *pSop)
FUNCTION DEFINITIONS ///.
struct Dec_Man_t_ Dec_Man_t
typedefABC_NAMESPACE_HEADER_START struct Dec_Edge_t_ Dec_Edge_t
INCLUDES ///.
struct Dec_Graph_t_ Dec_Graph_t
#define Mvc_CoverAddCubeTail(pCover, pCube)
Mvc_Cover_t * Mvc_CoverCommonCubeCover(Mvc_Cover_t *pCover)
void Mvc_CoverDivideInternal(Mvc_Cover_t *pCover, Mvc_Cover_t *pDiv, Mvc_Cover_t **ppQuo, Mvc_Cover_t **ppRem)
struct MvcCubeStruct Mvc_Cube_t
void Mvc_CoverFree(Mvc_Cover_t *pCover)
void Mvc_CoverMakeCubeFree(Mvc_Cover_t *pCover)
struct MvcManagerStruct Mvc_Manager_t
int Mvc_CoverContain(Mvc_Cover_t *pCover)
FUNCTION DEFINITIONS ///.
#define Mvc_CubeBitRemove(Cube, Bit)
Mvc_Cover_t * Mvc_CoverAlloc(Mvc_Manager_t *pMem, int nBits)
DECLARATIONS ///.
#define Mvc_CubeBitFill(Cube)
int Mvc_CoverIsEmpty(Mvc_Cover_t *pCover)
int Mvc_CoverIsTautology(Mvc_Cover_t *pCover)
#define Mvc_CoverForEachCube(Cover, Cube)
Mvc_Cube_t * Mvc_CubeAlloc(Mvc_Cover_t *pCover)
DECLARATIONS ///.
struct MvcCoverStruct Mvc_Cover_t
Mvc_Cover_t * Mvc_CoverDivisor(Mvc_Cover_t *pCover)
FUNCTION DEFINITIONS ///.
#define Mvc_CubeForEachBit(Cover, Cube, iBit, Value)
void Mvc_CoverInverse(Mvc_Cover_t *pCover)
Mvc_Cube_t * Mvc_CoverReadCubeHead(Mvc_Cover_t *pCover)
void Mvc_CoverDivideByLiteral(Mvc_Cover_t *pCover, Mvc_Cover_t *pDiv, Mvc_Cover_t **ppQuo, Mvc_Cover_t **ppRem)
int Mvc_CoverReadCubeNum(Mvc_Cover_t *pCover)
int Mvc_CoverIsCubeFree(Mvc_Cover_t *pCover)
Mvc_Cover_t * Mvc_CoverBestLiteralCover(Mvc_Cover_t *pCover, Mvc_Cover_t *pSimple)