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.

TLDR

Perguntar sobre esta página

ChatGPTClaudePerplexityGrokGeminiCopiar e abrirDeepSeekCopiar e abrir

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 aa e bb e justificar também que a máquina termina.

O modelo: fita, cabeça, estados

Usa M=(Q,Σ,Γ,δ,q0,B,F)M=(Q,\Sigma,\Gamma,\delta,q_0,B,F), com alfabeto de entrada Σ\Sigma, alfabeto de fita Γ⊇Σ\Gamma\supseteq\Sigma e branco B∈Γ∖ΣB\in\Gamma\setminus\Sigma. 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

δ(q,X)=(p,Y,D),D∈{L,R},\delta(q,X)=(p,Y,D),\qquad D\in\{L,R\},

manda escrever YY no lugar de XX, mudar para pp 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 FF 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 αqβ\alpha q\beta coloca qq imediatamente antes da célula sob a cabeça. Em 01q2X101q_2X1, a fita representada é 01X101X1 e a cabeça lê XX. Brancos fora da região mostrada ficam implícitos.

Se δ(q,X)=(p,Y,R)\delta(q,X)=(p,Y,R), então αqXβ⊢αYpβ\alpha qX\beta\vdash\alpha Yp\beta. Se o movimento é à esquerda e α=γA\alpha=\gamma A, então γAqXβ⊢γpAYβ\gamma AqX\beta\vdash\gamma pAY\beta. 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:

Abrir no YouTube

Uma máquina que decide aⁿbⁿ

A máquina marca um aa com XX e um bb correspondente com YY, voltando ao início de cada ronda. Quando já não encontra aa, verifica que só restam YY e branco.

Os estados são q0q_0 para escolher o próximo aa, q1q_1 para procurar um bb, q2q_2 para regressar ao marcador XX da ronda, q3q_3 para verificar o fim, e qfq_f final.

EstadoaabbXXYYBB
q0q_0(q1,X,R)(q_1,X,R)RejeitaRejeita(q3,Y,R)(q_3,Y,R)Aceita
q1q_1(q1,a,R)(q_1,a,R)(q2,Y,L)(q_2,Y,L)Rejeita(q1,Y,R)(q_1,Y,R)Rejeita
q2q_2(q2,a,L)(q_2,a,L)Rejeita(q0,X,R)(q_0,X,R)(q2,Y,L)(q_2,Y,L)Rejeita
q3q_3RejeitaRejeitaRejeita(q3,Y,R)(q_3,Y,R)Aceita

As células ‘Aceita’ podem ser implementadas por (qf,B,R)(q_f,B,R) 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 ε\varepsilon.

Para aabbaabb, os passos são:

q0aabb⊢Xq1abb⊢Xaq1bb⊢Xq2aYb⊢q2XaYb⊢Xq0aYb⊢XXq1Yb⊢XXYq1b⊢XXq2YY⊢Xq2XYY⊢XXq0YY⊢XXYq3Y⊢XXYYq3B⊢XXYYBqfB.\begin{aligned} q_0aabb&\vdash Xq_1abb\vdash Xaq_1bb\\ &\vdash Xq_2aYb\vdash q_2XaYb\\ &\vdash Xq_0aYb\vdash XXq_1Yb\\ &\vdash XXYq_1b\vdash XXq_2YY\\ &\vdash Xq_2XYY\vdash XXq_0YY\\ &\vdash XXYq_3Y\vdash XXYYq_3B\\ &\vdash XXYYBq_fB. \end{aligned}

Em aabaab, a segunda procura de bb chega a branco e rejeita. Em abababab, a verificação final encontra um aa depois de YY e rejeita, apesar de as contagens globais coincidirem.

A cada ronda, os marcadores XX ficam no início, e q2q_2 regressa ao XX acabado de criar. O número de aa 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.

-4B
-3B
-2B
-1B
0a
1a
2b
3b
4B

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 00, com contrato explícito: aceita se o último símbolo é 00; rejeita se termina em 11 ou se a entrada é vazia. Usa q0q_0 para varrer até ao branco, q1q_1 para voltar uma célula e qfq_f final:

  • δ(q0,0)=(q0,0,R)\delta(q_0,0)=(q_0,0,R), δ(q0,1)=(q0,1,R)\delta(q_0,1)=(q_0,1,R), δ(q0,B)=(q1,B,L)\delta(q_0,B)=(q_1,B,L);
  • δ(q1,0)=(qf,0,R)\delta(q_1,0)=(q_f,0,R); δ(q1,1)\delta(q_1,1) e δ(q1,B)\delta(q_1,B) ficam indefinidas para rejeitar.

