code: 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(cf 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)
docs: Propositional-logic resolution: say if alpha follows from KB. [Fig. 7.12]