51 Aig_Obj_t * pObj0, * pObj1, * pRoot, * pMiter;
54 int i0, i1, m, RetValue, Lits[10];
55 int fCompl0, fCompl1, nNodes1, nNodes2;
56 assert( nLits == 1 || nLits == 2 );
64 pMiter = Aig_ManCo( pAig, 0 );
65 pRoot = Aig_ObjFanin0( pMiter );
70 vPrimes = Vec_PtrAlloc( 100 );
72 vMarks = Vec_IntStart( Vec_PtrSize(vNodes) );
73 Lits[0] = toLitCond( pCnf->
pVarNums[Aig_ObjId(pMiter)], 1 );
78 Lits[1] = toLitCond( pCnf->
pVarNums[Aig_ObjId(pObj0)], pObj0->
fPhase );
80 RetValue =
sat_solver_solve( pSat, Lits, Lits+2, (ABC_INT64_T)0, (ABC_INT64_T)0, (ABC_INT64_T)0, (ABC_INT64_T)0 );
83 vCube = Vec_IntAlloc( 1 );
84 Vec_IntPush( vCube, toLitCond(Aig_ObjId(pObj0), pObj0->
fPhase) );
85 Vec_PtrPush( vPrimes, vCube );
87 printf(
"Adding prime %d%c\n", Aig_ObjId(pObj0), pObj0->
fPhase?
'-':
'+' );
88 Vec_IntWriteEntry( vMarks, i0, 1 );
91 nNodes1 = Vec_PtrSize(vPrimes);
100 if ( Vec_IntEntry(vMarks,i0) || Vec_IntEntry(vMarks,i1) )
102 for ( m = 0; m < 3; m++ )
105 fCompl1 = (m >> 1) & 1;
107 Lits[1] = toLitCond( pCnf->
pVarNums[Aig_ObjId(pObj0)], fCompl0 ^ pObj0->
fPhase );
108 Lits[2] = toLitCond( pCnf->
pVarNums[Aig_ObjId(pObj1)], fCompl1 ^ pObj1->
fPhase );
110 RetValue =
sat_solver_solve( pSat, Lits, Lits+3, (ABC_INT64_T)0, (ABC_INT64_T)0, (ABC_INT64_T)0, (ABC_INT64_T)0 );
113 vCube = Vec_IntAlloc( 2 );
114 Vec_IntPush( vCube, toLitCond(Aig_ObjId(pObj0), fCompl0 ^ pObj0->
fPhase) );
115 Vec_IntPush( vCube, toLitCond(Aig_ObjId(pObj1), fCompl1 ^ pObj1->
fPhase) );
116 Vec_PtrPush( vPrimes, vCube );
118 printf(
"Adding prime %d%c %d%c\n",
119 Aig_ObjId(pObj0), (fCompl0 ^ pObj0->
fPhase)?
'-':
'+',
120 Aig_ObjId(pObj1), (fCompl1 ^ pObj1->
fPhase)?
'-':
'+' );
126 nNodes2 = Vec_PtrSize(vPrimes) - nNodes1;
128 printf(
"Property cone size = %6d 1-lit primes = %5d 2-lit primes = %5d\n",
129 Vec_PtrSize(vNodes), nNodes1, nNodes2 );
134 Vec_PtrFree( vNodes );
135 Vec_IntFree( vMarks );
163 pAigNew->pName = Abc_UtilStrsav( pAig->pName );
164 pAigNew->nConstrs = pAig->nConstrs;
166 Aig_ManConst1(pAig)->pData = Aig_ManConst1( pAigNew );
172 pObj->
pData =
Aig_And( pAigNew, Aig_ObjChild0Copy(pObj), Aig_ObjChild1Copy(pObj) );
180 pMiter = Aig_ManConst1( pAigNew );
183 pObj = Aig_NotCond( Aig_ObjCopy(Aig_ManObj(pAig, Abc_Lit2Var(Lit))), Abc_LitIsCompl(Lit) );
184 pMiter =
Aig_And( pAigNew, pMiter, pObj );