public static void induceDecisionRules(Symbol relationName, Symbol className) {
    relationName = ((Symbol)(relationName.permanentify()));
    Logic.clearCases();
    Logic.clearTrainingExamples();
    Logic.$INDUCED_DECISION_RULES$ = List.newList();
    className = ((Symbol)(className.permanentify()));
    { Surrogate renamed_Class = Logic.getDescription(className).surrogateValueInverse;
      Surrogate relation = Logic.getDescription(relationName).surrogateValueInverse;
      List ilist = Logic.allClassInstances(renamed_Class).listify();
      int num = ilist.length();
      DecisionTree tree = null;
      Vector instances = Vector.newVector(num);

      { Stella_Object instance = null;
        Cons iter000 = ilist.theConsList;
        int i = Stella.NULL_INTEGER;
        int iter001 = 0;

        for (;!(iter000 == Stella.NIL); iter000 = iter000.rest, iter001 = iter001 + 1) {
          instance = iter000.value;
          i = iter001;
          (instances.theArray)[i] = (((LogicObject)(instance)));
        }
      }
      if (!Logic.$ALLOW_RECURSIVE_DECISION_NODES$) {
        Logic.$TABOO_OPERATORS$.insertNew(relation);
      }
      Logic.generateClassificationRule(instances, relationName, className, true);
      System.out.println("Generating Training Examples");
      Logic.generateClassificationTrainingExamples(instances, relation, true);
      System.out.println("Generating Decision Rules");
      tree = Logic.induceDecisionTree(Logic.$TRAINING_EXAMPLES$);
      tree.concept = relationName;
      Logic.getRulesFromTree(((TrainingExample)(Logic.$TRAINING_EXAMPLES$.first())).query, tree);
    }
  }