@Override
  public String toString() {
    String str = "";
    for (int i = 0; i < FormulaType.values().length; i++)
      if (leftFormulas[i] != null) str += leftFormulas[i].toString();

    return str + "==>\n" + (rightSide == null ? "" : rightSide.toString());
  }
  @SuppressWarnings("unchecked")
  @Override
  public SingleSuccedentSequentOnBitSet clone() {
    try {
      SingleSuccedentSequentOnBitSet result = (SingleSuccedentSequentOnBitSet) super.clone();
      result.leftSide = (BitSet) this.leftSide.clone();
      result.leftFormulas = (LinkedList<Formula>[]) new LinkedList[FormulaType.values().length];
      for (int i = 0; i < this.leftFormulas.length; i++)
        if (this.leftFormulas[i] != null)
          result.leftFormulas[i] = (LinkedList<Formula>) this.leftFormulas[i].clone();

      result.rightSide = this.rightSide;
      return result;
    } catch (CloneNotSupportedException e) {
      throw new ImplementationError(e.getMessage());
    }
  }
 @SuppressWarnings("unchecked")
 public SingleSuccedentSequentOnBitSet(FormulaFactory factory) {
   leftSide = new BitSet(factory.numberOfGeneratedFormulas());
   leftFormulas = new LinkedList[FormulaType.values().length];
   rightSide = null;
 }