Eu tenho essa "prova" muito simples de NP = CoNP e acho que fiz algo errado em algum lugar, mas não consigo encontrar o que está errado. Alguém pode me ajudar?
Seja A um problema no PN, e M seja o decisor para A. Seja B o complemento, ou seja, B está no CoNP. Como M é um decisor, você também pode usá-lo para decidir B (basta virar a resposta). Isso não significa que resolvemos os problemas de NP e CoNP com o mesmo M?
Para ser mais concreto.
Seja A um problema de NP completo e M decida para A. Considere qualquer problema B no CoNP. Consideramos seu complemento não-B, que está em NP, e obtemos uma redução polinomial para A. Em seguida, executamos nosso decisor M e invertemos nossa resposta. Assim, obtemos uma decisão para B. Isso implica que B também está em NP.
Posso saber o que há de errado com meu raciocínio?
fonte
Respostas:
Existem dois possíveis erros nesta prova:
Quando você diz "decisivo" - você quer dizer uma MT determinística. Neste caso, a melhor tradução (para nosso conhecimento) de uma máquina NP a uma máquina determinista pode produzir uma máquina que executa em tempo exponencial, então depois complementando você terá um decisor para o complemento em tempo exponencial, provando que (ou, após alguma otimização, c o - N P ⊆ P S P A C E ).co−NP⊆EXP co−NP⊆PSPACE
Quando você diz "decisivo", quer dizer uma MT não determinística. Nesse caso, inverter a resposta não complementará necessariamente o idioma. De fato, o idioma da máquina invertida será todas as palavras para as quais existe uma execução rejeitada de em wM w
fonte
Aqui está outra maneira de ver o ponto que Shaull faz com relação aos "decisores".
Um problema é em NP se e apenas se existe um algoritmo tal queV:{0,1}n×{0,1}poly(n)→{0,1}
para cada exemplo SIM , existe um certificado p ∈ { 0 , 1 } p o l y ( n ) , tais que V ( x , p ) = 1 ; ex∈{0,1}n p∈{0,1}poly(n) V(x,p)=1
para cada exemplo NO , temos V ( x , p ) = 0 para todos os p ∈ { 0 , 1 } p o l y ( n ) .x∈{0,1}n V(x,p)=0 p∈{0,1}poly(n)
Estes são geralmente descritos como a integridade e solidez condições para a NP algoritmo de verificação: a condição de "integridade", diz que cada instância SIM tem um certificado, e a condição "solidez", diz que o algoritmo nunca é enganado por uma instância NO. Para o coNP , é o contrário: existe um algoritmo de verificador que aceita pelo menos um certificado para qualquer instância NO, mas que nunca pode ser enganado por uma instância YES.
Se você deseja mostrar que NP ⊆ coNP , deve mostrar que todo problema de NP tem um verificador de tipo coNP , que pode certificar NÃO instâncias em vez de instâncias YES. Você não pode fazer isso com uma máquina de Turing não determinística: não há como saber, por exemplo, mapear com eficiência as instâncias do SAT, de tal maneira que todos fórmulas insatisfatórias sejam mapeadas para satisfatórias e vice-versa. (Negar a saída da fórmula não é suficiente, por exemplo: uma fórmula que seja satisfatória, mas não uma tautologia, seria mapeada para uma fórmula diferente que fosse satisfatória, mas não uma tautologia, quando precisaríamos de uma fórmula insatisfatória.) Simplesmente não existe maneira de "enganar" uma máquina não determinística para detectar algo como todos os seus caminhos sendo caminhos de rejeição.
Você pode perguntar: "A máquina de Turing não determinística não sabe que resultado obtém?" A resposta seria não , não. O funcionamento da máquina não determinística não lhe dá acesso a qualquer informação sobre mais de um caminho computacional de uma só vez: você pode pensar que ele funciona em muitos caminhos em paralelo, mas em cada caminho ele conhece apenas esse caminho. Se você tentar equipá-lo com a capacidade de "perceber" se há ou não soluções, em algum momento, você está descrevendo uma máquina com um oracle NP , que é mais (potencialmente!) Poderoso do que uma simples máquina de Turing não determinística.
Por exemplo, se equipar um (determinístico) máquina de Turing com um NP Oracle, em seguida, os problemas que podem ser resolvidos no tempo polinomial em que a máquina é chamado , o que é muitas vezes escrita P N P . O "oráculo" permite que a máquina simplesmente receba respostas para problemas completos de NP em uma única etapa e, portanto, P N P obviamente contém P ; e como você pode negar respostas, obviamente também contém coNP . Mas não sabemos se as contenções reversas se mantêm, exatamente porque não sabemos como enganar as máquinas de Turing não determinísticas para detectar NÃO.ΔP2 PNP PNP
Além disso, se você der a uma máquina de Turing não determinística a capacidade de chegar a uma conclusão sobre o resultado de um problema no NP , os problemas que essa máquina pode resolver no tempo polinomial são chamados ou N P N P , e isso acredita-se estritamente maior que o da classe P N P . Isso também contém NP e coNP - mas, como NP , não é conhecido por ser fechado com complementos: a máquina oracle não determinística pode saber quando um problema em NPΣP2 NPNP PNP tem uma resposta de NÃO por causa do oráculo, mas ainda assim continuaria operando dentro de um de seus próprios ramos (bastante poderosos) computacionais, de modo que não seria capaz de saber se todos os seus próprios ramos computacionais estavam rejeitando.
Se você continuar fornecendo à máquina oráculos mais poderosos para resolver problemas em , N P N P e assim por diante, acabará definindo as classes da hierarquia polinomial , que são consideradas distintas umas das outras da primeiro nível em diante.NP NPNP
Portanto, não, não existe uma máquina (determinística ou não) que possa simplesmente 'decidir' que um problema é uma instância SIM ou NÃO eficientemente, a menos que usemos oráculos; mas mesmo com esse oráculo, acabamos com uma máquina que (provavelmente) é mais poderosa que NP ou coNP , e não uma que mostre que são iguais.
fonte
Seu raciocínio implica que RE = coRE, mas isso é comprovadamente falso. Você pode tentar descobrir uma prova disso e ver onde sua redução falha.
Recall that RE is the complexity class of recursively enumerable languages, which are languages of the form{x:P halts on input x} . You can also think of it in non-deterministic terms: RE is the class of languages of the form {x:(x,w)∈L′ for some w} , where L′ is recursive (computable).
Here is a proof that both definitions match. Suppose firstL={x:p halts on input x} . Let L′={(x,w):p halts on input x in w steps} . The language L′ is recursive and L={x:(x,w)∈L′ for some w} .
For the other direction, letL={x:(x,w)∈L′ for some w} , where L′ is recursive, say computed by the program P(x,w) . We construct a new program Q(x) which enumerates all possible w and runs P(x,w) on all w , in order. If P(x,w) ever accepts for some w , then Q halts. It's not hard to check that L={x:Q halts on input x} .
For your convenience, here are outlines for a proof that RE is different from coRE. The languageL={(P,x):P halts on input x} is clearly recursively enumerable: a program for it simply runs P on x . Suppose there was a program H such that H(P,x) halts if and only if (P,x)∉L . We define a new program G by G(x)=H(x,x) . Is (G,G)∈L ? If so, then G halts on G , so H halts on (G,G) , so (G,G)∉L . If (G,G)∉L , then G doesn't halt on G , so H doesn't halt on (G,G) , so (G,G)∈L . This contradiction shows that H cannot exist.
Now try to run your proof in this case and see what goes wrong. In more detail, try to construct the programH using your recipe, and follow the proof - at some point something wouldn't be quite right.
fonte
Here's a TL;DR version; I've also posted a longer answer to a similar question.
Suppose we have a languageA that's decided in polynomial time by nondeterministic Turing machine M . The point is that x∈A iff there M has some accepting path on input x . However, since M is nondeterministic, there may also be rejecting paths when it runs on x . If you just reverse the accepting and rejecting states, you'll go from a machine that had some accepting paths and some rejecting ones to a machine that has some rejecting paths and some accepting ones. In other words, it still has accepting paths, so it still accepts. Flipping the accept and reject states of a nondeterministic machine does not, in general, cause you to accept the complement language.
It is this asymmetry of definition (accept if any path accepts; reject only if all paths reject) that makes the NP vs co-NP problem difficult.
fonte
I actually agree that your nondeterministic machine M can decide whether a given input string is in B. However, it "decides" slightly differently than the way it decides if a given input is in A. In the latter case, it does so by (nondeterministically) finding an accepting state. In the former case, it does so by failing to find any accepting states. Why does this difference matter? Let's see:
When asking M "Is the string in the language A?"
M reaches an accept state. This, you can prove (see, for example, the Sipser book theorem 7.20) implies that there is a deterministic machine that verifies the string is in A in polynomial time
When asking M "Is the string in the language B?"
M reaches reject states on all branches of its nondeterministic computation. If you think about how the verifier proof above works, you will see that it cannot be accomplished in this situation. This is roughly because the verifier uses the path that M takes through its state space as "proof". In this case, there is no one such path.
Conclusion:
If you consider the existence of a polynomial time deterministic verifier for a language to be the definition of an NP language (which you should), the existence of M does not prove that B is in NP.
fonte