Abaixo, expanda um pouco o ponto na resposta de Peter, tentando realizar a remoção do quantificador por mais do que um número constante de etapas para ver onde ele falha e se alguma coisa pode ser recuperada dessa tentativa.
Vamos tentar amplificar P=NP por mais do que um número constante de vezes.
Assume-se que P=NP . Portanto, existe uma máquina do tempo polinomial que resolve o Ext-Circuit-SAT (existe uma extensão satisfatória para um determinado circuito e uma atribuição parcial às suas entradas?).
Mais formalmente, temos um algoritmo polytime A com tempo de execução polinomial p(n)∈poly(n) st
Dado um circuito booleano φ e uma atribuição parcial τ às entradas,
A retorna "yes" se houver uma extensão de τ que satisfaça φ e retorne "no" caso contrário.
Para passar por tempos constantes, precisamos fazer a remoção do quantificador de forma eficaz. Nós podemos fazer isso porque o Cook-Levin teorema é um teorema construtiva, na verdade, dá um polinômio tempo algoritmo Cook st
Dado um DTM M receber duas entradas e três números unárias n , m e t ,
Cook(M,n,m,t) retorna um circuito booleano de tamanho O(t2) que simula M em entradas de comprimento (n,m) para t etapas.
P=PH
CookACookPCV
No entanto, veremos que essa ideia não funciona (pela mesma razão apontada por Peter).
- φ
- kφ
ik1
- ψQxkσ(x1,...,xk)
Se , Q="∃"
- Calcular , C=Cook(A,|σ|,|x1|+...+|xk−1|,p)
- Substitua os bits de entrada por no circuito , σC
- Substitua por em . ψCφ
Se , Q="∀"
- Considere como , ψ¬∃xk¬σ
- Calcular , C=Cook(A,|¬σ|,|x1|+...+|xk−1|,p)
- Substitua os bits de entrada por no circuito , ¬σC
- Substitua pelo em .ψ¬Cφ
- Calcule e retorne .CV(φ)
O algoritmo resultante parece com tempo polinomial: temos muitas etapas polinomiais, cada etapa é computável em tempo polinomial. No entanto, isso não está correto, o algoritmo não é de tempo polinomial.
O uso de sub-rotinas de tempo polinomial em um algoritmo de tempo polinomial é tempo polinomial. O problema é que, em geral, isso não precisa ser verdadeiro se os valores retornados pelas sub-rotinas não tiverem tamanho polinomial na entrada original e assumimos que fazemos atribuições sobre os valores retornados pelas sub-rotinas. (No modelo da TM, precisamos ler a saída de qualquer sub-rotina de tempo polinomial pouco a pouco.) Aqui o tamanho do valor retornado do algoritmo está aumentando (pode ser uma potência do tamanho da entrada fornecida, o valor exato a potência depende do tempo de execução de e é em torno de , portanto, como sabemos que não pode ser menor que o tempo linear, é pelo menosCookAp2(|input|)A|output||input|2)
O problema é semelhante ao código simples abaixo:
- Dado ,x
- n=|x|
- y=x
- i1n
- Retorno y
y=y|y|ynyx2nn2n
k(n)n
ApCookl(t)t2(l∘p)O(k)(n)=l(p(l(p(…(l(p(n)))))))O(k) compositionslpa≥2Ω(n2k(n))k(n)=Θ(n)Ω(n2n) semelhante ao algoritmo de força bruta (e mesmo isso foi baseado no pressuposto de que Cook-Levin pode ser executado em algoritmos resultantes de circuitos de tamanho linear no tempo de execução do algoritmo).