CS 103: Mathematical Foundations of Computing

Notes by Rohan Sikand · Spring 2021 · Course Website




These are notes for Stanford’s CS 103: Mathematical Foundations of Computing, instructed by Cynthia Bailey Lee with lectures by Keith Schwarz. The first half of the course covers the mathematical foundations, such as discrete structures, whereas the second half offers an introduction to the theory of computation.

>

"What are the theoretical limits of computing power? What problems can be solved with computers? Which ones cannot? And how can we reason about the answers to these questions with mathematical certainty? This course explores the answers to these questions and serves as an introduction to discrete mathematics, computability theory, and complexity theory. At the completion of the course, students will feel comfortable writing mathematical proofs, reasoning about discrete structures, reading and writing statements in first-order logic, and working with mathematical models of computing devices. Throughout the course, students will gain exposure to some of the most exciting mathematical and philosophical ideas of the late nineteenth and twentieth centuries. Specific topics covered include formal mathematical proofwriting, propositional and first-order logic, set theory, binary relations, functions (injections, surjections, and bijections), cardinality, basic graph theory, the pigeonhole principle, mathematical induction, finite automata, regular expressions, the Myhill-Nerode theorem, context-free grammars, Turing machines, decidable and recognizable languages, self-reference and undecidability, verifiers, and the P versus NP question."

Contents

  1. Finite State Machines
  2. Nondeterministic Finite Automata
  3. More on Finite State Machines
  4. Regular Expressions
  5. Nonregular Languages
  6. Context-Free Grammars