// Path: src/main/java/org/semanticweb/owl/explanation/impl/blackbox/Configuration.java
// public class Configuration<E> {
// 
//     private EntailmentCheckerFactory<E> checkerFactory;
// 
//     private ExpansionStrategy expansionStrategy;
// 
//     private ContractionStrategy contractionStrategy;
// 
//     public Configuration(EntailmentCheckerFactory<E> checkerFactory, ExpansionStrategy expansionStrategy, ContractionStrategy contractionStrategy) {
//         this(checkerFactory, expansionStrategy, contractionStrategy, null);
//     }
// 
// 
//     public Configuration(EntailmentCheckerFactory<E> checkerFactory, ExpansionStrategy expansionStrategy, ContractionStrategy contractionStrategy, ExplanationProgressMonitor<E> progressMonitor) {
//         this.checkerFactory = checkerFactory;
//         this.contractionStrategy = contractionStrategy;
//         this.expansionStrategy = expansionStrategy;
//     }
// 
// 
//     public Configuration(EntailmentCheckerFactory<E> checkerFactory) {
//         this(checkerFactory, new StructuralTypePriorityExpansionStrategy(), new DivideAndConquerContractionStrategy());
//     }
// 
// 
//     public Configuration(EntailmentCheckerFactory<E> checkerFactory, ExplanationProgressMonitor<E> progressMonitor) {
//         this(checkerFactory, new StructuralTypePriorityExpansionStrategy(), new DivideAndConquerContractionStrategy(), progressMonitor);
//     }
// 
// 
//     public EntailmentCheckerFactory<E> getCheckerFactory() {
//         return checkerFactory;
//     }
// 
// 
//     public ContractionStrategy getContractionStrategy() {
//         return contractionStrategy;
//     }
// 
// 
//     public ExpansionStrategy getExpansionStrategy() {
//         return expansionStrategy;
//     }
// 
// }
// 
// Path: src/main/java/org/semanticweb/owl/explanation/impl/blackbox/ContractionStrategy.java
// public interface ContractionStrategy {
// 
//     Set<OWLAxiom> doPruning(Set<OWLAxiom> axioms, EntailmentChecker checker, ExplanationProgressMonitor<?> progressMonitor);
// 
//     int getNumberOfSteps();
// }
// 
// Path: src/main/java/org/semanticweb/owl/explanation/impl/blackbox/ExpansionStrategy.java
// public interface ExpansionStrategy {
// 
//     /**
//      * Given an input set of axioms, returns a subset of axioms in which the entailment holds, or the empty set
//      * if the entailment does not hold in the input set.
//      * @param axioms The input set.  The entailment may or may not hold in this set.
//      * @param checker The entailment checker that should be used to check for entailment at
//      * each stage.
//      * @param progressMonitor A progress monitor.  Not {@code null}.
//      * @return A set of axioms that the entailment holds in, or the empty set if the entailment does not hold in the
//      * input set.
//      */
//     Set<OWLAxiom> doExpansion(Set<OWLAxiom> axioms, EntailmentChecker checker, ExplanationProgressMonitor<?> progressMonitor);
// 
//     int getNumberOfSteps();
// }


import org.semanticweb.owl.explanation.impl.blackbox.Configuration;
import org.semanticweb.owl.explanation.impl.blackbox.ContractionStrategy;
import org.semanticweb.owl.explanation.impl.blackbox.ExpansionStrategy;
import org.semanticweb.owlapi.reasoner.OWLReasonerFactory;
import org.semanticweb.owlapi.model.OWLAxiom;
package org.semanticweb.owl.explanation.impl.blackbox.checker;

/*
 * Copyright (C) 2008, University of Manchester
 *
 * Modifications to the initial code base are copyright of their
 * respective authors, or their employers as appropriate.  Authorship
 * of the modifications may be determined from the ChangeLog placed at
 * the end of this file.
 *
 * This library is free software; you can redistribute it and/or
 * modify it under the terms of the GNU Lesser General Public
 * License as published by the Free Software Foundation; either
 * version 2.1 of the License, or (at your option) any later version.

 * This library is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 * Lesser General Public License for more details.

 * You should have received a copy of the GNU Lesser General Public
 * License along with this library; if not, write to the Free Software
 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
 */


/**
 * Author: Matthew Horridge<br> The University Of Manchester<br> Information Management Group<br> Date:
 * 03-Sep-2008<br><br>
 *
 * A default black box configuration that uses an entailment checker that reduced entailment checking to
 * satisfiability checking using an OWLReasoner.
 */
public class DefaultBlackBoxConfiguration extends Configuration<OWLAxiom> {


    public DefaultBlackBoxConfiguration(OWLReasonerFactory reasonerFactory) {
        super(new SatisfiabilityEntailmentCheckerFactory(reasonerFactory));
    }