Para 1010, com a convenção αqβ\alpha q\beta da página:

q010⊢1q00⊢10q0B⊢1q10⊢10qfB.q_010 \vdash 1q_00 \vdash 10q_0B \vdash 1q_10 \vdash 10q_fB.

O terceiro passo lê o branco e volta ao 00 final; o quarto lê 00 e aceita. Para 101101:

q0101⊢1q001⊢10q01⊢101q0B⊢10q11,q_0101 \vdash 1q_001 \vdash 10q_01 \vdash 101q_0B \vdash 10q_11,

e a máquina para sem transição definida, logo rejeita. Para ε\varepsilon, a configuração inicial é q0Bq_0B, que passa a q1Bq_1B com a cabeça no branco, onde não há transição: rejeita. Cada fase percorre no máximo n+1n+1 células, por isso a máquina termina sempre. Parar fora de final é rejeitar.

Comparar extremos e vários blocos

Para palíndromos sobre {0,1}\{0,1\}, 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 0111001110, as rondas retiram 00 com 00, depois 11 com 11, ficando o 11 central. Cada ronda retira uma ou duas letras, provando terminação.

Para {anbnan∣n≥0}\{a^nb^na^n\mid n\ge0\}, verifica primeiro o formato dos três blocos. Em cada ronda, marca um aa no primeiro bloco, um bb no segundo e um aa 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 aabbaaaabbaa, duas rondas chegam; em aabbaaabba, a segunda ronda não encontra o último aa. 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 {02k∣k≥0}\{0^{2^k}\mid k\ge0\}, trabalha só com zeros ainda ativos. Cada ronda percorre-os alternando um estado par e um ímpar:

  1. Marca um zero em cada par e deixa o outro ativo.
  2. Se havia mais de um zero e a contagem era ímpar, rejeita; se havia exatamente um, aceita.
  3. Caso contrário, volta ao início e repete.

As contagens ativas de 00000000 são 4,2,14,2,1, enquanto 000000000000 dá 6,36,3 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 11, escreve 00 e continua para a esquerda;
  • ao ler 00, escreve 11 e termina;
  • se chegar ao branco à esquerda, escreve 11 e termina.

Por exemplo, 10111011 torna-se 11001100: os dois uns finais passam a zeros e o zero anterior passa a um. 111111 torna-se 10001000, 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 =n1+n2=n_1+n_2, 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, 011+010011+010 produz 101101: no bit menos significativo, 1+0=11+0=1; depois 1+1=01+1=0 com transporte 11; no último, 0+0+1=10+0+1=1. 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 11, conservando os bits vistos, incluindo esse 11. Inverte todos os bits que ficam à esquerda. Assim, 01000100 passa a 11001100, e 00000000 fica 00000000 ignorando overflow. O exemplo 10001000 também fica 10001000, 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 (a,marcado)(a,\text{marcado}). Isso aumenta o alfabeto finito, sem criar outro tipo de memória.

Compactar a fita sem deixar intervalos vazios

Para remover todos os YY de uma entrada sobre {X,Y}\{X,Y\}, apagar cada YY onde o encontramos deixaria brancos entre os XX. O resultado pedido é um bloco contínuo XkX^k, a partir da primeira célula original, com kk igual à quantidade inicial de XX.

Usa cinco estados de trabalho e o final ff, sem saídas. BB é branco. Cada célula da tabela dá estado seguinte, símbolo escrito e movimento:

EstadoXXYYBB
ss, início(s,X,R)(s,X,R)(g,Y,R)(g,Y,R)(f,B,R)(f,B,R)
gg, procurar outro XX(m,Y,L)(m,Y,L)(g,Y,R)(g,Y,R)(c,B,L)(c,B,L)
mm, regressar ao intervalo(w,X,R)(w,X,R)(m,Y,L)(m,Y,L)(w,B,R)(w,B,R)
ww, preencher o primeiro YYIndefinida(s,X,R)(s,X,R)Indefinida
cc, limpar os YY finais(f,X,L)(f,X,L)(c,B,L)(c,B,L)(f,B,L)(f,B,L)

ss atravessa o prefixo de XX já compacto. Ao encontrar um YY, gg procura o próximo XX. Se o encontrar, troca esse XX por YY e regressa em mm, conservando os YY. Ao encontrar o XX que limita o prefixo, ou o branco à esquerda, move uma célula à direita para ww. Essa célula ainda é o primeiro YY do intervalo; ww troca-o por XX.

