public void testIsTautology()
{
FOLDomain domain = new FOLDomain();
domain.addConstant("A");
domain.addPredicate("P");
domain.addPredicate("Q");
domain.addPredicate("R");
domain.addFunction("F");
FOLParser parser = new FOLParser(domain);
// {p(f(a)),~p(f(a))}
Clause c = new Clause();
c.addPositiveLiteral((Predicate)parser.parse("P(F(A))"));
Assert.IsFalse(c.isTautology());
c.addNegativeLiteral((Predicate)parser.parse("P(F(A))"));
Assert.IsTrue(c.isTautology());
// {p(x),q(y),~q(y),r(z)}
c = new Clause();
c.addPositiveLiteral((Predicate)parser.parse("P(x)"));
Assert.IsFalse(c.isTautology());
c.addPositiveLiteral((Predicate)parser.parse("Q(y)"));
Assert.IsFalse(c.isTautology());
c.addNegativeLiteral((Predicate)parser.parse("Q(y)"));
Assert.IsTrue(c.isTautology());
c.addPositiveLiteral((Predicate)parser.parse("R(z)"));
Assert.IsTrue(c.isTautology());
// {~p(a),p(x)}
c = new Clause();
c.addNegativeLiteral((Predicate)parser.parse("P(A)"));
Assert.IsFalse(c.isTautology());
c.addPositiveLiteral((Predicate)parser.parse("P(x)"));
Assert.IsFalse(c.isTautology());
}