Primeira Prova e sua Solução

Propaganda
Programa de Pós-Graduação em Ciência da Computação
Disciplina de Teoria da Computação - 2013/2
SOLUÇÃO da 1a Prova - VALOR 32 PONTOS
QUESTÃO 1- VALOR 10 Pontos: Considere a seguinte linguagem sobre o alfabeto Σ =
{0, 1}: L = {< A >| A é código de um autômato finito sobre o alfabeto Σ = {0, 1} e tal que
L(A) contém um palindromo.}. Mostrar que L é decidı́vel.
Solução: Considere a linguagem Palindromos = {w ∈ {0, 1}∗ | w é um palindromo, isto é w =
wrev }. Sabemos que Palindromos é uma linguagem livre do contexto. Portanto, Palindromos é
gerada por uma gramática livre do contexto G. Sabemos que toda gramática livre do contexto
é equivalente a um autômato de pilha P.
Um string < A > pertence a L ↔ L(A) ∩ L(P ) 6= ∅.
Dado um autômato finito A e um autômato de pilha P podemos construir o autômato de
pilha P 0 intersecção de A com P : os estados de P 0 são pares (p,q), onde p é estado de A e q é
estado de P . A pilha de P 0 é a mesma que a pilha de P . E a função de transição de P 0 é dada por:
δ((p, q), a, X) = {((p1 , q1 ), γ1 ), ..., ((pn , qn ), γn )}, tal que δA (p, a) = {p1, ..., pn } e δP (q, a, X) =
{(q1 , γ1 ), ..., (qn , γn )}. Isto é: a ação de P 0 sobre a fita de leitura equivale à ação paralela de A
e P sobre a fita de leitura. A ação de P 0 sobre a pilha equivale à ação de P sobre a pilha.
O autômato de pilha P 0 é equivalente a uma gramática livre do contexto G0 . Logo:
Um string < A > pertence a L ↔ L(A) ∩ L(P ) 6= ∅ ↔ L(P 0 ) 6= ∅ ↔ L(G0 ) 6= ∅.
Logo, resolver o problema L se reduz a resolver o problema EGLC , que sabemos ser decidı́vel.
Seja S a máquina de Turing que decide o problema EGLC . A máquina de Turing que decide
L pode ser descrita da seguinte maneira (em alto nivel):
M
1.
2.
3.
4.
5.
6.
= No input < A > faça:
Construa o código do autômato de pilha P tal que L(P ) = conjunto dos palindromos.
Construa o código do autômato de pilha P 0 (= intersecção dos autômatos A e P ).
Construa o código da gramática livre do contexto G’ equivalente ao autômato de pilha P 0 .
Execute a máquina de Turing S sobre < G0 >.
Se S aceita < G0 >, rejeita.
Se S rejeita < G0 >, aceita.
QUESTÃO 2- VALOR 10 Pontos: Considere os seguintes conjuntos:
• Pf in (N ) = conjunto de todos os subconjuntos finitos de N. Mostrar que Pf in (N ) é enumerável.
Solução:
– Fato 1: Seja Ai = conjunto de todos os subconjuntos de N de tamanho i. Vamos
mostrar que Ai é enumerável, para todo i ≥ 0.
1
Seja Ni = N × N × ... × N (N cartesiano N i vezes). Sabemos que Ni é enumerável,
pois é o produto cartesiano finito de conjuntos enumeráveis.
Seja Ni0 = {(n1 , n2 , ..., ni ) ∈ N × N × ... × N | n1 < n2 < ... < ni }. Sabemos que Ni0
é enumerável pois Ni0 ⊆ Ni e Ni é enumeráravel.
Seja f : Ai → Ni0 definida por f ({k1 , k2 , ..., ki }) = (n1 , ..., ni ) onde (n1 , ..., ni ) é uma
permutação dos naturais k1 , k2 , ..., ki em ordem crescente. Temos que f é uma função
bijetora. Logo, como Ni0 é enumerável, então Ai é enumerável
S
– Fato 2: Pf in (N ) = A0 ∪ A1 ∪ A2 ∪ ... = ∞
i=0 Ai . Logo Pf in (N ) é enumerável, já que
é igual a união enumerável de conjuntos enumeráveis.
• PInf in (N ) = conjunto de todos os subconjuntos infinitos de N. Mostrar que PInf in (N ) é
enumerável.
Sabemos que P(N) (= conjunto de todos os subconjuntos de N ) não é enumerável (teorema
demonstrado em aula). Temos que:
P(N) = Pf in (N ) ∪ PInf in (N ).
Se PInf in (N ) fosse enumerável, então P(N) seria enumerável, pois seria a união de 2
conjuntos enumeráveis. Logo, PInf in (N ) não é enumerável.
QUESTÃO 3- VALOR 10 Pontos: Mostre que toda linguagem livre do contexto é Turing
decidı́vel. A demonstração deve ser feita EXPLICITAMENTE, sem utilizar resultados mostrados em aula.
Solução: Seja L uma linguagem livre do contexto. Então existe uma gramática livre do
contexto G tal que L(G) = L.
O problema AGLC é Turing decidivel (ver demonstração (*)). Logo, existe uma máquina de
Turing M que decide AGLC .
Consideremos a seguinte máquina de Turing M 0 que decide L:
M’ = No input w faça:
1. Execute a máquina M em < G, w >.
2. Se M aceita < G, w >, aceita.
3. Se M rejeita < G, w >, rejeita.
(*)
A máquina M que decide AGLC é descrita a seguir (conforme visto em aula):
M = No input < G, w > faça:
1. Transforme G em uma gramática na forma normal de Chomsky G’.
2. Calcule n = tamanho de w.
3. Execute todas as derivações de G0 com 2n − 1 passos de derivação a partir da variável start
S.
4. Se w é gerada em uma destas derivações, aceita.
5. Caso contrário, rejeita.
QUESTÃO 4- VALOR 10 Pontos: Mostre que toda linguagem Turing reconhecı́vel é gerada
por um enumerador.
2
Solução: Seja L uma linguagem Turing reconhecı́vel. Então existe uma máquina de Turing
M tal que w ∈ L se e somente se M pára em qa ao receber o input w. Seja {w1 , w2 , ..., wn , ....} o
conjunto enumerável de todos os strings finitos sobre o alfabeto Σ = {0, 1}. Considere o seguinte
enumerador:
E:
1. i = 1
2. Enquanto i ≥ 1 faça:
3. Execute i passos de M nos strings w1 , w2 , w3 , ..., wi .
4. Imprima cada string wj para os quais M pára em qa até i passos de execução.
5. i = i + 1
É claro que L(E) = L, pois as palavras impressas por E são exatamente aquelas aceitas por
M , que por sua vez são exatamente as palavras de L.
3
Download