When we study computability we are studying problems in an abstract sense. For example, addition is the problem of, having been given two numbers, returning a third number that is their sum. Two problems of particular interest in Computer Science, which you have probably encountered previously, are the Traveling Salesperson Problem (TSP) and the Halting Problem. In TSP one is given a list of distances between some number of cities and is asked to ?nd the shortest route that visits each city once and returns to the start. In the Halting Problem, one is given a program and some appropriate input and asked to decide whether the program, when run on that input, loops forever or halts. Note that, in each of the cases the statement of the problem doesn't give us the actual values we need to provide the result for, but rather just tells us what kind of objects they are. A set of actual values for a problem is called an instance of the problem. (So, in this terminology, all the homework problems you did throughout school were not problems but were, rather, instances of problems.)

A problem, then, speci?es what an instance is, i.e., what the input is, and how the solution, or output, must be related to the that input.

There are a number of things one might seek to know about a problem, among them:

• Can it be solved algorithmically; is there a de?nite procedure that solves any instance of the problem in a ?nite amount of time? Inother words, is it computable. Not all problems are computable; the halting problem is the classic example of one that is not.

• How hard is it to solve? What kind of resources are needed and how much of those resources is required? Again, some problems are harder than others. TSP is an example of a frustrating class of problems that have no known e?cient solution, but which have never been proven to be necessarily hard.