code: private Formula constructAnd(final LinkedHashSet<? extends Formula> operands) {
      And tempAnd = null;
      Map<LinkedHashSet<? extends Formula>, And> opAndMap = this.andsN;
      if (operands.size() > 1) {
        switch (operands.size()) {
          case 2:
            opAndMap = this.ands2;
            break;
          case 3:
            opAndMap = this.ands3;
            break;
          case 4:
            opAndMap = this.ands4;
            break;
          default:
            break;
        }
        tempAnd = opAndMap.get(operands);
      }
      if (tempAnd != null)
        return tempAnd;
      final LinkedHashSet<? extends Formula> condensedOperands = operands.size() < 2
              ? operands
              : this.condenseOperandsAnd(operands);
      if (condensedOperands == null)
        return this.falsum();
      if (condensedOperands.isEmpty())
        return this.verum();
      if (condensedOperands.size() == 1)
        return condensedOperands.iterator().next();
      final And and;
      Map<LinkedHashSet<? extends Formula>, And> condAndMap = this.andsN;
      switch (condensedOperands.size()) {
        case 2:
          condAndMap = this.ands2;
          break;
        case 3:
          condAndMap = this.ands3;
          break;
        case 4:
          condAndMap = this.ands4;
          break;
        default:
          break;
      }
      and = condAndMap.get(condensedOperands);
      if (and == null) {
        tempAnd = new And(condensedOperands, this, this.cnfCheck);
        opAndMap.put(operands, tempAnd);
        condAndMap.put(condensedOperands, tempAnd);
        return tempAnd;
      }
      opAndMap.put(operands, and);
      return and;
    }
docs: Creates a new conjunction.
  @param operands the formulas
  @return a new conjunction