def test(): snCnf=sncnf() sol=[]; sol.append(to_cnf(snCnf[1] & ~snCnf[3])) sol.append(to_cnf(~snCnf[2] & snCnf[3])) lCnf=[] for i in range(0,len(snCnf)): lCnf.append( cnfstr2list( snCnf[i] ) ) lCnfSol=[] for i in range(0,len(sol)): lCnf.append( cnfstr2list( sol[i] ) )
def sncnf(): sn = sndef() n = len(sn) - 1 # number of levels cnformula = [] formula = [] for output in xrange(0,4): formula.append( snF(sn, n, output ) ) cnformula.append( to_cnf( formula[output] ) ) #print output, '-->', cnformula[output] return formula
def res(formula): formula = rewrite_implication(formula) formula = logic.to_cnf(logic.expr(formula)) clauses = logic.conjuncts(formula) print "CNF: " + cnf(formula) m = 1 for c in clauses: if logic.tt_true(c): clauses.remove(c) else: a = remove_double_bracket(cnf(c)) print str(m) + ": " + a m += 1 new = set() while True: n = len(clauses) pairs = [(clauses[i], clauses[j]) for i in range(n) for j in range(i + 1, n)] for (ci, cj) in pairs: resolvents = logic.pl_resolve(ci, cj) if (len(resolvents) != 0): if (resolvents[0] not in new): if (resolvents[0] is logic.FALSE): print str(m) + ": {}" else: print str(m) + ": " + remove_double_bracket( cnf(resolvents[0])) + " --- (" + str( clauses.index(ci) + 1) + ", " + str(clauses.index(cj) + 1) + ")" m += 1 if logic.FALSE in resolvents: return True new.update(set(resolvents)) if new.issubset(clauses): return False for c in new: if c not in clauses: clauses.append(c)
def cnf(formula): result = "{" formula = str(formula) formula = rewrite_implication(formula) formula = logic.to_cnf(logic.expr(formula)) clauses = logic.conjuncts(formula) clauses = set(clauses) clauses = list(clauses) for c in clauses: if logic.tt_true(c): clauses.remove(c) for c in clauses: if logic.tt_true(c) is False: result = result + "{" lits = logic.disjuncts(c) lits = set(lits) lits = list(lits) for s in lits: if lits.index(s) == len(lits) - 1: result = result + str(s) + "}" else: result = result + str(s) + ", " if clauses.index(c) != len(clauses) - 1: result = result + "," result = result + "}" return result