From Wikipedia, the free encyclopedia.
Rice's theorem is an important result in the theory of recursive functions. A property of partial functions is trivial if it holds for all partial recursive functions or for none. Rice's theorem states that, for any non-trivial property of partial functions, the question of whether a given algorithm computes a partial function with this property is undecidable.
As an example, consider the following variant of the halting problem: Take the property a partial function F has if F is defined for argument 1. It is obviously non-trivial, since there are partial functions that are defined for 1 and others that are undefined at 1. The 1-halting problem is the problem of deciding of any algorithm whether it defines a function with this property, i.e., whether the algorithm halts on input 1. By Rice's theorem, the 1-halting problem is undecidable.
Suppose, for concreteness, that we have an algorithm for examining a
program p and determining infallibly whether or not p is an
implementation of the squaring function, which takes an integer d and
returns d2. The proof works just as well if we have an
algorithm for deciding any other nontrivial property of programs, and
will be given in general below.
The claim is that we can convert our algorithm for identifying
squaring programs into one which identifies functions that halt. We
will describe an algorithm which takes inputs a and i and determines
whether program a halts when given input i.
The algorithm
is simple: we construct a new program t which (1) temporarily ignores its input while it tries to
execute program a on input i, and then, if that halts, (2) returns the square of its input. Clearly, t is a function for computing squares if and only if step (1) halts. Since we've assumed that we can infallibly identify program for computing squares, we can determine whether t is such a program, and therefore whether program a halts on input i. Note that we needn't actualy execute t; we need only decide whether it is a squaring program, and, by hypothesis, we know how to do this.
This method doesn't depend specifically on being able to recognize functions that compute squares; if we could had a method for recognizing programs for computing square roots, or programs for
computing the monthly payroll, or programs that halt when given the input "Abraxas", or programs that commit array bounds errors, we would be able to solve the halting problem similarly.
For the formal proof, algorithms are presumed to define partial
functions over strings and are themselves represented by
strings. The partial function computed by the algorithm represented by
a string a is denoted Fa. This proof proceeds
by reductio ad absurdum: we assume that there is a non-trivial
property that is decided by an algorithm, and then show that it
follows that we can decide the halting problem, which is not
possible, and therefore a contradiction.
Let us now assume that P(a) is an algorithm that decides some
non-trivial property of Fa. Without loss of
generality we may assume that P(no-halt) = "no", with
no-halt being the representation of an algorithm that never
halts. If this is not true, then this will hold for the negation of
the property. Since P decides a non-trivial property, it follows
that there is a string b that represents an algorithm and
P(b) = "yes". We can then define an algorithm H(a,
i) as follows:
Proof
We can now show that H decides the halting problem:
Since the halting problem is known to be undecidable, this is a
contradiction and the assumption that there is an algorithm
P(a) that decides a non-trivial property for the function
represented by a must be false.

