AIMA.Core.Logic.Propositional.Algorithms.PLResolution.plResolution C# (CSharp) Method

plResolution() public method

public plResolution ( KnowledgeBase kb, Sentence alpha ) : bool
kb KnowledgeBase
alpha AIMA.Core.Logic.Propositional.Parsing.Ast.Sentence
return bool
        public bool plResolution(KnowledgeBase kb, Sentence alpha)
        {
            Sentence kBAndNotAlpha = new BinarySentence("AND", kb.asSentence(),
                    new UnarySentence(alpha));
            List<Sentence> clauses = new CNFClauseGatherer()
                    .getClausesFrom(new CNFTransformer().transform(kBAndNotAlpha));
            clauses = filterOutClausesWithTwoComplementaryLiterals(clauses);
            List<Sentence> newClauses = new List<Sentence>();
            while (true)
            {
                List<List<Sentence>> pairs = getCombinationPairs(clauses);

                for (int i = 0; i < pairs.Count; i++)
                {
                    List<Sentence> pair = pairs[i];
                    // System.Console.WriteLine("pair number" + i+" of "+pairs.Count);
                    List<Sentence> resolvents = plResolve(pair[0], pair[1]);
                    resolvents = filterOutClausesWithTwoComplementaryLiterals(resolvents);

                    if (resolvents.Contains(new Symbol("EMPTY_CLAUSE")))
                    {
                        return true;
                    }
                    newClauses = SetOps.union(newClauses, resolvents);
                    // System.Console.WriteLine("clauseslist size = " +clauses.Count);

                }
                if (SetOps.intersection(newClauses, clauses).Count == newClauses
                        .Count)
                {// subset test
                    return false;
                }
                clauses = SetOps.union(newClauses, clauses);
                clauses = filterOutClausesWithTwoComplementaryLiterals(clauses);
            }

        }

Same methods

PLResolution::plResolution ( KnowledgeBase kb, String alpha ) : bool
PLResolution::plResolution ( String kbs, String alphaString ) : bool

Usage Example

 public void testMultipleClauseResolution()
 {
     // test (and fix) suggested by Huy Dinh. Thanks Huy!
     PLResolution plr = new PLResolution();
     KnowledgeBase kb = new KnowledgeBase();
     String fact = "((B11 <=> (P12 OR P21)) AND (NOT B11))";
     kb.tell(fact);
     plr.plResolution(kb, "(B)");
 }