@Override
    public boolean equals(final Object obj) {
      if(!(obj instanceof Edge)) {
        return false;
      }
      final Edge o = (Edge) obj;
      return start == o.start && end == o.end && dot == o.dot
          && lhs.equals(o.lhs) && Arrays.equals(rhs, o.rhs)
          && children.equals(o.children);
    }