    public DefaultBlackBoxConfiguration(OWLReasonerFactory reasonerFactory,
// Path: src/main/java/org/semanticweb/owl/explanation/impl/blackbox/Configuration.java
// public class Configuration<E> {
// 
//     private EntailmentCheckerFactory<E> checkerFactory;
// 
//     private ExpansionStrategy expansionStrategy;
// 
//     private ContractionStrategy contractionStrategy;
// 
//     public Configuration(EntailmentCheckerFactory<E> checkerFactory, ExpansionStrategy expansionStrategy, ContractionStrategy contractionStrategy) {
//         this(checkerFactory, expansionStrategy, contractionStrategy, null);
//     }
// 
// 
//     public Configuration(EntailmentCheckerFactory<E> checkerFactory, ExpansionStrategy expansionStrategy, ContractionStrategy contractionStrategy, ExplanationProgressMonitor<E> progressMonitor) {
//         this.checkerFactory = checkerFactory;
//         this.contractionStrategy = contractionStrategy;
//         this.expansionStrategy = expansionStrategy;
//     }
// 
// 
//     public Configuration(EntailmentCheckerFactory<E> checkerFactory) {
//         this(checkerFactory, new StructuralTypePriorityExpansionStrategy(), new DivideAndConquerContractionStrategy());
//     }
// 
// 
//     public Configuration(EntailmentCheckerFactory<E> checkerFactory, ExplanationProgressMonitor<E> progressMonitor) {
//         this(checkerFactory, new StructuralTypePriorityExpansionStrategy(), new DivideAndConquerContractionStrategy(), progressMonitor);
//     }
// 
// 
//     public EntailmentCheckerFactory<E> getCheckerFactory() {
//         return checkerFactory;
//     }
// 
// 
//     public ContractionStrategy getContractionStrategy() {
//         return contractionStrategy;
//     }
// 
// 
//     public ExpansionStrategy getExpansionStrategy() {
//         return expansionStrategy;
//     }
// 
// }
// 
// Path: src/main/java/org/semanticweb/owl/explanation/impl/blackbox/ContractionStrategy.java
// public interface ContractionStrategy {
// 
//     Set<OWLAxiom> doPruning(Set<OWLAxiom> axioms, EntailmentChecker checker, ExplanationProgressMonitor<?> progressMonitor);
// 
//     int getNumberOfSteps();
// }
// 
// Path: src/main/java/org/semanticweb/owl/explanation/impl/blackbox/ExpansionStrategy.java
// public interface ExpansionStrategy {
// 
//     /**
//      * Given an input set of axioms, returns a subset of axioms in which the entailment holds, or the empty set
//      * if the entailment does not hold in the input set.
//      * @param axioms The input set.  The entailment may or may not hold in this set.
//      * @param checker The entailment checker that should be used to check for entailment at
//      * each stage.
//      * @param progressMonitor A progress monitor.  Not {@code null}.
//      * @return A set of axioms that the entailment holds in, or the empty set if the entailment does not hold in the
//      * input set.
//      */
//     Set<OWLAxiom> doExpansion(Set<OWLAxiom> axioms, EntailmentChecker checker, ExplanationProgressMonitor<?> progressMonitor);
// 
//     int getNumberOfSteps();
// }


// Path: src/main/java/org/semanticweb/owl/explanation/impl/blackbox/checker/DefaultBlackBoxConfiguration.java
import org.semanticweb.owl.explanation.impl.blackbox.Configuration;
import org.semanticweb.owl.explanation.impl.blackbox.ContractionStrategy;
import org.semanticweb.owl.explanation.impl.blackbox.ExpansionStrategy;
import org.semanticweb.owlapi.reasoner.OWLReasonerFactory;
import org.semanticweb.owlapi.model.OWLAxiom;

package org.semanticweb.owl.explanation.impl.blackbox.checker;

/*
 * Copyright (C) 2008, University of Manchester
 *
 * Modifications to the initial code base are copyright of their
 * respective authors, or their employers as appropriate.  Authorship
 * of the modifications may be determined from the ChangeLog placed at
 * the end of this file.
 *
 * This library is free software; you can redistribute it and/or
 * modify it under the terms of the GNU Lesser General Public
 * License as published by the Free Software Foundation; either
 * version 2.1 of the License, or (at your option) any later version.

 * This library is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 * Lesser General Public License for more details.

 * You should have received a copy of the GNU Lesser General Public
 * License along with this library; if not, write to the Free Software
 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
 */


/**
 * Author: Matthew Horridge<br> The University Of Manchester<br> Information Management Group<br> Date:
 * 03-Sep-2008<br><br>
 *
 * A default black box configuration that uses an entailment checker that reduced entailment checking to
 * satisfiability checking using an OWLReasoner.
 */
public class DefaultBlackBoxConfiguration extends Configuration<OWLAxiom> {


    public DefaultBlackBoxConfiguration(OWLReasonerFactory reasonerFactory) {
        super(new SatisfiabilityEntailmentCheckerFactory(reasonerFactory));
    }

    public DefaultBlackBoxConfiguration(OWLReasonerFactory reasonerFactory,
                                      ExpansionStrategy expansionStrategy,