Enunciado

Asumamos PNP. Entonces existe un lenguaje L ∈ NP \ P que no es NP completo.

Preliminarios

Dado i ∈ ℕ , llamamos Mi la máquina de Turing representada por la representación binaria de la string i. Si esta string no representa ninguna MT, mapeamos i a una máquina que no hace nada.

Una máquina está representada por una cantidad infinita de strings.

Demostración

Para toda función H: ℕ  ↦ ℕ , definimos
SATH = {φ01nH(n) ∣ φ ∈ SAT, n = ∣φ∣}

Ahora, definimos H: ℕ  ↦ ℕ  de la manera siguiente:

H(0) = H(1) = 0

H(n) es el i < loglogn más chiquito tal que para todo input x de tamaño  ≤ logn, Mi sale SATH(x) en ixi pasos. Si no hay tal i, ponemos H(n) = loglogn.

Con el último Claim, mostramos que si PNP, SATH no está en P ni es NP completo.

Supongamos SATH ∈  P. Entonces ∀ n∃ C. H(n) ≤ C. Podemos construir una reducción polinomial f de SAT a SATH de tal manera: sea x, computamos H(∣x∣) (en tiempo polinomial), generamos la string 01xH(∣x∣) (de longitud 1 + ∣xC polinomial). Entonces SAT ∈ P y P = NP  ⊗ .

Ahora supongamos SATH es NP completo.

Entonces existe una reducción f de SAT a SATH corriendo en tiempo O(nd) con d constante. Entonces f(x)∣ ≤ ∣xd para cualquier x

Dado que SATH no está en P, tenemos limH(n) =  + ∞ f corre en tiempo polinomial entonces existe un n0 tal que f mapea instancias de SAT de tamaño n > n0 a instancias de SATH de tamaño  < nH(n). nH(n) no es acotado por ningun polinomio.

Describimos un algoritmo para decidir SAT usando f: Para input φ∣ < n0, codificamos en duro las respuestas. Para input φ∣ ≥ n0:

Entonces esto es un algoritmo polinomial para decidir SAT, entonces P=NP, lo que contradice nuestra asumpción inicial.