code: protected void updateInternalHypothesis() {
          if (!table.isInitialized()) {
              throw new IllegalStateException("Cannot update internal hypothesis: not initialized");
          }
  
          int oldStates = internalHyp.size();
          int numDistinct = table.numberOfDistinctRows();
  
          int newStates = numDistinct - oldStates;
  
          stateInfos.addAll(Collections.nCopies(newStates, null));
  
          // TODO: Is there a quicker way than iterating over *all* rows?
          // FIRST PASS: Create new hypothesis states
          for (Row<I> sp : table.getShortPrefixRows()) {
              int id = sp.getRowContentId();
              StateInfo<S, I> info = stateInfos.get(id);
              if (info != null) {
                  // State from previous hypothesis, property might have changed
                  if (info.getRow() == sp) {
                      internalHyp.setStateProperty(info.getState(), stateProperty(table, sp));
                  }
                  continue;
              }
  
              S state = createState((id == 0), sp);
  
              stateInfos.set(id, new StateInfo<>(sp, state));
          }
  
          // SECOND PASS: Create hypothesis transitions
          for (StateInfo<S, I> info : stateInfos) {
              Row<I> sp = info.getRow();
              S state = info.getState();
  
              for (int i = 0; i < alphabet.size(); i++) {
                  I input = alphabet.getSymbol(i);
  
                  Row<I> succ = sp.getSuccessor(i);
  
                  if (succ != null) {
                      int succId = succ.getRowContentId();
  
                      S succState = stateInfos.get(succId).getState();
  
                      setTransition(state, input, succState, sp, i);
                  }
              }
          }
      }
docs: Performs the L*-style hypothesis construction. For creating states and transitions, the {@link
  #stateProperty(ObservationTable, Row)} and {@link #transitionProperty(ObservationTable, Row, int)} methods are
  used to derive the respective properties.