diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/sat/satoko/satoko.h | 1 | ||||
-rw-r--r-- | src/sat/satoko/solver.h | 17 | ||||
-rw-r--r-- | src/sat/satoko/solver_api.c | 15 |
3 files changed, 33 insertions, 0 deletions
diff --git a/src/sat/satoko/satoko.h b/src/sat/satoko/satoko.h index 6634e68e..2095a650 100644 --- a/src/sat/satoko/satoko.h +++ b/src/sat/satoko/satoko.h @@ -92,6 +92,7 @@ extern void satoko_assump_push(satoko_t *s, int); extern void satoko_assump_pop(satoko_t *s); extern int satoko_simplify(satoko_t *); extern int satoko_solve(satoko_t *); +extern int satoko_solve_with_assumptions(satoko_t *s, int * plits, int nlits); extern void satoko_mark_cone(satoko_t *, int *, int); extern void satoko_unmark_cone(satoko_t *, int *, int); diff --git a/src/sat/satoko/solver.h b/src/sat/satoko/solver.h index cfb7d538..4abf9979 100644 --- a/src/sat/satoko/solver.h +++ b/src/sat/satoko/solver.h @@ -222,6 +222,19 @@ static inline int solver_varnum(solver_t *s) { return vec_char_size(s->assigns); } +static inline int solver_clausenum(solver_t *s) +{ + return vec_uint_size(s->originals); +} +static inline int solver_learntnum(solver_t *s) +{ + return vec_uint_size(s->learnts); +} +static inline int solver_conflictnum(solver_t *s) +{ + return satoko_stats(s).n_conflicts; +} + static inline int solver_has_marks(solver_t *s) { return (int)(s->marks != NULL); @@ -234,6 +247,10 @@ static inline void solver_set_stop(solver_t *s, int * pstop) { s->pstop = pstop; } +static inline int solver_read_cex_varvalue(solver_t *s, int ivar) +{ + return var_polarity(s, ivar) == LIT_TRUE; +} //===------------------------------------------------------------------------=== // Inline clause functions diff --git a/src/sat/satoko/solver_api.c b/src/sat/satoko/solver_api.c index 62749e88..54987007 100644 --- a/src/sat/satoko/solver_api.c +++ b/src/sat/satoko/solver_api.c @@ -313,6 +313,21 @@ int satoko_solve(solver_t *s) return status; } +int satoko_solve_with_assumptions(solver_t *s, int * plits, int nlits) +{ + int i, status; + for ( i = 0; i < nlits; i++ ) + satoko_assump_push( s, plits[i] ); + status = satoko_solve( s ); + for ( i = 0; i < nlits; i++ ) + satoko_assump_pop( s ); + if ( status == SATOKO_UNSAT ) + return 1; + if ( status == SATOKO_SAT ) + return 0; + return -1; +} + int satoko_final_conflict(solver_t *s, unsigned *out) { if (vec_uint_size(s->final_conflict) == 0) |