Textbook: Introduction to the Theory of Computation, Michael Sipser

Note that the course only included up to Chapter 5, and I self-studied the rest

Shit, this is crowded.

“Wtf, man. I just wanted to learn how to program video games.”

This field of research started in the 1930s, before computers existed, when logicians wanted to understand computation. The big question is whether all mathematical problems can be solved in a systematic way?

A problem is a single question with infinitely many instances. Everything can be converted into questions about strings…

These subjects have applications to compiler design, computer architecture, processing that uses a finite-state machine, and theories of programming languages

We can divide the theory of computation into,

  1. Automata Theory - deals with definitions and properties of different types of computation models
  2. Computability Theory - deals with solvable and unsolvable problems
  3. Complexity Theory - asks what makes some problems hard and some problems easy

Is this course useful for developers? Depends who you ask! But Antonella says yes

Computational Problems

A problem is a set of strings that we would like to distinguish

  • For each candidate string, we decide whether it is in the target set
  • The input to our machines are always strings
  • We can convert any format to a string

A string is made up of symbols taken from a finite set called an alphabet
The closure of an alphabet is denoted as

The reversal of a string is denoted
All strings of length are denoted as
is the null string

A language is a set of strings over an alphabet , i.e.
can be finite or countably infinite
is a language, and so is

Since languages are sets, we can use standard set operations , , and
We also use the reversal operator and the concatenation operator (which consists of all symbols which are a concatenation of something in and )

We will define classes of languages based on which machines can recognize them,

  • Regular
  • Context-free
  • Recursively-enumerable
  • Undecidable