def PySat_dpll(clauses): # pdb.set_trace() if len(clauses) == 0: return True if True in [len(x) == 0 for x in clauses]: return False # pdb.set_trace() unit_C = Bool.cnf_get_unit_clauses(clauses) for unit in unit_C: clauses = Bool.cnf_propagate(clauses, Bool.cnf_get_var(unit), Bool.cnf_get_sign(unit)) # pdb.set_trace() pureLits = Bool.cnf_get_pure_literals(clauses) # pdb.set_trace() for pl in pureLits: clauses = Bool.cnf_propagate(clauses, Bool.cnf_get_var(pl), Bool.cnf_get_sign(pl)) # pdb.set_trace() if len(clauses) == 0: return True if True in [len(x) == 0 for x in clauses]: return False # pdb.set_trace() newVar = chooseVar(clauses) trueClause = Bool.cnf_propagate(copy.deepcopy(clauses), Bool.cnf_get_var(newVar),True) if PySat_dpll(trueClause): return True falseClause = Bool.cnf_propagate(copy.deepcopy(clauses), Bool.cnf_get_var(newVar),False) if PySat_dpll(falseClause): return True return False;