To determine whether a given

Turing machine M

halts when given

empty input. Sometimes refers to the variant of testing if M halts on

input x; however, we may

simulate this variant by defining a Turing machine M' which first writes down x, and then simulates the operation of M; M' halts (on empty input) iff M halts on input x. In any case, we shall deal with this variant, but it really makes no difference. You may substitute "

computer program" for "Turing machine" in this description, with no change in the content.

The halting problem is undecideable: there does not exist a Turing machine H such that H(e,x)=1 if e encodes a Turing machine M which halts on input x, and H(e,x)=0 otherwise. Suppose for the sake of contradiction that such a machine H existed. Define a new machine H': H' reads one input x, then calculates H(x,x); if H(x,x)=0 it halts, else H(x,x)=1 and H' goes into an infinite loop. Let f be the encoding of H'. What does H' do on input f? It halts iff H(f,f)=0, which (by the definition of H) occurs iff the machine encoded by f does not halt on input f, i.e. iff H' does not halt on input f. Since H' must either halt on input f or enter an infinite loop (i.e. not halt), this is impossible: H'(f) halts iff it doesn't. Thus no such machine H can exist.