def add_assertion(self, formula, named=None): # First, we get rid of True/False constants formula = formula.simplify() if formula.is_false(): picosat.picosat_add(self.pico, 0) elif not formula.is_true(): cnf = self.cnfizer.convert(formula) self._add_cnf_assertion(cnf)
def add_assertion(self, formula, named=None): cnf = self.cnfizer.convert(formula) for clause in cnf: for lit in clause: mult = 1 var = lit if lit.is_not(): mult = -1 var = lit.arg(0) vid = self._get_var_id(var) picosat.picosat_add(self.pico, mult * vid) picosat.picosat_add(self.pico, 0)
def _add_cnf_assertion(self, cnf): for clause in cnf: for lit in clause: v = self._get_pico_lit(lit) picosat.picosat_add(self.pico, v) picosat.picosat_add(self.pico, 0)
def addClause(self, *ls): "Add this clause to the solver." assert len(ls) > 0 for l in ls: picosat.picosat_add(self.p, l) picosat.picosat_add(self.p, 0)
import picosat with open("/tmp/log", "w") as fout: p = picosat.picosat_init() picosat.picosat_set_verbosity(p, 100) f = picosat.picosat_set_output(p, fout) picosat.picosat_measure_all_calls(p) picosat.picosat_inc_max_var(p) picosat.picosat_add(p, 1) picosat.picosat_add(p, -1) picosat.picosat_add(p, 0) assert picosat.picosat_sat(p, -1) == picosat.PICOSAT_SATISFIABLE picosat.picosat_message(p, 0, "End") picosat.picosat_flushout(f) picosat.picosat_reset(p) print("Done.")