Máquinas de Turing e decidibilidade
Transições e configurações, programação da fita, máquinas equivalentes, reconhecimento, decisão e problema da paragem.
Uma máquina de Turing pode voltar a uma célula da fita e alterar o símbolo que lá guardou. Para comparar dois blocos, marca um símbolo em cada um e regressa ao primeiro bloco para repetir. A cabeça indica a célula que a máquina lê em cada passo.
Essa memória permite reler dados que uma pilha só alcança retirando o que está no topo. Vamos seguir a comparação de e e justificar também que a máquina termina.
O modelo: fita, cabeça, estados
Usa , com alfabeto de entrada , alfabeto de fita e branco . A fita é ilimitada nos dois sentidos. No início contém a entrada numa sequência de células, com brancos no resto, e a cabeça está na primeira célula da entrada.
A transição parcial
manda escrever no lugar de , mudar para e mover a cabeça uma célula à esquerda ou à direita. Uma transição não definida termina a computação. Adota finais sem saídas: parar num final aceita; parar fora de rejeita. Aceitar não exige consumir a entrada toda: se a máquina entra num final a meio da fita, a computação termina ali com aceitação.
Outra convenção comum usa estados explícitos de aceitação e rejeição; ambas descrevem os mesmos algoritmos.
Uma configuração coloca imediatamente antes da célula sob a cabeça. Em , a fita representada é e a cabeça lê . Brancos fora da região mostrada ficam implícitos.
Se , então . Se o movimento é à esquerda e , então . Acrescenta um branco à representação quando a cabeça sai da parte escrita.
O vídeo de Rodrigo Dias apresenta o modelo de máquina de Turing:
Uma máquina que decide aⁿbⁿ
A máquina marca um com e um correspondente com , voltando ao início de cada ronda. Quando já não encontra , verifica que só restam e branco.
Os estados são para escolher o próximo , para procurar um , para regressar ao marcador da ronda, para verificar o fim, e final.
| Estado | |||||
|---|---|---|---|---|---|
| Rejeita | Rejeita | Aceita | |||
| Rejeita | Rejeita | ||||
| Rejeita | Rejeita | ||||
| Rejeita | Rejeita | Rejeita | Aceita |
As células ‘Aceita’ podem ser implementadas por e as de rejeição por transição não definida. Nas entradas de aceitação da tabela só lês branco, por isso não apagas um símbolo da entrada. A máquina aceita também .
Para , os passos são:
Em , a segunda procura de chega a branco e rejeita. Em , a verificação final encontra um depois de e rejeita, apesar de as contagens globais coincidirem.
A cada ronda, os marcadores ficam no início, e regressa ao acabado de criar. O número de ainda não marcados diminui. Cada procura percorre uma região finita, pelo que a máquina termina em todas as entradas. A prova de terminação tem de acompanhar a prova de aceitação correta.
Editar e seguir a fita
Executa a máquina de marcação com aabb e avança passo a passo. O estado inicial é a configuração antes da primeira transição; em cada passo, a máquina escreve, muda de estado e desloca a cabeça. Compara depois aab e abab. No editor, podes alterar os estados, os alfabetos e cada transição, ou criar outra máquina.
O simulador usa a convenção desta lição, com uma fita bilateral e finais sem saídas. O exemplo de incremento lê um binário, propaga o transporte e aceita quando acaba de escrever o resultado; a entrada vazia produz 1. O exemplo que percorre brancos não tem estado final e continua a deslocar-se. Ao atingir um limite do simulador, o resultado é inconclusivo. Isso não demonstra que uma máquina arbitrária nunca pararia.
Estado q0. Cabeça na posição 0. Passos: 0.
Próxima transição: δ(q0, a) = (q1, X, R).
Editar estados e transições
Pronta para executar.
Fita bilateral; B representa branco.
Modelo e limites
A máquina é determinística. Finais aceitam e não têm saídas; sem transição, rejeita. Até 16 estados, 128 transições e 128 símbolos de entrada. A execução para aos 2000 passos ou ao tentar sair das posições −256 a 256, com resultado inconclusivo. A janela mostra 9 células e acompanha a cabeça. As edições ficam nesta visita.
Uma construção mínima com transições explícitas
Para decidir palavras binárias que terminam em , com contrato explícito: aceita se o último símbolo é ; rejeita se termina em ou se a entrada é vazia. Usa para varrer até ao branco, para voltar uma célula e final:
- , , ;
- ; e ficam indefinidas para rejeitar.
Para , com a convenção da página:
O terceiro passo lê o branco e volta ao final; o quarto lê e aceita. Para :
e a máquina para sem transição definida, logo rejeita. Para , a configuração inicial é , que passa a com a cabeça no branco, onde não há transição: rejeita. Cada fase percorre no máximo células, por isso a máquina termina sempre. Parar fora de final é rejeitar.
Comparar extremos e vários blocos
Para palíndromos sobre , guarda no estado a primeira letra não marcada e risca-a. Vai até à última letra não marcada e verifica se é igual; se for, risca-a também e regressa à esquerda, e caso contrário rejeita. Quando não restam letras, aceita, e se restar uma única letra no centro aceita sem procurar um par.
Para , as rondas retiram com , depois com , ficando o central. Cada ronda retira uma ou duas letras, provando terminação.
Para , verifica primeiro o formato dos três blocos. Em cada ronda, marca um no primeiro bloco, um no segundo e um no terceiro, com marcadores diferentes que conservem a origem. Se um bloco acabar antes de outro, rejeita. Se todos acabarem ao mesmo tempo, aceita. Em , duas rondas chegam; em , a segunda ronda não encontra o último . A fita permite voltar a comparar uma terceira contagem, que uma única pilha não consegue tratar desta forma. Esta linguagem é decidível, mas não livre de contexto.
Para reconhecer , trabalha só com zeros ainda ativos. Cada ronda percorre-os alternando um estado par e um ímpar:
- Marca um zero em cada par e deixa o outro ativo.
- Se havia mais de um zero e a contagem era ímpar, rejeita; se havia exatamente um, aceita.
- Caso contrário, volta ao início e repete.
As contagens ativas de são , enquanto dá e rejeita. A entrada vazia é rejeitada. Os marcadores são ignorados nas rondas seguintes, e a quantidade ativa diminui, garantindo terminação.
Para uma linguagem regular, uma TM pode copiar o DFA para o seu controlo, ler da esquerda para a direita sem alterar a entrada e, no primeiro branco, aceitar exatamente nos estados que eram finais. Usar uma TM não obriga a criar marcas quando a condição já é finita.
Usar a fita para calcular
Uma máquina também pode produzir um resultado. Para incrementar um número binário, percorre a entrada até ao branco à direita, volta uma célula e propaga o transporte:
- ao ler , escreve e continua para a esquerda;
- ao ler , escreve e termina;
- se chegar ao branco à esquerda, escreve e termina.
Por exemplo, torna-se : os dois uns finais passam a zeros e o zero anterior passa a um. torna-se , usando uma célula antes da antiga entrada. A descrição do resultado deve indicar onde ele fica e onde termina a cabeça, não apenas qual linguagem a máquina aceita.
Na soma de duas parcelas da mesma largura, codificadas como , o resultado fica à esquerda de e o resto da fita pode ser apagado. Trabalha com espaço para um bit adicional se houver transporte final. Para calcular, trabalha da direita para a esquerda, guardando o transporte no estado. Como as duas parcelas estão em regiões distintas, marca cada bit já usado e desloca-te entre elas para obter o par seguinte. Por exemplo, produz : no bit menos significativo, ; depois com transporte ; no último, . A fita trata o armazenamento e os estados tratam os casos finitos de soma e transporte.
Para complemento para dois num comprimento fixo, percorre da direita até ao primeiro , conservando os bits vistos, incluindo esse . Inverte todos os bits que ficam à esquerda. Assim, passa a , e fica ignorando overflow. O exemplo também fica , pois representa o valor mínimo nessa largura. O comprimento fixo e o tratamento de overflow fazem parte da operação.
Técnicas úteis incluem guardar um símbolo no estado, marcar símbolos já tratados e dividir o algoritmo em subrotinas com estados de entrada e saída. Várias pistas na mesma fita podem usar símbolos-tuplo, como . Isso aumenta o alfabeto finito, sem criar outro tipo de memória.
Compactar a fita sem deixar intervalos vazios
Para remover todos os de uma entrada sobre , apagar cada onde o encontramos deixaria brancos entre os . O resultado pedido é um bloco contínuo , a partir da primeira célula original, com igual à quantidade inicial de .
Usa cinco estados de trabalho e o final , sem saídas. é branco. Cada célula da tabela dá estado seguinte, símbolo escrito e movimento:
| Estado | |||
|---|---|---|---|
| , início | |||
| , procurar outro | |||
| , regressar ao intervalo | |||
| , preencher o primeiro | Indefinida | Indefinida | |
| , limpar os finais |
atravessa o prefixo de já compacto. Ao encontrar um , procura o próximo . Se o encontrar, troca esse por e regressa em , conservando os . Ao encontrar o que limita o prefixo, ou o branco à esquerda, move uma célula à direita para . Essa célula ainda é o primeiro do intervalo; troca-o por .
Uma ronda desloca um para a primeira posição livre do prefixo. A quantidade de diminui temporariamente em e recupera em . Só a ronda completa conserva essa quantidade. Apagar os durante o regresso em impediria de encontrar o símbolo que deve substituir.
Para , a primeira ronda é:
| Estado | Índice da cabeça | Fita entre as células 0 e 3 |
|---|---|---|
| 0 | ||
| 1 | ||
| 0 | ||
| -1, branco | ||
| 0 | ||
| 1 |
Os índices começam em zero e os estados ficam fora da fita. A ronda seguinte deixa e retoma na célula 2. Já não há outro , por isso chega ao branco e apaga os dois finais. Termina com nas células 0 e 1, brancos nas restantes, estado e cabeça na célula 0.
Cada ronda completa aumenta o prefixo compacto em um , e há apenas finitos na entrada. As varreduras percorrem a região finita original e a limpeza termina ao chegar ao prefixo ou ao branco esquerdo. Se a entrada só tiver , a limpeza deixa tudo branco; se for vazia ou já só tiver , chega diretamente ao final. A máquina termina em todas as entradas. Aceitar aqui assinala a conclusão do cálculo, não uma seleção das palavras que já estavam compactas.
Variantes com o mesmo poder
Máquinas com várias fitas não reconhecem mais linguagens que máquinas com uma fita. Uma fita pode codificar as várias fitas e marcar a posição de cada cabeça. Para simular um passo, varre a codificação, encontra os símbolos sob as cabeças e atualiza-os. Pode levar mais passos, mas mantém o resultado.
O não determinismo também não acrescenta linguagens reconhecíveis. Uma máquina determinística explora a árvore de computações por níveis, por isso não fica presa num ramo infinito antes de chegar a outro ramo que aceita. Para reconhecer, basta encontrar um ramo aceitante.
Uma fita ilimitada só para a direita pode codificar as duas metades de uma fita bilateral em pistas. Duas pilhas também simulam uma fita: uma guarda a parte à esquerda da cabeça, a outra a célula atual e a parte à direita. Mover a cabeça corresponde a passar um símbolo de uma pilha para a outra.
A tese de Church-Turing identifica os procedimentos efetivos com o que estas máquinas conseguem calcular. É uma tese sobre a noção informal de algoritmo, não um teorema que deduz essa noção de uma definição matemática. Um computador físico tem memória finita; a comparação usa o modelo idealizado com memória extensível.
Reconhecível e decidível
Uma linguagem é reconhecível, ou recursivamente enumerável, se existe uma TM que aceita exatamente as suas palavras. É decidível, ou recursiva, se existe uma TM que termina em todas as entradas e responde corretamente.
| Máquina para | Se | Se |
|---|---|---|
| Reconhecedor | Termina e aceita | Pode terminar e rejeitar, ou correr para sempre |
| Decisor | Termina e aceita | Termina e rejeita |
A máquina de marcação de é um decisor, porque a sua prova de terminação abrange também as palavras rejeitadas. Reconhecer exige aceitar cada palavra de após finitos passos, não apenas evitar aceitar palavras erradas.
Todas as decidíveis são reconhecíveis. Nem todas as reconhecíveis são decidíveis. Dar mais tempo a uma simulação não resolve esta diferença: não conseguir prever se ela vai parar é precisamente parte do problema.
Se e forem reconhecíveis, então é decidível. Simula os dois reconhecedores alternando um passo de cada. A palavra dada pertence a ou ao seu complemento, pelo que um dos reconhecedores acabará por aceitá-la. Responde sim quando o reconhecedor de aceitar, ou não quando o do complemento aceitar.
Máquina universal e codificação
Uma TM tem finitos estados, símbolos e transições, por isso pode ser codificada por uma palavra . Uma máquina universal recebe e simula em . O programa da máquina simulada torna-se parte da entrada.
A linguagem é reconhecível: simula e aceita se ela aceitar. Se não parar, a simulação também pode não parar.
O problema da paragem
Define . É reconhecível, pois podes simular e aceitar quando a simulação parar, mas é indecidível.
Supõe que existe um decisor para . Constrói que, ao receber , consulta . Se disser que para, entra num ciclo infinito. Se disser que não para, termina.
Agora executa com a sua própria codificação. Se disser que para, a construção faz não parar. Se disser que não para, faz parar. Ambas as respostas contradizem a correção de . Logo, esse decisor não existe.
Reduções de indecidibilidade
Por exemplo, . Dada , constrói uma máquina que ignora a sua entrada, simula em e aceita se essa simulação parar, quer aceitando quer rejeitando. Tens se e só se . Portanto, também é indecidível.
Ver o que continua decidível com um limite de passos
Uma pergunta limitada a passos pode ser decidível: simula esses passos e termina. Não concluas indecidibilidade só porque o enunciado fala de máquinas de Turing.
Mesmo perguntar se alguma entrada, ou se todas as entradas, fazem uma TM determinística dar mais de um limite fixo de passos é decidível. Nos primeiros movimentos, a cabeça não alcança uma posição de entrada além da posição . Basta enumerar palavras de comprimento até , incluindo as curtas cujo branco final pode ser encontrado. Uma entrada mais longa tem, nesse tempo, o mesmo comportamento que o seu prefixo de comprimento . Simula cada representante por esse limite e combina as respostas conforme o quantificador. Há finitos representantes; o procedimento pode ser caro, mas termina. Este argumento usa o limite fixo e não se estende à pergunta de paragem sem limite.
Exercícios
Os problemas são originais, salvo as adaptações identificadas no enunciado.
Ler a configuração
A configuração é e . Qual é a configuração após um passo?
Pista
O estado escrito antes de a indica que a cabeça está nesse a.
Mais uma pista
Primeiro substitui a por X; depois põe o estado antes da célula seguinte.
Solução
Fica . O primeiro 0 e o último 1 mantêm-se; apenas a célula lida muda, e a cabeça avança uma posição.
- 0q′X1.. A cabeça não ficaria na mesma célula, porque o movimento é R.
- 0Xq′1.. Escreve X no a e desloca a cabeça para o 1 seguinte.
- q′0X1.. Isto deslocaria a cabeça exatamente uma célula para a esquerda, para o 0.
Erros frequentes
Não movas o símbolo escrito com a cabeça. A escrita e a deslocação são operações distintas.
Paragem com limite fixo
Um programa simula em durante um milhão de passos e, se não parar, responde que nunca vai parar. Explica por que não decide HALT. Depois fixa e decide se existe uma entrada binária em que uma TM determinística dá mais de passos. Explica também como decidir a variante que exige isso para todas as entradas. A segunda parte adapta a questão 12 do teste de 13/6/2024.
Pista
Que posição da entrada pode influenciar a transição seguinte depois de t movimentos?
Solução
Uma máquina que para após dois milhões de passos refuta o primeiro procedimento. Não parar até um limite não implica nunca parar.
Com fixo, a cabeça parte da primeira célula e move no máximo uma célula por passo. Para verificar a existência de um passo , só precisa de observar entrada até à posição . Enumera as palavras de comprimento até , incluindo : as curtas mostram os casos em que se encontra branco, e as de comprimento representam também entradas maiores com esse prefixo.
Simula cada representante até parar ou confirmar transições. Na variante existencial, responde sim se algum representante ultrapassar ; na universal, só se todos ultrapassarem. A lista é finita e cada simulação é limitada. O algoritmo pode ser muito caro, mas termina. Este argumento depende do limite fixo e não decide HALT.
Confere a tua resposta:
- Dei uma máquina que para depois do milhão de passos.
- Limitei a região observada nos primeiros t+1 passos.
- Incluí palavras curtas para representar o branco final.
- Distingui algum representante de todos os representantes.
Transportar indecidibilidade
Sabes que A é indecidível. Qual direção de redução precisas para provar B indecidível? Justifica por contradição e explica por que a direção inversa não chega.
Pista
Precisas de resolver A se alguém te der um decisor de B.
Mais uma pista
Pega numa entrada de A, transforma-a numa entrada de B e consulta o decisor hipotético.
Solução
Precisas de . Se B tivesse decisor, para cada x calcularias f(x), executarias o decisor de B e usarias a mesma resposta, pois . A função é total e o decisor termina, dando um decisor de A, contradição. apenas mostra como resolver B com uma solução de A, que não temos; não implica que B seja indecidível.
Confere a tua resposta:
- Explica que transformar uma entrada de A em B preserva sim e não.
- Compõe a função total com um hipotético decisor de B.
- Conclui que um A indecidível impede B decidível.
Erros frequentes
Não troques a direção. Não basta transformar respostas sim: a equivalência tem de conservar também os não.
Calcular e terminar
Descreve uma TM que subtraia 1 a uma palavra binária não vazia de comprimento fixo. Mantém esse comprimento e calcula módulo , onde é o número de bits. A cabeça começa no primeiro bit. Indica o resultado e a posição final da cabeça para e , e justifica terminação.
Pista
É o empréstimo binário: 1000−1=0111. O caso todo a zeros exige a convenção modular.
Mais uma pista
Depois de encontrar um 1, troca-o por 0. Se chegares ao branco à esquerda, todos os bits já passaram de 0 para 1.
Solução
Na primeira fase, conserva os bits e avança até ao branco à direita; volta uma célula. Na segunda, ao ler , escreve e move à esquerda. Ao ler , escreve e move à direita para um final sem saídas. Se chegar ao branco à esquerda, conserva-o e move à direita para esse final.
fica ; a cabeça termina no segundo bit, logo à direita do bit alterado de para . fica e a cabeça termina no primeiro bit. O segundo resultado é .
A primeira varredura visita bits, e a propagação visita no máximo bits antes de parar. O prefixo à esquerda do primeiro encontrado não muda; se não houver nenhum, todos os bits mudam e nenhum é acrescentado. Assim preserva o comprimento e termina sempre nas entradas indicadas.
Confere a tua resposta:
- Percorre primeiro a entrada até ao branco à direita.
- Propaga o empréstimo da direita para a esquerda, trocando 0 por 1 até encontrar 1.
- Trata a entrada toda a zeros sem escrever um bit novo.
- Indica a posição final da cabeça e prova que as duas varreduras terminam.
Erros frequentes
Não retires zeros iniciais: o comprimento é fixo. Não rejeites 0000, pois o enunciado pede aritmética modular. Não afirmes a posição final sem escolher uma transição L ou R para o final.
Decidir o último bit
Escolhe “Criar máquina” no simulador da lição. Constrói uma TM sobre que aceite exatamente as palavras não vazias terminadas em . Dá todas as transições, usa finais sem saídas e segue , e . Prova que termina em qualquer entrada e explica por que os três testes não bastam para demonstrar que decide a linguagem.
Pista
Varre até ao branco à direita e volta uma célula.
Solução
Usa início , estado e único final . Em , conserva e move à direita; no branco, passa a e move à esquerda. Em , só há . As restantes transições são indefinidas e rejeitam.
Para , chega a e bloqueia fora de final. Para , move à esquerda para outro branco em , onde bloqueia. O símbolo examinado em é precisamente o último bit, se existir. A varredura percorre bits e um branco; depois há no máximo uma transição para aceitar. Assim termina em todas as entradas. Os três testes só verificam as entradas escolhidas; uma máquina errada pode concordar nesses casos e falhar numa palavra maior. A prova descreve o comportamento para qualquer comprimento.
Confere a tua resposta:
- Dei todas as transições e distingui paragem fora de final.
- Segui as três entradas, incluindo a vazia.
- Justifiquei a posição examinada e a terminação.
Apagar cedo impede completar a deslocação
Uma TM compacta X à esquerda removendo Y. A cabeça começa na célula 0 de . Usa a tabela seguinte; f é o único final e não tem saídas, e os brancos restantes ficam implícitos:
| Estado | |||
|---|---|---|---|
| , início | |||
| Indefinida | Indefinida | ||
Dá o resultado, as células ocupadas e a posição final da cabeça. Um colega substitui apenas por para apagar Y mais cedo. Segue essa versão até bloquear. A máquina original conserva a quantidade de X em cada passo? Justifica a terminação do algoritmo original. Adaptação da tabela da questão 5 do teste de 11/6/2025, com outra entrada e diagnóstico de uma alteração.
Solução
s atravessa o X da célula 0; g procura através dos Y e encontra X na célula 3. Troca-o por Y e m regressa pelas células 2 e 1, conservando Y. Ao ler X na célula 0, passa a w na célula 1, que escreve X. Fica XXYY e s retoma na célula 2. g chega ao branco na célula 4; c apaga Y nas células 3 e 2, encontra X na célula 1 e termina em f na célula 0. O resultado é XX nas células 0 e 1 e branco no resto.
Na versão alterada, m apaga as células 2 e 1 antes de encontrar o X da célula 0. w fica na célula 1 sobre B, onde não há transição, e bloqueia fora de f. A fita tem só um X: o da célula 3 foi retirado, mas não foi reescrito na célula 1.
A quantidade de X só se conserva por ronda completa: g retira um e w volta a escrevê-lo. Cada ronda completa aumenta o prefixo compacto em um X. Há finitos X e cada varredura percorre uma região finita; a limpeza final também termina. Isto justifica a terminação para todas as entradas sobre X,Y, incluindo a vazia, não apenas o exemplo.
Confere a tua resposta:
- Obtive XX nas células 0 e 1 e cabeça na célula 0.
- Identifiquei o bloqueio de w sobre branco na alteração proposta.
- Distingui conservar X por ronda completa de conservar em cada transição e justifiquei terminação.
