cap1_automatos de pilha

32
CAPÍTULO 1 AUTOMATOS DE PILHA E LINGUAGENS LIVRES DE CONTEXTO As Linguagens Regulares foram caracterizadas como linguagens geradas por gramáticas regulares e aceitas por autômatos finitos. Agora, vamos apresentar uma classe de máquinas, os autômatos de pilha, que aceitam as linguagens livres de contexto. Um autômato de pilha é uma máquina de estado finito ampliada com uma memória externa. A adição de uma pilha a uma máquina de estado finito, provê o autômato de pilha da capacidade de administrar uma memória do tipo first-in , last-out. 1.1 AUTOMATO DE PILHA Foi demonstrado que a linguagem L= {a n b n n 0} não é aceita por um autômato finito. A restrição de que o autômato tenha um número finito de estados, não permite que o mesmo possa memorizar um número qualquer de a’s da entrada. Para reconhecer uma linguagem L, uma máquina precisa ter a habilidade de recordar o processamento de qualquer número finito de a’s. Para tanto, um novo tipo de autômato é construído, dotando a função de transição deste da capacidade de utilizar uma memória não limitada. Assim, uma pilha é adicionada ao autômato finito, para construir uma nova máquina, o autômato de pilha (PDA). As operações de pilha somente modifica o topo da pilha. O operação push coloca um elemento no topo da pilha e a operação pop remove o elemento do topo da pilha. Definição 1.1.1 Um Autômato de Pilha é uma sêxtupla M = (Q, , , , q 0 , F), onde Q é um conjunto de estados, é um conjunto finito de 1

Upload: davi-a-q-santos

Post on 02-Jan-2016

73 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Cap1_automatos de Pilha

CAPÍTULO 1

AUTOMATOS DE PILHA E LINGUAGENS LIVRES DE CONTEXTO

As Linguagens Regulares foram caracterizadas como linguagens geradas por gramáticas regulares e aceitas por autômatos finitos. Agora, vamos apresentar uma classe de máquinas, os autômatos de pilha, que aceitam as linguagens livres de contexto. Um autômato de pilha é uma máquina de estado finito ampliada com uma memória externa. A adição de uma pilha a uma máquina de estado finito, provê o autômato de pilha da capacidade de administrar uma memória do tipo first-in , last-out.

1.1 AUTOMATO DE PILHA

Foi demonstrado que a linguagem L= {anbn n 0} não é aceita por um autômato finito. A restrição de que o autômato tenha um número finito de estados, não permite que o mesmo possa memorizar um número qualquer de a’s da entrada.

Para reconhecer uma linguagem L, uma máquina precisa ter a habilidade de recordar o processamento de qualquer número finito de a’s. Para tanto, um novo tipo de autômato é construído, dotando a função de transição deste da capacidade de utilizar uma memória não limitada.

Assim, uma pilha é adicionada ao autômato finito, para construir uma nova máquina, o autômato de pilha (PDA). As operações de pilha somente modifica o topo da pilha. O operação push coloca um elemento no topo da pilha e a operação pop remove o elemento do topo da pilha.

Definição 1.1.1

Um Autômato de Pilha é uma sêxtupla M = (Q, , , , q0 , F), onde Q é um conjunto de estados, é um conjunto finito de símbolos, chamado alfabeto de entrada, é um conjunto finito de símbolos, chamado alfabeto de pilha, q0 é o estado inicial, F Q é o conjunto de estados finais e é uma função de transição de Q x ({}) x ({}) em Q x ({}).

Um PAD tem dois alfabetos: um alfabeto de entrada , usado para representar as entradas do autômato e um alfabeto de pilha , cujos elementos são armazenados na pilha. Os símbolos de são representados por letras maiúsculas, enquanto os símbolos de , por letras minúsculas.A pilha será representada por uma palavra de , sendo o elemento mais a esquerda aquele que se encontra no topo da pilha. Letras gregas representam palavras do alfabeto de pilha. A notação A representa uma pilha que tem o elemento A em seu topo. A pilha vazia é indicada por .

1

Page 2: Cap1_automatos de Pilha

Um PAD consulta o estado corrente, um símbolo de entrada e o símbolo no topo da pilha para então determinar a transição a ser efetuada. A função de transição lista todas as possíveis transições para um dado estado, símbolo de entrada e símbolo no topo da pilha.

O valor da função de transição (qi , a , A) = {[qj ,B] , [qk , C]} indica que duas transições são possíveis quando o autômato está no estado qi e processa o símbolo de entrada a, tendo A no topo da pilha.

A transição

[qj, B] (qi, a, A)

conduz a máquina aos seguintes procedimentos:

i) mudar do estado qi para qj

ii) processar o símbolo a (avança o cabeçote de leitura)iii) remover A do topo da pilha (operação pop)iv)colocar B no topo da pilha

O domino da função de transição permite como símbolo de entrada e como símbolo de topo da pilha. Um como argumento da função de transição especifica que o valor da componente não deve ser consultado ou modificado pela transição. A aplicabilidade da transição é completamente determinada pelas posições que não contém lambada.

Se a posição do símbolo de entrada contém , a transição não processa o símbolo de entrada.

As seguintes transições produzem as ações indicadas:

i) [qi, ] (qi, , A) : pop A, sem processar a entrada

ii) [qi, A] (qi, , ) : push A na pilha, sem alterar o estado ou a entrada

iii) [qi, ] (qj, a, ) : esta transição torna o PDA semelhante a um autômato

Uma configuração de um PDA é representada pela tripla [qi , w, ], onde qi é o estado da máquina, w é a entrada não processada e é o conteúdo da pilha.

2

novo estado

novo símbolo no topo da pilha

