# 15-150: Principles of Functional Programming

# Lecture 23: Computability

We discussed the computability of functions in SML. By the
Church-Turing thesis this is the same notion of computability as we
have in recursion theory, with Turing machines, etc.

There are two main techniques for showing that certain functions
are not computable: *diagonalization* (which is a direct
argument), and *problem reduction* (which shows that a problem
is undecidable by giving a reduction from another undecidable
problem).

### Key Concepts

- Decision problem
- Decision procedure
- Halting problem
- Diagonalization argument
- Reduction argument
- Semi-decision procedure
- Function Equivalence

### Sample Code

No code, since there is no solution to the halting problem!