CS 401 - Theoretical Foundations of Computer Science
Computer Science Department
University of New Mexico
Fall 2007

Taught by: Joel Castellanos
Office: Farris Engineering Center (FEC) 321
Office hours (Fall 2007): MWF 10:30-11:30, Tu 11:15-1:30 and by appointment.
e-mail: joel@unm.edu

Course Description

The primary objective of this course is to help students become better Problem Solvers.

This is not a lecture course, but one in which students actively precipitate in problem solving as a class and in small groups. There is a significant reading component aimed at presenting examples of proofs and problem solving at various levels of formality and that illustrate a wide verity of techniques. Emphasis will be placed on the communication of results by practicing to write proofs and problem solutions Clearly, Concisely, and Unambiguously.

Many of the problems examined will be from the subject area of computer science involving topics such as Deterministic and Nondeterministic Finite Automaton, Graph Coloring, and Context-Free Grammars. Other problems will be taken from Geometry, Algebra, Physics, Biology, Political Science, and wherever good problems can be found.

"Solving problems is a practical skill like, let us say, swimming. We acquire any practical skill by imitation and practice. Trying to swim, you imitate what other people do with their hands and feet to keep their heads above water, and finally, you learn to swim by practicing swimming. Trying to solve problems, you have to observe and to imitate what other people do when solving problems and, finally, you learn to do problems by doing them."
-- George Polya (1887-1985) in How to Solve It (1945)

Required Reading Selections

  1. Proofs - Appendix A of The Theory of Computation by Bernard M.E. Moret
  2. MU-puzzle: Formal Systems - Chapter 1 of Gödel, Escher, Bach: An Eternal Golden Braid by Douglas R. Hofstadter
  3. Number Systems and Infinity - Chapter 2 of The Computational Beauty of Nature by Gary William Flake
  4. Computability_and_Incomputability - Chapter 3 of The Computational Beauty of Nature by Gary William Flake
  5. Context Free Languages - Chapter 2 of Introduction to the Theory of Computation by Michael Sipser
  6. Converses of Pumping Lemmas - by Richard Jolmsonbaugh & David P. Miller
  7. Fractal Grower - L-system CFL Explanation and Software

Optional Reading Selections

Introduction to Automata Theory, Languages, and Computation, by John Hopcroft, Rajeev Motwani, Jeffrey Ullman

Excerpt from 7.2.3: Applications of the Pumping Lemma for Context Free Languages:

We use the CFL pumping lemma as an “adversary game” as follows.

  1. We pick a language L that we want to show is not a CFL.
  2. Our “adversary” gets to pick p.
  3. We get to pick s, and may use p as a parameter when we do so.
  4. Our adversary gets to break s into uvxyz, subject only to the constraints that |vy| > 0, and |vxy|<= p.
  5. We win the game, if we can, by picking i and showing that uvixyiz is not in L.