Entendo que a maioria dos problemas é trivial se um oráculo de parada estiver disponível (ou, penso, de forma equivalente, hiper-computação). No entanto, aplicar o argumento que mostra o Problema de Halting é impossível para uma máquina de Turing também mostra que é impossível para um oráculo de Turing + decidir o Problema de Halting para um oráculo de Turing +. Existem exemplos reais e práticos de problemas insolúveis por um oráculo que está parando?
Nota: por "oracle" quero dizer oracle para uma máquina de Turing padrão, não para uma TM com um oracle em si.
Respostas:
Basta pegar um problema cujo grau de Turing esteja acima de , que é o grau do Oracle Halting. Em termos da hierarquia aritmética, você deseja problemas acima de . Exemplos de tais problemas (onde é a ésima função computável parcial e é o - conjunto enumerável computacionalmente):0′ Σ01 ϕn n Wn={k∈N∣ϕn(k) is defined} n
Nada disso pode ser resolvido, mesmo se você tiver um Oracle Halting. Por exemplo, considere o segundo exemplo, "is total?" Dado como o Halting Oracle nos ajudaria a decidir se a máquina de Turing codificada por pára em cada entrada? n nφn n n
[Adicionado em 06/06/2014] Para um aspecto "prático" de tudo isso, considere o problema: um programador escreveu uma função
void charge_credit_card(int card_number, int amount)
e gostaríamos de saber se a função termina em todas as entradas. É impossível escrever um compilador que possa verificar isso automaticamente em geral. Além disso, mesmo se permitirmos que o compilador nos faça perguntas do formulário "charge_credit_card
termina quando recebida entrada(k,m)
?", Ainda é impossível.fonte
int
, obviamente. Você realmente precisa que eu escrevaBigInt
ou algo assim, ou então reclamará que a memória do computador é finita?