public static boolean specializingPropositionsIteratorDnextP(SpecializingPropositionsIterator self) {
    { Cons specializingrelations = self.specializingRelations;

      for (;;) {
        if (TruePropositionsIterator.truePropositionsIteratorDnextP(self)) {
          if ((specializingrelations != null) &&
              (!(specializingrelations == Stella.NIL))) {
            self.truthValue = TruthValue.conjoinTruthValues(self.truthValue, ((TruthValue)(((Cons)(specializingrelations.value)).rest.value)));
          }
          self.specializingRelations = specializingrelations;
          return (true);
        }
        if (specializingrelations == null) {
          if (((Keyword)(self.selectionPattern.value)) == Logic.KWD_RELATION) {
            { NamedDescription relationdescription = Logic.surrogateToDescription(((Surrogate)(self.selectionPattern.rest.rest.value)));

              if (relationdescription != null) {
                specializingrelations = LogicObject.allSupportedNamedSubcollections(relationdescription);
              }
              else {
                specializingrelations = Stella.NIL;
              }
            }
          }
          else {
            { OutputStringStream stream000 = OutputStringStream.newOutputStringStream();

              stream000.nativeStream.print("Illegal selection pattern in `" + self + "'");
              throw ((StellaException)(StellaException.newStellaException(stream000.theStringReader()).fillInStackTrace()));
            }
          }
        }
        else {
          specializingrelations = specializingrelations.rest;
        }
        if (specializingrelations == Stella.NIL) {
          self.value = null;
          return (false);
        }
        self.selectionPattern.rest.rest.firstSetter(((NamedDescription)(((Cons)(specializingrelations.value)).value)).surrogateValueInverse);
        self.propositionCursor = Logic.selectPropositions(self.selectionPattern).allocateIterator();
        self.equivalentsStack = null;
      }
    }
  }