public static Proposition normalizeValueFunction(Proposition self) {
    { Surrogate functionsurrogate = Logic.evaluateRelationTerm((self.arguments.theArray)[0], self);
      int newargumentcount = self.arguments.length() - 1;
      Proposition newproposition = null;
      Proposition duplicate = null;

      if (functionsurrogate == null) {
        return (self);
      }
      newproposition = Logic.createProposition(Logic.SYM_STELLA_FUNCTION, newargumentcount);
      newproposition.operator = functionsurrogate;
      { int i = Stella.NULL_INTEGER;
        int iter000 = 1;
        int upperBound000 = newargumentcount;
        boolean unboundedP000 = upperBound000 == Stella.NULL_INTEGER;

        for (;unboundedP000 ||
                  (iter000 <= upperBound000); iter000 = iter000 + 1) {
          i = iter000;
          (newproposition.arguments.theArray)[(i - 1)] = ((self.arguments.theArray)[i]);
        }
      }
      if (Logic.skolemP((self.arguments.theArray)[(self.arguments.length() - 1)])) {
        ((Skolem)((self.arguments.theArray)[(self.arguments.length() - 1)])).definingProposition = newproposition;
      }
      if (!(Logic.descriptionModeP())) {
        duplicate = Proposition.findDuplicateFunctionProposition(newproposition);
        if (duplicate != null) {
          newproposition = duplicate;
        }
      }
      return (newproposition);
    }
  }