//TODO: Update this method with better name public bool TtEntails(KnowledgeBase kb, String alpha) { Sentence kbSentence = kb.AsSentence(); Sentence querySentence = (Sentence) new PEParser().Parse(alpha); SymbolCollector collector = new SymbolCollector(); ISet <Symbol> kbSymbols = collector.GetSymbolsIn(kbSentence); ISet <Symbol> querySymbols = collector.GetSymbolsIn(querySentence); IList <Symbol> symbolList = kbSymbols.Union(querySymbols).ToList(); return(ttCheckAll(kbSentence, querySentence, symbolList, new Model())); }
public Sentence AsSentence() { ISet <Symbol> Asyms = GetAssignedSymbols(); KnowledgeBase tempKB = new KnowledgeBase(); if (Asyms == null) { Console.WriteLine("ERR: AsSentence() Asyms is null!!!"); } else { Console.WriteLine("DBG: Asyms.Count={0}", Asyms.Count); } foreach (Symbol k in Asyms) { try { if (IsTrue(k)) { tempKB.Tell("(" + k.Value + ")"); } else { tempKB.Tell("(NOT " + k.Value + ")"); } } catch (Exception e) { Console.WriteLine("ERR: AsSentence() ", e.Message, e.StackTrace); } } if (tempKB.Size() == 0) { Console.WriteLine("ERR: AsSentence() tempKB.Size==0"); } return(tempKB.AsSentence()); }
public bool PlResolution(KnowledgeBase kb, Sentence alpha) { Sentence kBAndNotAlpha = new BinarySentence("AND", kb.AsSentence(), new UnarySentence(alpha)); IList <Sentence> clauses = new CNFClauseGatherer() .GetClausesFrom(new CNFTransformer().Transform(kBAndNotAlpha)).ToList(); clauses = this.FilterOutClausesWithTwoComplementaryLiterals(clauses); var newClauses = new List <Sentence>(); while (true) { IList <IList <Sentence> > pairs = this.GetCombinationPairs(clauses.ToList()); for (int i = 0; i < pairs.Count; i++) { IList <Sentence> pair = pairs[i]; // System.out.println("pair number" + i+" of "+pairs.Count); IList <Sentence> resolvents = this.PLResolve(pair[0], pair[1]); resolvents = this.FilterOutClausesWithTwoComplementaryLiterals(resolvents); if (resolvents.Contains(new Symbol("EMPTY_CLAUSE"))) { return(true); } newClauses = newClauses.Union(resolvents).ToList(); // System.out.println("clauseslist size = " +clauses.Count); } if (newClauses.Intersect(clauses).Count() == newClauses.Count) {// subset test return(false); } clauses = newClauses.Union(clauses).ToList(); clauses = this.FilterOutClausesWithTwoComplementaryLiterals(clauses); } }