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);
}