public void testCascadedOccursCheck()
{
FOLDomain domain = new FOLDomain();
domain.addPredicate("P");
domain.addFunction("F");
domain.addFunction("SF0");
domain.addFunction("SF1");
FOLParser parser = new FOLParser(domain);
Sentence s1 = parser.parse("P(SF1(v2),v2)");
Sentence s2 = parser.parse("P(v3,SF0(v3))");
Dictionary<Variable, Term> result = unifier.unify(s1, s2);
Assert.IsNull(result);
s1 = parser.parse("P(v1,SF0(v1),SF0(v1),SF0(v1),SF0(v1))");
s2 = parser.parse("P(v2,SF0(v2),v2, v3, v2)");
result = unifier.unify(s1, s2);
Assert.IsNull(result);
s1 = parser
.parse("P(v1, F(v2),F(v2),F(v2),v1, F(F(v1)),F(F(F(v1))),v2)");
s2 = parser
.parse("P(F(v3),v4, v5, v6, F(F(v5)),v4, F(v3), F(F(v5)))");
result = unifier.unify(s1, s2);
Assert.IsNull(result);
}