Teoria da Computação Segundo Semestre, 2014 Aula 7: Autômatos com Pilha DAINF-UTFPR Prof. Ricardo Dutra da Silva Vamos adicionar um memória do tipo pilha ao nossos autômatos para que seja possível aceitar linguagens como L = {a i b i i 0}. Como nos autômatos anteriores, teremos uma fita infinita e um cabeçote de leitura que armazena o estado atual da máquina. A pilha, como mostra a Figura 7.1, é uma memória infinita. Símbolos são colocados no topo da pilha e retirados do topo da pilha. Sempre que um elemento é colocado no topo ele empurra para baixo elementos já existentes na pilha. Quando um elemento é retirado do topo, os elementos abaixo dele são deslocados para cima, de forma que o elemento que estava imediatamente abaixo do topo passa a ocupar a posição do topo. fita cabeçote pilha 0 0 1 0... p A A. Figura 7.1: Representação de um autômato com pilha. Definição 7.1. Um autômato com pilha (PDA) é uma sêxtupla M = (Q, Σ, Γ, δ, q 0, F ), onde Q é um conjunto finito de estados; Σ é o alfabeto de entrada; Γ é o alfabeto da pilha; q 0 Q é o estado inicial; F é o subconjunto de estados finais de Q; δ é uma função δ : Q (Σ {λ}) (Γ {λ}) P(Q (Γ {λ})), chamada de função de transição. 1
2 Aula 7: Autômatos com Pilha O alfabeto da pilha será representado por letras maiúsculas e uma pilha vazia será denotada pela string vazia λ. No início da computação, o PDA começa no estado inicial, com a string de entrada na fita e com a pilha vazia. A função de transição será representada da seguinte maneira: δ(, a, A) = {(, B), (q k, C)}. A transição (, B) δ(, a, A), por exemplo, pode ser interpretada usando a ideia de uma máquina com pilha dada pela Figura 7.1. A transição faz com que a máquina: mude o estado de para ; processe o símbolo a; remova o símbolo A do topo da pilha; coloque o símbolo B no topo da pilha. O diagrama de estados do PDA terá como rótulos das arestas o símbolo de entrada a ser processado e as operações da pilha (qual elemento sai do topo/qual elemento entra no topo). A transição δ(, a, A) = {(, B)}, por exemplo, é representada como mostrado abaixo. a A/B O PDA muda do estado para o estado processando o símbolo a Σ. Ainda, o símbolo A Γ é removido do topo da pilha enquanto o símbolo B Γ, em seguida, é colocado no topo. Na função de transição, podemos ter λ como símbolo de entrada e como símbolo da pilha. Uma transição como (, B) δ(, a, λ) entra o estado e adiciona B no topo da pilha. a λ/b A transição (, λ) δ(, a, A) entra o estado e remove A do topo da pilha. a A/λ Outras transições possíveis são: (, B) δ(, λ, A) (entra estado, remove A da pilha e adiciona B na pilha) λ A/B
Aula 7: Autômatos com Pilha 3 (, λ) δ(, λ, A) (entra estado, remove A da pilha) λ A/λ (, λ) δ(, λ, A) (entra estado, adiciona A na pilha) λ λ/a (, λ) δ(, λ, λ) (entra estado ) λ λ/λ (, λ) δ(, λ, A) (tira A da pilha) λ A/λ (, A) δ(, λ, λ) (coloca A na pilha) λ λ/a (, λ) δ(, a, λ) (muda do estado para o estado processando o símbolo a Σ; equivalente à transição de um autômato finito) a λ/λ Exemplo 7.1 Podemos construir uma PDA M que aceita a linguagem {a i b i i 0}. A computação começa com a string de entrada w na fita e a pilha vazia. Quando um a é processado, o símbolo A é colocado na pilha. Quando um b é processado, o símbolo no topo da pilha é removido.
4 Aula 7: Autômatos com Pilha Definimos o PDA M = ({q 0, q 1 }, {a, b}, {A}, δ, q 0, {q 0, q 1 }), δ(q 0, a, λ) = {(q 0, A)} δ(q 0, b, A) = {(q 1, λ)} δ(q 1, b, A) = {(q 1, λ)} com diagrama de estados a λ/a q 0 q 1 Ainda precisamos definir como é a computação em um PDA, as strings aceitas e a linguagem reconhecida. Vamos iniciar introduzindo o conceito de configuração instantânea e como ela é usada para demonstrar uma computação num PDA. Definição 7.2. A configuração instantânea de um PDA M é dada por uma tripla [, w, α], onde é o estado atual, w a substring ainda não processada e α é a string na pilha. A notação [, w, α] [, v, β] indica que a configuração [, v, β] pode ser obtida de [, w, α] por uma única transição do PDA M. A notação [, w, α] [, v, β] indica que a configuração [, v, β] pode ser obtida de [, w, α] por zero ou mais transições do PDA M. Exemplo 7.2 A computação da string aabb no PDA do Exemplo 7.1 pode ser descrita usando configurações instantâneas. O PDA começa o processamento no estado inicial, com a string de entrada na fita e com a pilha vazia. Essa configuração é dada pela tripla [q 0, aabb, λ]. No estado q 0 e lendo um a, existe uma única transição possível: δ(q 0, a, λ) = {(q 0, A)}. A computação é descrita abaixo. O símbolo a foi processado e o símbolo A foi colocado no topo da pilha. O processamento seguinte é idêntico e um novo A é empilhado.
Aula 7: Autômatos com Pilha 5 [q 0, bb, AA] O próximo processamento segue a a transição δ(q 0, b, A) = {(q 1, λ)}, que muda o estado de q 0 para q 1, processa um b e desempilha um A. [q 0, bb, AA] [q 1, b, A] Por fim, a transição δ(q 1, b, A) = {(q 1, λ)} é seguida. O processamento termina com toda a string de entrada processada e com a pilha vazia. [q 0, bb, AA] [q 1, b, A] [q 1, λ, λ] Definição 7.3. Seja M = (Q, Σ, Γ, δ, q 0, F ) um PDA. Uma string w Σ é aceita por M se existe uma computação [q 0, w, λ] [, λ, λ], tal que F. A linguagem de M, denotada por L(M), é o conjunto de strings aceitas por M. Exemplo 7.3 A linguagem {wcw R w {a, b} } é reconhecida pelo PDA M = ({q 0, q 1 }, {a, b, c}, {A, B}, δ, q 0, {q 1 }), onde δ(q 0, a, λ) = {(q 0, A)} δ(q 0, b, λ) = {(q 0, B)} δ(q 0, c, λ) = {(q 1, λ)} δ(q 1, a, A) = {(q 1, λ)} δ(q 1, b, B) = {(q 1, λ)}
6 Aula 7: Autômatos com Pilha A pilha é usada para gravar a string w a medida que ela é processada. diagrama de estados do PDA. Verifique no a λ/a b λ/b a A/λ b B/λ c λ/λ q 0 q 1 Exemplo 7.4 Um diagrama de estados para o PDA M que reconhece a linguagem L = {a i 0} {a i b i i 0} sobre o alfabeto Σ = {a, b}. i a λ/a q 0 q 1 λ λ/λ q 2 λ A/λ Exercício 7.1. Projete PDA s que reconheçam as linguagens abaixo. a) L = {a i b j c k i, j, k 0 e i = j ou i = k}. b) L aceita strings com número par de 0 s. c) L aceita strings com o mesmo número de 0 s e 1 s. d) L aceita strings cujo número de 0 s é duas vezes o número de 1 s. e) L aceita strings cujo número de 0 s é maior do que o número de 1 s.
Aula 7: Autômatos com Pilha 7 Exercício 7.2. Seja o PDA M = ({q 0, q 1, q 2 }, {a, b}, {A}, δ, q 1, q 2 ) com função de transição δ(q 0, a, λ) = {(q 0, A)} δ(q 0, λ, λ) = {(q 1, λ)} δ(q 0, b, A) = {(q 2, λ)} δ(q 1, λ, A) = {(q 1, λ)} δ(q 1, b, A) = {(q 2, λ)} δ(q 2, λ, A) = {(q 2, λ)} a) Descreva a linguagem reconhecida por M. b) Desenhe o diagrama de estados de M. c) Mostre todas as computações de aab, abb, aba em M. d) Mostre que aabb, aaab pertencem a L(M).