public static Keyword trySubsumptionTest(ControlFrame frame) {
    { Proposition proposition = frame.proposition;
      Stella_Object subcollectionarg = (proposition.arguments.theArray)[0];
      Stella_Object supercollectionarg = (proposition.arguments.theArray)[1];
      Description subcollection = ((Description)(Logic.argumentBoundTo(subcollectionarg)));
      Description supercollection = ((Description)(Logic.argumentBoundTo(supercollectionarg)));

      if (frame.reversePolarityP) {
        return (Logic.KWD_FAILURE);
      }
      if ((subcollection != null) &&
          (((Vector)(KeyValueList.dynamicSlotValue(subcollection.dynamicSlots, Logic.SYM_LOGIC_EXTERNAL_VARIABLES, null))) != null)) {
        { boolean foundP000 = false;

          { PatternVariable var = null;
            Vector vector000 = ((Vector)(KeyValueList.dynamicSlotValue(subcollection.dynamicSlots, Logic.SYM_LOGIC_EXTERNAL_VARIABLES, null)));
            int index000 = 0;
            int length000 = vector000.length();

            loop000 : for (;index000 < length000; index000 = index000 + 1) {
              var = ((PatternVariable)((vector000.theArray)[index000]));
              if (!Logic.argumentBoundP(var)) {
                foundP000 = true;
                break loop000;
              }
            }
          }
          if (foundP000) {
            return (Logic.KWD_FAILURE);
          }
          else {
            subcollection = ((Description)(Logic.instantiateExternalBindings(subcollection)));
          }
        }
      }
      if ((supercollection != null) &&
          (((Vector)(KeyValueList.dynamicSlotValue(supercollection.dynamicSlots, Logic.SYM_LOGIC_EXTERNAL_VARIABLES, null))) != null)) {
        { boolean foundP001 = false;

          { PatternVariable var = null;
            Vector vector001 = ((Vector)(KeyValueList.dynamicSlotValue(supercollection.dynamicSlots, Logic.SYM_LOGIC_EXTERNAL_VARIABLES, null)));
            int index001 = 0;
            int length001 = vector001.length();

            loop001 : for (;index001 < length001; index001 = index001 + 1) {
              var = ((PatternVariable)((vector001.theArray)[index001]));
              if (!Logic.argumentBoundP(var)) {
                foundP001 = true;
                break loop001;
              }
            }
          }
          if (foundP001) {
            return (Logic.KWD_FAILURE);
          }
          else {
            supercollection = ((Description)(Logic.instantiateExternalBindings(supercollection)));
          }
        }
      }
      { TruthValue truthvalue = Description.descriptionSpecializesDescriptionP(subcollection, supercollection);

        ControlFrame.setFrameTruthValue(frame, truthvalue);
        if ((truthvalue == Logic.TRUE_TRUTH_VALUE) ||
            (truthvalue == Logic.DEFAULT_TRUE_TRUTH_VALUE)) {
          return (Logic.KWD_FINAL_SUCCESS);
        }
        else {
          return (Logic.KWD_FAILURE);
        }
      }
    }
  }