deterministic finite automata in theory of computation