def pl_resolution(KB, alpha):
    "Propositional-logic resolution: say if alpha follows from KB. [Fig. 7.12]"
    clauses = KB.clauses + conjuncts(to_cnf(~alpha))
    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 = pl_resolve(ci, cj)
            if FALSE in resolvents: return True
            new = new.union(set(resolvents))
        if new.issubset(set(clauses)): return False
        for c in new:
            if c not in clauses: clauses.append(c)
def pl_resolution(KB, alpha):
    "Propositional-logic resolution: say if alpha follows from KB. [Fig. 7.12]"
    clauses = KB.clauses + conjuncts(to_cnf(~alpha))
    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 = pl_resolve(ci, cj)
            if FALSE in resolvents: return True
            new = new.union(set(resolvents))
        if new.issubset(set(clauses)): return False
        for c in new:
            if c not in clauses: clauses.append(c)
def pl_resolution ( KB , alpha ) : clauses = KB . clauses + conjuncts ( to_cnf ( ~ alpha ) ) 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 = pl_resolve ( ci , cj ) if FALSE in resolvents : return True new = new . union ( set ( resolvents ) ) if new . issubset ( set ( clauses ) ) : return False for c in new : if c not in clauses : clauses . append ( c )
Propositional-logic resolution: say if alpha follows from KB. [Fig. 7.12]
Propositional - logic resolution : say if alpha follows from KB . [ Fig . 7 . 12 ]