Por que os números computáveis (no sentido de Turing) são enumeráveis? Deve ser muito óbvio, mas atualmente não estou vendo.
Por que os números computáveis (no sentido de Turing) são enumeráveis? Deve ser muito óbvio, mas atualmente não estou vendo.
Respostas:
Estou assumindo que sua definição de número computável é a seguinte: existe uma máquina de Turing que na entrada , pára com o n º bit do número.
Suponha que houvesse uma enumeração recursiva de máquinas de Turing que produzem números computáveis. Você pode usar a diagonalização para criar um novo número computável que não faça parte dessa enumeração recursiva.
É tentador enumerar números computáveis enumerando máquinas de Turing, mas nem todas as máquinas de Turing correspondem a um número computável e, em geral, decidindo se uma máquina de Turing pára para todas as entradas (e muito menos a saída 0 ou 1) não é computável. É possível, no entanto, enumerar todos os números computáveis eficientes, digamos aqueles cujo tempo de execução é polinomial, usando máquinas de Turing com clock.
Se por enumerável, você quer dizer que existe uma bijeção com os números naturais (ou seja, contáveis), então não, números computáveis não são enumeráveis.
Vamos definir o problema com mais precisão: uma "NPTM) é uma máquina de Turing que, para cada transição de estado, pode não imprimir nada, ou pode imprimir qualquer dígito decimal, o sinal de menos ou o período. Isso é suficiente para imprimir representações decimais de números reais.
Vamos definir um número real computável como qualquer número real que possa ser impresso com uma representação arbitrariamente longa, com tempo suficiente, por um NPTM a partir de uma fita vazia. Digamos também que um número é calculado por um determinado NPTM se ele parar após a impressão de um número real bem formado (nesse caso, o número tem uma representação decimal finita) ou, em uma quantidade finita de tempo, imprimirá um número bem formado com um ponto decimal e aumentará a precisão do número imprimindo mais dígitos, com mais tempo.
Essa condição posterior é necessária porque, se tivermos uma máquina que, por exemplo, imprima uma sequência infinita de algum dígito, digamos 1111111111111111111
..., não se pode dizer que esteja computando qualquer número real, porque os números reais só têm representação infinita à direita lado do período decimal. Por outro lado, se a máquina imprimir 3.14
e parar de imprimir, mas nunca parar, não se pode dizer que esteja computando um número real simplesmente porque a precisão do número não está aumentando, portanto, essa máquina em particular não a construirá. mais longe.
Estes são exemplos de NPTM que calculam algum número. Um NPTM que:
1
e depois pára. Ele calcula o número 1.1.0
e depois pára. Ele também calcula o número 1.1.0000000
e mantém a impressão de zeros para sempre. Este também calcula o número 1.3.14
e depois pára. Ele calcula o número 3.14.3.14159
-42.
e depois pára. Calcula o número -42.E estes são exemplos de NPTM que não computam nenhum número. Um NPTM que:
123123123
e depois continua imprimindo a sequência 123
para sempre. Não está computando um número porque essa sequência infinita não representa nenhum número real.1.0.0
e depois pára. Não é porque essa sequência finita não esteja bem formada.....-..---
e depois pára. Não é porque este também não seja um número real bem formado.3.14
, não pára, mas também nunca imprime mais nada. Não está computando um número porque sua precisão não está aumentando com o tempo.Você entendeu a ideia. Então temos duas classes de NPTM: aquelas que calculam um número real e as que não.
O problema de encontrar alguma enumeração para os números computáveis é que, mesmo que o NPTM seja contável, não podemos ter um procedimento que separa um tipo de NPTM do outro.
Para "provar" que os números computáveis são contáveis, pode-se tentar definir essa função a partir da contagem do NPTM (e é isso que as pessoas costumavam fazer quando acreditam que os números computáveis são contáveis). Algo assim:
Bem, nós não. Considere uma máquina que imprime imediatamente 1.0
, interrompe a impressão e tenta resolver uma instância do problema de correspondência posterior . Se resolver o problema, ele pára e a máquina apenas calcula o número um. Mas esse problema é indecidível, por isso pode nunca parar e, se nunca parar, nunca calcula um número real. Mas não podemos saber se isso irá parar, porque o problema da parada também é indecidível! Portanto, como não há como saber se essa máquina específica, e infinitamente muitas outras máquinas, computam ou não algum número real, não podemos construir / definir nossa função bijetiva dessa maneira.
A maneira ingênua de definir a bijeção falha e não é muito difícil provar que não há como fazê-lo. Como sugeriu Yuval Filmus, a diagonalização pode ser usada.