public int makeCompact() {
        ImplicationalSystem sauv = new ImplicationalSystem(this);
        for (Rule r1 : sauv.sigma) {
            if (this.containsRule(r1)) {
                ComparableSet newConc = new ComparableSet();
                for (Rule r2 : sauv.sigma) {
                    if (this.containsRule(r2) && !r1.equals(r2) && (r1.getPremise().equals(r2.getPremise()))) {
                        newConc.addAll(r2.getConclusion());
                        boolean res = this.sigma.remove(r2);
                    }
                }
                if (newConc.size() > 0) {
                    newConc.addAll(r1.getConclusion());
                    Rule newR = new Rule(r1.getPremise(), newConc);
                    if (!r1.equals(newR)) {
                        this.replaceRule(r1, newR);
                    }
                }
            }
        }
        return sauv.sizeRules() - this.sizeRules();
    }