code: public Formula equivalence(final Formula left, final Formula right) {
      if (left.type() == TRUE)
        return right;
      if (right.type() == TRUE)
        return left;
      if (left.type() == FALSE)
        return this.not(right);
      if (right.type() == FALSE)
        return this.not(left);
      if (left.equals(right))
        return this.verum();
      if (left.equals(right.negate()))
        return this.falsum();
      final LinkedHashSet<Formula> key = new LinkedHashSet<>(Arrays.asList(left, right));
      Equivalence equivalence = this.equivalences.get(key);
      if (equivalence == null) {
        equivalence = new Equivalence(left, right, this);
        this.equivalences.put(key, equivalence);
      }
      return equivalence;
    }
docs: Creates a new equivalence.
  @param left  the left-hand side operand
  @param right the right-hand side operand
  @return a new equivalence