private String renderExplanationSet() { final StringBuilder msg = new StringBuilder("ExplanationSet: ["); final Set<ATermAppl> explanation = getExplanationSet(); for (final ATermAppl axiom : explanation) { msg.append(ATermUtils.toString(axiom)); msg.append(","); } if (explanation.isEmpty()) msg.append(']'); else msg.setCharAt(msg.length() - 1, ']'); return msg.toString(); }
private String renderExplanationSet() { final StringBuilder msg = new StringBuilder("ExplanationSet: ["); final Set<ATermAppl> explanation = getExplanationSet(); for (final ATermAppl axiom : explanation) { msg.append(ATermUtils.toString(axiom)); msg.append(","); } if (explanation.isEmpty()) msg.append(']'); else msg.setCharAt(msg.length() - 1, ']'); return msg.toString(); }
@Test public void testRuleExplanation() { final KnowledgeBaseImpl kb = new KnowledgeBaseImpl(); final ATermAppl C = ATermUtils.makeTermAppl("C"); final ATermAppl D = ATermUtils.makeTermAppl("D"); final ATermAppl i = ATermUtils.makeTermAppl("i"); final List<RuleAtom> body = new ArrayList<>(); final List<RuleAtom> head = new ArrayList<>(); body.add(new ClassAtom(C, new AtomIVariable("x"))); head.add(new ClassAtom(D, new AtomIVariable("x"))); final Rule rule = new Rule(head, body); kb.addClass(C); kb.addClass(D); kb.addIndividual(i); kb.addType(i, C); kb.addRule(rule); kb.setDoExplanation(true); assertTrue(kb.isConsistent()); assertTrue(kb.isType(i, D)); final Set<ATermAppl> actual = kb.getExplanationSet(); kb.setDoExplanation(false); final Set<ATermAppl> expected = new HashSet<>(); final ATermAppl x = ATermUtils.makeVar("x"); final ATermAppl[] b = new ATermAppl[] { ATermUtils.makeTypeAtom(x, C) }; final ATermAppl[] h = new ATermAppl[] { ATermUtils.makeTypeAtom(x, D) }; expected.add(ATermUtils.makeTypeAtom(i, C)); expected.add(ATermUtils.makeRule(h, b)); assertEquals(expected, actual); }