@Override
 public boolean equals(Object obj) {
   if (obj instanceof Transition)
     return labelIn.equals(((Transition) obj).labelIn)
         && labelOut.equals(((Transition) obj).labelOut)
         && to.equals(((Transition) obj).to);
   else return false;
 }
  /**
   * uy.edu.fing.mina.omega.tffst.test 8. it shows determinization of a union
   *
   * @param args
   */
  public static void main(String[] args) {

    Tffst.setMinimizeAlways(false);

    // tffst1
    Tffst tffst1 = new Tffst();

    State s0 = new State();
    tffst1.setInitialState(s0);
    State s1 = new State();
    State s2 = new State();
    s2.setAccept(true);

    SimpleTf tfd = new SimpleTf();
    tfd.setName("D");
    Transition trans1 = new Transition(tfd, tfd, s1, 1);
    s0.addOutTran(trans1);

    SimpleTf tfall = new SimpleTf();
    tfall.setAcceptAll();
    SimpleTf tfc = new SimpleTf();
    tfc.setName("C");
    TfI tfall_c = tfall.and(tfc.not());

    Transition trans2 = new Transition(tfall_c, tfall_c, s1, 1);
    s1.addOutTran(trans2);

    SimpleTf tfk = new SimpleTf();
    tfk.setName("K");
    TfString sec = new TfString(tfc);
    TfString seck = new TfString(tfc);
    seck.add(tfk);
    Transition trans3 = new Transition(sec, seck, s2);
    s1.addOutTran(trans3);

    Utils.showDot(tffst1.toDot("tffst1"));

    tffst1 = tffst1.toSingleLabelTransitions(); // FIXME
    Utils.showDot(tffst1.toDot("tffst1 simple"));

    tffst1.removeInputEpsilonLabel();
    Utils.showDot(tffst1.toDot("tffst1 without epsilons"));

    //      tffst1.removeDeadTransitions();
    //      Utils.showDot(tffst1.toDot("tffst1 without dead transitions"));
  }
 @Override
 public int hashCode() {
   return (labelIn.hashCode() + labelOut.hashCode() + to.hashCode()) % Integer.MAX_VALUE;
 }
 /** @param label The sLabel to set. */
 public void setSLabel() {
   this.sLabel = labelIn.toString() + "/" + labelOut.toString();
 }