Considere o problema de pegar uma máquina de Turing de entrada e determinar se a célula final é uma ou após o término da computação. Nos casos em que ele escreve algo mais ou não pára, você pode dar qualquer resposta (mas você precisa parar e dar alguma resposta em todas as entradas).
Esse problema é indecidível? Meu intestino diz que deveria ser, mas não consigo encontrar uma redução no problema da parada. Dada uma máquina de Turing que pode ou não parar, podemos configurá-la para terminar com no caso de parar, mas não podemos terminar com nada no caso sem interrupção, de modo que o oráculo poderia simplesmente dizer neste caso, sem ter que descobrir se de fato a máquina para.
Observe que uma redução na outra direção é simples; se você puder resolver o problema de parada, com uma TM que termine com ou , substituiremos a etapa de escrita por um loop infinito para criar uma nova TM. Se a nova TM parar, dizemos "ele escreve um " e, se não pára, dizemos "ele escreve um ". É garantido que esta resposta esteja correta desde que a MT pare com ou , para que possamos resolver o problema original.
fonte
haltify
escolherá o resultadogood()
e, em ambos os casos, será auto-consistente, mas ainda assim retornará porque (por magia vodu)haltify(good)
pára, por isso não é realmente um loop infinito, mas uma restrição sobre o responda. (Na realidade, a maneira de implementarhaltify
é apenas para executar o argumento, caso em que tantogood
eevil
são salvos de contradição por divergentes, mas então é claro que somos obrigados a permitirhaltify
a divergir, o que frustra o ponto.)NaN
satisfazemx == !x
?not float('nan')
avalia como false.not
é também um dos operadores que você não pode sobrecarregar; sempre retorna um bool. (Você pode definir uma conversão personalizada para bool, mas o intérprete verifica se você realmente retornou um bool). Mesmo se houver uma maneira hacky de construir umx
em python que satisfaçax == not x
, o exemplo foi planejado apenas para ser pedagogicamente correto e não pedanticamente correto.Suponha queM é uma máquina que resolve esse problema; Eu assumo issoM aceita uma máquina de Turing e uma entrada, mas você pode organizar que ela aceite apenas uma máquina de Turing, se preferir. Construímos uma máquina diferenteT isso funciona da seguinte maneira. Na entradax , corre M na máquina x e entrada x , registra a saída como b e escreve 1−b na célula inicial. Agora corraT em si mesmo para chegar a uma contradição.
fonte
Sua redução ao problema da parada é direta e lógica. Se sua máquina parar, ela deve parar em algum tempo T com base na construção primitiva de sua entrada. Se o problema da parada for insolúvel, a construção deve ser com perdas; portanto, existe uma máquina para a qual ela adivinha erradamente e para sem ser totalmente avaliada, e uma longa cadeia de XOR força a avaliação completa a alcançar a resposta certa. Portanto, existe uma máquina para a qual ela produz a resposta errada.
De fato, qualquer problema não trivial que não exclua máquinas sem interrupção, pois a entrada se reduz ao problema de interrupção dessa maneira. Ref: https://en.wikipedia.org/wiki/Rice's_theorem
fonte