src/main/java/org/thegalactic/lattice/ConceptLattice.java
public boolean makeInclusionReduction() {
        if (!this.containsConcepts()) {
            return false;
        }
        boolean setA = this.containsAllSetA();
        boolean setB = this.containsAllSetB();
        if (!setA && !setB) {
            return false;
        }
        // makes setA inclusion reduction
        if (setA) {
            // computation of an inverse topological sort
            this.transpose();
            List<Node> sort = this.topologicalSort();
            this.transpose();
            // reduction of set A
            for (Node to : sort) {
                Concept cto = (Concept) to;
                for (Object source : this.getPredecessorNodes(to)) {
                    Concept csource = (Concept) source;
                    cto.getSetA().removeAll(csource.getSetA());
                }
            }
        }
        // makes setB inclusion reduction
        if (setB) {
            // computation of a topological sort
            List<Node> sort = this.topologicalSort();
            // reduction of set B
            for (Node to : sort) {
                Concept cto = (Concept) to;
                for (Object source : this.getSuccessorNodes(to)) {
                    Concept csource = (Concept) source;
                    cto.getSetB().removeAll(csource.getSetB());
                }
            }
        }
        return true;
    }
/**
     * Replaces, if not empty, set A of each concept with the difference between
     * itself and set A of its predecessors; Then replaces, if not empty, set B
     * of each concept by the difference between itself and set B of its
     * successors.
     *
     * @return a boolean
     *
     * @todo Comment the return
     */
Replaces, if not empty, set A of each concept with the difference between
itself and set A of its predecessors; Then replaces, if not empty, set B
of each concept by the difference between itself and set B of its
successors.

@return a boolean

@todo Comment the return
Replaces if not empty set A of each concept with the difference between itself and set A of its predecessors ; Then replaces if not empty set B of each concept by the difference between itself and set B of its successors . @return a boolean @todo Comment the return
public boolean makeInclusionReduction() {
        if (!this.containsConcepts()) {
            return false;
        }
        boolean setA = this.containsAllSetA();
        boolean setB = this.containsAllSetB();
        if (!setA && !setB) {
            return false;
        }
        if (setA) {
            this.transpose();
            List<Node> sort = this.topologicalSort();
            this.transpose();
            for (Node to : sort) {
                Concept cto = (Concept) to;
                for (Object source : this.getPredecessorNodes(to)) {
                    Concept csource = (Concept) source;
                    cto.getSetA().removeAll(csource.getSetA());
                }
            }
        }
        if (setB) {
            List<Node> sort = this.topologicalSort();
            for (Node to : sort) {
                Concept cto = (Concept) to;
                for (Object source : this.getSuccessorNodes(to)) {
                    Concept csource = (Concept) source;
                    cto.getSetB().removeAll(csource.getSetB());
                }
            }
        }
        return true;
    }
public boolean makeInclusionReduction ( ) { if ( ! this . containsConcepts ( ) ) { return false ; } boolean setA = this . containsAllSetA ( ) ; boolean setB = this . containsAllSetB ( ) ; if ( ! setA && ! setB ) { return false ; } if ( setA ) { this . transpose ( ) ; List < Node > sort = this . topologicalSort ( ) ; this . transpose ( ) ; for ( Node to : sort ) { Concept cto = ( Concept ) to ; for ( Object source : this . getPredecessorNodes ( to ) ) { Concept csource = ( Concept ) source ; cto . getSetA ( ) . removeAll ( csource . getSetA ( ) ) ; } } } if ( setB ) { List < Node > sort = this . topologicalSort ( ) ; for ( Node to : sort ) { Concept cto = ( Concept ) to ; for ( Object source : this . getSuccessorNodes ( to ) ) { Concept csource = ( Concept ) source ; cto . getSetB ( ) . removeAll ( csource . getSetB ( ) ) ; } } } return true ; }
Replaces, if not empty, set A of each concept with the difference between
 itself and set A of its predecessors; Then replaces, if not empty, set B
 of each concept by the difference between itself and set B of its
 successors.
Replaces if not empty set A of each concept with the difference between itself and set A of its predecessors ; Then replaces if not empty set B of each concept by the difference between itself and set B of its successors .
// makes setA inclusion reduction // computation of an inverse topological sort // reduction of set A // makes setB inclusion reduction // computation of a topological sort // reduction of set B