diff --git a/integraal/integraal-explanation/src/main/java/fr/boreal/explanation/tracker_gri/encoders/AbstractGSATEncoder_TrackerGRI.java b/integraal/integraal-explanation/src/main/java/fr/boreal/explanation/tracker_gri/encoders/AbstractGSATEncoder_TrackerGRI.java index 398759c4ef635df73792a983611fb5b7905b9634..ce8e5273ab76172c8247950ab6bf8048abf9f81b 100644 --- a/integraal/integraal-explanation/src/main/java/fr/boreal/explanation/tracker_gri/encoders/AbstractGSATEncoder_TrackerGRI.java +++ b/integraal/integraal-explanation/src/main/java/fr/boreal/explanation/tracker_gri/encoders/AbstractGSATEncoder_TrackerGRI.java @@ -79,7 +79,7 @@ public abstract class AbstractGSATEncoder_TrackerGRI implements GSATEncoder_GRI< Atom query, java.util.function.Predicate<Atom> belongsToInitialFactbase) { assignDefaultGroupNumberAndCreateClauseForStartQuery(query); - addClauseIfQueryBelongsToTheInitialFactbase(query,belongsToInitialFactbase); + addClauseIfQueryBelongsToTheInitialFactbase(query, belongsToInitialFactbase); assignGroupNumbersAndComputeClausesForRELEdges(gri, query, belongsToInitialFactbase); // Check that there is no redundancy @@ -104,7 +104,7 @@ public abstract class AbstractGSATEncoder_TrackerGRI implements GSATEncoder_GRI< private void addClauseIfQueryBelongsToTheInitialFactbase(Atom query, java.util.function.Predicate<Atom> belongsToInitialFactbase) { - if(belongsToInitialFactbase.test(query)) { + if (belongsToInitialFactbase.test(query)) { clauses.add(List.of(reservedQueryGroup, reservedQueryPropVariable)); } } @@ -136,7 +136,7 @@ public abstract class AbstractGSATEncoder_TrackerGRI implements GSATEncoder_GRI< for (Rule rule : ruleInstances.keySet()) { for (Substitution substitution : ruleInstances.get(rule).keySet()) { Set<Atom> tempAnc = ruleInstances.get(rule).get(substitution); - if(tempAnc.contains(query)) { + if (tempAnc.contains(query)) { //skip as the rule is redundant continue; } @@ -144,7 +144,8 @@ public abstract class AbstractGSATEncoder_TrackerGRI implements GSATEncoder_GRI< // track visited for (Atom ancestorAtom : tempAnc) { - if (!visited.contains(ancestorAtom) && !query.equals(ancestorAtom)) { + if (!visited.contains(ancestorAtom) && !toVisit.contains(ancestorAtom) && !query.equals(ancestorAtom)) { + System.out.println("Adding " + ancestorAtom + " to " + toVisit); // we add the second condition because the query atom may be a different object than the data atom // and we do not need to visit it twice toVisit.add(ancestorAtom); @@ -227,10 +228,14 @@ public abstract class AbstractGSATEncoder_TrackerGRI implements GSATEncoder_GRI< ruleInstanceGroupClause.add(propVarIDForHeadAtom); // The clause is ready - - if (!clauses.contains(ruleInstanceGroupClause)) { - clauses.add(ruleInstanceGroupClause); - } + clauses.add(ruleInstanceGroupClause); + + //if (!clauses.contains(ruleInstanceGroupClause)) { + // clauses.add(ruleInstanceGroupClause); + //} else { + // System.out.println("Already seen group clause: " + ruleInstanceGroupClause); + // throw new RuntimeException("Already seen group clause: " + ruleInstanceGroupClause); + //} for (List<Integer> clause : tmpclauses) { if (!clauses.contains(clause)) {