22#ifndef ABC__sat__bsat__satSolver3_h
23#define ABC__sat__bsat__satSolver3_h
203 return Sat_MemClauseHand( &s->
Mem, h );
206static int sat_solver3_var_value(
sat_solver3* s,
int v )
208 assert( v >= 0 && v < s->size );
211static int sat_solver3_var_literal(
sat_solver3* s,
int v )
213 assert( v >= 0 && v < s->size );
216static void sat_solver3_act_var_clear(
sat_solver3* s)
221 for (i = 0; i < s->
size; i++)
227 for (i = 0; i < s->
size; i++)
233 for (i = 0; i < s->
size; i++)
248static void sat_solver3_delete_p(
sat_solver3 ** ps )
254static void sat_solver3_clean_polarity(
sat_solver3* s,
int * pVars,
int nVars )
257 for ( i = 0; i < nVars; i++ )
260static void sat_solver3_set_polarity(
sat_solver3* s,
int * pVars,
int nVars )
263 for ( i = 0; i < s->
size; i++ )
265 for ( i = 0; i < nVars; i++ )
268static void sat_solver3_set_literal_polarity(
sat_solver3* s,
int * pLits,
int nLits )
271 for ( i = 0; i < nLits; i++ )
272 s->
polarity[Abc_Lit2Var(pLits[i])] = !Abc_LitIsCompl(pLits[i]);
275static int sat_solver3_final(
sat_solver3* s,
int ** ppArray)
285 return nRuntimeLimit;
288static int sat_solver3_set_random(
sat_solver3* s,
int fNotUseRandom)
292 return fNotUseRandomOld;
295static inline void sat_solver3_bookmark(
sat_solver3* s)
300 Sat_MemBookMark( &s->
Mem );
307static inline void sat_solver3_set_pivot_variables(
sat_solver3* s,
int * pPivots,
int nPivots )
313static inline int sat_solver3_count_usedvars(
sat_solver3* s)
316 for ( i = 0; i < s->
size; i++ )
325static inline int sat_solver3_add_const(
sat_solver3 * pSat,
int iVar,
int fCompl )
331 Lits[0] = toLitCond( iVar, fCompl );
336static inline int sat_solver3_add_buffer(
sat_solver3 * pSat,
int iVarA,
int iVarB,
int fCompl )
340 assert( iVarA >= 0 && iVarB >= 0 );
342 Lits[0] = toLitCond( iVarA, 0 );
343 Lits[1] = toLitCond( iVarB, !fCompl );
349 Lits[0] = toLitCond( iVarA, 1 );
350 Lits[1] = toLitCond( iVarB, fCompl );
357static inline int sat_solver3_add_buffer_enable(
sat_solver3 * pSat,
int iVarA,
int iVarB,
int iVarEn,
int fCompl )
361 assert( iVarA >= 0 && iVarB >= 0 && iVarEn >= 0 );
363 Lits[0] = toLitCond( iVarA, 0 );
364 Lits[1] = toLitCond( iVarB, !fCompl );
365 Lits[2] = toLitCond( iVarEn, 1 );
369 Lits[0] = toLitCond( iVarA, 1 );
370 Lits[1] = toLitCond( iVarB, fCompl );
371 Lits[2] = toLitCond( iVarEn, 1 );
376static inline int sat_solver3_add_and(
sat_solver3 * pSat,
int iVar,
int iVar0,
int iVar1,
int fCompl0,
int fCompl1,
int fCompl )
381 Lits[0] = toLitCond( iVar, !fCompl );
382 Lits[1] = toLitCond( iVar0, fCompl0 );
386 Lits[0] = toLitCond( iVar, !fCompl );
387 Lits[1] = toLitCond( iVar1, fCompl1 );
391 Lits[0] = toLitCond( iVar, fCompl );
392 Lits[1] = toLitCond( iVar0, !fCompl0 );
393 Lits[2] = toLitCond( iVar1, !fCompl1 );
398static inline int sat_solver3_add_xor(
sat_solver3 * pSat,
int iVarA,
int iVarB,
int iVarC,
int fCompl )
402 assert( iVarA >= 0 && iVarB >= 0 && iVarC >= 0 );
404 Lits[0] = toLitCond( iVarA, !fCompl );
405 Lits[1] = toLitCond( iVarB, 1 );
406 Lits[2] = toLitCond( iVarC, 1 );
410 Lits[0] = toLitCond( iVarA, !fCompl );
411 Lits[1] = toLitCond( iVarB, 0 );
412 Lits[2] = toLitCond( iVarC, 0 );
416 Lits[0] = toLitCond( iVarA, fCompl );
417 Lits[1] = toLitCond( iVarB, 1 );
418 Lits[2] = toLitCond( iVarC, 0 );
422 Lits[0] = toLitCond( iVarA, fCompl );
423 Lits[1] = toLitCond( iVarB, 0 );
424 Lits[2] = toLitCond( iVarC, 1 );
429static inline int sat_solver3_add_mux(
sat_solver3 * pSat,
int iVarZ,
int iVarC,
int iVarT,
int iVarE,
int iComplC,
int iComplT,
int iComplE,
int iComplZ )
433 assert( iVarC >= 0 && iVarT >= 0 && iVarE >= 0 && iVarZ >= 0 );
435 Lits[0] = toLitCond( iVarC, 1 ^ iComplC );
436 Lits[1] = toLitCond( iVarT, 1 ^ iComplT );
437 Lits[2] = toLitCond( iVarZ, 0 );
441 Lits[0] = toLitCond( iVarC, 1 ^ iComplC );
442 Lits[1] = toLitCond( iVarT, 0 ^ iComplT );
443 Lits[2] = toLitCond( iVarZ, 1 ^ iComplZ );
447 Lits[0] = toLitCond( iVarC, 0 ^ iComplC );
448 Lits[1] = toLitCond( iVarE, 1 ^ iComplE );
449 Lits[2] = toLitCond( iVarZ, 0 ^ iComplZ );
453 Lits[0] = toLitCond( iVarC, 0 ^ iComplC );
454 Lits[1] = toLitCond( iVarE, 0 ^ iComplE );
455 Lits[2] = toLitCond( iVarZ, 1 ^ iComplZ );
459 if ( iVarT == iVarE )
462 Lits[0] = toLitCond( iVarT, 0 ^ iComplT );
463 Lits[1] = toLitCond( iVarE, 0 ^ iComplE );
464 Lits[2] = toLitCond( iVarZ, 1 ^ iComplZ );
468 Lits[0] = toLitCond( iVarT, 1 ^ iComplT );
469 Lits[1] = toLitCond( iVarE, 1 ^ iComplE );
470 Lits[2] = toLitCond( iVarZ, 0 ^ iComplZ );
475static inline int sat_solver3_add_mux41(
sat_solver3 * pSat,
int iVarZ,
int iVarC0,
int iVarC1,
int iVarD0,
int iVarD1,
int iVarD2,
int iVarD3 )
479 assert( iVarC0 >= 0 && iVarC1 >= 0 && iVarD0 >= 0 && iVarD1 >= 0 && iVarD2 >= 0 && iVarD3 >= 0 && iVarZ >= 0 );
481 Lits[0] = toLitCond( iVarD0, 1 );
482 Lits[1] = toLitCond( iVarC0, 0 );
483 Lits[2] = toLitCond( iVarC1, 0 );
484 Lits[3] = toLitCond( iVarZ, 0 );
488 Lits[0] = toLitCond( iVarD1, 1 );
489 Lits[1] = toLitCond( iVarC0, 1 );
490 Lits[2] = toLitCond( iVarC1, 0 );
491 Lits[3] = toLitCond( iVarZ, 0 );
495 Lits[0] = toLitCond( iVarD2, 1 );
496 Lits[1] = toLitCond( iVarC0, 0 );
497 Lits[2] = toLitCond( iVarC1, 1 );
498 Lits[3] = toLitCond( iVarZ, 0 );
502 Lits[0] = toLitCond( iVarD3, 1 );
503 Lits[1] = toLitCond( iVarC0, 1 );
504 Lits[2] = toLitCond( iVarC1, 1 );
505 Lits[3] = toLitCond( iVarZ, 0 );
510 Lits[0] = toLitCond( iVarD0, 0 );
511 Lits[1] = toLitCond( iVarC0, 0 );
512 Lits[2] = toLitCond( iVarC1, 0 );
513 Lits[3] = toLitCond( iVarZ, 1 );
517 Lits[0] = toLitCond( iVarD1, 0 );
518 Lits[1] = toLitCond( iVarC0, 1 );
519 Lits[2] = toLitCond( iVarC1, 0 );
520 Lits[3] = toLitCond( iVarZ, 1 );
524 Lits[0] = toLitCond( iVarD2, 0 );
525 Lits[1] = toLitCond( iVarC0, 0 );
526 Lits[2] = toLitCond( iVarC1, 1 );
527 Lits[3] = toLitCond( iVarZ, 1 );
531 Lits[0] = toLitCond( iVarD3, 0 );
532 Lits[1] = toLitCond( iVarC0, 1 );
533 Lits[2] = toLitCond( iVarC1, 1 );
534 Lits[3] = toLitCond( iVarZ, 1 );
539static inline int sat_solver3_add_xor_and(
sat_solver3 * pSat,
int iVarF,
int iVarA,
int iVarB,
int iVarC )
544 assert( iVarF >= 0 && iVarA >= 0 && iVarB >= 0 && iVarC >= 0 );
546 Lits[0] = toLitCond( iVarF, 1 );
547 Lits[1] = toLitCond( iVarA, 1 );
548 Lits[2] = toLitCond( iVarB, 1 );
552 Lits[0] = toLitCond( iVarF, 1 );
553 Lits[1] = toLitCond( iVarA, 0 );
554 Lits[2] = toLitCond( iVarB, 0 );
558 Lits[0] = toLitCond( iVarF, 1 );
559 Lits[1] = toLitCond( iVarC, 0 );
563 Lits[0] = toLitCond( iVarF, 0 );
564 Lits[1] = toLitCond( iVarA, 1 );
565 Lits[2] = toLitCond( iVarB, 0 );
566 Lits[3] = toLitCond( iVarC, 1 );
570 Lits[0] = toLitCond( iVarF, 0 );
571 Lits[1] = toLitCond( iVarA, 0 );
572 Lits[2] = toLitCond( iVarB, 1 );
573 Lits[3] = toLitCond( iVarC, 1 );
578static inline int sat_solver3_add_constraint(
sat_solver3 * pSat,
int iVar,
int iVar2,
int fCompl )
584 Lits[0] = toLitCond( iVar, fCompl );
585 Lits[1] = toLitCond( iVar2, 0 );
589 Lits[0] = toLitCond( iVar, fCompl );
590 Lits[1] = toLitCond( iVar2, 1 );
596static inline int sat_solver3_add_half_sorter(
sat_solver3 * pSat,
int iVarA,
int iVarB,
int iVar0,
int iVar1 )
601 Lits[0] = toLitCond( iVarA, 0 );
602 Lits[1] = toLitCond( iVar0, 1 );
606 Lits[0] = toLitCond( iVarA, 0 );
607 Lits[1] = toLitCond( iVar1, 1 );
611 Lits[0] = toLitCond( iVarB, 0 );
612 Lits[1] = toLitCond( iVar0, 1 );
613 Lits[2] = toLitCond( iVar1, 1 );
#define ABC_NAMESPACE_HEADER_END
#define ABC_NAMESPACE_HEADER_START
NAMESPACES ///.
unsigned __int64 word
DECLARATIONS ///.
struct Sat_Mem_t_ Sat_Mem_t
int sat_solver3_minimize_assumptions(sat_solver3 *s, int *pLits, int nLits, int nConfLimit)
int sat_solver3_nvars(sat_solver3 *s)
void sat_solver3_setnvars(sat_solver3 *s, int n)
void sat_solver3_pop(sat_solver3 *s)
int sat_solver3_simplify(sat_solver3 *s)
void sat_solver3_store_mark_roots(sat_solver3 *s)
int sat_solver3_get_var_value(sat_solver3 *s, int v)
void * sat_solver3_store_release(sat_solver3 *s)
void sat_solver3_delete(sat_solver3 *s)
void sat_solver3_store_free(sat_solver3 *s)
sat_solver3 * zsat_solver3_new_seed(double seed)
void sat_solver3TraceStop(sat_solver3 *pSat)
void sat_solver3TraceWrite(sat_solver3 *pSat, int *pBeg, int *pEnd, int fRoot)
void sat_solver3_store_write(sat_solver3 *s, char *pFileName)
void sat_solver3TraceStart(sat_solver3 *pSat, char *pName)
int sat_solver3_minimize_assumptions2(sat_solver3 *s, int *pLits, int nLits, int nConfLimit)
int * sat_solver3GetModel(sat_solver3 *p, int *pVars, int nVars)
sat_solver3 * sat_solver3_new(void)
int sat_solver3_push(sat_solver3 *s, int p)
void sat_solver3_rollback(sat_solver3 *s)
int sat_solver3_solve_internal(sat_solver3 *s)
void sat_solver3DoubleClauses(sat_solver3 *p, int iVar)
double sat_solver3_memory(sat_solver3 *s)
void sat_solver3PrintStats(FILE *pFile, sat_solver3 *p)
void sat_solver3_set_resource_limits(sat_solver3 *s, ABC_INT64_T nConfLimit, ABC_INT64_T nInsLimit, ABC_INT64_T nConfLimitGlobal, ABC_INT64_T nInsLimitGlobal)
void sat_solver3_set_var_activity(sat_solver3 *s, int *pVars, int nVars)
int sat_solver3_nclauses(sat_solver3 *s)
int sat_solver3_clause_new(sat_solver3 *s, lit *begin, lit *end, int learnt)
void zsat_solver3_restart_seed(sat_solver3 *s, double seed)
int sat_solver3_solve(sat_solver3 *s, lit *begin, lit *end, ABC_INT64_T nConfLimit, ABC_INT64_T nInsLimit, ABC_INT64_T nConfLimitGlobal, ABC_INT64_T nInsLimitGlobal)
struct sat_solver3_t sat_solver3
int sat_solver3_nconflicts(sat_solver3 *s)
void sat_solver3WriteDimacs(sat_solver3 *p, char *pFileName, lit *assumptionsBegin, lit *assumptionsEnd, int incrementVars)
void sat_solver3_restart(sat_solver3 *s)
void sat_solver3_store_mark_clauses_a(sat_solver3 *s)
int sat_solver3_solve_lexsat(sat_solver3 *s, int *pLits, int nLits)
int sat_solver3_addclause(sat_solver3 *s, lit *begin, lit *end)
void sat_solver3_store_alloc(sat_solver3 *s)
int sat_solver3_count_assigned(sat_solver3 *s)
int(* pCnfFunc)(void *p, int)