public static void collectFlatDisjuncts(Proposition self, List flatdisjuncts) {
    if (self.kind == Logic.KWD_OR) {
      { Stella_Object arg = null;
        Vector vector000 = self.arguments;
        int index000 = 0;
        int length000 = vector000.length();

        for (;index000 < length000; index000 = index000 + 1) {
          arg = (vector000.theArray)[index000];
          Proposition.collectFlatDisjuncts(((Proposition)(arg)), flatdisjuncts);
        }
      }
      self.free();
    }
    else {
      { boolean foundP000 = false;

        { Proposition prop = null;
          Cons iter000 = flatdisjuncts.theConsList;

          loop001 : for (;!(iter000 == Stella.NIL); iter000 = iter000.rest) {
            prop = ((Proposition)(iter000.value));
            if (Proposition.duplicateAndOrArgumentsP(prop, self)) {
              foundP000 = true;
              break loop001;
            }
          }
        }
        if (!(foundP000)) {
          flatdisjuncts.push(self);
          self.dependentPropositions.clear();
        }
      }
    }
  }