CS3518: Formal Languages and Computability
This course provides a basic-level introduction to computability via the notion of a formal language. It does not presuppose familiarity with formal languages and automata. Some familiarity with imperative programming (e.g. in JAVA) and with the basics of set theory is assumed. The functional programming language Haskell is introduced, and this language is used to explore the notion of an infinite set.
- Introduction to formal languages
- Finite State automata
- Regular languages
- The functional model of programming
- Theory: The lambda calculus
- Practice: Programming in HASKELL
- The imperative model of programming
- Theory: Turing machines
- Practice: Programming in Turing machines
- Computability
- Preliminary material (bijections, cardinality, the Russell paradox)
- Abstract (non-constructive) proof that noncomputable problems must exist
- Examples of noncomputable problems