public static TruthValue descriptionSpecializesDescriptionP(Description sub, Description renamed_Super) {
    if (!(sub.arity() == renamed_Super.arity())) {
      if (((Boolean)(Logic.$REVERSEPOLARITYp$.get())).booleanValue()) {
        return (Logic.TRUE_TRUTH_VALUE);
      }
      else {
        return (Logic.FALSE_TRUTH_VALUE);
      }
    }
    if (((Boolean)(Logic.$REVERSEPOLARITYp$.get())).booleanValue()) {
      return (Logic.UNKNOWN_TRUTH_VALUE);
    }
    if (LogicObject.collectionImpliesCollectionP(sub, renamed_Super)) {
      return (Logic.TRUE_TRUTH_VALUE);
    }
    if (renamed_Super.arity() == 1) {
      return (Description.unaryDescriptionSpecializesDescriptionP(sub, renamed_Super));
    }
    { Object old$PrintreadablyP$000 = Stella.$PRINTREADABLYp$.get();

      try {
        Native.setBooleanSpecial(Stella.$PRINTREADABLYp$, true);
        if ((Stella.$TRACED_KEYWORDS$ != null) &&
            Stella.$TRACED_KEYWORDS$.membP(Logic.KWD_GOAL_TREE)) {
          {
            System.out.println();
            System.out.println("Subsumption Test:");
            System.out.println("   sub=" + sub);
            System.out.println("   super=" + renamed_Super);
          }
;
        }

      } finally {
        Stella.$PRINTREADABLYp$.set(old$PrintreadablyP$000);
      }
    }
    { Vector skolemsvector = Vector.newVector(sub.ioVariables.length());
      TruthValue result = Logic.UNKNOWN_TRUTH_VALUE;

      Logic.pushMonotonicWorld();
      Logic.initializeInferenceWorld(((World)(((Context)(Stella.$CONTEXT$.get())))));
      { int i = Stella.NULL_INTEGER;
        int iter000 = 0;
        int upperBound000 = skolemsvector.length() - 1;

        for (;iter000 <= upperBound000; iter000 = iter000 + 1) {
          i = iter000;
          (skolemsvector.theArray)[i] = (Logic.createHypothesizedInstance("anonymous"));
        }
      }
      try {
        Logic.inheritDescription(skolemsvector, sub, false);
        result = Logic.callAsk(Description.createQueryIterator(renamed_Super, skolemsvector));
      } catch (LogicException e) {
        Stella.STANDARD_ERROR.nativeStream.print(Stella.exceptionMessage(e));
      }
      Stella.popWorld();
      if ((Stella.$TRACED_KEYWORDS$ != null) &&
          Stella.$TRACED_KEYWORDS$.membP(Logic.KWD_GOAL_TREE)) {
        System.out.println();
      }
      return (result);
    }
  }