O documento introduz o conceito de Máquinas de Turing e como elas podem ser usadas para provar que certos problemas são intratáveis ou naturalmente difíceis de serem resolvidos. Exemplos de máquinas de Turing são fornecidos para reconhecer linguagens formais e calcular funções, ilustrando como elas funcionam.
2. Introdução
● As Máquinas de Turing (M.T.) são úteis
para provar que alguns problemas:
– não podem ser resolvidos ou
– são naturalmente difíceis de se resolver
3. Introdução
● Considere o seguinte problema:
– É possível fazer um programa que diga se um
program em C pode imprimir na tela “hello
worldn”?
11. Introdução
● O que acontece com H2 quando H2'
imprime “yes”?
● E quando imprime “hello world”?
12. Introdução
● Se H2 imprimir “hello world”, significa que a
entrada H2 não imprimiria tal palavra.
● Se H2 não imprimir “hello world”, significa
que sua entrada H2 imprimiria tal palavra
● Absurdo!
13. Linguagens e Problemas
● Nesta disciplina trataremos linguagens
como se fossem problemas a serem
resolvidos
– Pertinência de um string w a uma linguagem
L:
– Dado uma cadeia w em ∑* , definir se w
está ou não em L.
14. Linguagens e Problemas
● Exemplo: O problema de testar se um
número binário é primo.
● Lp é o conjunto das cadeias dos números
binários que representam um número
binário.
15. Linguagens e Problemas
● Na prática, decidir se faz parte ou não de
um conjunto não generaliza a noção de
problema.
– Um analisador sintático além de
responder sim ou não, também gera
uma árvore sintática.
16. Linguagens e Problemas
● Em alguns momentos, estamos usando
linguagens não como problemas de
decisão:
– {0n1n|n≥1}
● Consideramos problemas de decisão
quando queremos provar que ele é difícil
17. Linguagens e Problemas
● Exemplo: Reconhecer se um arquivo texto
em ASCII pertence a linguagem dos
programas C.
– Um compilador C converte um arquivo
ASCII para executável.
– Se o problema de reconhecimento fosse
mais fácil que a conversão, então
usaríamos o conversor para reconhecer.
18. Linguagens e Problemas
● Teríamos uma contradição a hipótese: se o
teste de pertinência a C é difícil, o
problema da conversão também é difícil.
20. Máquina de Turing
● Motivação de seu estudo:
– Provar para o programador que existem
problemas que não podem ser resolvidos
– Provar que alguns problemas podem ser
resolvidos, mas usam um período de tempo
muito grande
● Convencer ao programador que apenas algumas
instâncias do problema bem especificadas podem
ser resolvidas em tempo hábil
21. Máquina de Turing
● Máquina abstrata
– Seria ineficiente construí-la no mundo real
● Utilizar programas em uma linguagem (C,
Java) dificultam as provas, pois:
– Cada estado de um programa é representado pelas
suas variáveis
– Mais difícil de adaptar problemas como “uma
gramática é ambígua?”, “uma fórmula booleana
pode assumir V como resultado?”
22. Máquina de Turing
● Histórico:
– David Hilbert indagou se era possível encontrar
um algoritmo para determinar a falsidade ou
verdade de uma proposição matemática.
– Kurt Gödel demonstrou o teorema da
incompletude.
– Diversas noções de computação vieram à tona.
● Funções recursivas de Alonzo Church e outras.
– Turing propôs a M.T.
24. Máquina de Turing
● M = (Q,Σ,Г,δ,q0,B,F)
● Q é o conjunto de estados
● Σ é o alfabeto de entrada
● Г é o alfabeto de saída, ou símbolos da fita.
– Σ⊂Г
● δ é a funçao de transição
– δ: Q x Г→ Q x Г x {E,D}
– {E,D} = {L,R} = {←,→}
25. Máquina de Turing
● q0 é o estado inicial.
– q0∈Q
● B é o simbolo branco.
– B∈Г e B∉Σ
● F é o conjunto de estados finais.
– F⊆Q
26. Descrição instantânea
● Notação para descrever o que faz a M.T.
● Suponhamos que a esquerda e a direita
de uma D.I. (ou ID) é infinitamente branco.
X1
X2
...Xi-1
qXi
Xi+1
...Xn
27. Descrição instantânea
● Usamos ⊢ para refletir um movimento
● Usamos ⊢* para indicar zero ou mais
movimentos
● Suponha δ(q,Xi) = (p,Y,L)
– X1X2...Xi-1qXiXi+1...Xn⊢X1X2...pXi-1YXi+1...Xn
● Suponha δ(q,Xi) = (p,Y,R)
– X1X2...Xi-1qXiXi+1...Xn⊢X1X2...Xi-1YpXi+1...Xn
28. Descrição instantânea
● Se i=1 e movimento à esquerda:
– qX1X2...Xn⊢qBX1X2...Xn
● Se i=n, Y=B e movimento à esquerda:
– X1X2...Xn-1qXn⊢X1X2...Xn-2pXn-1
29. Descrição instantânea
● Se i=1, Y=B e movimento à direita:
– qX1X2...Xn p⊢ X2...Xn
● Se i=n e movimento à direita:
– X1X2...Xn-1qXn⊢X1X2...Xn-2YpB
30. Exemplo 1
● Uma M.T. Para reconhecer {0n1n|n≥1}
● M = ({q0,q1,q2,q3,q4},{0,1},{0,1,X,Y,B},δ,q0,B,
{q4})
32. Exemplo 1
● q0: estado inicial e M entra toda vez que
retorna ao 0 restante mais à esquerda.
● q1: indica que deve ir a direita enquanto
for 0 ou Y, troca 1 por Y e anda à direita
para encontrar novos Ys.
● q2: volta a esquerda até encontrar um X,
andando à esquerda enquanto for Y ou 0.
33. Exemplo 1
● q3: lê Ys até encontrar um B a direita.
● q4: estado final, indica que foi reconhecida
a palavra. Trava para indicar
reconhecimento!
37. Exemplo 2
● Ao invés de reconhecer uma linguagem,
uma M.T. para calcular.
– m∸n = max(m-n,0)
● M = ({q0, … ,q6},{0,1},{0,1,B},δ,q0,B,{})
● Entrada é da forma: 0m10n
– 0000100 = 4∸2
● Saída é da forma: 0m∸n
40. Exemplo 2
● q0: estado inicial. Inicia o ciclo de substituição
de 0 por B. Vai para q5 se encontrar 1.
● q1: Pesquisa à direita, passando por 0s até
achar 1. Em seguida vai para q2.
● q2: Salta 1s até encontrar 0. Vai para q4 se
encontrar B e vai para q3 se encontrar 0,
substituindo-o por 1
41. Exemplo 2
● q3: M se move à esquerda até encontrar B.
Ao encontrar muda para q0.
● q4: Subtração está completa, mas um 0
sem correspondência foi encontrado.Troca
o 1 por B.
● q5: Troca os símbolos restantes por B ao
final do cálculo.
44. Linguagens aceitas pela
M.T.
● Seja M = (Q,Σ,Г,δ,q0,B,F)
● L(M) é o conjunto de strings w tais que q0w ⊢* αpβ para
algum p∈F e quaisquer strings α e β.
● O conjunto das linguagens aceitas por M.T. são chamadas
de linguagens recursivamente enumeráveis.
– Recursiva vem de formalismos computacionais anteriores
à M.T.
– Enumeráveis vem da noção que tais strings podem ser
enumeradas (colocadas em ordem) assim como os
conjuntos enumeráveis (ℕ,ℤ,ℚ)
45. Máquina de Turing e sua
parada
● A noção de aceitação está relacionada
comumente a parada da M.T.
– Reconhecimento de {0n1n|n≥1}
● Dizemos que a M.T. pára quando entra em
um estado q tal que δ(q,X) é indefinido
– A M.T. para calcular “monus” pára para
qualquer entrada.
46. Máquina de Turing e sua
parada
● Suponhamos que sempre pára quando se
aceita uma string.
● As linguagens das M.T. que sempre param
mesmo quando se rejeita uma string são
consideradas recursivas.
47. Exercícios
● Mostre as D.I.s do Exemplo 1 para: 00,
000111 e 00111
● Projete uma M.T. que reconheça as
seguintes linguagens:
– O conjunto de strings com o número igual de 0s
e 1s.
– {anbncn|n≥1}
– {wwR| w∈{0,1}*}
48. Exercícios
● Considere a seguinte Máquina de Turing:
M = ({q0,q1,q2,qf},{0,1},{0,1,B},δ,q0,B,{qf})
Descreva o que faz M se δ for definida com
a) δ(q0,0)=(q1,1,R); δ(q1,1)=(q1,1,R); δ(q1,B)=(qf,B,R)
b) δ(q0,0)=(q0,B,R); δ(q0,1)=(q1,B,R);
δ(q1,1)=(q1,B,R); δ(q1,B)=(qf,B,R)
c) δ(q0,0)=(q1,1,R); δ(q1,1)=(q2,0,L); δ(q2,1)=(q0,1,R);
δ(q1,B)=(qf,B,R)
49. Referência
● [1] HOPCROFT, John E.; ULLMAN, Jeffrey
D.; MOTWANI, Rajeev. Introdução à teoria
de autômatos, linguagens e computação.
[Rio de Janeiro]: Campus, c2003. p. 328-
352
● Imagens da versão em inglês