docs: def cardinality(self):
  		'''
  			Consider the FSM as a set of strings and return the cardinality of that
  			set, or raise an OverflowError if there are infinitely many
  		'''
  		num_strings = {}
  		def get_num_strings(state):
  			# Many FSMs have at least one oblivion state
  			if self.islive(state):
  				if state in num_strings:
  					if num_strings[state] is None: # "computing..."
  						# Recursion! There are infinitely many strings recognised
  						raise OverflowError(state)
  					return num_strings[state]
  				num_strings[state] = None # i.e. "computing..."
  
  				n = 0
  				if state in self.finals:
  					n += 1
  				if state in self.map:
  					for symbol in self.map[state]:
  						n += get_num_strings(self.map[state][symbol])
  				num_strings[state] = n
  
  			else:
  				# Dead state
  				num_strings[state] = 0
  
  			return num_strings[state]
  
  		return get_num_strings(self.initial)