public int makeDirect() {
        this.makeUnary();
        this.makeProper();
        int s = this.sizeRules();
        boolean ok = true;
        while (ok) {
            ImplicationalSystem sauv = new ImplicationalSystem(this);
            for (Rule r1 : sauv.sigma) {
                for (Rule r2 : sauv.sigma) {
                    if (!r1.equals(r2) && !r1.getPremise().containsAll(r2.getConclusion())) {
                        ComparableSet  c = new ComparableSet(r2.getPremise());
                        c.removeAll(r1.getConclusion());
                        c.addAll(r1.getPremise());
                        if (!c.containsAll(r2.getPremise())) {
                            Rule newR  = new Rule(c, r2.getConclusion());
                            // new_r.addAllToPremise (r1.getPremise());
                            // new_r.addAllToPremise (r2.getPremise());
                            // new_r.removeAllFromPremise(r1.getConclusion());
                            // new_r.addAllToConclusion(r2.getConclusion() );
                            this.addRule(newR);
                        }
                    }
                }
            }
            if (this.sizeRules() == sauv.sizeRules()) {
                ok = false;
            }
        }
        this.makeCompact();
        return s - this.sizeRules();
    }