code: public static <S, I, O> Optional<ADTNode<S, I, O>> compute(final MealyMachine<S, I, ?, O> automaton,
                                                                 final Alphabet<I> alphabet,
                                                                 final Set<S> states,
                                                                 final PartialTransitionAnalyzer<S, I> pta) {
  
          return new DefensiveADS<>(automaton, alphabet, states, pta).compute();
      }
docs: Compute an adaptive distinguishing sequence (as an ADT) for the given automaton and the given set of states.
  
  @param automaton
  the automaton for which an ADS should be computed
  @param alphabet
  the input alphabet of the automaton
  @param states
  the set of states which should be distinguished by the computed ADS
  @param pta
  the analyzer to inspect and close partial transitions
  @param <S>
  (hypothesis) state type
  @param <I>
  input alphabet type
  @param <O>
  output alphabet type
  
  @return {@code Optional.empty()} if there exists no ADS that distinguishes the given states, a valid ADS
  otherwise.