public static Proposition disjoinPropositions(Cons disjuncts) {
    if (disjuncts == Stella.NIL) {
      return (Logic.FALSE_PROPOSITION);
    }
    { List flatdisjuncts = List.newList();
      Proposition result = null;

      { Proposition c = null;
        Cons iter000 = disjuncts;

        for (;!(iter000 == Stella.NIL); iter000 = iter000.rest) {
          c = ((Proposition)(iter000.value));
          Proposition.collectFlatDisjuncts(c, flatdisjuncts);
        }
      }
      flatdisjuncts.reverse();
      switch (flatdisjuncts.length()) {
        case 0: 
          { Proposition proposition = Logic.createProposition(Logic.SYM_LOGIC_CONSTANT, 0);

            Proposition.overlayWithConstantProposition(proposition, Logic.FALSE_PROPOSITION);
            return (proposition);
          }
        case 1: 
          return (((Proposition)(flatdisjuncts.first())));
        default:
        break;
      }
      result = Logic.createProposition(Logic.SYM_STELLA_OR, flatdisjuncts.length());
      result.arguments = Logic.copyListToArgumentsVector(flatdisjuncts);
      if (((BooleanWrapper)(KeyValueList.dynamicSlotValue(((Proposition)(flatdisjuncts.first())).dynamicSlots, Logic.SYM_LOGIC_DESCRIPTIVEp, Stella.FALSE_WRAPPER))).wrapperValue) {
        KeyValueList.setDynamicSlotValue(result.dynamicSlots, Logic.SYM_LOGIC_DESCRIPTIVEp, Stella.TRUE_WRAPPER, Stella.FALSE_WRAPPER);
      }
      return (result);
    }
  }