/** Return true just when this enumerator has the same state as the given argument. */
 public /*@ pure @*/ boolean equals(/*@ nullable @*/ Object oth) {
   if (oth == null || !(oth instanceof JMLObjectToObjectRelationEnumerator)) {
     return false;
   } else {
     JMLObjectToObjectRelationEnumerator js = (JMLObjectToObjectRelationEnumerator) oth;
     return abstractValue().equals(js.abstractValue());
   }
 }
 /** Return the set of uniterated pairs from this enumerator. */
 protected /*@ spec_public pure @*/ /*@ non_null @*/ JMLValueSet abstractValue() {
   JMLValueSet ret = new JMLValueSet();
   JMLObjectToObjectRelationEnumerator enum2 = (JMLObjectToObjectRelationEnumerator) clone();
   while (enum2.hasMoreElements()) {
     // @ assume enum2.moreElements;
     JMLObjectObjectPair aPair = enum2.nextPair();
     ret = ret.insert(aPair);
   }
   return ret;
 } // @ nowarn Exception;