24#ifdef ABC_USE_LIBRARIES
59 assert( Aig_ManRegNum(pInter) == 0 );
60 assert( Aig_ManRegNum(pAig) > 0 );
61 assert( Aig_ManRegNum(pFrames) == 0 );
62 assert( Aig_ManCoNum(pInter) == 1 );
63 assert( Aig_ManCoNum(pFrames) == 1 );
64 assert( Aig_ManCiNum(pInter) == Aig_ManRegNum(pAig) );
71 *pvMapRoots = Vec_IntAlloc( 10000 );
72 *pvMapVars = Vec_IntAlloc( 0 );
73 Vec_IntFill( *pvMapVars, pCnfInter->
nVars + pCnfAig->
nVars + pCnfFrames->
nVars, -1 );
74 for ( i = 0; i < pCnfFrames->
nVars; i++ )
75 Vec_IntWriteEntry( *pvMapVars, i, -2 );
83 for ( i = 0; i < pCnfInter->
nClauses; i++ )
85 Vec_IntPush( *pvMapRoots, 0 );
92 pObj2 = Saig_ManLo( pAig, i );
93 Lits[0] = toLitCond( pCnfInter->
pVarNums[pObj->
Id], 0 );
94 Lits[1] = toLitCond( pCnfAig->
pVarNums[pObj2->
Id], 1 );
95 Vec_IntPush( *pvMapRoots, 0 );
98 Lits[0] = toLitCond( pCnfInter->
pVarNums[pObj->
Id], 1 );
99 Lits[1] = toLitCond( pCnfAig->
pVarNums[pObj2->
Id], 0 );
100 Vec_IntPush( *pvMapRoots, 0 );
105 for ( i = 0; i < pCnfAig->
nClauses; i++ )
107 Vec_IntPush( *pvMapRoots, 0 );
114 if ( i == Aig_ManRegNum(pAig) )
117 Vec_IntWriteEntry( *pvMapVars, pCnfFrames->
pVarNums[pObj->
Id], i );
119 pObj2 = Saig_ManLi( pAig, i );
120 Lits[0] = toLitCond( pCnfFrames->
pVarNums[pObj->
Id], 0 );
121 Lits[1] = toLitCond( pCnfAig->
pVarNums[pObj2->
Id], 1 );
122 Vec_IntPush( *pvMapRoots, 0 );
125 Lits[0] = toLitCond( pCnfFrames->
pVarNums[pObj->
Id], 1 );
126 Lits[1] = toLitCond( pCnfAig->
pVarNums[pObj2->
Id], 0 );
127 Vec_IntPush( *pvMapRoots, 0 );
132 for ( i = 0; i < pCnfFrames->
nClauses; i++ )
134 Vec_IntPush( *pvMapRoots, 1 );
159int Inter_ManResolveM114p(
Vec_Int_t * vResolvent,
int * pLits,
int nLits,
int iVar )
161 int i, k, iLit = -1, fFound = 0;
163 for ( i = 0; i < vResolvent->nSize; i++ )
164 if ( lit_var(vResolvent->pArray[i]) == iVar )
166 iLit = vResolvent->pArray[i];
167 vResolvent->pArray[i] = vResolvent->pArray[--vResolvent->nSize];
172 for ( i = 0; i < nLits; i++ )
174 if ( lit_var(pLits[i]) == iVar )
176 assert( iLit == lit_neg(pLits[i]) );
181 for ( k = 0; k < vResolvent->nSize; k++ )
182 if ( vResolvent->pArray[k] == pLits[i] )
184 if ( k < vResolvent->nSize )
187 Vec_IntPush( vResolvent, pLits[i] );
213 Vec_Int_t * vLiterals, * vClauses, * vResolvent;
214 int * pLitsNext, nLitsNext, nOffset, iLit;
215 int * pLits, * pClauses, * pVars;
216 int nLits, nVars, i, k, v, iVar;
218 vInters = Vec_PtrAlloc( 1000 );
220 vLiterals = Vec_IntAlloc( 10000 );
221 vClauses = Vec_IntAlloc( 1000 );
222 vResolvent = Vec_IntAlloc( 100 );
232 if ( Vec_IntEntry(vMapRoots, i) == 1 )
233 pInter = Aig_ManConst1(
p);
235 pInter = Aig_ManConst0(
p);
236 Vec_PtrPush( vInters, pInter );
239 Vec_IntPush( vClauses, Vec_IntSize(vLiterals) );
240 Vec_IntPush( vLiterals, nLits );
241 for ( v = 0; v < nLits; v++ )
242 Vec_IntPush( vLiterals, pLits[v] );
244 assert( Vec_PtrSize(vInters) == Vec_IntSize(vMapRoots) );
249 pInter = Vec_PtrEntry( vInters, pClauses[0] );
252 nOffset = Vec_IntEntry( vClauses, pClauses[0] );
253 nLitsNext = Vec_IntEntry( vLiterals, nOffset );
254 pLitsNext = Vec_IntArray(vLiterals) + nOffset + 1;
255 Vec_IntClear( vResolvent );
256 for ( v = 0; v < nLitsNext; v++ )
257 Vec_IntPush( vResolvent, pLitsNext[v] );
259 for ( k = 0; k < nVars; k++ )
261 iVar = Vec_IntEntry( vMapVars, pVars[k] );
262 pInter2 = Vec_PtrEntry( vInters, pClauses[k+1] );
265 nOffset = Vec_IntEntry( vClauses, pClauses[k+1] );
266 nLitsNext = Vec_IntEntry( vLiterals, nOffset );
267 pLitsNext = Vec_IntArray(vLiterals) + nOffset + 1;
268 Inter_ManResolveM114p( vResolvent, pLitsNext, nLitsNext, pVars[k] );
271 pInter =
Aig_Or(
p, pInter, pInter2 );
272 else if ( iVar == -2 )
273 pInter =
Aig_And(
p, pInter, pInter2 );
277 for ( v = 0; v < nLitsNext; v++ )
278 if ( lit_var(pLitsNext[v]) == pVars[k] )
281 pVar = Aig_NotCond(
Aig_IthVar(
p, iVar), lit_sign(pLitsNext[v]) );
282 pInter =
Aig_Mux(
p, pVar, pInter, pInter2 );
285 Vec_PtrPush( vInters, pInter );
288 Vec_IntPush( vClauses, Vec_IntSize(vLiterals) );
289 Vec_IntPush( vLiterals, Vec_IntSize(vResolvent) );
291 Vec_IntPush( vLiterals, iLit );
294 assert( Vec_IntSize(vResolvent) == 0 );
295 Vec_PtrFree( vInters );
296 Vec_IntFree( vLiterals );
297 Vec_IntFree( vClauses );
298 Vec_IntFree( vResolvent );
325 int * pLits, * pClauses, * pVars;
326 int nLits, nVars, i, k, iVar;
333 vInters = Vec_PtrAlloc( 1000 );
338 if ( Vec_IntEntry(vMapRoots, i) == 1 )
339 pInter = Aig_ManConst1(
p);
342 pInter = Aig_ManConst0(
p);
343 for ( k = 0; k < nLits; k++ )
345 iVar = Vec_IntEntry( vMapVars, lit_var(pLits[k]) );
349 pVar = Aig_NotCond(
Aig_IthVar(
p, iVar), lit_sign(pLits[k]) );
350 pInter =
Aig_Or(
p, pInter, pVar );
353 Vec_PtrPush( vInters, pInter );
360 pInter = Vec_PtrEntry( vInters, pClauses[0] );
361 for ( k = 0; k < nVars; k++ )
363 iVar = Vec_IntEntry( vMapVars, pVars[k] );
364 pInter2 = Vec_PtrEntry( vInters, pClauses[k+1] );
366 pInter =
Aig_Or(
p, pInter, pInter2 );
368 pInter =
Aig_And(
p, pInter, pInter2 );
370 Vec_PtrPush( vInters, pInter );
374 Vec_PtrFree( vInters );
393int Inter_ManPerformOneStepM114p(
Inter_Man_t *
p,
int fUsePudlak,
int fUseOther )
398 int status, RetValue;
399 assert(
p->pInterNew == NULL );
401 pSat = Inter_ManDeriveSatSolverM114p(
p->pInter,
p->pCnfInter,
402 p->pAigTrans,
p->pCnfAig,
p->pFrames,
p->pCnfFrames,
403 &vMapRoots, &vMapVars );
408p->timeSat += clock() - clk;
416 p->pInterNew = Inter_ManInterpolateM114pPudlak( pSat, vMapRoots, vMapVars );
418 p->pInterNew = Inter_ManpInterpolateM114( pSat, vMapRoots, vMapVars );
419p->timeInt += clock() - clk;
421 else if ( status == 1 )
430 Vec_IntFree( vMapRoots );
431 Vec_IntFree( vMapVars );
#define ABC_NAMESPACE_IMPL_START
#define ABC_NAMESPACE_IMPL_END
#define Aig_ManForEachCi(p, pObj, i)
ITERATORS ///.
Aig_Obj_t * Aig_And(Aig_Man_t *p, Aig_Obj_t *p0, Aig_Obj_t *p1)
Aig_Obj_t * Aig_ObjCreateCo(Aig_Man_t *p, Aig_Obj_t *pDriver)
Aig_Obj_t * Aig_Mux(Aig_Man_t *p, Aig_Obj_t *pC, Aig_Obj_t *p1, Aig_Obj_t *p0)
struct Aig_Obj_t_ Aig_Obj_t
Aig_Man_t * Aig_ManStart(int nNodesMax)
DECLARATIONS ///.
typedefABC_NAMESPACE_HEADER_START struct Aig_Man_t_ Aig_Man_t
INCLUDES ///.
int Aig_ManCleanup(Aig_Man_t *p)
Aig_Obj_t * Aig_IthVar(Aig_Man_t *p, int i)
FUNCTION DEFINITIONS ///.
Aig_Obj_t * Aig_Or(Aig_Man_t *p, Aig_Obj_t *p0, Aig_Obj_t *p1)
ABC_DLL int Aig_ManCheck(Aig_Man_t *p)
FUNCTION DECLARATIONS ///.
typedefABC_NAMESPACE_IMPL_START struct Vec_Int_t_ Vec_Int_t
DECLARATIONS ///.
struct Cnf_Dat_t_ Cnf_Dat_t
void Cnf_DataLift(Cnf_Dat_t *p, int nVarsPlus)
typedefABC_NAMESPACE_HEADER_START struct Inter_Man_t_ Inter_Man_t
INCLUDES ///.
int M114p_SolverSolve(M114p_Solver_t s, lit *begin, lit *end, int nConfLimit)
int M114p_SolverProofIsReady(M114p_Solver_t s)
int M114p_SolverGetConflictNum(M114p_Solver_t s)
int M114p_SolverProofClauseNum(M114p_Solver_t s)
void M114p_SolverSetVarNum(M114p_Solver_t s, int nVars)
#define M114p_SolverForEachRoot(s, ppLits, nLits, i)
void M114p_SolverDelete(M114p_Solver_t s)
ABC_NAMESPACE_HEADER_START M114p_Solver_t M114p_SolverNew(int fRecordProof)
#define M114p_SolverForEachChain(s, ppClauses, ppVars, nVars, i)
int M114p_SolverAddClause(M114p_Solver_t s, lit *begin, lit *end)
ABC_NAMESPACE_HEADER_START typedef int M114p_Solver_t
#define Vec_IntForEachEntry(vVec, Entry, i)
MACRO DEFINITIONS ///.
typedefABC_NAMESPACE_HEADER_START struct Vec_Ptr_t_ Vec_Ptr_t
INCLUDES ///.