91.304 - Foundations of Computer
Science - Spring 2009
Dr. Robert Lechner
Professor Emeritus/Adjunct
Computer Science Department
University of Massachusetts Lowell, Lowell, MA
[RJL Ref: $PH/09s304/course_description.htm (Last updated: 20090119) ]
A survey of the mathematical foundations of Computer Science. Finite automata and regular languages. Stack Acceptors (pushdown automata) and Context-Free Languages. Turing Machines, recursive and recursively enumerable sets. Decidability. This course involves no computer programming, but it introduces abstract program complexity theory and measurement. Prerequisite: 92.322 (Discrete Structures II). .
Michael Sipser: Introduction to the Theory of Computation. 2nd ed. Boston, MA: Thomson/PWS/Course Technology, 2005. ISBN: 0534950973. Note: Page numbers with errors (except punctuation and capitalization) are listed at 09s304textbook.htm with a link to corrections at
[UML's prior 08s304 text may also be helpful. It has a similar structure with many more details on earlier chapters (FA/CFG/PDA/TMs) but very brief on later ones (Complexity theory).: Hopcroft, Motwani, and Ullman: Introduction to Automata Theory, Languages, and Computation. 3rd edition, Addison-Wesley 2007. ISBN 0-321-45536-3.]
Other readings may be introduced or recommended during the semester.
Discrete Math I (92.321) and Discrete Math II (92.322). You are expected to know how to use various basic proof techniques, including proof by contradiction, proof by cases, and mathematical induction. You will most likely find this course difficult if you have insufficient mathematical preparations.
Although writing programs will not be required, programming experience is necessary to take this course. Most important is the ability to think about a program + data as a language membership test. Tests involve designing machines that process ordered pairs consisting of a set of language modeling rules and a string to be tested.
Course goals: There are two purposes to this course. One is to give you an understanding of fundamental concepts in computing, including common models for computation such as finite automata and Turing machines. There will be some effort to convince you that this technology is important for implementing a variety of the latest types of systems and software. The other goal is to give you a sense of how to reason formally about computing, how to prove theorems about computation, and how to tell a rigorous proof from wishful thinking. (See Advice below.)
Course Outcomes: To be successful in this course, you must
acquire a certain level of expertise on the following subjects:
Many students find this course challenging and demanding. It covers a lot of
material, and should not be taken during a busy semester. I will be happy to
help you evaluate your preparedness for this course. The best way to
communicate with me is by e-mail.
I will use email often. You need to verify my email
alias for you, and/or forward my emails to where you can read them
Do NOT skip assignments. Exams will require knowledge of techniques that require experience in solving assignments. This can only be absorbed by doing creative work on your own before solutions are published.
Sipser (Tips for producing a proof, p. 19 of text) gives this advice to maximize your productivity while doing assignments in this or any other course:
· Have patience, take a break then return, to escape from prolonged mental blocks.;
· Be careful and neat to avoid subtle mistakes;
· Be precise and concise, but do not skimp on or gloss over details: you are communicating with the reader.
For more details, see student_requirements.htm