@Override
  @NotNull
  protected Equation analyze() throws AnalyzerException {
    pendingPush(new ProceedState(createStartState()));
    int steps = 0;
    while (pendingTop > 0 && earlyResult == null) {
      steps ++;
      TooComplexException.check(method, steps);
      PendingAction action = pendingActions.get(--pendingTop);
      if (action instanceof MakeResult makeResult) {
        PResult result = combineResults(makeResult.subResult, makeResult.indices);
        State state = makeResult.state;
        int insnIndex = state.conf.insnIndex;
        results.set(state.index, result);
        addComputed(insnIndex, state);
      }
      else if (action instanceof ProceedState proceedState) {
        State state = proceedState.state;
        int insnIndex = state.conf.insnIndex;
        Conf conf = state.conf;
        List<Conf> history = state.history;

        boolean fold = false;
        if (dfsTree.loopEnters[insnIndex]) {
          for (Conf prev : history) {
            if (isInstance(conf, prev)) {
              fold = true;
              break;
            }
          }
        }
        if (fold) {
          results.set(state.index, Identity);
          addComputed(insnIndex, state);
        }
        else {
          State baseState = null;
          List<State> thisComputed = computed[insnIndex];
          if (thisComputed != null) {
            for (State prevState : thisComputed) {
              if (state.equiv(prevState)) {
                baseState = prevState;
                break;
              }
            }
          }
          if (baseState != null) {
            results.set(state.index, results.get(baseState.index));
          } else {
            // the main call
            processState(state);
          }

        }
      }
    }
    return earlyResult != null ? mkEquation(earlyResult) : mkEquation(results.get(0));
  }
@Override
  @NotNull
  protected Equation analyze()