Estou estudando a prova do seguinte teorema:
Dada a linguagem
é uma máquina de turing e é regular
é indecidível.
A prova dada na Sipser mostra que, se já temos uma máquina que decide então nós podemos fazer uma máquina que decide o problema da parada:
Estou tendo problemas para entender a prova. Aqui está como eu o entendo:
Quando (qualquer máquina de turing) e (qualquer fio) é alimentado na máquina , construímos uma máquina que pega uma corda como entrada, mas primeiro executa a máquina em . Primeiro caso, se , então simplesmente aceita x. Isso éneste caso - ou seja, um idioma comum. Caso contrário, segundo caso, rejeita , então verifica se a entrada é da forma e aceita se é assim - ou seja, não é uma linguagem comum. Dentro, nos dois casos, se executarmos em retorna o resultado apropriado que pode retornar diretamente.
O caso sobre o qual estou confuso, o terceiro caso, é quando não pára . Então, que é um idioma comum e retornará , portanto , ACEITAR , que não pode retornar diretamente como . Mas a descrição da solução me soa comoretorna ACEITAR mesmo neste caso (pseudocódigo abaixo). Então, o que estou fazendo de errado? Provavelmente, estou perdendo uma ideia muito básica. Aqui está o pseudocódigo da máquinae dentro , como você pode ver, existe a máquina aquele cria.
machine S(M, w):
// Construct an instance of machine M2 which uses M and w
machine M2(x):
r := M(w) // Might hang here
if r == ACCEPT:
return ACCEPT
else:
if x is of form 0^n.1^n:
return ACCEPT
else:
return REJECT
// Run R on M2 (always returns, never hangs)
r1 = R(M2)
if r1 == ACCEPT:
return ACCEPT
else:
return REJECT
fonte
Respostas:
Procure o teorem de Rice. Sua prova é bastante curta e doce. Ele diz que qualquer propriedade não trivial de uma linguagem da MT (ou seja, uma que nem todos os idiomas da TM compartilham) é indecidível, no sentido de que não pode ser decidido olhando para a TM se o idioma que ela aceita possui a propriedade.
A propriedade de ser regular (ou um idioma livre de contexto, ou o idioma vazio, ou o idioma de todas as strings, ou ...) não é trivial; portanto, se uma TM específica aceita um idioma com a propriedade, é indecidível, por Rice teorema.
fonte
Seu pseudocódigo está errado, o seguinte é o correto:
@ David Richerby Aqui está mais explicação:
vonbrand está certo
Ele usou o teorema de Rice, diz que qualquer propriedade não trivial de uma linguagem da MT é indecidível. Tudo bem, mas ... no livro de Sipser, este exemplo é para demonstrar o mapeamento da redutibilidade.
Portanto, devemos usar a redução para resolver esse problema, em vez do teorem de Rice.
O que há de errado com a resposta proposta?
O errado é:
Quando M (w) LOOP em M2, R (M2) retornará ACEITAR. Por quê? Como nesse caso L (M2) é {}, que é um idioma normal. Mas quando M (w) LOOP, R (M2) não deve retornar ACEITAR.
Imagine:
Se R (M2) retornar ACEITAR, o que acontecerá?
Haverá duas possibilidades para M2 fazer com que R (M2) aceite.
(1) M (w) retorna ACEITAR.
(2) M (w) LOOP.
Obviamente, "duas possibilidades" não atende à definição de redução.
Qual é a definição de Redução?
Observe <=>, que é "se apenas se".
O que minha resposta faz para corrigi-la?
O principal é: existe apenas uma possibilidade para M2 fazer R (M2) aceitar, que é M (w) retornar ACEITAR! Que atendem à definição de redução.
Outra solução para esse problema:
Nesta solução, uso ComplementOfR em vez de R.
Os benefícios disso são:
Agora, em M2, podemos executar M em w primeiro.
Por que podemos usar ComplementOfR?
Se R é decidível, ComplementOfR também é decidível. Assim, podemos usar ComplementOfR.
fonte