Uma ronda desloca um XX para a primeira posição livre do prefixo. A quantidade de XX diminui temporariamente em gg e recupera em ww. Só a ronda completa conserva essa quantidade. Apagar os YY durante o regresso em mm impediria ww de encontrar o símbolo que deve substituir.

Para YXYXYXYX, a primeira ronda é:

EstadoÍndice da cabeçaFita entre as células 0 e 3
ss0YXYXYXYX
gg1YXYXYXYX
mm0YYYXYYYX
mm-1, brancoYYYXYYYX
ww0YYYXYYYX
ss1XYYXXYYX

Os índices começam em zero e os estados ficam fora da fita. A ronda seguinte deixa XXYYXXYY e retoma ss na célula 2. Já não há outro XX, por isso gg chega ao branco e cc apaga os dois YY finais. Termina com XXXX nas células 0 e 1, brancos nas restantes, estado ff e cabeça na célula 0.

Cada ronda completa aumenta o prefixo compacto em um XX, e há apenas finitos XX 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 YY, a limpeza deixa tudo branco; se for vazia ou já só tiver XX, ss 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 LLSe w∈Lw\in LSe w∉Lw\notin L
ReconhecedorTermina e aceitaPode terminar e rejeitar, ou correr para sempre
DecisorTermina e aceitaTermina e rejeita

A máquina de marcação de anbna^nb^n é um decisor, porque a sua prova de terminação abrange também as palavras rejeitadas. Reconhecer exige aceitar cada palavra de LL 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 LL e L‾\overline L forem reconhecíveis, então LL é decidível. Simula os dois reconhecedores alternando um passo de cada. A palavra dada pertence a LL ou ao seu complemento, pelo que um dos reconhecedores acabará por aceitá-la. Responde sim quando o reconhecedor de LL 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 ⟨M⟩\langle M\rangle. Uma máquina universal recebe ⟨M,w⟩\langle M,w\rangle e simula MM em ww. O programa da máquina simulada torna-se parte da entrada.

A linguagem ATM={⟨M,w⟩∣M aceita w}A_{TM}=\{\langle M,w\rangle\mid M\text{ aceita }w\} é reconhecível: simula MM e aceita se ela aceitar. Se MM não parar, a simulação também pode não parar.

O problema da paragem

Define HALT={⟨M,w⟩∣M para em w}HALT=\{\langle M,w\rangle\mid M\text{ para em }w\}. É reconhecível, pois podes simular e aceitar quando a simulação parar, mas é indecidível.

Supõe que existe um decisor HH para HALTHALT. Constrói DD que, ao receber ⟨M⟩\langle M\rangle, consulta H(⟨M,⟨M⟩⟩)H(\langle M,\langle M\rangle\rangle). Se HH disser que MM para, DD entra num ciclo infinito. Se disser que não para, DD termina.

Agora executa DD com a sua própria codificação. Se HH disser que DD para, a construção faz DD não parar. Se disser que não para, faz DD parar. Ambas as respostas contradizem a correção de HH. Logo, esse decisor não existe.

Reduções de indecidibilidade

Por exemplo, HALT≤mATMHALT\le_m A_{TM}. Dada ⟨M,w⟩\langle M,w\rangle, constrói uma máquina NN que ignora a sua entrada, simula MM em ww e aceita se essa simulação parar, quer aceitando quer rejeitando. Tens ⟨M,w⟩∈HALT\langle M,w\rangle\in HALT se e só se ⟨N,ε⟩∈ATM\langle N,\varepsilon\rangle\in A_{TM}. Portanto, ATMA_{TM} também é indecidível.

Ver o que continua decidível com um limite de passos

Uma pergunta limitada a tt 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 tt de passos é decidível. Nos primeiros tt movimentos, a cabeça não alcança uma posição de entrada além da posição t+1t+1. Basta enumerar palavras de comprimento até t+1t+1, 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 t+1t+1. 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 é 0qa10qa1 e δ(q,a)=(q′,X,R)\delta(q,a)=(q\prime,X,R). Qual é a configuração após um passo?

A tua resposta

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 0Xq′10Xq\prime1. 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.

Voltar à explicação
Paragem com limite fixo

Um programa simula MM em ww 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 t=2021t=2021 e decide se existe uma entrada binária em que uma TM determinística dá mais de tt 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 tt 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 t+1t+1, só precisa de observar entrada até à posição t+1t+1. Enumera as palavras de comprimento até t+1t+1, incluindo ε\varepsilon: as curtas mostram os casos em que se encontra branco, e as de comprimento t+1t+1 representam também entradas maiores com esse prefixo.

