Cook's Theorem
Definiton of NP:
A decision problem
Π
is in the set NP if and only if there exists a Non
Deterministic Turing Machine (NDTM) M that, when given an arbitrary instance x of
Π
on the input tape of M, will:
(1) Non deterministically place a string w
∈
Σ
* on M's tape just to the left of instance
x. If x
∈
Y(
Π
), w will be the "answer" to instance x – that is, sufficient
information, along with x, to verify (in step (2) below) that x
∈
Y(
Π
). Otherwise,
x
∈
N(
Π
) and the string w will be a random set of characters, or empty (we need
not verify instances in N(
Π
). If we can – fine, but it is not necessary); and
(2) If x
∈
Y(
Π
), deterministically (and in polynomial time with respect to n = |x|),
verify that x
∈
Y(
Π
), and finally halt in state q
Y
. If x
∉
Y(
Π
) (i. e., x
∈
N(
Π
)), the
machine M may halt in state q
N
, or it may compute forever – we are only
guaranteed that M will not halt in state q
Y
.
Notes
We may interpret this as two Turing Machines acting sequentially. The first is non
deterministic and simply writes characters on the tape. The second is totally deterministic
and can, but need not, utilize the result of the first.
For certain problems in NP, TM's exist which ignore the "answer" given by the non
deterministic phase. For example, if
Π
∈
P there is no need to examine the answer,
because a DTM exists which can compute the answer within the required time. In these
case, "no" instances also can be correctly identified in deterministic polynomial time.
Further, we can not simply terminate execution (manually, or automatically, after
some number of state transitions) of an apparently "looping" computation. We usually
don't know the exact polynomial p(n) and, therefore, can never know when p(n)
transitions have been exceeded.
Completeness
We first describe Completeness in terms of languages, since that is the setting in which
the terminology originated. For any set of languages, say X, a particular language L
∈
X
may "embody" the properties of all languages in X in the sense that for every language L'
∈
X all strings x
∈
Σ
* can be transformed into strings f(x) so that x
∈
L' if and only if
f(x)
∈
L. We call L the "completion of the set X," that L is "complete in X," or that L is,