code: protected State replaceOrRegister(State state) {
          StateSignature sig = state.getSignature();
          State other = register.get(sig);
          if (other != null) {
              if (state != other) {
                  for (int i = 0; i < sig.successors.array.length; i++) {
                      State succ = sig.successors.array[i];
                      if (succ != null) {
                          succ.decreaseIncoming();
                      }
                  }
              }
              return other;
          }
  
          register.put(sig, state);
          return state;
      }
docs: Returns the canonical state for the given state's signature, or registers the state as canonical if no state with
  that signature exists.
  
  @param state
  the state
  
  @return the canonical state for the given state's signature