public Context getDoubleArrowTable() {
        // generation of attributes
        TreeSet<Node> join = this.joinIrreducibles();
        Context context = new Context();
        for (Node j : join) {
            context.addToObservations(j);
        }
        // generation of observations
        TreeSet<Node> meet = this.meetIrreducibles();
        for (Node m : meet) {
            context.addToAttributes(m);
        }
        // generation of extent-intent
        Lattice transitiveClosure = new Lattice(this);
        transitiveClosure.transitiveClosure();
        Lattice transitiveReduction = new Lattice(this);
        transitiveReduction.transitiveReduction();
        Node jminus = new Node();
        Node mplus = new Node();
        for (Node j : join) {
            for (Node m : meet) {
                if (!(m.equals(j) || transitiveClosure.getSuccessorNodes(j).contains(m))) {
                    mplus = transitiveReduction.getSuccessorNodes(m).first();
                    jminus = transitiveReduction.getPredecessorNodes(j).first();
                    if (transitiveClosure.getSuccessorNodes(jminus).contains(m) && (transitiveClosure.getPredecessorNodes(mplus).contains(j))) {
                        context.addExtentIntent(j, m);
                    }
                }
            }
        }
        return context;
    }