Simula cada representante até parar ou confirmar t+1t+1 transições. Na variante existencial, responde sim se algum representante ultrapassar tt; 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.
Voltar à explicação
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 A≤mBA\le_m B. Se B tivesse decisor, para cada x calcularias f(x), executarias o decisor de B e usarias a mesma resposta, pois x∈A  ⟺  f(x)∈Bx\in A\iff f(x)\in B. A função é total e o decisor termina, dando um decisor de A, contradição. B≤mAB\le_m A 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.

Voltar à explicaçã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 2n2^n, onde nn é 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 10001000 e 00000000, 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 00, escreve 11 e move à esquerda. Ao ler 11, escreve 00 e move à direita para um final sem saídas. Se chegar ao branco à esquerda, conserva-o e move à direita para esse final.

10001000 fica 01110111; a cabeça termina no segundo bit, logo à direita do bit alterado de 11 para 00. 00000000 fica 11111111 e a cabeça termina no primeiro bit. O segundo resultado é −1 mod 16=15-1\bmod16=15.

A primeira varredura visita nn bits, e a propagação visita no máximo nn bits antes de parar. O prefixo à esquerda do primeiro 11 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.

Voltar à explicação
Decidir o último bit

Escolhe “Criar máquina” no simulador da lição. Constrói uma TM sobre {0,1}\{0,1\} que aceite exatamente as palavras não vazias terminadas em 00. Dá todas as transições, usa finais sem saídas e segue 1010, 101101 e ε\varepsilon. 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 q0q_0, estado q1q_1 e único final qfq_f. Em q0q_0, conserva 0,10,1 e move à direita; no branco, passa a q1q_1 e move à esquerda. Em q1q_1, só há δ(q1,0)=(qf,0,R)\delta(q_1,0)=(q_f,0,R). As restantes transições são indefinidas e rejeitam.

q010⊢1q00⊢10q0B⊢1q10⊢10qfB.q_010\vdash1q_00\vdash10q_0B\vdash1q_10\vdash10q_fB.

Para 101101, chega a 10q1110q_11 e bloqueia fora de final. Para ε\varepsilon, q0Bq_0B move à esquerda para outro branco em q1q_1, onde bloqueia. O símbolo examinado em q1q_1 é precisamente o último bit, se existir. A varredura percorre nn 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.
Voltar à explicaçã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 XYYXXYYX. Usa a tabela seguinte; f é o único final e não tem saídas, e os brancos restantes ficam implícitos:

EstadoXXYYBB
ss, início(s,X,R)(s,X,R)(g,Y,R)(g,Y,R)(f,B,R)(f,B,R)
gg(m,Y,L)(m,Y,L)(g,Y,R)(g,Y,R)(c,B,L)(c,B,L)
mm(w,X,R)(w,X,R)(m,Y,L)(m,Y,L)(w,B,R)(w,B,R)
wwIndefinida(s,X,R)(s,X,R)Indefinida
cc(f,X,L)(f,X,L)(c,B,L)(c,B,L)(f,B,L)(f,B,L)

Dá o resultado, as células ocupadas e a posição final da cabeça. Um colega substitui apenas δ(m,Y)=(m,Y,L)\delta(m,Y)=(m,Y,L) por (m,B,L)(m,B,L) 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.
Voltar à explicação

À tua maneira

Aparência

Modo de cor
Tema
Cor de destaque

Leitura

Fonte de leitura

Álgebra, lógica e uma ideia de cada vez.

Código

Fonte do código

Navegação

Cursor de leitura, sem edição. h, j, k, l movem; / pesquisa nesta página. v seleciona caracteres; V seleciona linhas; y copia. Tab permite destacar ou comentar. Espaço ou Enter abre blocos recolhíveis. Nos cartões, h, j, k, l mudam o foco.

CSS personalizado

Ativa uma sugestão ou guarda o teu CSS. Só muda este navegador.

Usa --page, --text e --accent para acompanhar o tema.

Seletores e recuperação

.site-header, .prose, .course-card, [data-reading-history], [data-playground] e .page-actions.

Abre a aparência com a tecla vírgula ou no rodapé. Se o CSS esconder os controlos, abre esta página sem CSS personalizado.

Pesquisar

Escreve para pesquisar em todo o site.

para escolher · Enter para abrir · Esc para fechar

Copiar fórmula

A cópia automática não está disponível. Copia o LaTeX abaixo.

Pesquisar nesta página

Enter procura · n / N repetem · Esc cancela. Ctrl / Cmd K pesquisa todo o site.

Atalhos de teclado

Clica numa tecla para a mudar. Esc cancela. Backspace desativa.

PesquisarCtrl / Cmd K

Os atalhos não interferem enquanto escreves. Tab e Enter funcionam sempre.