code: private void splitState(TTTTransition<I, D> transition, Word<I> tempDiscriminator, D oldOut, D newOut) {
          assert !transition.isTree();
  
          notifyPreSplit(transition, tempDiscriminator);
  
          AbstractBaseDTNode<I, D> dtNode = transition.getNonTreeTarget();
          assert dtNode.isLeaf();
          TTTState<I, D> oldState = dtNode.getData();
          assert oldState != null;
  
          TTTState<I, D> newState = makeTree(transition);
  
          AbstractBaseDTNode<I, D>.SplitResult children = split(dtNode, tempDiscriminator, oldOut, newOut);
          dtNode.setTemp(true);
  
          link(children.nodeOld, oldState);
          link(children.nodeNew, newState);
  
          if (dtNode.getParent() == null || !dtNode.getParent().isTemp()) {
              blockList.insertBlock(dtNode);
          }
  
          notifyPostSplit(transition, tempDiscriminator);
      }
docs: Splits a state in the hypothesis, using a temporary discriminator. The state to be split is identified by an
  incoming non-tree transition. This transition is subsequently turned into a spanning tree transition.
  
  @param transition
  the transition
  @param tempDiscriminator
  the temporary discriminator