docs: def parallel(fsms, test):
  	'''
  		Crawl several FSMs in parallel, mapping the states of a larger meta-FSM.
  		To determine whether a state in the larger FSM is final, pass all of the
  		finality statuses (e.g. [True, False, False] to `test`.
  	'''
  	alphabet = set().union(*[fsm.alphabet for fsm in fsms])
  
  	initial = dict([(i, fsm.initial) for (i, fsm) in enumerate(fsms)])
  
  	# dedicated function accepts a "superset" and returns the next "superset"
  	# obtained by following this transition in the new FSM
  	def follow(current, symbol):
  		next = {}
  		for i in range(len(fsms)):
  			if symbol not in fsms[i].alphabet and anything_else in fsms[i].alphabet:
  				actual_symbol = anything_else
  			else:
  				actual_symbol = symbol
  			if i in current \
  			and current[i] in fsms[i].map \
  			and actual_symbol in fsms[i].map[current[i]]:
  				next[i] = fsms[i].map[current[i]][actual_symbol]
  		if len(next.keys()) == 0:
  			raise OblivionError
  		return next
  
  	# Determine the "is final?" condition of each substate, then pass it to the
  	# test to determine finality of the overall FSM.
  	def final(state):
  		accepts = [i in state and state[i] in fsm.finals for (i, fsm) in enumerate(fsms)]
  		return test(accepts)
  
  	return crawl(alphabet, initial, final, follow).reduce()