# CS3518:Formal Languages and Computability

This course, which is being revised drastically for the academic year 2014-15, provides a basic-level introduction to computability via the notion of a formal language. The revised course presupposes some familiarity with formal logic and set theory, and with the theory of formal languages and automata, for example as these topics are taught in our CS2013 course on Mathematics for Computing Science. The functional programming language HASKELL is introduced as a device for exploring the notion of an infinite set. If time allows, we shall use PROLOG to illustrate computability in logic. The plan of the course is as follows.

- Introductory material
- Recap of the theory of relations and functions (e.g., bijections)
- Infinite sets and Russell's paradox
- Recap of Finite State Automata (with extensions)

- The functional model of programming
- Introduction to the lambda calculus
- Programming in HASKELL
- Defining and handling infinite sets in HASKELL

- Computability
- The notion of an algorithm
- Turing Machines
- An abstract (non-constructive) proof that noncomputable problems exist
- The Halting Problem is undecidable
- Logical consequence in dyadic Predicate Logic is decidable
- Logical consequence in full Predicate Logic is undecidable

## Lecturer

Kees van Deemter