This is the study of mathematical foundations of computing. Topics include finite automata and regular languages, pushdown automata and context-free languages, Turing machines and decidability, and an introduction to computational complexity.
Prerequisites
Knowledge of discrete mathematics and algorithms at the undergraduate level, and some facility with reading and writing mathematical proofs