Advanced Topics in Computer Science is a three-course sequence that explores a number of high-level computer science concepts, such as logic and sets, functional languages, lambda calculus, finite state machines, regular expressions, and Turing completeness. The three courses culminate in the creation of an untyped lambda calculus interpreter/REPL.

Mathematical Foundations of Computer Science
This course covers advanced mathematics within the computer science sphere. The curriculum includes boolean algebra, (including nand- and nor-completeness, conjunctive normal form, and how booleans translate to digital logic), set theory (including sets of sets and the cardinality of infinite sets), and inductively proving the correctness of code.

Functional Programming & Lambda Calculus
The first half of this course is functional programming, focusing on recursion, lists, and structs. The second half of the course focuses on untyped lambda calculus, including the y-combinator.

Theory of Computation
This course focuses on five classes of languages and their corresponding grammars and machines (regular, context-free, context-sensitive, recursively enumerable, and non-recursively enumerable) and their corresponding grammars and machines. At the culmination of the course, students build a full REPL and interpreter (from scratch) for untyped lambda calculus.