@Test
public void ruleInteractionWithInverses()
{
classes(_A);
objectProperties(_p, _q, _r, _f);
dataProperties(_p);
individuals(_a, _b, _c);
final AtomIVariable x = new AtomIVariable("x");
final AtomIVariable y = new AtomIVariable("y");
final AtomIVariable z = new AtomIVariable("z");
_kb.addSymmetricProperty(_p);
_kb.addInverseProperty(_q, _r);
_kb.addPropertyValue(_p, _c, _a);
_kb.addPropertyValue(_f, _a, _b);
final List<RuleAtom> body = Arrays.<RuleAtom> asList(new IndividualPropertyAtom(_f, x, y), new IndividualPropertyAtom(_p, x, z));
final List<RuleAtom> head = Arrays.<RuleAtom> asList(new IndividualPropertyAtom(_r, z, y));
final Rule rule = new Rule(head, body);
_kb.addRule(rule);
explainEntailment(_kb.hasPropertyValue(_b, _q, _c), ATermUtils.makePropAtom(_p, _c, _a), ATermUtils.makePropAtom(_f, _a, _b), ATermUtils.makeSymmetric(_p), ATermUtils.makeInvProp(_q, _r), new RulesToATermTranslator().translate(rule));
}