private List<GdlRule> getAllInstantiations() { List<GdlRule> rval = new ArrayList<>(); for (Gdl gdl : description) { if (gdl instanceof GdlRelation) { GdlRelation relation = (GdlRelation) gdl; String name = relation.getName().toString(); if (name.equals("base")) continue; rval.add(GdlPool.getRule(relation)); } } for (Domain d : domains.values()) { for (RuleReference r : d.ruleRefs) { Set<Map<GdlVariable, GdlConstant>> varInstantiations = findSatisfyingInstantiations(r); for (Map<GdlVariable, GdlConstant> varInstantiation : varInstantiations) { if (varInstantiation.containsValue(null)) throw new RuntimeException("Shouldn't instantiate anything to null."); rval.add(getInstantiation(r.originalRule, varInstantiation)); if (rval.get(rval.size() - 1).toString().contains("null")) throw new RuntimeException( "Shouldn't instantiate anything to null: " + rval.get(rval.size() - 1).toString()); } } } for (RuleReference ruleRef : extraRefs) { List<Condition> newConditions = new ArrayList<>(); for (Condition c : ruleRef.conditions) { if (c.dom == null) c.updateDom(); if (c.dom != null) newConditions.add(c); } if (newConditions.size() != ruleRef.conditions.size()) // Remove reference to constant terms ruleRef.conditions = newConditions; } for (RuleReference r : extraRefs) { Set<Map<GdlVariable, GdlConstant>> varInstantiations = findSatisfyingInstantiations(r); for (Map<GdlVariable, GdlConstant> varInstantiation : varInstantiations) { if (varInstantiation.containsValue(null)) throw new RuntimeException("Shouldn't instantiate anything to null."); rval.add(getInstantiation(r.originalRule, varInstantiation)); if (rval.get(rval.size() - 1).toString().contains("null")) throw new RuntimeException("Shouldn't instantiate anything to null."); } if (varInstantiations.size() == 0) rval.add(getInstantiation(r.originalRule, new HashMap<GdlVariable, GdlConstant>())); } return rval; }
public void buildIndices() { for (Assignment assignment : assignments) { addAssignmentToIndex(assignment); } for (RuleReference ruleRef : ruleRefs) { List<Condition> newConditions = new ArrayList<>(); for (Condition c : ruleRef.conditions) { if (c.dom == null) c.updateDom(); if (c.dom != null) newConditions.add(c); } if (newConditions.size() != ruleRef.conditions.size()) // Remove reference to constant terms ruleRef.conditions = newConditions; } }