public static void generateClassificationRule(Vector instances, Symbol conceptName, Symbol className, boolean buildRuleP) {
    { int numInstances = instances.length();
      Surrogate kind = Logic.getDescription(className).surrogateValueInverse;
      Symbol name = null;
      Proposition prop = null;
      boolean functionValuesP = Logic.$DROP_FUNCTION_VALUESp$;

      Logic.$DROP_FUNCTION_VALUESp$ = false;
      { int i = Stella.NULL_INTEGER;
        int iter000 = 0;
        int upperBound000 = numInstances - 1;

        for (;iter000 <= upperBound000; iter000 = iter000 + 1) {
          i = iter000;
          name = Logic.objectName(((LogicObject)((instances.theArray)[i])));
          prop = ((Proposition)(Logic.conceiveFormula(Cons.consList(Cons.cons(conceptName, Cons.cons(name, Stella.NIL))))));
          if (Proposition.trueP(prop)) {
            Proposition.helpUpdateTopLevelProposition(prop, Logic.KWD_RETRACT_TRUE);
            LogicObject.buildCaseFromInstance(((LogicObject)((instances.theArray)[i])), kind);
            Proposition.helpUpdateTopLevelProposition(prop, Logic.KWD_ASSERT_TRUE);
          }
          if (Proposition.falseP(prop)) {
            Proposition.helpUpdateTopLevelProposition(prop, Logic.KWD_RETRACT_FALSE);
            LogicObject.buildCaseFromInstance(((LogicObject)((instances.theArray)[i])), kind);
            Proposition.helpUpdateTopLevelProposition(prop, Logic.KWD_ASSERT_FALSE);
          }
        }
      }
      Logic.$DROP_FUNCTION_VALUESp$ = functionValuesP;
      if (buildRuleP) {
        Logic.buildClassificationRule(conceptName, className);
      }
    }
  }