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
Example #3
0
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)
Example #4
0
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