All Downloads are FREE. Search and download functionalities are using the official Maven repository.

fr.lirmm.boreal.util.FOQueries Maven / Gradle / Ivy

There is a newer version: 1.6.3
Show newest version
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