code: public RandomICAutomatonGenerator<SP, TP> withStateProperties(Collection<? extends SP> possibleSps) {
          if (possibleSps.isEmpty()) {
              return withStateProperties(r -> null);
          }
          List<SP> spList = new ArrayList<>(possibleSps);
          return withStateProperties((r) -> RandomUtil.choose(spList, r));
      }
docs: Sets the possible state properties, and returns {@code this}. The collection is internally converted into a list,
  from which state properties are selected using {@link RandomUtil#choose(List, Random)}. If the collection is
  empty, {@code null} will always be chosen as the state property.
  <p>
  Note that if the collection contains elements several times, the probability of these elements being selected is
  proportionally higher.
  
  @param possibleSps
  the collection of possible state properties
  
  @return {@code this}