Introduction to theoretical computer science including formal languages, automata theory, Turing machines, and computability