4.4 NP Sets That Are Neither in P nor NP-Complete 127
The process of modifying S into S
proceeds in iterations, alternatively failing
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 ele-
ments 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.
20
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.
21
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
20
We mention that the proof relies on additional observations regarding this failure. Specifically,
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
.
21
Again, the proof relies on additional observations regarding this failure. Specifically, 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
.