#!/usr/bin/env python3
def backtrack(P0):
S = [P0]
while len(S) > 0:
P = S.pop()
result = test(P)
if result == True:
return P
elif result == None:
for R in expand(P):
S.append(R)
return False
def test(clauses):
if (len(clauses)) == 0:
return True
for clause in clauses:
if len(clause)==0:
return False
return None
def reduce(clauses,literal):
out=[]
for C in clauses:
if not literal in C:
new=[z for z in C if z != -1*literal]
out.append(new)
return out
def expand(clauses):
j = clauses[0][0]
return [reduce(clauses,j),
reduce(clauses,-j)]
if __name__ == "__main__":
print(backtrack([ [1], [-1,2] ,[-1,3,4] ]))
print(backtrack([ [1], [-1,2] ,[-2] ]))