* @param style
   * @param maxdepth
   * @param stream
   */
  public static void explainProposition(Proposition prop, Keyword style, int maxdepth, OutputStream stream) {
    try {
      { List justifications = prop.forwardJustifications();

        if (justifications != null) {
          { Object old$ExplanationStyle$000 = Logic.$EXPLANATION_STYLE$.get();
            Object old$MostRecentExplanationMapping$000 = Logic.$MOST_RECENT_EXPLANATION_MAPPING$.get();

            try {
              Native.setSpecial(Logic.$EXPLANATION_STYLE$, ((style != null) ? style : Logic.KWD_BRIEF));
              Native.setSpecial(Logic.$MOST_RECENT_EXPLANATION_MAPPING$, null);
              { Justification justification = null;
                Cons iter000 = justifications.theConsList;

                for (;!(iter000 == Stella.NIL); iter000 = iter000.rest) {
                  justification = ((Justification)(iter000.value));
                  Native.setSpecial(Logic.$MOST_RECENT_EXPLANATION_MAPPING$, null);
                  Justification.printExplanation(justification, stream, ((KeyValueList)(Logic.$MOST_RECENT_EXPLANATION_MAPPING$.get())), maxdepth, ((Keyword)(Logic.$EXPLANATION_AUDIENCE$.get())));
                }
              }

            } finally {
              Logic.$MOST_RECENT_EXPLANATION_MAPPING$.set(old$MostRecentExplanationMapping$000);
              Logic.$EXPLANATION_STYLE$.set(old$ExplanationStyle$000);
            }
          }
        }
      }
    } catch (ExplainException ee) {
      System.out.print(Stella.exceptionMessage(ee));
    }
  }