public static void downclassifyOneDescription(LogicObject self) {
    { Object old$Classificationsession$000 = Logic.$CLASSIFICATIONSESSION$.get();

      try {
        Native.setSpecial(Logic.$CLASSIFICATIONSESSION$, Logic.getClassificationSession(Logic.KWD_DESCRIPTION));
        if (!LogicObject.downclassifiedP(self)) {
          if (Description.nonInferableP(((Description)(self)))) {
            LogicObject.refreshDownclassificationTimestamp(self);
            return;
          }
          if ((Stella.$TRACED_KEYWORDS$ != null) &&
              (Stella.$TRACED_KEYWORDS$.membP(Logic.KWD_CLASSIFIER) ||
               Stella.$TRACED_KEYWORDS$.membP(Logic.KWD_CLASSIFIER_PROFILE))) {
            System.out.println("DOWNCLASSIFY-ONE-DESCRIPTION:  " + self);
          }
          Logic.emitThinkingDot(Logic.KWD_DOWNCLASSIFY);
          { MarkerTable alreadyvisitedtable = Logic.createMarkerStorage(false);
            Cons parents = Description.allNamedDirectSuperdescriptions(((Description)(self)), false);
            LogicObject bestparent = Logic.chooseBestDownclassifiedParent(parents);
            Cons otherparents = parents.remove(bestparent);

            alreadyvisitedtable.setMarker(self);
            if (bestparent != null) {
              { NamedDescription child = null;
                Cons iter000 = Description.allNamedDirectSubdescriptions(((Description)(bestparent)));

                for (;!(iter000 == Stella.NIL); iter000 = iter000.rest) {
                  child = ((NamedDescription)(iter000.value));
                  LogicObject.helpDownclassifyOneDescription(child, self, otherparents, alreadyvisitedtable);
                }
              }
            }
          }
          LogicObject.refreshDownclassificationTimestamp(self);
        }

      } finally {
        Logic.$CLASSIFICATIONSESSION$.set(old$Classificationsession$000);
      }
    }
  }