símbolo atual na pilha

símbolo atual na entrada

estado atual

Page 3: Cap1_automatos de Pilha

A notação [qi, w, ] [qj, v, ], indica que a configuração [qj, v, ] pode ser obtida de [qi, w, ] por uma simples transição. Como já indicado, representa o resultado de uma seqüência de zero ou mais transições.

A computação de um PDA é uma seqüência de transições começando com a máquina no estado inicial e a pilha vazia.

Exemplo 1.1.1

O PDA M abaixo reconhece a linguagem {an bn n 0}

M: Q = {q0, q1}

= {a, b}

= {A}

F = {q0, q1}

: (q0, a, ) = {[q0, A]}

(q0, b, A) = {[q1, ]}

(q1, b, A) = {[q1, ]}

O processamento da entrada aaabbb é o seguinte:

[q0, aaabbb, ] [q0, aabbb, A]

[q0, abbb, AA]

[q0, bbb, AAA]

[q1, bb, AA]

[q1, b, A]

[q1, , ]

Dizemos que uma computação teve sucesso quando ela aceita a palavra de entrada. Quando a computação processa a palavra por inteiro e termina em uma configuração de não aceitação, nós dizemos que ela não teve sucesso. Devido a natureza não determinística da função de transição pode existir computações que não processam a palavra por inteiro. Tais computações são também consideradas sem sucesso.

Definição 1.1.2

Seja M = (Q, , , , q0 , F) um PDA. Uma palavra w * é aceita por M se existe uma computação

[q0, w, ] [qi, , ]

3

M

M

M

Page 4: Cap1_automatos de Pilha

onde qiF. A linguagem de M, denotado por L(M), é o conjunto de palavras aceitas por M.

Exemplo 1.1.2

O PDA M abaixo aceita a linguagem {wcwt w{a, b}*}

M: Q = {q0 , q1} : (q0 , a , ) = {[q0 , A]}

= {a , b , c} (q0 , b , ) = {[q0 , B]}

= {A , B} (q0 , c , ) = {[q1 , ]}

F = {q1} (q1 , a , A) = {[q1 , ]}

(q1 , b , B) = {[q1 , ]}

O processamento da palavra z = abbcbba é o seguinte:

[q0 , abbcbba , ] [q0 , bbcbba , A]

[q0 , bcbba , BA]

[q0 , cbba , BBA]

[q1 , bba , BBA]

[q1 , ba , BA]

[q1 , a , A]

[q1 , , ]

Um PDA é dito ser determinístico se existe, no máximo, uma transição para cada combinação de estado, símbolo de entrada e símbolo no topo da pilha.

Duas transições [qj, B] (qi, u, A) e [qk, C] (qi, v, B) são ditas compatíveis, se qualquer uma das seguintes condições é satisfeita:

i) u = v e A = B

ii) u = v e A = ou B =

iii) A = B e u = ou B =

iv) u = ou v = e A = ou B =

Transições compatíveis podem ser aplicadas às mesmas configurações de máquina. Um PAD é determinístico se não contém transições compatíveis distintas. Os PDA’s dos exemplos anteriores são compatíveis.

Exemplo 1.1.3

4

Page 5: Cap1_automatos de Pilha

A linguagem L = {an n 0} {anbn n 0} contém palavras somente com a’s e palavras com igual número de a’s e b’s. No PDA a seguir apresentado, que reconhece L, a pilha é usada para recordar o número de a’s processados até que um b seja encontrado e a computação seja concluída.

Q = {q0, q1, q2} (q0, a, ) = {[q0, A]}

= {a, b} (q0, , ) = {[q2, ]}

= {A} (q0, b, A) = {[q1, ]}

F = {q1, q2} (q1, b, A) = {[q1, ]}

(q2, , A) = {[q2, ]}

Observe que existem duas transições que podem ser aplicadas quando o autômato se encontra no estado q0 e a cabeça de leitura aponta para o símbolo a. Uma palavra de forma anbn, com n > 0, é aceita por uma computação que permanece nos estados q0 e q1. Se uma transição para o estado q2 ocorrer após o processamento do último a da subpalavra an, a pilha é esvaziada e a entrada é aceita. Caso o autômato passe para o estado q2 em situação diferente desta última, a computação não terá sucesso.

Exemplo 1.1.4

O PAD M, abaixo especificado, aceita os palindromos sobre o alfabeto {a, b} de comprimento par, isto é, L(M) = {wwt w {a, b}* e o comprimento de w é par}

M: Q = {q0, q1} (q0, a, ) = {[q0, A]}

= {a, b} (q0, b, ) = {[q0, B]}

= {A, B} (q0, , ) = {[q1, ]}

F = {q1} (q1, a, A) = {[q1, ]}

(q1, b, B) = {[q1, ]}

Uma computação de M é concluída com sucesso se M permanecer em q0

enquanto processa w por inteiro, passando para o estado q1 ao processar o primeiro símbolo de wt. Caso o estado q1 não seja alcançado imediatamente após o processamento do último símbolo de w, a computação não terá sucesso.Diferentemente do exemplo 1.1.2, neste exemplo não existe uma marca que indique o meio da palavra wwt. Mesmo assim, devido ao não determinismo de M, é possível a máquina reconhecer wwt.

1.2 VARIAÇÕES SOBRE PDA’s

5

Page 6: Cap1_automatos de Pilha

Autômatos de Pilha são freqüentemente definidos de um modo ligeiramente diferente daquele da definição 1.1.1. Nesta seção nós vamos examinar várias alterações em nossa definição de autômatos de pilha, que, no entanto, preservam o conjunto de palavras aceitas pelo PDA.

Junto com uma mudança de estado, uma transição de um PDA provoca três ações: adiciona ou retira um elemento da pilha e processa um símbolo de entrada. Um PDA é chamado de atômico se cada uma de suas transições apresenta apenas uma dessas ações. As transições de um PDA atômico tem a seguinte forma:

[qj , ] (qi , a, ) processo o símbolo a[qj , ] (qi , , A) pop A[qj , A] (qi , , ) push A

Teorema 1.2.1

Se M um PDA. Existe um PDA atômico M’ tal que L(M’) = L(M)

Prova:

Para construir M’, as transições não atômicas de M são substituídas por uma seqüência de transições atômicas. Seja [qj, B] (qi, a, A) uma transição de M. A transição atômica equivalente requer dois novos estados P1 e P2 e as seguintes transições:

[p1,] (qi, a, )(p1,,A) = {[p2, ]}(p2, , ) = {[qi, B]}

De modo semelhante, uma transição que muda o estado e realiza duas ações adicionais pode ser substituído por duas transições atômicas. Removendo-se todas as transições não atômica produz um PDA atômico.

Uma transição estendida é uma operação sobre um PDA que insere na pilha uma palavra * cujo comprimento é maior que 1 (> 1) no lugar de um simples elemento de . Um PDA que contem transições estendidas é chamado de PDA estendido.A transição [qj, BCD] (qi, , A) insere BCD na pilha no lugar de A.

Teorema 1.2.2

Seja M um PDA estendido. Então, existe um PDA M' tal que L(M') = L(M).Prova:

6

Page 7: Cap1_automatos de Pilha

Para transformar M em M' basta substituir cada uma das transições estendidas de M por um conjunto de transições simples.

Assim, a transição [qj, Ak ... A2A1] (qi, , A) pode ser substituído pelo seguinte conjunto de k transições:

[ p1, A1 ] (qi, , A)(p1, , ) = { [ p2, A2 ] }(p2, , ) = { [ p3, A3 ] }.. (pk-1, , ) = { [ qj, A1 ] }

Exemplo 1.2.1

Seja L = {anb2nn 1}. Um PDA, um PDA atômico e um PDA estendido são construídos para aceitar L. Para todos eles = {a, b}, = {A}, F = {q1} e q0 são os mesmos.

PDA PDA atômico PDA estendidoQ = {q0, q1, q2} Q = {q0, q1, q2, q3, q4} Q = {q0, q1}(q0, a, ) = { [q2, A] } (q0, a, ) = { [q3, ] } (q0, a, ) = { [q0, AA] }(q2, , ) = { [q0, A] } (q3, , ) = { [q2, A] } (q0, b, A) = { [q1, ] }(q0, b, A) = { [q1, ] } (q2, , ) = { [q0, A] } (q1, b, A) = { [q1, ] }(q1, b, A) = { [q1, ] } (q0, b, ) = { [q4, ] }

(q4, , A) = { [q1, ] }(q1, b, ) = { [q4, ] }

De acordo com a definição 1.1.2, uma palavra w é aceita por um PDA se existe uma computação que processa a palavra por inteiro, deixando o PDA em um estado final e a pilha vazia. Este tipo de aceitação é referido como aceitação por estado final e pilha vazia. Vamos relaxar esse conceito, para permitir a definição de aceitação, em termos apenas de estado final ou de pilha vazia. Tais definições, no entanto, não alteram o conjunto das linguagens reconhecidas pelo autômatos de pilha.

Definição 1.2.1

i) Uma palavra w é aceita por estado final se existe uma computação [q0, w, ] [qi, , ], onde qi F e *.

ii) Uma palavra w é aceita por pilha vazia se existe uma computação [q0, w, ] [qi, , ], sem que nenhuma restrição seja feita sobre qi.

Uma linguagem aceita por estado final será denotado por LF, enquanto uma aceita por pilha vazia será denotada por LV.Lema 1.2.3

7

Page 8: Cap1_automatos de Pilha

Seja L uma linguagem aceita por estado final pelo PDA M = (Q, , , , q0, F). Então, existe um PDA que aceita L por estado final e pilha vazia.

Prova:

Seja o PDA M’ = (Q {qf}, , , ’, q0, {qf}), construído a partir de M. O estado final de M’ é o novo estado qf e as transições de M’ são aquelas de M acrescidas de:

’(qi, , ) = { [qf, ] }, para todo qi F’(qf, , A) = { [qf, ] }, para todo A .

As palavras aceitas por M’ são exatamente aquelas cujas computações, a partir de q0, conduzem M a um estado final. A partir deste as duas transições acrescidas, conduzem M’ para o estado qf para em seguida esvaziar a pilha. Assim, M’ aceita as mesmas palavras que M.

Observe que [q0, w, ] [qi, , ]

é uma computação de M que termina com a aceitação de w por estado final (qiF).

Assim, usando as transições de ’ acrescidas, temos:

[q0, w, ] [qi, , ] [qf, , ] [qf, , ]

Lema 1.2.4

Seja L uma linguagem aceita por um PDA M = (Q, , , , q0, F) por pilha vazia. Então, existe um PDA M’ que aceita L por estado final e pilha vazia.

Prova:

Defina o PDA M’ = (Q, , , , q0, Q), idêntico a M, exceto pelo fato de que todos os estados de M’ são finais. Assim, como toda computação de M termina com pilha vazia, sendo tambem uma computaçao de M’, e todos os estados de M’ são finais, LE(M) = L(M’).

Os lemas 1.2.3 e 1.2.4 mostram que toda linguagem aceita por estado final ou pilha vazia é também aceita por estado final e pilha vazia. Claramente, qualquer linguagem aceita por estado final e pilha vazia é também aceita por um automato de pilha que utiliza uma forma de aceitação menos restritiva, isto é, somente por estado final ou somente por pilha vazia.

Esta observação conduzem aos seguintes teoremas:Teorema 1.2.5

8

*M’

*M’

*M’

*M

Page 9: Cap1_automatos de Pilha

As seguintes três condições são equivalentes

i) A linguagem L é aceita por algum PDAii) Existe um PDA M1 com LF(M1) = Liii) Existe um PDA M2 com LE(M2) = L

1.3 AUTOMATOS DE PILHA E LINGUAGENS LIVRES DE CONTEXTO

A caracterização de autômatos pilha como reconhecedores de linguagens livre de contexto fica estabelecida mediante a explicitação de uma correspondência entre as computações de um PDA e as derivações de uma gramática livre de contexto.

Inicialmente nós vamos provar que toda linguagem livre de contexto é aceita por um PDA estendido. Para isto, as regras da gramática serão usadas para gerar as transições do PDA correspondente. Em seguida nós mostraremos que as linguagens aceitas pelos PDA’s são precisamente àquelas livre de contexto.

Vale lembrar que:

a) Uma gramática livre de contexto é uma quadrupla G=(,V,P,S) onde é o alfabeto de G, V um conjunto finito de variáveis, S um elemento destinguido de V e P é o conjunto finito de regras de produção, da forma A w, com AV e w(V)*

Exemplo 1.3.1

A gramática G =( {a , b}, {S,A}, {SAbAbA, AaA, A},S} ) é livre de contexto. Para comprovar isso, basta verificar a forma de suas produções.

b) Se L é uma linguagem livre de contexto, L pode ter a sua gramática expressa na Forma Normal de Greibach. Nesta forma, as produções da gramática são apresentas do seguinte três modos,

i) A aA1A2... An , ii) A a , iii) S ,

com a e Ak V - {S}, para k = 1, 2...., n.

Exemplo 1.3.2

A seguinte gramática livre de contexto G, que gera linguagem L={anbnn>0}, está na Forma Normal de Greibach.

G: S aABaB A aABaB B b

9

Page 10: Cap1_automatos de Pilha

A partir da gramática livre de contexto expressa na Forma Normal de Greibach, é fácil se construir um PDA que aceite as palavras geradas pela gramática. Tal PDA é muito simples e tem apenas dois estados: o estado inicial q0 e o estado final q1. Uma regra da forma SaA1A2....An gera uma transição do autômato que processa o símbolo a, coloca A1A2....An no topo da pilha e muda para o estado q1. As demais transições usam o símbolo de entrada e o símbolo do topo da pilha para determinar a transição a ser efetuada.

Para a gramática G livre de contexto do exemplo anterior, o PDA estendido M=(Q, , , , q0, F), que reconhece as palavras geradas por G é o seguinte:

M: Q = {q0,q1} : (q0,a, ) = { [q1, AB], [q1 , B] } = { a , b } (q1,a, A) = { [q1, AB], [q1 , B] } = { A , B } (q1,b, B) = { [q1, ] } F = {q1}

A seguir, apresentamos a geração da palavra w = aaabbb pela gramática G e o reconhecimento da mesma palavra pelo autômato de pilha estendido :

Geração de w Processamento de wS aAB [ q0, aaabbb, ] [q1, aabbb, AB]

aaABB [q1, abbb, ABB] aaaBBB [q1, bbb, BBB] aaabBB [q1, bb, BB] aaabbB [q1,b, B] aaabbb [q1, , ]

Observe que uma derivação em G consiste de sentenças formadas de um prefixo de terminais seguido de um sufixo de não terminais, isto é, variáveis. Já o processamento de um símbolo de entrada por M, corresponde a sua geração na derivação. A pilha do PDA contém as variáveis da sentença derivada.

Teorema 1.3.1

Seja L uma linguagem livre de contexto. Então existe um PDA que aceita L.

Prova

Seja G = (V, , P, S) uma gramática livre de contexto na Forma Normal de Greibach, que gera a linguagem L. Defina um PDA M = (Q, , , , q0, F) com segue:Q = {q0, q1} = = V - {S} F = {q1}

10

Page 11: Cap1_automatos de Pilha

*

n

8

8

1

*

1

*

n

*

*

*

: (q0,a, ) = { [q1,w], S aw P } (q1,a, A) = { [q1,w], A aw P e A V – {S} } (q0,, ) = { [q1, ] } , se S P

Primeiro vamos mostrar que L L(M). Depois mostraremos que L(M) L.

a) L L (M

Seja S uw uma derivação com u + e w V*. Vamos provar que existe uma computação em M, tal que:

[ q0, u, ] [ q1, , w ]

Esta prova é feita por indução sobre o tamanho da derivação e utiliza a correspondência existente entre as derivações em G e as computações em M.

Base: Para uma derivação de tamanho um, S aw, a transição gerada pela produção A aw mostra que

[ q0, a, ] [ q1, , w ] é uma computação de M.

Hipótese de Indução: Suponha que toda forma sentencial uw, gerada por S uw, existe uma computação em M, tal que

[ q0, u , ] [ q1, , w ].

Indução: Seja S uw uma derivação, com u = va + e w V*. Esta derivação pode ser escrita como

S vAw2 uw, onde w = w1w2 e A aw1 é uma regra em P.

Pela hipótese de indução e pela transição de M da forma [q1, w1][ q1, a, A ], a seguinte computação é produzida:

[ q0, va, ] [ q1, a, Aw2 ] [ q1, , w1 w2 ].

Para toda palavra uL, u1, existe uma computação em M que a aceita u e tal computação corresponde a derivação S u. No caso de L, S é uma produção de G e a computação [ q0, , , ] [ q1, , ].

b) L(M) L.

Isto é feito mostrando-se que para toda computação

[ q0, , u, ] [ q1, , w ],

11

Page 12: Cap1_automatos de Pilha

*existe uma derivação correspondente S uw em G.

A prova é feita por indução e fica como exercício.

Para completar a caracterização de que as linguagens livres de contexto são precisamente aquelas aceitas pelos autômatos de pilha, nós precisamos mostrar que toda a linguagem aceita por um PDA é livre de contexto. Isto é feito construindo-se as regras da gramática a partir da transições do PDA, do seguinte modo:

Seja M = (Q, , , , q0, F) um PDA dado. Construa o PDA estendido M' com a função de transição ' igual a função acrescida das seguintes duas transições:

i) ' (qi, u, A) = { [qj, A] A } , sempre que [qj, ] (qi, u, )ii) ' (qi, u, A) = { [qj, BA] A } , sempre que [qj, B] (qi, u, )

A interpretação para estas transições é que uma transição de M que não remove um elemento da pilha pode ser considerada como o resultado de uma transição que inicialmente remove o símbolo do topo da pilha e em seguida, uma outra transição, reinsere este símbolo no topo da pilha. Qualquer palavra aceita por uma computação que use uma das novas transições pode, também, ser obtida pela aplicação da transição original. Então, L(M) = L(M’).

Agora, construa a gramática G = (V, , P, S), a partir das transições de M', onde

é o mesmo de M’ V é composto do símbolo S e de símbolos da forma <qi,A,qj>, onde qi e

qj são estados de M' e A {}.

A variável <qi,A,qj> representa uma computação que começa no estado qi, termina em qj e remove o símbolo A da pilha.

O conjunto P das regras de G é construído do seguinte modo:

1. S q0, , qj para cada qj F

2. Cada transição [qj, B] (qi, x, A), onde A e B {}, gera o conjunto de regras { <qi, A, qk> x<qj, B, qk> qk Q }

3. Cada transição [qj, BA] (qi, x, A), onde A gera o conjunto de regras

{ <qi, A, qk> x <qj, B, qn> <qn, A qk> qk, qn Q }

4. Para cada estado qk Q

12

Page 13: Cap1_automatos de Pilha

<qk, , qk>

Uma derivação começa com uma regra do tipo 1, cujo lado direito representa uma computação que começa no estado q0 , termina num estado final e a pilha está vazia, isto é, uma computação de sucesso em M'.

As regras do tipo 2 e 3 traçam as ações da máquina. As regras tipo 3 correspondem às transições estendidas de M'. Em uma computação, essas transições provocam a redução do tamanho da pilha. O efeito da regra correspondente é introduzir uma variável nova na derivação.

As regras do tipo 4 são usadas para terminar as derivações. Assim, as regras <qk, , qk> representam a computação que parte do estado qk para ele mesmo, sem altera o conteúdo da pilha, isto é, uma computação nula.

Exemplo 1.3.1

Aplique a construção descrita para obter a gramática G que gera a linguagem aceita pelo seguinte PDA M:

M: Q = {q0, q1} = {a, b, c} = {A}F = {q1}(q0, a, ) = {[q0, A]}(q0, c, ) = {[q1, ]}(q1, b, A) = {[q1, ]}

Solução

Construa o PDA estendido M’, com todos os elementos iguais aos de M, exceto as transições que são formados por aquelas de M ( ) acrescidas de

’(q0, c, A) = {[q1, A]}’(q0, a, A) = {[q0, AA]}

As regras de G são dadas a seguir, devidamente precedidas das transições que lhe deram origem.

Transição Regra da Gramática

S q0, , q1

(q0, a, ) = {[q0, A]} q0, , q1 a q0, A, q0q0, , q1 a q0, A, q1

13

Page 14: Cap1_automatos de Pilha

(q0, a, A) = {[q0, AA]} q0, A, q0 a q0, A, q0 q0, A, q0q0, A, q1 a q0, A, q0 q0, A, q1q0, A, q0 a q0, A, q1 q1, A, q0q0, A, q1 a q0, A, q1 q1, A, q1

(q0, c, ) = {[q1, ]} q0, , q0 c q1, , q0 q0, , q1 c q1, , q1

(q0, c, A) = {[q1, A]} q0, A, q0 c q1, , q0 q0, A, q1 c q1, , q1

(q1, b, A) = {[q1, ]} q1, A, q0 b q1, , q0 q1, A, q1 b q1, , q1

q0, , q0 q1, , q1

A relação entre as computações do PDA do exemplo 1.3.1 e as derivações na gramática G obtida a partir daquele, para a palavra w = aacbd, é apresentada a seguir.

[q0, aacbb, ] [q0, acbb, A] S q0, , q1[q0, cbb, AA] aq0, , q1[q1, bb, AA] aaq0, A, q1 q1, A, q1[q1, b, A] aacq1, A, q1 q1, A, q1[q1, , ] aacbq1, , q1 q1, A, q1

aacbq1, A, q1 aacbbq1, , q1 aacbb

Observe que a derivação de w começa coma aplicação da regra S. Os passos seguintes correspondem ao processamento de um símbolo de entrada M’. A primeira componente da variável mais a esquerda contém o estado da computação. Já a terceira componente da variável mais a direita contém o estado final no qual a computação termina. A pilha pode ser recuperada a partir da segunda componente da variável.

A variável q0, , q1, obtida pela aplicação da regra S, indica que a computação que leva do estado q0 para o estado q1 não requer nenhuma alteração da pilha. O resultado da aplicação da regra subsequente, sinaliza a necessidade de uma computação que de q0 para q1 que remove A do topo da pilha. A aplicação da quarta regra demonstra a necessidade de se aumentar as transições de M quando contém transições que não remove um símbolo da pilha. A aplicação da regra q0, A, q1 c q1, , q1 representa a computação que processa o símbolo c sem remover o símbolo A do topo da pilha.

14

Page 15: Cap1_automatos de Pilha

O teorema seguinte, para o qual não apresentaremos a prova, estabelece a correspondência entre PDA’s e LLC’s, isto é, Autômatos de Pilha e Linguagens Livres de Contexto.

Teorema 1.3.2

Seja M um PDA. Então existe uma gramática livre de contexto G, tal que L(M)=L(G).

1.4 O LEMA DO BOMBEAMENTO PARA LINGUAGENS LIVRE DE CONTEXTO

Nesta seção vamos admitir que as gramáticas livres de contexto se encontrem Na Forma Normal de Chomsky. Desse modo, a derivação de uma palavra em tais gramáticas pode ser representada por uma árvore binária.

Lema 1.4.1

Seja G uma gramática livre de contexto, expressa no forma normal de Chomsky, Aw uma derivação de w * e T a árvore de derivação de w. Se a profundidade de T é n, então w 2n-1

Prova

É feita por indução na profundidade da árvore de derivação.

Base: Uma árvore de derivação com profundidade 1 que representa a derivação de uma palavra de uma gramática G, uma vez que G esta na Forma Normal de Chomsky, apresenta uma das seguintes formas:

Em ambos os casos o tamanho da palavra derivada, ou a, é menor ou igual a 1, isto é, 20 = 21-1.

Hipótese Indutiva: Suponha que toda palavra w’ derivada em G e árvore de derivação de profundidade igual ou menor a n, vale que w2n-1

Indução: Seja Aw uma derivação, cuja árvore de derivação tem profundidade n+1. A derivação de w pode ser escrita como ABC w, onde Bu, Cv e w=uv. A árvore de derivação de Aw é construída de TB e TC, as árvores de derivação de Bu e Cv.

15

*

*

* ** *

* *

Page 16: Cap1_automatos de Pilha

As árvores de derivação TB e TC têm profundidade menor ou igual a n. Assim, por hipótese de indução, u2n-1 e v2n-1. Desse modo,

w=uv=u+v 2n-1+2n-1 = 2.2n-1

2.2n-1 = 2n

2n

Corolário 1.4.2

Seja G = (V, , P, S) uma gramática livre de contexto, na forma normal de Chomsky e Sw a derivação de wL(G). Se w2n, então a árvore de derivação de w tem profundidade no máximo n+1.

Prova:Seja G=(V, , P, S) uma gramática na Forma Normal de Chomsky que gera L e seja n=card(v). Nós vamos mostrar que todas as palavras em L com tamanho maior ou igual a 2n podem ser decomposta de modo a satisfazer as condições do lema do Bombeamento. Seja zL(G) uma palavra e Sz uma derivação de z em G. Pelo corolário, existe uma rota de tamanho, no mínimo, n+1=card(v)+1 na árvore de derivação. Então, essa rota consiste de n+2 nós, com somente um deles sendo um símbolo terminal. Isso nos garante que deve existir alguma variável A que deve ocorrer duas vezes na rota. A árvore de derivação pode ser dividida em três subárvores, como segue

16

*

*

Page 17: Cap1_automatos de Pilha

A derivação de z consiste das subderivações

1. Sr1Ar2

2. r1u3. AvAx4. Aw5. r2y

A subderivação 3 pode ser obtida ou substituída por um certo número de vezes antes da aplicação da subderivação 4. Assim, a derivação resultante gera as palavras uviwxiyL(G).

O lema do bombeamento estabelece uma propriedade de periodicidade para palavras de uma linguagem livre de contexto. Derivações recursivas em uma gramática livre de contexto têm a forma AuAv. Árvores de derivação são usadas para estabelecer condições que garantem a presença de subderivações recursivas em uma derivação suficientemente longa.

Definição 1.4.1

Uma gramática livre de contexto G=(V, , P, S) esta na Forma Normal de Chomsky se cada regra é da forma

i) ABCii) Aaiii) S, onde B, C V-{S}

Embora não seja aqui demonstrado, é importante salientar que existe um algoritmo para construir uma gramática M’ = (V, , P’, S) na Forma Normal de Chomsky, a partir de uma gramática livre de contexto G = (V, , P, S).

Teorema 1.4.3 (Lema do bombeamento para LLC)

Seja L uma linguagem livre de contexto. Existe um número k, dependendo de L, tal que qualquer palavra zL, como zk, pode ser escrita como z = uvwxy, onde

i) vwx Kii) v+x 0iii) uviwxiy L, para i 0

17

*

*

**

Page 18: Cap1_automatos de Pilha

Exemplo 1.4.1

A linguagem L = { aibici i 0 } não é livre de contexto.

Prova

Suponha que L é livre de contexto. Pelo lema do bombeamento, existe um número k tal que, para toda palavra zL, com z k, z pode ser decomposta em z = uvwxz, satisfazendo as seguintes condições:

i) vwx kii) v+x 0iii) uviwxiy L, para i 0

Fazendo i = k, temos z = akbkck L, com z = 3k k. Assim, podemos decompor z em uvwxy, satisfazendo i, ii e iii.

Vamos considerar as possibilidades de formação de v e x, considerando que vwxk, o que claramente determina ser vwx composto de um mesmo tipo de símbolo ou de dois tipos diferentes de símbolos e nunca de três tipos diferentes de símbolos.

a) vwx é subpalavra de ak, bk ou ck

Nesse caso, x ou v é diferente de e formado de apenas um tipo de símbolo, o bombeamento de um deles ou dos dois, aumenta o número do(s) símbolo(s) bombeado(s). Desse modo a igualdade entre o numero de a’s, b’s e c’s não será preservada. Portanto, uviwxiy L.

b) vwx é subpalavra de akbk ou bkck, tendo, obrigatoriamente, dois símbolos diferentes.

Aqui, se qualquer um de v ou x contiver dois símbolos diferentes, ao bombeá-los teremos b antecedendo a ou c antecedendo b. De qualquer modo não será preservada a condição de que a precede b, que precede c. Portanto, uviwxiy L.

Exemplo 1.4.2

A linguagem L = { wa* w é primo } não é livre de contexto.

Suponha que L é livre de contexto. Então, pelo lema do bombeamento, existe um k tal que para qualquer palavra z L, z k, z pode ser decomposta em uvwxy, onde

iv) vwx kv) v+x 0vi) uviwxiy L, para i 0

Seja n um primo maior que k. Como an L e a k, an pode ser decomposta em uvwxy, tal que uviwxiy satisfaz o lema do bombeamento.

18

Page 19: Cap1_automatos de Pilha

Seja m = u+w+y. Comuvwxy = n, temos que v+x = n – m.

O comprimento de uviwxiy = u+ i.v+w+ i.x+y = m + i (n – m) = u+w+y+ i.(v+x)

De um modo particular, fazendo i = m, temos

uvmwxmy = m + m(n - m)= m (1 + (n - m)), que é divisível por m, e portanto não é primo.

Assim, uviwxiy L. Portanto, L não é livre de contexto.

1.5 PROPRIEDADES DOFECHO PARA LINGUAGENS LIVRES DE CONTEXTO

A flexibilidade das regras das gramáticas livres de contexto é usada para estabelecer propriedades de fecho sobre o conjunto das linguagens livres de contexto. Operações que preservam as linguagens livres de contexto são ferramentas que podem ser usadas para se obter outras linguagens livres de contexto. Essas operações, combinadas com o Lema do Bombeamento podem ser usadas para mostrar que existem certas linguagens que não são Livres de Contexto.

Vamos apresentar a seguir alguns resultados sobre Linguagens Livres de Contexto sem no entanto entrarmos nos detalhes de suas provas.

Teorema 1.5.1

O conjunto das Linguagens Livres de Contexto é fechado sobre as operações de União, Concatenação e Estrela de Kleene.

Teorema 1.5.2

O conjunto das Linguagens Livres de Contexto não é fechado sobre Interseção ou Complemento .

Teorema 1.5.3

Seja R uma linguagem regular e L uma linguagem livre de contexto. Assim, RL é livre de contexto.

1.6 AUTÔMATO DE PILHA COM DUAS PILHAS

19

Page 20: Cap1_automatos de Pilha

Os Autômatos Finitos aceitam as linguagens regulares. Os Autômatos de Pilha aceitam as linguagens livres de contexto. A ampliação do conjunto das linguagens aceitas pelos autômatos de pilha pode ser feita coma a adição de mais uma pilha ao autômato. È o caso de se perguntar: um autômato com duas pilhas é melhor que aquele com somente uma?

Definição 1.6.1

Um Autômato de Pilha com duas pilhas é uma sextupla (Q, , , , q0, F), onde Q, , , q0 e F têm o mesmo significado que aqueles de um autômato de uma pilha. A função de transição mapeia Q x ({}) x ({}) x ({}) em um subconjunto de Q x ({}) x ({}).

A transição de um estado qi para qj se dá mediante o processamento de um símbolo de entrada x e a leitura dos símbolos que se encontram nos topos das duas pilhas. Assim,

( qi, x, A, B) = { [ qj, M, N ], ...}

significa que o PDA passa do estado qi para o estado qj, o símbolo x é processado e os topos das pilhas, A e B são substituídos por M e N, respectivamente.

Exemplo 1.6.1

O PDA com duas pilhas a seguir definido, aceita a linguagem L = { aibicii 0 }. A primeira pilha é usada para comparar o número de a's e b's, enquanto a segunda pilha é usada para comparar o número de b's e c's.

M: Q = {q0 , q1, q2} : (q0 , , , ) = {[q2 , , ]}

= {a , b , c} (q0 , a , , ) = {[q0 , A , ]}

= {A} (q0 , b , A , ) = {[q1 , , A]}

F = {q2} (q1 , b , A , ) = {[q1 , , A]}

(q1 , c , , A) = {[q2 , , ]}

(q2 , c , , A) = {[q2 , , ]}

O diagrama de M é o seguinte:

20

Page 21: Cap1_automatos de Pilha

A palavra w = aabbcc tem o seguinte processamento:

[ q0 , aabbcc , , ] [ q0 , abbcc , A , ]

[ q0 , bbcc , AA , ]

[ q1 , bcc , A , A ]

[ q1 , cc , , AA ]

[ q2 , c , , A ]

[ q2 , , , ] Claramente, toda LCC é aceita por um autômato de 2 pilhas.

A linguagem aceita por um 2PDA, inclui, mas não está limitada as LLC.

A aceitação de {aibicii 0} por um autômato de 2 pilhas, mostra que as LLC são um subconjunto próprio da linguagem aceita pelo autômato com 2 pilhas.

Conforme vimos ao longo do curso, ai é uma linguagem regular aceita por DAF, akbi é livre de contexto aceita por um PDA e aibici é aceito por 2PDA. Pergunta: É necessário uma outra pilha para aceitar aibicidi ?

EXERCICIOS

1. Seja M o PDA

Q = { q0, q1, q2 } (q0, a, ) = { [q0, A] } = { a, b } (q0, , ) = { [q1, ] } = { A} (q0, b, A) = { [q2, ] } F = { q1, q2 } (q1, , A) = { [q1, ] }

(q2, b, A) = { [q2, ] } (q2, , A) = { [q2, ] }

a) Descreva a linguagem aceita por M.

21

Page 22: Cap1_automatos de Pilha

b) Mostre todas as computações das palavras aab, abb, aba em M.c) Mostre que aabb, aaab L(M).

2. Seja o PDA do exemplo 1.1.3.a) Trace todas as computações das palavras ab, abb, abbb em M.b) Mostre que aaaa, baab L(M).c) Mostre que aaa, ab L(M).

3. Construa um PDA que aceite cada uma das seguintes linguagens.d) { aibj i j }e) { aicjbi i, j 0 }f) { aibjck i + k = j }g) { w w {a, b }* , tendo w o mesmo número de a’s e b’s }h) { w w {a, b }*, tendo w duas vezes mais a’s que b’s }i) { aibi i 0 } a* b*j) { aibjck i = j ou j = k }k) { aibj i j }l) { aibj i j 2i }m) { ai+jbicj i, j 0 }n) O conjunto dos palíndromos sobre {a, b}

4. Construa um PDA com somente dois símbolos de pilha que aceite a linguagem { wdwR w {a, b, c}* }.

5. Usa a técnica do teorema 1.3.1 para construir um PDA que aceite a linguagem gerada pela gramática a seguir, expressa na Forma Normal de Greibach.

S aABA aBB A bA b B cB c

6. Seja M o seguinte PDA.

Q = { q0, q1, q2 } (q0, a, ) = { [q0, A] } = { a, b } (q0, b, A) = { [q1, ] } = { A } (q1, b, ) = { [q2, ] } F = { q2 } (q2, b, A) = { [q1, ] }

a) Descreva a linguagem aceita por M.b) Use a técnica do teorema 1.3.2, para construir uma gramática livre de

contexto G que gere L(M).c) Trace as computações para aabbbb em M.d) Dê uma derivação para aabbbb em G.

22

Page 23: Cap1_automatos de Pilha

7. Seja G uma gramática na Forma Normal de Greibach e M um PDA construído a partir de G. Prove que se [q0, u, ] [q1, , w], então existe uma derivação S uw em G que completa a prova do teorema1.3.1.

8. Seja L = { a2ibi i 0 }.a) Construa um PDA M1 com L(M1) = L.b) Construa um PDA atômico M2 com L(M2) = L.c) Construa um PDA estendido M3 com L(M3) = L.d) Mostre as computações da palavra aab em M1, M2 e M3 .

9. Seja L = { a2ib3i i 0 }.a) Construa um PDA M1 com L(M1) = L.b) Construa um PDA atômico M2 com L(M2) = L.c) Construa um PDA estendido M3 com L(M3) = L.d) Mostre as computações da palavra aabbb em M1, M2 e M3 .

10.Seja L a linguagem { w {a,b}* w tem um prefixo com mais b’s que a’s}. Por exemplo, baa, abba, abbaaa L, mas aab, aabbab L.a) Construa um PDA que aceite L por estado final.b) Construa um PDA que aceite L por pilha vazia.

11.Use o Lema do Bombeamento para provar que cada uma das linguagens a seguir não é livre de contexto.a) { ak k é um quadrado perfeito }b) { aibjcidj i, j 0 }c) { aib2iai i 0 }d) { aibjck i j k }e) { wwRw w {a, b}* }f) O conjunto dos prefixos de tamanho finito da palavra infinita

abaabaaabaaaab ... banban+1b...

12.Prove que cada uma das linguagens a seguir são livres de contexto.a) L1 = { aib2icji, j 0 }b) L2 = { ajbic2ii, j, k 0 }c) L1 L2 d) Prove que cada uma das linguagens a seguir são livres de contexto L1 = {

aibicjdji, j 0 }e) L2 = { ajbicidki, j, k 0 }f) L1 L2

13.Seja M um PDA do exemplo 1.1.1.a) Trace uma computação em M que aceite bbcbb.b) Use a técnica do teorema 1.3.2 para construir uma gramatica G que gera

L(M).c) Dê a derivação de bbcbb em G.

23

**

Page 24: Cap1_automatos de Pilha

14.Faça o que se pede.a) Construa um DAF N que aceite todas as palavras em {a,b}* com um

número par de a’s.b) Construa um PDA M que aceite { a3ibi i 0 }.c) Use a técnica do teorema 1.5.3 para construir um PDA M’ que aceite

L(N)L(M).d) Trace as computações que aceitam aaab em N, M e N’.

15.Seja G = (V,, P, S) uma gramática livre de contexto. Defina um PDA estendido M, como segue:

Q = {q0} = G

= G VF = {q0}(q0, , A) = {[q0, w]A w P}(q0, a, a) = {[q0, ]a }

Prove que L(M) = L(G).

16.Seja L uma linguagem livre de contexto sobre um alfabeto e a. Defina era(L) como sendo o conjunto obtido ao se remover as ocorrências de a’s das palavras de L. Assim, ara(L) é a linguagem L com as ocorrências de a’s apagadas. Por exemplo, se abab, bacb, aa L, então bb, bcb, e era(L). Prove que era(L) e livre de contexto.Sugestão: Converta a gramática que gera L na gramática que gera era(L).

17.Construa um PDA com duas pilhas que aceite as seguintes linguagensa) { aib2iai i 0 }b) { aibjaibj i, j 0 }c) { ww w {a, b}* }

18.

24