@Override
  public Expression<?> duplicate(Expression<?>[] newChildren) {
    assert newChildren.length == 1;

    if (negated == newChildren[0]) return this;

    return UnaryMinus.create(newChildren[0]);
  }
 @Override
 public <E> String visit(UnaryMinus<E> n, HashMap<Class, String> data) {
   String negated = visit(n.getNegated());
   return TransitionEncoding.unaryMinus + ":" + negated + ";";
 }