Asumamos P≠NP. Entonces existe un lenguaje L ∈ NP \ P que no es NP completo.
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.
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 i∣x∣i pasos. Si no hay tal i, ponemos H(n) = loglogn.
Claim H está bien definida: H(n) sirve para definir las strings de SATH de longitud superior a n (por definición de SATH), mientras que la definición de H depende de chequear strings de longitud logn cómo máximo.
Claim se puede computar H(n) en O(n3) pasos: ejercicio.
Con el último Claim, mostramos que si P≠NP, 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 01∣x∣H(∣x∣) (de longitud 1 + ∣x∣C 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)∣ ≤ ∣x∣d 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:
correr el algoritmo sobre ψ
Claim Para cada llamada recursiva del algoritmo, el tamaño del input decrece.
Demo. por el absurdo: asumamos ∣x∣ ≥ n0, f(x) = ψx01∣ψx∣H(ψx) y ∣ψx∣ ≥ ∣x∣ (el input no decrece). Tendríamos entonces ∣ψx∣ ≥ n0 y
∣x∣ + 1 + ∣x∣d ≤ ∣ψx∣ + 1 + ∣ψx∣H(∣ψx∣) ≤ ∣x∣d, contradicción.
Entonces esto es un algoritmo polinomial para decidir SAT, entonces P=NP, lo que contradice nuestra asumpción inicial.