public static void pprintDescriptionsAsRule(Description head, Description tail, Proposition rule, org.powerloom.PrintableStringWriter stream) {
    { Vector headvariables = null;
      Vector tailvariables = null;
      boolean forwardruleP = ((BooleanWrapper)(KeyValueList.dynamicSlotValue(rule.dynamicSlots, OntosaurusUtil.SYM_LOGIC_FORWARD_ONLYp, Stella.FALSE_WRAPPER))).wrapperValue;
      String operatorprefix = Proposition.chooseImplicationOperator(rule, forwardruleP).symbolName;
      int operatorindent = operatorprefix.length() + 2;

      if (head.deletedP() ||
          tail.deletedP()) {
        { Object old$PrintreadablyP$000 = Stella.$PRINTREADABLYp$.get();

          try {
            Native.setBooleanSpecial(Stella.$PRINTREADABLYp$, false);
            OntosaurusUtil.pprintObject(StringWrapper.wrapString("(=> <DeLeTeD ArGuMeNt(S)>)"), stream);

          } finally {
            Stella.$PRINTREADABLYp$.set(old$PrintreadablyP$000);
          }
        }
        return;
      }
      if (forwardruleP) {
        { Description temp = head;

          head = tail;
          tail = temp;
        }
      }
      if ((tail.proposition == null) &&
          (head.proposition == null)) {
        OntosaurusUtil.pprintNamedDescriptionsAsRule(((NamedDescription)(head)), ((NamedDescription)(tail)), operatorprefix, stream);
        return;
      }
      headvariables = head.ioVariables;
      tailvariables = tail.ioVariables;
      if (tail.proposition == null) {
        tailvariables = headvariables;
      }
      else if (head.proposition == null) {
        headvariables = tailvariables;
      }
      OntosaurusUtil.REUSABLE_SKOLEM_MAPPING_TABLE.clear();
      { PatternVariable tailvbl = null;
        Vector vector000 = tailvariables;
        int index000 = 0;
        int length000 = vector000.length();
        PatternVariable headvbl = null;
        Vector vector001 = headvariables;
        int index001 = 0;
        int length001 = vector001.length();

        for (;(index000 < length000) &&
                  (index001 < length001); index000 = index000 + 1, index001 = index001 + 1) {
          tailvbl = ((PatternVariable)((vector000.theArray)[index000]));
          headvbl = ((PatternVariable)((vector001.theArray)[index001]));
          OntosaurusUtil.REUSABLE_SKOLEM_MAPPING_TABLE.insertAt(headvbl, tailvbl);
        }
      }
      stream.print("(" + OntosaurusUtil.operatorToString(OntosaurusUtil.SGT_PL_KERNEL_KB_FORALL) + " ");
      Native.setIntSpecial(OntosaurusUtil.$PPRINT_INDENT$, ((Integer)(OntosaurusUtil.$PPRINT_INDENT$.get())).intValue() + 8);
      OntosaurusUtil.pprintQuantifiedVariables(tailvariables, false, stream);
      Native.setIntSpecial(OntosaurusUtil.$PPRINT_INDENT$, ((Integer)(OntosaurusUtil.$PPRINT_INDENT$.get())).intValue() - 5);
      OntosaurusUtil.pprintNewline(stream);
      stream.print("(");
      { Object old$PrintreadablyP$001 = Stella.$PRINTREADABLYp$.get();

        try {
          Native.setBooleanSpecial(Stella.$PRINTREADABLYp$, false);
          OntosaurusUtil.pprintObject(StringWrapper.wrapString(operatorprefix), stream);

        } finally {
          Stella.$PRINTREADABLYp$.set(old$PrintreadablyP$001);
        }
      }
      stream.print(" ");
      Native.setIntSpecial(OntosaurusUtil.$PPRINT_INDENT$, ((Integer)(OntosaurusUtil.$PPRINT_INDENT$.get())).intValue() + operatorindent);
      { Object old$Skolemnamemappingtable$000 = Logic.$SKOLEMNAMEMAPPINGTABLE$.get();

        try {
          Native.setSpecial(Logic.$SKOLEMNAMEMAPPINGTABLE$, OntosaurusUtil.REUSABLE_SKOLEM_MAPPING_TABLE);
          OntosaurusUtil.helpPprintDescriptionsAsRule(head, stream);

        } finally {
          Logic.$SKOLEMNAMEMAPPINGTABLE$.set(old$Skolemnamemappingtable$000);
        }
      }
      OntosaurusUtil.REUSABLE_SKOLEM_MAPPING_TABLE.clear();
      OntosaurusUtil.pprintNewline(stream);
      OntosaurusUtil.helpPprintDescriptionsAsRule(tail, stream);
      Native.setIntSpecial(OntosaurusUtil.$PPRINT_INDENT$, ((Integer)(OntosaurusUtil.$PPRINT_INDENT$.get())).intValue() - operatorindent);
      Native.setIntSpecial(OntosaurusUtil.$PPRINT_INDENT$, ((Integer)(OntosaurusUtil.$PPRINT_INDENT$.get())).intValue() - 3);
      stream.print("))");
    }
  }