public ImplicationalSystem getImplicationalSystem() {
        // initialization of ImplicationalSystem
        TreeSet<Node> join = this.joinIrreducibles();
        ImplicationalSystem sigma = new ImplicationalSystem();
        for (Node j : join) {
            sigma.addElement((Comparable) j.getContent());
        }
        // generation of the family of closures
        TreeSet<ComparableSet> family = new TreeSet<ComparableSet>();
        Lattice lattice = new Lattice(this);
        ConceptLattice conceptLattice = lattice.joinClosure();
        for (Node n : conceptLattice.getNodes()) {
            Concept c = (Concept) n;
            ComparableSet setA = new ComparableSet(c.getSetA());
            family.add(setA);
        }
        // rules generation
        for (ComparableSet jx : family) {
            for (Node j : join) {
                ComparableSet p = new ComparableSet();
                p.add(j.getContent());
                p.addAll(jx);
                if (!family.contains(p)) {
                    ComparableSet min = new ComparableSet();
                    min.addAll(family.last());
                    for (ComparableSet c : family) {
                        //System.out.println("min: "+min.getClass()+" -C:"+C.getClass());
                        if (c.containsAll(p) && !p.containsAll(c) && min.containsAll(c)) {
                            min = c.copy();
                        }
                    }
                    Rule r = new Rule();
                    r.addAllToPremise(p);
                    min.removeAll(p);
                    r.addAllToConclusion(min);
                    sigma.addRule(r);
                }
            }
        }


/**        for (Node j : join)
            for (Node m : meet)
                if (j.equals(m) || tmp.getSuccessorNodes(j).contains(m))
                    T.addExtentIntent (m,j);
                    //T.addExtentIntent (MeetContent.get(m),JoinContent.get(j));
        return T;**/
        sigma.makeRightMaximal();
        return sigma;
    }