docs: def derive(self, input):
  		'''
  			Compute the Brzozowski derivative of this FSM with respect to the input
  			string of symbols. <https://en.wikipedia.org/wiki/Brzozowski_derivative>
  			If any of the symbols are not members of the alphabet, that's a KeyError.
  			If you fall into oblivion, then the derivative is an FSM accepting no
  			strings.
  		'''
  		try:
  			# Consume the input string.
  			state = self.initial
  			for symbol in input:
  				if not symbol in self.alphabet:
  					if not anything_else in self.alphabet:
  						raise KeyError(symbol)
  					symbol = anything_else
  
  				# Missing transition = transition to dead state
  				if not (state in self.map and symbol in self.map[state]):
  					raise OblivionError
  
  				state = self.map[state][symbol]
  
  			# OK so now we have consumed that string, use the new location as the
  			# starting point.
  			return fsm(
  				alphabet = self.alphabet,
  				states   = self.states,
  				initial  = state,
  				finals   = self.finals,
  				map      = self.map,
  			)
  
  		except OblivionError:
  			# Fell out of the FSM. The derivative of this FSM is the empty FSM.
  			return null(self.alphabet)