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