public static void normalizeProposition(Proposition self) {
    if (!BooleanWrapper.coerceWrappedBooleanToBoolean(self.unfastenedP())) {
      return;
    }
    if (Proposition.containsNestedArgumentP(self)) {
      { Proposition proposition = Proposition.shallowCopyProposition(self);

        proposition = Proposition.flattenNestedFunctionArguments(proposition);
        Proposition.overlayProposition(self, proposition);
      }
    }
    { Keyword testValue000 = self.kind;

      if (testValue000 == Logic.KWD_AND) {
        Proposition.normalizeAndProposition(self);
      }
      else if (testValue000 == Logic.KWD_OR) {
        Proposition.normalizeOrProposition(self);
      }
      else if (testValue000 == Logic.KWD_NOT) {
        Proposition.normalizeNotProposition(self);
      }
      else if ((testValue000 == Logic.KWD_ISA) ||
          (testValue000 == Logic.KWD_PREDICATE)) {
        Proposition.normalizePredicateProposition(self);
      }
      else if (testValue000 == Logic.KWD_FUNCTION) {
        Proposition.normalizeFunctionProposition(self);
      }
      else if (testValue000 == Logic.KWD_EXISTS) {
        Proposition.normalizeExistsProposition(self);
      }
      else if (testValue000 == Logic.KWD_FORALL) {
        Proposition.normalizeForallProposition(self);
      }
      else if (testValue000 == Logic.KWD_EQUIVALENT) {
        Proposition.normalizeEquivalentProposition(self);
      }
      else if ((testValue000 == Logic.KWD_IMPLIES) ||
          ((testValue000 == Logic.KWD_FAIL) ||
           ((testValue000 == Logic.KWD_COLLECT_INTO) ||
            (testValue000 == Logic.KWD_CONSTANT)))) {
      }
      else {
        { OutputStringStream stream000 = OutputStringStream.newOutputStringStream();

          stream000.nativeStream.print("`" + testValue000 + "' is not a valid case option");
          throw ((StellaException)(StellaException.newStellaException(stream000.theStringReader()).fillInStackTrace()));
        }
      }
    }
  }