use of fr.lirmm.graphik.graal.core.DefaultAtom in project graal by graphik-team.
the class IDCompilationTest method test.
/**
* Given p(X,Y) -> q(X,Y,X) <br>
* Then rew(q(U,V,W)) <br>
* Return q(U,V,W)-{} AND (p(U,V)-{W->U} || p(W,V)-{U->W})
*/
@Test
public void test() {
Predicate predicateQ = new Predicate("q", 3);
Predicate predicateP = new Predicate("p", 2);
Atom body = new DefaultAtom(predicateP, X, Y);
Atom head = new DefaultAtom(predicateQ, X, Y, X);
Atom query = new DefaultAtom(predicateQ, U, V, W);
RuleSet rules = new LinkedListRuleSet();
rules.add(DefaultRuleFactory.instance().create(body, head));
RulesCompilation comp = new IDCompilation();
comp.compile(rules.iterator());
Collection<Pair<Atom, Substitution>> rewritingOf = comp.getRewritingOf(query);
boolean rew1 = false;
boolean rew2 = false;
for (Pair<Atom, Substitution> p : rewritingOf) {
Atom a = p.getLeft();
Substitution s = p.getRight();
if (a.getPredicate().equals(predicateQ)) {
rew1 = true;
Assert.assertEquals(U, a.getTerm(0));
Assert.assertEquals(V, a.getTerm(1));
Assert.assertEquals(W, a.getTerm(2));
Assert.assertEquals(0, s.getTerms().size());
} else {
rew2 = true;
Assert.assertEquals(predicateP, a.getPredicate());
Assert.assertTrue(a.getTerm(0).equals(U) || a.getTerm(0).equals(W));
Assert.assertEquals(V, a.getTerm(1));
Assert.assertEquals(1, s.getTerms().size());
}
}
Assert.assertTrue(rew1 && rew2);
Assert.assertEquals(2, rewritingOf.size());
}
use of fr.lirmm.graphik.graal.core.DefaultAtom in project graal by graphik-team.
the class IDCompilationTest method test3.
/**
* Given p(X,Y) -> q(X,Y,X,Y,X) <br>
* Then rew(q(U,V,A,B,V)) <br>
* Return q(U,V,A,B,V)-{}
*/
@Test
public void test3() {
Predicate predicateQ = new Predicate("q", 5);
Predicate predicateP = new Predicate("p", 2);
Atom body = new DefaultAtom(predicateP, X, Y);
Atom head = new DefaultAtom(predicateQ, X, Y, X, Y, X);
Atom query = new DefaultAtom(predicateQ, U, V, A, B, V);
RuleSet rules = new LinkedListRuleSet();
rules.add(DefaultRuleFactory.instance().create(body, head));
RulesCompilation comp = new IDCompilation();
comp.compile(rules.iterator());
Collection<Pair<Atom, Substitution>> rewritingOf = comp.getRewritingOf(query);
Assert.assertEquals(1, rewritingOf.size());
Pair<Atom, Substitution> p = rewritingOf.iterator().next();
Atom a = p.getLeft();
Substitution s = p.getRight();
Assert.assertEquals(predicateQ, a.getPredicate());
Assert.assertEquals(U, a.getTerm(0));
Assert.assertEquals(V, a.getTerm(1));
Assert.assertEquals(A, a.getTerm(2));
Assert.assertEquals(B, a.getTerm(3));
Assert.assertEquals(V, a.getTerm(4));
Assert.assertEquals(0, s.getTerms().size());
}
use of fr.lirmm.graphik.graal.core.DefaultAtom in project graal by graphik-team.
the class IDCompilationTest method test2.
/**
* Given p(X,Y) -> q(X,Y,X) <br>
* Then rew(q(U,U,U)) <br>
* Return q(U,U,U)-{} AND p(U,U)-{})
*/
@Test
public void test2() {
Predicate predicateQ = new Predicate("q", 3);
Predicate predicateP = new Predicate("p", 2);
Atom body = new DefaultAtom(predicateP, X, Y);
Atom head = new DefaultAtom(predicateQ, X, Y, X);
Atom query = new DefaultAtom(predicateQ, U, U, U);
RuleSet rules = new LinkedListRuleSet();
rules.add(DefaultRuleFactory.instance().create(body, head));
RulesCompilation comp = new IDCompilation();
comp.compile(rules.iterator());
Collection<Pair<Atom, Substitution>> rewritingOf = comp.getRewritingOf(query);
boolean rew1 = false;
boolean rew2 = false;
for (Pair<Atom, Substitution> p : rewritingOf) {
Atom a = p.getLeft();
Substitution s = p.getRight();
if (a.getPredicate().equals(predicateQ)) {
rew1 = true;
Assert.assertEquals(U, a.getTerm(0));
Assert.assertEquals(U, a.getTerm(1));
Assert.assertEquals(U, a.getTerm(2));
Assert.assertEquals(0, s.getTerms().size());
} else {
rew2 = true;
Assert.assertEquals(predicateP, a.getPredicate());
Assert.assertEquals(U, a.getTerm(0));
Assert.assertEquals(U, a.getTerm(1));
Assert.assertEquals(0, s.getTerms().size());
}
}
Assert.assertTrue(rew1 && rew2);
Assert.assertEquals(2, rewritingOf.size());
}
use of fr.lirmm.graphik.graal.core.DefaultAtom in project graal by graphik-team.
the class MFAProperty method check.
/**
*/
@Override
public int check(AnalyserRuleSet ruleSet) {
RuleSet R = translateToMFA(ruleSet);
AtomSet A = Rules.criticalInstance(ruleSet);
Chase chase = new ChaseWithGRD<AtomSet>(new DefaultGraphOfRuleDependencies(R), A, new DefaultRuleApplier<AtomSet>(new FrontierRestrictedChaseHaltingCondition()));
DefaultConjunctiveQuery Q = new DefaultConjunctiveQuery();
DefaultAtom q = new DefaultAtom(C);
q.setTerm(0, FAKE);
Q.getAtomSet().add(q);
try {
while (chase.hasNext()) {
chase.next();
if (SmartHomomorphism.instance().exist(Q, A)) {
return -1;
}
}
} catch (ChaseException e) {
LOGGER.warn("An error occurs during the chase: ", e);
return 0;
} catch (HomomorphismException e) {
LOGGER.warn("An error occurs during the homomorphism: ", e);
return 0;
}
return 1;
}
use of fr.lirmm.graphik.graal.core.DefaultAtom in project graal by graphik-team.
the class MFAProperty method translateRuleToMFA.
public static List<Rule> translateRuleToMFA(final Rule r) {
List<Rule> result = new LinkedList<Rule>();
DefaultRule r2 = new DefaultRule(r);
/*r2.setBody(r.getBody());
r2.setHead(r.getHead());*/
for (Term yi : r2.getExistentials()) {
Predicate Fir = GraalConstant.freshPredicate(1);
DefaultAtom f = new DefaultAtom(Fir);
f.setTerm(0, yi);
r2.getHead().add(f);
for (Term xj : r2.getFrontier()) {
DefaultAtom ss = new DefaultAtom(S);
ss.setTerm(0, xj);
ss.setTerm(1, yi);
r2.getHead().add(ss);
}
DefaultRule r3 = new DefaultRule();
DefaultAtom f1 = new DefaultAtom(Fir);
f1.setTerm(0, DefaultTermFactory.instance().createVariable("X1"));
DefaultAtom f2 = new DefaultAtom(Fir);
f2.setTerm(0, DefaultTermFactory.instance().createVariable("X2"));
DefaultAtom d = new DefaultAtom(D);
d.setTerm(0, DefaultTermFactory.instance().createVariable("X1"));
d.setTerm(1, DefaultTermFactory.instance().createVariable("X2"));
r3.getBody().add(f1);
r3.getBody().add(d);
r3.getBody().add(f2);
DefaultAtom c = new DefaultAtom(C);
c.setTerm(0, FAKE);
r3.getHead().add(c);
result.add(r3);
}
result.add(r2);
return result;
}
Aggregations