public static void printKifFunctionProposition(Proposition self) {
    { OutputStream stream = ((OutputStream)(Logic.$PRINTLOGICALFORMSTREAM$.get()));
      String downcasedname = Proposition.stringifiedKifOperator(self);
      Stella_Object lastargument = (self.arguments.theArray)[(self.arguments.length() - 1)];
      boolean printasrelationP = ((Boolean)(Logic.$PRINTFUNCTIONSASRELATIONSp$.get())).booleanValue();

      if (!(printasrelationP)) {
        stream.nativeStream.print("(= ");
      }
      stream.nativeStream.print("(" + downcasedname + " ");
      Logic.increaseIndent(downcasedname.length() + 2);
      Logic.printKifArguments(self.arguments, false, true);
      Logic.decreaseIndent(downcasedname.length() + 2);
      if (!(printasrelationP)) {
        stream.nativeStream.print(")");
      }
      stream.nativeStream.print(" ");
      if (lastargument != null) {
        { Surrogate testValue000 = Stella_Object.safePrimaryType(lastargument);

          if (Surrogate.subtypeOfP(testValue000, Logic.SGT_LOGIC_PATTERN_VARIABLE)) {
            { PatternVariable lastargument000 = ((PatternVariable)(lastargument));

              PatternVariable.printKifVariable(lastargument000);
            }
          }
          else if (Surrogate.subtypeOfP(testValue000, Logic.SGT_LOGIC_SKOLEM)) {
            { Skolem lastargument000 = ((Skolem)(lastargument));

              Skolem.printKifSkolem(lastargument000, true);
            }
          }
          else {
            Logic.printAsKifInternal(lastargument);
          }
        }
      }
      stream.nativeStream.print(")");
    }
  }