Theory of automata