
it.unibz.inf.ontop.iq.node.VariableNullability Maven / Gradle / Ivy
package it.unibz.inf.ontop.iq.node;
import com.google.common.collect.ImmutableList;
import com.google.common.collect.ImmutableSet;
import it.unibz.inf.ontop.model.term.ImmutableTerm;
import it.unibz.inf.ontop.model.term.Variable;
import it.unibz.inf.ontop.substitution.Substitution;
import it.unibz.inf.ontop.substitution.InjectiveSubstitution;
import it.unibz.inf.ontop.utils.ImmutableCollectors;
import java.util.Collection;
import java.util.stream.Stream;
/**
* TODO: find a better name
*
* IMMUTABLE
*
* See CoreUtilsFactory for creating new instances
*
*/
public interface VariableNullability {
/**
* NB: for variables outside its scope, returns true (as it does not know anything about them)
* TODO: stop tolerating variables outside its scope and throw an exception if it happens (inconsistent with nullable groups)!
*/
boolean isPossiblyNullable(Variable variable);
/**
* Returns true if it possible that among the variables at least two can be null
* but are not required to be null at the same time.
*/
boolean canPossiblyBeNullSeparately(ImmutableSet variables);
/**
* Generalization to arbitrary terms
*/
boolean canPossiblyBeNullSeparately(ImmutableList extends ImmutableTerm> terms);
/**
* All the variables of a group are always null at the same time (guaranteed).
*
*/
ImmutableSet> getNullableGroups();
VariableNullability update(Substitution extends ImmutableTerm> substitution,
ImmutableSet projectedVariables);
VariableNullability applyFreshRenaming(InjectiveSubstitution freshRenamingSubstitution);
/**
* Returns a new VariableNullability.
*
* Treats the external variables (outside the scope) as independently nullable.
*/
VariableNullability extendToExternalVariables(Stream possiblyExternalVariables);
default ImmutableSet getNullableVariables() {
return getNullableGroups().stream()
.flatMap(Collection::stream)
.collect(ImmutableCollectors.toSet());
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy