
CUUS063 main CUUS063 Goldreich 978 0 521 88473 0 March 31, 2008 18:49
2.3. NP-COMPLETENESS
reduction of S to S
while on the other hand S
∈ NP \ P. The process of modi-
fying S into S
proceeds in iterations, alternatively f ailing a potential reduction (by
dropping sufficiently many strings from the rest of S) and failing a potential decision
procedure (by including sufficiently many strings from the rest of S). Specifically,
each potential reduction of S to S
can be failed by dropping finitely many elements
from the current S
, whereas each potential decision procedure can be failed by
keeping finitely many elements of the current S
. These two assertions are based on
the following two corresponding facts:
1. Any polynomial-time reduction (of any set not in P) to any finite set (e.g., a finite
subset of S) must fail, because only sets in P are Cook-reducible to a finite set.
Thus, for any finite set F
1
and any potential reduction (i.e., a polynomial-time
oracle machine), there exists an input x on which this reduction to F
1
fails.
We stress that the aforementioned reduction fails while the only queries that are
answered positively are those residing in F
1
. Furthermore, the aforementioned
failure is due to a finite set of queries (i.e., the set of all queries made by the
reduction when invoked on an input that is smaller or equal to x). Thus, for every
finite set F
1
⊂ S
⊆ S, any reduction of S to S
can be failed by dropping a finite
number of elements from S
and without dropping elements of F
1
.
2. For every finite set F
2
, any polynomial-time decision procedure for S \ F
2
must
fail, because S is Cook-reducible to S \ F
2
. Thus, for any potential decision
procedure (i.e., a polynomial-time algorithm), there exists an input x on which
this procedure fails.
We stress that this failure is due to a finite “prefix” of S \ F
2
(i.e., the set {z ∈
S \ F
2
: z ≤ x}). Thus, for every finite set F
2
, any polynomial-time decision
procedure for S \ F
2
can be failed by keeping a finite subset of S \ F
2
.
As stated, the process of modifying S into S
proceeds in iterations, alternatively
failing a potential reduction (by dropping finitely many strings from the rest of S)
and failing a potential decision procedure (by including finitely many strings from
the rest of S). This can be done efficiently because it is inessential to determine the
first possible points of alternation (in which sufficiently many strings were dropped
(resp., included) to fail the next potential reduction (resp., decision procedure)). It
suffices to guarantee that adequate points of alternation (albeit highly non-optimal
ones) can be efficiently determined. Thus, S
is the intersection of S and some set
in P, which implies that S
∈ NP. Following are some comments regarding the
implementation of the foregoing idea.
The first issue is that the foregoing plan calls for an (“effective”) enumeration of
all polynomial-time oracle machines (resp., polynomial-time algorithms). However,
none of these sets can be enumerated (by an algorithm). Instead, we enumerate
all corresponding machines along with all possible polynomials, and for each pair
(M, p) we consider executions of machine M with time bound specified by the
polynomial p. That is, we use the machine M
p
obtained from the pair (M, p)by
suspending the execution of M on input x after p(|x|) steps. We stress that we do
not know whether machine M runs in polynomial time, but the computations of any
polynomial-time machine is “covered” by some pair (M, p).
Next, let us clarify the process in which reductions and decision procedures are
ruled out. We present a construction of a “filter” set F in P such that the final set S
83