// Path: snorocket-core/src/main/java/au/csiro/snorocket/core/axioms/Inclusion.java
// abstract public class Inclusion implements Serializable {
//     /**
//      * 
//      */
//     private static final long serialVersionUID = 1L;
// 
//     /**
//      * Runs the first phase in the normalisation process (see Pushing the EL
//      * Envelope).
//      * 
//      * @param factory
//      * @return
//      */
//     abstract public Inclusion[] normalise1(IFactory factory);
// 
//     /**
//      * Runs the second phase in the normalisation process (see Pushing the EL
//      * Envelope).
//      * 
//      * @param factory
//      * @return
//      */
//     abstract public Inclusion[] normalise2(IFactory factory);
// 
//     @Override
//     abstract public int hashCode();
// 
//     @Override
//     abstract public boolean equals(Object o);
// 
//     @Override
//     abstract public String toString();
// 
//     abstract public NormalFormGCI getNormalForm();
// 
// }


import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;
import java.util.HashSet;
import java.util.Set;
import org.junit.Test;
import au.csiro.ontology.Node;
import au.csiro.ontology.model.Axiom;
import au.csiro.ontology.model.Concept;
import au.csiro.ontology.model.ConceptInclusion;
import au.csiro.ontology.model.Conjunction;
import au.csiro.ontology.model.Datatype;
import au.csiro.ontology.model.Existential;
import au.csiro.ontology.model.IntegerLiteral;
import au.csiro.ontology.model.NamedConcept;
import au.csiro.ontology.model.NamedFeature;
import au.csiro.ontology.model.NamedRole;
import au.csiro.ontology.model.Operator;
import au.csiro.ontology.model.Role;
import au.csiro.ontology.model.RoleInclusion;
import au.csiro.snorocket.core.axioms.Inclusion;

        ConceptInclusion a3 = new ConceptInclusion(new Conjunction(
                new Concept[] {
                        panadol,
                        new Datatype(mgPerTablet, Operator.EQUALS, new IntegerLiteral(250)) }), panadol_250mg);

        ConceptInclusion a4 = new ConceptInclusion(panadol_500mg,
                new Conjunction(new Concept[] {
                        panadol,
                        new Datatype(mgPerTablet, Operator.EQUALS, new IntegerLiteral(500)) }));

        ConceptInclusion a5 = new ConceptInclusion(new Conjunction(
                new Concept[] {
                        panadol,
                        new Datatype(mgPerTablet, Operator.EQUALS, new IntegerLiteral(500)) }), panadol_500mg);

        ConceptInclusion a6 = new ConceptInclusion(panadol_pack_250mg,
                new Conjunction(new Concept[] {
                        panadol,
                        new Datatype(mgPerTablet, Operator.EQUALS, new IntegerLiteral(250)),
                        new Existential(container, bottle) }));

        Set<Axiom> axioms = new HashSet<Axiom>();
        axioms.add(a1);
        axioms.add(a2);
        axioms.add(a3);
        axioms.add(a4);
        axioms.add(a5);
        axioms.add(a6);

        NormalisedOntology no = new NormalisedOntology(factory);

// Path: snorocket-core/src/main/java/au/csiro/snorocket/core/axioms/Inclusion.java
// abstract public class Inclusion implements Serializable {
//     /**
//      * 
//      */
//     private static final long serialVersionUID = 1L;
// 
//     /**
//      * Runs the first phase in the normalisation process (see Pushing the EL
//      * Envelope).
//      * 
//      * @param factory
//      * @return
//      */
//     abstract public Inclusion[] normalise1(IFactory factory);
// 
//     /**
//      * Runs the second phase in the normalisation process (see Pushing the EL
//      * Envelope).
//      * 
//      * @param factory
//      * @return
//      */
//     abstract public Inclusion[] normalise2(IFactory factory);
// 
//     @Override
//     abstract public int hashCode();
// 
//     @Override
//     abstract public boolean equals(Object o);
// 
//     @Override
//     abstract public String toString();
// 
//     abstract public NormalFormGCI getNormalForm();
// 
// }


// Path: snorocket-core/src/test/java/au/csiro/snorocket/core/TestNormalisedOntology.java
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;
import java.util.HashSet;
import java.util.Set;
import org.junit.Test;
import au.csiro.ontology.Node;
import au.csiro.ontology.model.Axiom;
import au.csiro.ontology.model.Concept;
import au.csiro.ontology.model.ConceptInclusion;
import au.csiro.ontology.model.Conjunction;
import au.csiro.ontology.model.Datatype;
import au.csiro.ontology.model.Existential;
import au.csiro.ontology.model.IntegerLiteral;
import au.csiro.ontology.model.NamedConcept;
import au.csiro.ontology.model.NamedFeature;
import au.csiro.ontology.model.NamedRole;
import au.csiro.ontology.model.Operator;
import au.csiro.ontology.model.Role;
import au.csiro.ontology.model.RoleInclusion;
import au.csiro.snorocket.core.axioms.Inclusion;

        ConceptInclusion a3 = new ConceptInclusion(new Conjunction(
                new Concept[] {
                        panadol,
                        new Datatype(mgPerTablet, Operator.EQUALS, new IntegerLiteral(250)) }), panadol_250mg);

        ConceptInclusion a4 = new ConceptInclusion(panadol_500mg,
                new Conjunction(new Concept[] {
                        panadol,
                        new Datatype(mgPerTablet, Operator.EQUALS, new IntegerLiteral(500)) }));

        ConceptInclusion a5 = new ConceptInclusion(new Conjunction(
                new Concept[] {
                        panadol,
                        new Datatype(mgPerTablet, Operator.EQUALS, new IntegerLiteral(500)) }), panadol_500mg);

        ConceptInclusion a6 = new ConceptInclusion(panadol_pack_250mg,
                new Conjunction(new Concept[] {
                        panadol,
                        new Datatype(mgPerTablet, Operator.EQUALS, new IntegerLiteral(250)),
                        new Existential(container, bottle) }));

        Set<Axiom> axioms = new HashSet<Axiom>();
        axioms.add(a1);
        axioms.add(a2);
        axioms.add(a3);
        axioms.add(a4);
        axioms.add(a5);
        axioms.add(a6);

        NormalisedOntology no = new NormalisedOntology(factory);

        Set<Inclusion> norms = no.normalise(axioms);
