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

org.coode.oppl.search.solvability.InferredSolvabilitySearchTree Maven / Gradle / Ivy

There is a newer version: 5.0.0
Show newest version
package org.coode.oppl.search.solvability;

import java.util.Arrays;
import java.util.Set;

import org.coode.oppl.ConstraintSystem;
import org.coode.oppl.Variable;
import org.coode.oppl.exceptions.RuntimeExceptionHandler;
import org.coode.oppl.utils.VariableExtractor;
import org.semanticweb.owlapi.reasoner.OWLReasoner;

/** @author Luigi Iannone */
public final class InferredSolvabilitySearchTree extends
        AbstractSolvabilityOPPLOWLAxiomSearchTree {
    /** @param constraintSystem
     *            constraintSystem
     * @param runtimeExceptionHandler
     *            runtimeExceptionHandler */
    public InferredSolvabilitySearchTree(ConstraintSystem constraintSystem,
            RuntimeExceptionHandler runtimeExceptionHandler) {
        super(constraintSystem, runtimeExceptionHandler);
        OWLReasoner reasoner = constraintSystem.getReasoner();
        if (reasoner == null) {
            throw new IllegalArgumentException(
                    "The reasoner cannot be null in the input constraint system");
        }
    }

    @Override
    protected boolean
            goalReachedUnsolvabelNode(UnsolvableSearchNode unsolvableSearchNode) {
        VariableExtractor variableExtractor = new VariableExtractor(
                getConstraintSystem(), true);
        Set> extractVariables = variableExtractor
                .extractVariables(unsolvableSearchNode.getAxiom());
        return extractVariables.isEmpty() ? getConstraintSystem().getReasoner()
                .isEntailed(unsolvableSearchNode.getAxiom()) : false;
    }

    @Override
    protected AxiomSolvability getAxiomSolvability() {
        QuerySolver querySolver = new InferredModelQuerySolver(getConstraintSystem()
                .getReasoner());
        return new MultipleAxiomSolvability(
                Arrays.asList(
                        new OWLClassSubClassOfAxiomSolvability(getConstraintSystem(),
                                querySolver),
                        new NoResultsAxiomSolvability(getConstraintSystem(), querySolver),
                        new OWLObjectPropertyFillersAxiomSolvability(
                                getConstraintSystem(), querySolver)));
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy