CS 520  Introduction to Theory of
Computing
Fall 2009 

Course Description
This course provides an undergraduatelevel introduction to the theory of
computing.
The objective is twofold. First, gaining an understanding of the nature
of computation, its capabilities and its limitations, and obtaining the
ability to reason rigorously about them; second, acquiring the mathematical
foundation for applications of these insights in other areas of computer
science.
We will cover elements of automata theory and formal languages,
computability theory, complexity theory, and cryptography.
These topics have applications in algorithm design,
programming languages and compiler construction, artificial intelligence,
hardware and network protocols, and security.
Text
Michael Sipser, Introduction to the Theory of Computation, 2nd
edition, 2006.
Prerequisites
Math 240 (Discrete Mathematics, especially proofs by induction and basic
notions of set theory, logic, discrete probability theory, and graph theory),
and CS 367 (Data Structures, especially familiarity with algorithms and
their complexity).
A selfcalibration homework will be handed out in the first lecture
and there will be a special review session T 9/8, 79pm, in 1325 CS.
Course Work
 Homework (50%).
There will be an assignment every other week. Expect the problems to be
challenging so start early.
You are allowed to discuss the problems in group but you
should write out the solutions on your own and give credit to your
collaborators.
No sources other than the course material, the instructor, the TA, and
your fellow students in the course are allowed.
 Exams:
Midterm (20%) M 10/19, 7:159:15pm,
and Final (30%) N 12/20, 10:05am12:05pm.
Both exams are closed book and closed notes.
References
The following books are available in Wendt library:
Preliminaries:
 Kenneth Rosen,
Discrete Mathematics and Its Applications,
5th edition, 2002.
Level of CS 520:
 Michael Sipser,
Introduction to the Theory of Computation,
2nd edition, 2005.
 John Hopcroft, Rajeev Motwani, and Jeffrey Ullman,
Introduction to Automata Theory, Languages, and Computation,
2nd edition, 2000.
 Dexter Kozen,
Automata and Computability,
1997.
 Harry Lewis and Christos Papadimitriou,
Elements of the Theory of Computation,
2nd edition, 1997.
More Advanced:
 Christos Papadimitriou,
Computational Complexity,
1994.
 Uwe Schöning and Randall Pruim,
Gems of Theoretical Computer Science,
1995.
