In Computer Science Theory you will learn computational thinking
and get to know the fundamental models of computation that underlie
modern computer hardware, software, and programming languages.
You will also discover that there are limits on how quickly computers
can solve some problems and that there are some
problems that no computer can solve.

The course will cover the important formal languages in the
Chomsky hierarchy --
the regular sets, the context-free languages,
and the recursively enumerable sets -- as well as the formalisms that
generate these languages and the machines that recognize them.
The course will introduce the basic concepts of computability
and complexity theory by focusing on the question, "What are the
fundamental capabilities and limitations of computers?"
The course will also introduce the untyped lambda calculus,
the model of computation underlying functional programming languages.

The concepts covered in this course will be amply illustrated
by applications to current programming languages, algorithms,
natural language processing, and hardware and software design.