
fr.lirmm.boreal.util.FOQueries Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of integraal-util Show documentation
Show all versions of integraal-util Show documentation
Util objects for integraal
package fr.lirmm.boreal.util;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Optional;
import fr.boreal.model.formula.FOFormulas;
import fr.boreal.model.formula.api.FOFormula;
import fr.boreal.model.logicalElements.api.Substitution;
import fr.boreal.model.logicalElements.api.Term;
import fr.boreal.model.logicalElements.api.Variable;
import fr.boreal.model.logicalElements.impl.SubstitutionImpl;
import fr.boreal.model.query.api.FOQuery;
import fr.boreal.model.query.factory.FOQueryFactory;
/**
* Utility class for First Order Queries
*/
public class FOQueries {
/**
* constants or literals affected to answer variables by the given substitution are put in the initial substitution
* variable renaming is directly applied
* @param query query to create the image from
* @param s substitution to apply
* @return a new FOFormula corresponding to the given FOFormula in which the
* given substitution have been applied
*/
public static FOQuery createImageWith(FOQuery query, Substitution s) {
FOFormula formula = FOFormulas.createImageWith(query.getFormula(), s);
Substitution initial_substitution = new SubstitutionImpl();
Collection answer_variables = new ArrayList();
for(Variable v : query.getAnswerVariables()) {
if(s.keys().contains(v)) {
Term substitut = s.createImageOf(v);
if(!substitut.isVariable()) {
initial_substitution.add(v, substitut);
answer_variables.add(v);
} else {
answer_variables.add((Variable)substitut);
}
} else {
answer_variables.add(v);
}
}
Optional aggregationOpt = initial_substitution.aggregated(query.getInitialSubstitution());
if(aggregationOpt.isEmpty()) {
return null; // error
} else {
return FOQueryFactory.instance().createOrGetQuery(formula, answer_variables, aggregationOpt.get());
}
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy