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