Beispiel #1
0
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;