Given two sets A,B \subseteq \mathbb{N} of natural numbers, we say A is
Turing reducible to B and write :A \leq_T B
if and only if there is an
oracle machine that computes the
characteristic function of
A when run with oracle
B. In this case, we also say
A is '''
B-recursive
and B-computable'''. If there is an oracle machine that, when run with oracle
B, computes a
partial function with domain
A, then
A is said to be '''
B-
recursively enumerable and B-computably enumerable'''. We say A is
Turing equivalent to B and write A \equiv_T B\, if both A \leq_T B and B \leq_T A. The
equivalence classes of Turing equivalent sets are called
Turing degrees. The Turing degree of a set X is written \textbf{deg}(X). Given a set \mathcal{X} \subseteq \mathcal{P}(\mathbb{N}), a set A \subseteq \mathbb{N} is called
Turing hard for \mathcal{X} if X \leq_T A for all X \in \mathcal{X}. If additionally A \in \mathcal{X} then A is called
Turing complete for \mathcal{X}.
Relation of Turing completeness to computational universality Turing completeness, as just defined above, corresponds only partially to
Turing completeness in the sense of computational universality. Specifically, a Turing machine is a
universal Turing machine if its
halting problem (i.e., the set of inputs for which it eventually halts) is
many-one complete for the set \mathcal{X} of recursively enumerable sets. Thus, a necessary
but insufficient condition for a machine to be computationally universal, is that the machine's halting problem be Turing-complete for \mathcal{X}. Insufficient because it may still be the case that, the language accepted by the machine is not itself recursively enumerable. == Example ==