code: public boolean isDupOrd(final AbsAxis ax) {
  
          AbsAxis axis = ax;
  
          while (axis instanceof FilterAxis) {
              axis = ((FilterAxis)axis).getAxis();
          }
  
          if (axis instanceof UnionAxis) {
              mOrd = mOrd.updateOrdUnion();
              mDup = mDup.updateUnion();
  
          } else if (axis instanceof ChildAxis) {
              mOrd = mOrd.updateOrdChild();
              mDup = mDup.updateDupChild();
  
          } else if (axis instanceof ParentAxis) {
  
              mOrd = mOrd.updateOrdParent();
              mDup = mDup.updateDupParent();
  
          } else if (axis instanceof DescendantAxis) {
  
              mOrd = mOrd.updateOrdDesc();
              mDup = mDup.updateDupDesc();
  
          } else if (axis instanceof AncestorAxis) {
  
              mOrd = mOrd.updateOrdAncestor();
              mDup = mDup.updateDupAncestor();
  
          } else if (axis instanceof FollowingAxis || axis instanceof PrecedingAxis) {
  
              mOrd = mOrd.updateOrdFollPre();
              mDup = mDup.updateDupFollPre();
  
          } else if (axis instanceof FollowingSiblingAxis || axis instanceof PrecedingSiblingAxis) {
  
              mOrd = mOrd.updateOrdFollPreSib();
              mDup = mDup.updateDupFollPreSib();
          }
  
          return !DupState.nodup;
      }
docs: Determines for a given string representation of an axis, whether this
  axis leads to duplicates in the result sequence or not. Furthermore it
  determines the new state for the order state that specifies, if the
  result sequence is in document order. This method is implemented
  according to the automata in [Hidders, J., Michiels, P., "Avoiding
  Unnecessary Ordering Operations in XPath", 2003]
  
  @param ax
  name of the current axis
  @return true, if expression is still duplicate free