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();
            ArrayList<Node> sort = this.topologicalSort();
            this.transpose();
            // reduction of set A
            for (Node to : sort) {
                Concept cto = (Concept) to;
                for (Node from : this.getPredecessorNodes(to))  {
                    Concept cfrom = (Concept) from;
                    cto.getSetA().removeAll(cfrom.getSetA());
                }
            }
        }
        // makes setB inclusion reduction
        if (setB) {
            // computation of a topological sort
            ArrayList<Node> sort = this.topologicalSort();
            // reduction of set B
            for (Node to : sort) {
                Concept cto  = (Concept) to;
                for (Node from : this.getSuccessorNodes(to))  {
                    Concept cfrom = (Concept) from;
                    cto.getSetB().removeAll(cfrom.getSetB());
                }
            }
        }
        return true;
    }