2. Problemas
●
Informalmente, um problema é uma
questão sim/não sobre um conjunto infinito
de possíveis instâncias
●
Exemplo: “Um grafo G tem um ciclo
hamiltoniano (ciclo que passa por cada nó
exatamente uma vez)?
– Cada grafo não-dirigido é uma instância do
“problema do ciclo hamiltoniano”.
3. Problemas
●
Formalmente, um problema é uma
linguagem.
●
Cada string codifica alguma instância.
●
A string pertence a linguagem se e
somente se a resposta para aquela
instância é “sim”.
4. Exemplo: Um problema
sobre MT
● Nós podemos pensar na linguagem Ld
como um problema.
●
“Dada uma MT, ela não aceita ela
mesma?”
●
Podemos pensar no problema como uma
pergunta sobre strings binárias
– Como perguntaríamos Ld
?
5. Problemas decidíveis
●
Um problema é decidível se há um
algoritmo para respondê-lo.
– Um algoritmo, formalmente, é uma MT que
trava para qualquer entrada, aceitando ou
não.
– “Problema decidível” = “Linguagem recursiva”.
●
Caso contrário, o problema é indecidível.
7. Do abstrato para o real
● Enquanto que o fato de que Ld
é indecidível
é interessante intelectualmente, não existe
um impacto direto nos problemas do mundo
real.
●
Nós deveríamos desenvolver alguns
problemas relacionados a MT que sejam
indecídiveis, mas nosso objetivo é usar a
teoria para mostrar que alguns problemas
reais são indecidíveis.
8. Exemplos de problemas
indecidíveis
●
Uma linha particular de código dentro de um programa
será executada?
●
Dada uma gramática livre de contexto, ela é ambígua?
●
Dada duas gramáticas livres de contexto, elas geram
a mesma linguagem?
●
Dada uma linguagem aceita por uma MT, ela é
regular?
●
É possível verificar se um algoritmo qualquer sempre
irá parar?
9. Técnicas para descobrir
indecibilidade
●
Existem dois métodos convencionais:
– Análise do complemento da linguagem
– Redução a problemas/linguagens
conhecidos(as)
●
Um exemplo de problema conhecido será
apresentado: a linguagem universal.
10. Complemento de
linguagens RE e R
●
Dada uma linguagem L e seu
complemento L, quantos modos diferentes
podemos inserir L e L no diagrama de
linguagens R, RE e não-RE?
R
RE não R
Não RE
23. Teorema 2
●
Se L e L são linguagens RE, então
também L é recursiva.
● Prova: Considere L = L(M1
) e L = L(M2
).
● Construa uma MT M que usa M1
e M2
como na figura a seguir.
25. Complemento de R e RE
●
Com estes teoremas, apenas as seguintes
combinações são possíveis:
– L e L são recursivas.
– L e L não são RE.
– L é RE mas não é recursiva e L não é RE.
– L é RE mas não é recursiva e L não é RE.
26. A linguagem universal
●
Um exemplo de uma linguagem RE, mas
não recursiva é a linguagem Lu
da
máquina de Turing universal (MTU).
●
A MTU toma como entrada o código de
alguma MT M e alguma string binária w e
aceita somente se M aceita w.
27. A linguagem universal
● A linguagem universal (Lu
) é definida como
a linguagem dos pares (M,w) tais que M
aceita w.
● Será apresentado uma MT que aceita Lu
.
28. Como criar a MTU
●
As entradas da fita serão da forma:
– M 111 w
●
Nota: Uma MT válida codificada em
binário, nunca possui 111, logo podemos
dividir M de w.
●
A MT deve aceitar sua entrada se e
somente se M é um código válido e M
aceita w.
29. MTU
●
A MTU possuirá várias fitas.
●
A fita 1 guarda a entrada M111w.
●
A fita 2 guarda a fita de M.
– MTU marca a cabeça de leitura como se fosse
a cabeça de leitura de M.
●
Fita 3 guarda o estado de M.
31. MTU
●
Passo 1: A MTU verifica se M é um código
válido.
– Todos os movimentos devem ter cinco
componentes.
– Não há dois movimentos com o mesmo par
(estado,símbolo).
●
Se M não é válida, sua linguagem é vazia,
então a MTU pára sem aceitar.
32. MTU
●
Passo 2: A MTU examina M para verificar
quantas células de sua fita são
necessárias para representar um símbolo
de M.
●
Passo 3: Inicializa a fita 2 para representar
a fita de M com a entrada w e inicializa a
fita 3 para armazenar o estado inicial.
33. MTU
●
Passo 4: Simula M.
– Verifica o movimento na fita 1 que
corresponde ao estado na fita 3 e o símbolo
de fita na cabeça de leitura da fita 2.
– Se encontrou, muda o símbolo e move a
cabeça de leitura na fita 2 a muda para o
estado na fita 3.
– Se M aceita, a MTU também aceita.
35. O que é Lu
?
● Lu
= {z| z=M111w e M é uma MT codificada
corretamente e M aceita w}
●
não (A e B) = não A ou não B
● Lu
= {z| z não é da forma M111w ou M não
é uma MT codificada corretamente ou M
não aceita w}
36. Lu
é RE mas não recursiva
●
Uma MT para MTU foi descrita, logo ela é
RE.
●
Suponha que seja recursiva, isto é, uma
MTU U sempre irá parar.
●
Então, nós podemos rodar um algoritmo para
Ld
como segue.
● Ld
= { w | w representa uma MT M e
w∉L(M)}
37. Lu
é RE mas não
recursiva
● Ld
é um caso especial de Lu
.
● Lu
= { w | w não tem 111 ou w não é uma
MT codificada corretamente ou w ∉ L(w)}
– Nota: se w não é uma MT M codificada,
L(M)= , logo M não aceita w e, portanto,
∅
w∈Ld
.
38. Prova
●
Dada uma entrada w, nós podemos decidir se
está em Ld
seguindo os seguintes passos.
1)Verifica se w é um código para MT válida.
1)Se não é, então sua linguagem é vazia, logo w
pertence a Ld
2)Se válido, usa-se U para decidir se w111w ∈ Lu
3)Se w111w ∈ Lu
, então w ∉ Ld
. Senão, w ∈ Ld
.
42. Redução
●
Uma redução de uma linguagem L para
uma linguagem L' é um algoritmo (MT que
sempre pára) que usa como entrada uma
string w e a converte para uma string x, tal
que:
– x ∈ L' se e somente se w ∈ L.
43. Redução de L para L’
Conversor MT para L'
w x
sim sim
MT para L
– x ∈ L' se e somente se w ∈ L.
– Redução de L para L'
45. MT como um tradutor
●
Até agora as MT foram consideradas
aceitadores de palavras
●
Mas, podemos adaptá-las de tal
forma que elas possuam fitas de
saída, onde uma string é escrita
nesta fita apenas se ela parar.
●
Dessa forma, a MT traduz sua
entrada, escrevendo em sua saída.
46. Reduções
●
Se reduzirmos L para L' e L' é
decidível, então o algoritmo para L'
junto com o algoritmo de redução
mostram que L também é decidível
●
A contrapositiva mostra que: Se L não
é decidível, então L' não pode ser
também, dado que há redução de L
para L'.
50. Exercícios
●
Considere linguagem A contendo uma
única cadeia, s, onde:
– s = 0, se vida em Marte nunca será
encontrada.
– s = 1, se algum dia a vida em Marte será
encontrada.
A linguagem A é decidível? Justifique.
Assuma que a pergunta para questão da
vida em Marte seja SIM ou NÃO.
51. Exercícios
●
O problema/linguagem da parada é
enunciado da seguinte forma:
– Dada uma MT M e uma string w, w está
em H(M)?
●
H(M) é a linguagem das palavras que são
aceitas por M por parada.
●
Mostre que o problema da parada é RE
mas não decidível. Dica: use redução.
52. Exercícios
●
Dê um exemplo de strings w e problemas
P1 e P2 para cada um dos seguintes casos
envolvendo reduções de P1 para P2 e
justifique cada um:
a) w P
∉ 1 e w P
∈ 2.
b) w P
∉ 1 e w P
∉ 2.
Faça o mesmo assumindo P1
está associado a
Ld
e P2
a Lu
.
53. Exercícios
●
Prove que os seguintes problemas são
indecidíveis:
– Uma linha particular de código dentro de um programa
será executada?
– Dada uma gramática livre de contexto, ela é ambígua?
– Dada duas gramáticas livres de contexto, elas geram a
mesma linguagem?
– Dada uma linguagem aceita por uma MT, ela é regular?
– É possível verificar se um algoritmo qualquer sempre irá
parar?
54. 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
●
[2] SIPSER, Michael. Introdução à teoria da
computação. 2.ed. São Paulo, SP: Cengage
Learning, c2007. xxi, 459 p. ISBN 9788522104994
●
Traduzido e adaptado dos slides de Jeffrey D.
Ullman.