public Object visitPredicate(Predicate predicate, Object arg) { foreach (Term t in predicate.getTerms()) { t.accept(this, arg); } return predicate; }
// // START-FOLVisitor public Object visitPredicate(Predicate p, Object arg) { foreach (Term t in p.getArgs()) { // Finish processing if have found a match if (null != matchingTerm) { break; } t.accept(this, null); } return p; }
public Object visitPredicate(Predicate predicate, Object arg) { List<Term> terms = predicate.getTerms(); List<Term> newTerms = new List<Term>(); for (int i = 0; i < terms.Count; i++) { Term t = terms[i]; Term subsTerm = (Term)t.accept(this, arg); newTerms.Add(subsTerm); } return new Predicate(predicate.getPredicateName(), newTerms); }
// // PRIVATE METHODS // private void constructFOLEg() { ithExampleConstant = new Constant(folDSDomain.getExampleConstant(egNo)); List<Term> terms = new List<Term>(); terms.Add(ithExampleConstant); // Create the classification sentence classification = new Predicate(folDSDomain.getGoalPredicateName(), terms); if (!example.getAttributeValueAsString( folDSDomain.getDataSetTargetName()).Equals( folDSDomain.getTrueGoalValue())) { // if not true then needs to be a Not sentence classification = new NotSentence(classification); } // Create the description sentence List<Sentence> descParts = new List<Sentence>(); foreach (String dname in folDSDomain.getDescriptionDataSetNames()) { String foldDName = folDSDomain.getFOLName(dname); terms = new List<Term>(); terms.Add(ithExampleConstant); // If multivalued becomes a two place predicate // e.g: Patrons(X1, Some) // otherwise: Hungry(X1) or ~ Hungry(X1) // see pg 769 of AIMA Sentence part = null; if (folDSDomain.isMultivalued(dname)) { terms.Add(new Constant(folDSDomain.getFOLName(example .getAttributeValueAsString(dname)))); part = new Predicate(foldDName, terms); } else { part = new Predicate(foldDName, terms); // Need to determine if false if (!folDSDomain.getTrueGoalValue().Equals( example.getAttributeValueAsString(dname))) { part = new NotSentence(part); } } descParts.Add(part); } if (descParts.Count == 1) { description = descParts[0]; } else if (descParts.Count > 1) { description = new ConnectedSentence(Connectors.AND, descParts [0], descParts[1]); for (int i = 2; i < descParts.Count; i++) { description = new ConnectedSentence(Connectors.AND, description, descParts[i]); } } }
protected void testDefiniteClauseKBKingsQueryRichardEvilFalse( InferenceProcedure infp) { FOLKnowledgeBase kkb = FOLKnowledgeBaseFactory .createKingsKnowledgeBase(infp); List<Term> terms = new List<Term>(); terms.Add(new Constant("Richard")); Predicate query = new Predicate("Evil", terms); InferenceResult answer = kkb.ask(query); Assert.IsTrue(null != answer); Assert.IsTrue(answer.isPossiblyFalse()); Assert.IsFalse(answer.isTrue()); Assert.IsFalse(answer.isUnknownDueToTimeout()); Assert.IsFalse(answer.isPartialResultDueToTimeout()); Assert.IsTrue(0 == answer.getProofs().Count); }
public void testSimpleVariableUnification() { Variable var1 = new Variable("x"); List<Term> terms1 = new List<Term>(); terms1.Add(var1); Predicate p1 = new Predicate("King", terms1); // King(x) List<Term> terms2 = new List<Term>(); terms2.Add(new Constant("John")); Predicate p2 = new Predicate("King", terms2); // King(John) Dictionary<Variable, Term> result = unifier.unify(p1, p2, theta); Assert.AreEqual(theta, result); Assert.AreEqual(1, theta.Keys.Count); Assert.IsTrue(theta.ContainsKey(new Variable("x"))); // x = Assert.AreEqual(new Constant("John"), theta[var1]); // John }
protected void testDefiniteClauseKBKingsQueryEvilXReturnsJohnSucceeds( InferenceProcedure infp) { FOLKnowledgeBase kkb = FOLKnowledgeBaseFactory .createKingsKnowledgeBase(infp); List<Term> terms = new List<Term>(); terms.Add(new Variable("x")); Predicate query = new Predicate("Evil", terms); InferenceResult answer = kkb.ask(query); Assert.IsTrue(null != answer); Assert.IsFalse(answer.isPossiblyFalse()); Assert.IsTrue(answer.isTrue()); Assert.IsFalse(answer.isUnknownDueToTimeout()); Assert.IsFalse(answer.isPartialResultDueToTimeout()); Assert.IsTrue(1 == answer.getProofs().Count); Assert.IsTrue(1 == answer.getProofs()[0].getAnswerBindings() .Count); Assert.AreEqual(new Constant("John"), answer.getProofs()[0] .getAnswerBindings()[new Variable("x")]); }
protected void testDefiniteClauseKBKingsQueryKingXReturnsJohnAndRichardSucceeds( InferenceProcedure infp) { FOLKnowledgeBase kkb = FOLKnowledgeBaseFactory .createKingsKnowledgeBase(infp); List<Term> terms = new List<Term>(); terms.Add(new Variable("x")); Predicate query = new Predicate("King", terms); InferenceResult answer = kkb.ask(query); Assert.IsTrue(null != answer); Assert.IsFalse(answer.isPossiblyFalse()); Assert.IsTrue(answer.isTrue()); Assert.IsFalse(answer.isUnknownDueToTimeout()); Assert.IsFalse(answer.isPartialResultDueToTimeout()); Assert.IsTrue(2 == answer.getProofs().Count); Assert.IsTrue(1 == answer.getProofs()[0].getAnswerBindings() .Count); Assert.IsTrue(1 == answer.getProofs()[1].getAnswerBindings() .Count); bool gotJohn, gotRichard; gotJohn = gotRichard = false; Constant cJohn = new Constant("John"); Constant cRichard = new Constant("Richard"); foreach (Proof p in answer.getProofs()) { Dictionary<Variable, Term> ans = p.getAnswerBindings(); Assert.AreEqual(1, ans.Count); if (cJohn.Equals(ans[new Variable("x")])) { gotJohn = true; } if (cRichard.Equals(ans[new Variable("x")])) { gotRichard = true; } } Assert.IsTrue(gotJohn); Assert.IsTrue(gotRichard); }
protected void testEqualityAndSubstitutionNoAxiomsKBabcdPFFASucceeds( InferenceProcedure infp, bool expectedToFail) { FOLKnowledgeBase akb = FOLKnowledgeBaseFactory .createABCDEqualityAndSubstitutionKnowledgeBase(infp, false); List<Term> terms = new List<Term>(); terms.Add(new Constant("A")); Function fa = new Function("F", terms); terms = new List<Term>(); terms.Add(fa); Function ffa = new Function("F", terms); terms = new List<Term>(); terms.Add(ffa); Predicate query = new Predicate("P", terms); InferenceResult answer = akb.ask(query); Assert.IsTrue(null != answer); if (expectedToFail) { Assert.IsTrue(answer.isPossiblyFalse()); Assert.IsFalse(answer.isTrue()); Assert.IsFalse(answer.isUnknownDueToTimeout()); Assert.IsFalse(answer.isPartialResultDueToTimeout()); Assert.IsTrue(0 == answer.getProofs().Count); } else { Assert.IsFalse(answer.isPossiblyFalse()); Assert.IsTrue(answer.isTrue()); Assert.IsFalse(answer.isUnknownDueToTimeout()); Assert.IsFalse(answer.isPartialResultDueToTimeout()); Assert.IsTrue(1 == answer.getProofs().Count); Assert.IsTrue(0 == answer.getProofs()[0] .getAnswerBindings().Count); } }
protected void testFullFOLKBLovesAnimalQueryKillsJackTunaFalse( InferenceProcedure infp, bool expectedToTimeOut) { FOLKnowledgeBase akb = FOLKnowledgeBaseFactory .createLovesAnimalKnowledgeBase(infp); List<Term> terms = new List<Term>(); terms.Add(new Constant("Jack")); terms.Add(new Constant("Tuna")); Predicate query = new Predicate("Kills", terms); InferenceResult answer = akb.ask(query); Assert.IsTrue(null != answer); if (expectedToTimeOut) { Assert.IsFalse(answer.isPossiblyFalse()); Assert.IsFalse(answer.isTrue()); Assert.IsTrue(answer.isUnknownDueToTimeout()); Assert.IsFalse(answer.isPartialResultDueToTimeout()); Assert.IsTrue(0 == answer.getProofs().Count); } else { Assert.IsTrue(answer.isPossiblyFalse()); Assert.IsFalse(answer.isTrue()); Assert.IsFalse(answer.isUnknownDueToTimeout()); Assert.IsFalse(answer.isPartialResultDueToTimeout()); Assert.IsTrue(0 == answer.getProofs().Count); } }
protected void testHornClauseKBRingOfThievesQuerySkisXReturnsNancyRedBertDrew( InferenceProcedure infp) { FOLKnowledgeBase rotkb = FOLKnowledgeBaseFactory .createRingOfThievesKnowledgeBase(infp); List<Term> terms = new List<Term>(); terms.Add(new Variable("x")); Predicate query = new Predicate("Skis", terms); InferenceResult answer = rotkb.ask(query); Assert.IsTrue(null != answer); Assert.IsFalse(answer.isPossiblyFalse()); Assert.IsTrue(answer.isTrue()); Assert.IsFalse(answer.isUnknownDueToTimeout()); // DB can expand infinitely so is only partial. Assert.IsTrue(answer.isPartialResultDueToTimeout()); Assert.AreEqual(4, answer.getProofs().Count); Assert.AreEqual(1, answer.getProofs()[0].getAnswerBindings() .Count); Assert.AreEqual(1, answer.getProofs()[1].getAnswerBindings() .Count); Assert.AreEqual(1, answer.getProofs()[2].getAnswerBindings() .Count); Assert.AreEqual(1, answer.getProofs()[3].getAnswerBindings() .Count); List<Constant> expected = new List<Constant>(); expected.Add(new Constant("Nancy")); expected.Add(new Constant("Red")); expected.Add(new Constant("Bert")); expected.Add(new Constant("Drew")); foreach (Proof p in answer.getProofs()) { expected.Remove((Constant)p.getAnswerBindings()[new Variable("x")]); } Assert.AreEqual(0, expected.Count); }
public Object visitPredicate(Predicate p, Object arg) { List<Predicate> predicates = (List<Predicate>)arg; predicates.Add(p); return predicates; }
public Object visitPredicate(Predicate p, Object arg) { return p; }
public Object visitPredicate(Predicate p, Object arg) { ArgData ad = (ArgData)arg; if (ad.negated) { ad.clauses[ad.clauses.Count - 1].addNegativeLiteral(p); } else { ad.clauses[ad.clauses.Count - 1].addPositiveLiteral(p); } return p; }
// // START-FOLVisitor public Object visitPredicate(Predicate p, Object arg) { List<Term> newTerms = new List<Term>(); foreach (Term t in p.getTerms()) { Term subsTerm = (Term)t.accept(this, arg); newTerms.Add(subsTerm); } return new Predicate(p.getPredicateName(), newTerms); }