code: func liveStates(a *Automaton) *util.OpenBitSet {
  	live := liveStatesFromInitial(a)
  	live.And(liveStatesToAccept(a))
  	return live
  }
docs: // /*
  // Returns true if the given string is accepted by the autmaton.
  // Complexity: linear in the length of the string.
  // Note: for fll performance, use the RunAutomation class.
  // */
  // func run(a *Automaton, s string) bool {
  // 	if a.isSingleton() {
  // 		return s == a.singleton
  // 	}
  // 	if a.deterministic {
  // 		p := a.initial
  // 		for _, ch := range s {
  // 			q := p.step(int(ch))
  // 			if q == nil {
  // 				return false
  // 			}
  // 			p = q
  // 		}
  // 		return p.accept
  // 	}
  // 	// states := a.NumberedStates()
  // 	panic("not implemented yet")
  // }
  /*
  Returns the set of live states. A state is "live" if an accept state
  is reachable from it and if it is reachable from the initial state.
  */