Teoria da Computação Segundo Semestre, 24 Aula 3: Autômatos Finitos DAINF-UTFPR Prof. Ricardo Dutra da Silva Um procedimento ue determina se uma string de entrada pertence à uma linguagem é um reconhecedor desta linguagem. Vamos definir uma classe de máuinas ue determinam se uma string deve ser aceita ou não. A entrada de uma máuina será uma string sobre um alfabeto e a saída da computação seu aceite (reconhecimento) ou não dentro de uma linguagem. Em uma máuina bastante simples para venda de café, a entrada consiste em uma seuência de moedas de 5, e 25 centavos. Quando 3 centavos ou mais são inseridos, a máuina chega ao estado de aceite e o café é entregue. Se mais de 3 centavos são inseridos na máuina ela aceita de bom grado e não retorna troco. A máuina tem conhecimento de uanto dinheiro foi inserido. Esse conhecimento é obtido através dos estados internos da máuina. Quando uma entrada é recebida e processada, a máuina atualiza o conhecimento, possivelmente, mudando de estado. Cada estado da máuina representa um determinado estado da computação. Na nossa máuina teríamos 7 estados representado uantos centavos faltam para ue o café possa ser entregue. Cada estado, portanto, representaria uma das seguintes informações: ˆ faltam 3 centavos para o café ser entregue; ˆ faltam 25 centavos para o café ser entregue; ˆ faltam 2 centavos para o café ser entregue; ˆ faltam 5 centavos para o café ser entregue; ˆ faltam centavos para o café ser entregue; ˆ faltam 5 centavos para o café ser entregue; ˆ faltam centavos para o café ser entregue.
2 Aula 3: Autômatos Finitos Uma diagrama de estados é comumente usado para representar os estados e as transições de uma máuina. O diagrama é um grafo em ue cada nó representa um dos estados. As arestas do grafo, rotuladas, representam a entrada processada e ual a transição entre estados ue ela produz. O diagrama de estados para a máuina de café é mostrado na Figura 3.. 5 5 5 5 5 5 start 3 25 2 5 5 5,, Figura 3.: Máuina de estados para uma máuina de vender café. O estado faltam 3 centavos é chamado de estado inicial. O estado inicial deve ser diferenciado no diagrama. Usaremos para esse propósito uma seta rotulada start (ver Figura 3.). O estado faltam centavos é chamado de estado final, indicando ue a entrada fornecida para a máuina foi aceita, ou seja, ue a seuência de moedas fornecida compra um café. O estado final, ou estado de aceite, será indicado no diagrama por duas circunferências (ver Figura 3.). A máuina de café aceita moedas de 5, e 25 centavos. Seu alfabeto é, portanto, Σ = { 5,, }. As entradas para a máuina são strings do conjunto Σ = { 5,, }. As strings aceitas são auelas ue terminam no estado final. Um autômato finito é uma máuina abstrata ue pode ser usada para determinar se strings fornecidas como entrada são aceitas. Cada símbolo da string é processado em seuência e o processamento determina as mudanças de estado ue ocorrem na máuina. Isso é feito percorrendo a aresta com rótulo igual ao do símbolo processado. A string 5 5 é aceita pela máuina de café, pois o caminho induzido pela string termina em um estado final. A Figura 3. mostra, em destaue, o caminho induzido pela string 5 5. A string 5 5 5 não é aceita pela máuina pois o caminho induzido pela string não
3.. AUTÔMATOS FINITOS DETERMINÍSTICOS 3 5 5 5 5 5 5 start 3 25 2 5 5 5,, Figura 3.2: Caminho induzido pela string 5 5 na máuina de estados da máuina de vender café. termina em um estado final (Figura 3.3). 5 5 5 5 5 5 start 3 25 2 5 5 5,, Figura 3.3: Caminho induzido pela string 5 5 5 na máuina de estados da máuina de vender café. Na seuência iremos formalizar as noções vistas nesta introdução. Com isso poderemos estudar, em máuinas abstratas, capacidades e limitações de computação. 3. Autômatos Finitos Determinísticos Definição 3.. Um autômato finito determinístico (DFA, do inglês Finite Deterministic Automata) é uma 5-tupla M = (Q, Σ, δ,, F ), onde
4 Aula 3: Autômatos Finitos ˆ Q é um conjunto finito de estados; ˆ Σ é o alfabeto; ˆ Q é o estado inicial; ˆ F é o subconjunto de estados finais de Q; ˆ δ é uma função δ : Q Σ Q, chamada de função de transição. Definição 3.2. O diagrama de estados de um DFA M = (Q, Σ, δ,, F ) é um grafo G, direcionado e rotulado, definido como: ˆ os vértices de G são os elementos de Q; ˆ os rótulos das arestas são elementos de Σ; ˆ é o estado inicial, indicado pela palavra start ; ˆ F é o subconjunto de nós finais, indicados por círculos concêntricos; ˆ existe um arco entre os nós i e j com o rótulo a se δ( i, a) = j ; ˆ para cada nodo i Q e símbolo a Σ há exatamente uma aresta rotulada como a partindo de i. Exemplo 3. Podemos descrever formalmente o autômato da máuina de café (Figura 3.) como uma 5-tupla M = (Q, Σ, δ,, F ), onde: ˆ Q = {3, 25, 2, 5,, 5, }; ˆ Σ = { 5,, }; ˆ = 3; ˆ F = {}; ˆ δ é a função de transição ue pode ser resumida pela tabela abaixo. Dado um estado i (linha l) e um símbolo a Σ (coluna c), a posição (l, c) da tabela contém
3.. AUTÔMATOS FINITOS DETERMINÍSTICOS 5 o estado j resultante da transição δ( i, a). Por exemplo, se i = 3 e a =, a posição respectiva da tabela corresponde à δ(3, ) = 2. δ 5 3 25 2 5 25 2 5 2 5 5 5 5 5 Exemplo 3.2 O diagrama de estados do DFA M = ({p,, r}, {, }, δ, p, {r}), com função de transição δ(p, ) = δ(p, ) = p δ(, ) = δ(, ) = r δ(r, ) = r δ(r, ) = r é dado abaixo., start p r Um automato pode ser visto como um máuina ue contém cinco componentes. ˆ Um registrador ue armazena o estado atual em ue a máuina se encontra. ˆ Um conjunto de estados para o registrador, ue é o conjunto de estados Q.
6 Aula 3: Autômatos Finitos ˆ Uma fita seccionada ue armazena seuencialmente, em posições contíguas, símbolos a Σ da string de entrada; ˆ Um leitor de fita ue lê o símbolo de uma secção da fita; ˆ Um conjunto de instruções, relacionado com a função de transição, ue informa a ação da máuina. Dado o estado i atual e o símbolo a Σ lido, a máuina redefine o estado do registrador para δ( i, a) e move o leitor uma posição à frente. O leitor é inicialmente posicionado na posição mais à esuerda da string na fita e o registrador começa com o estado inicial. A máuina então computada a transição de estado conforme a função δ. O processo é repetido até a cabeça de leitura encontrar uma posição vazia. Uma string é aceita pela máuina se a computação termina em um estado final. Exemplo 3.3 Dado o DFA M = ({p,, r}, {, }, δ, p, {r}), com δ(p, ) = δ(p, ) = p δ(, ) = δ(, ) = r δ(r, ) = r δ(r, ) = r e a string. A computação da máuina é mostrada abaixo. O processo termina em um estado final e a string é aceita.... p......
3.. AUTÔMATOS FINITOS DETERMINÍSTICOS 7... A string, por sua vez, não é aceita pela máuina, pois o processo termina em um estado ue não é final. r... p... p...... Pelo ue vimos no exemplo anterior, podemos definir strings ue são aceitas por um DFA. Definição 3.3. Seja M = (Q, Σ, δ,, F ) um DFA. Uma string w Σ é aceita se o processamento de w por M termina em um estado final. Uma DFA M aceita um conjunto de strings e esse conjunto define a linguagem de M. Definição 3.4. Seja M = (Q, Σ, δ,, F ) um DFA. A linguagem de M, denotada L(M), é o conjunto de strings em Σ aceitas por M. Exemplo 3.4 O DFA M = ({p, }, {, }, δ, p, {}), com função de transição δ p p p e diagrama de estados
8 Aula 3: Autômatos Finitos start p define a linguagem L(M) = {w w termina em } sobre o alfabeto Σ = {, }. Definição 3.5. A função de transição estendida ˆδ de um DFA com função de transição δ é uma função ˆδ : Q Σ Q definida recursivamente no tamanho da string de entrada: i) Base: Se w =, então w = λ e ˆδ( i, λ) = i. Se w =, então w = a, para a Σ, e ˆδ( i, a) = δ( i, a). ii) Passo recursivo: Se w é uma string de tamanho n >, então w = ua e ˆδ( i, ua) = δ(ˆδ( i, u), a). A função de transição estendida representa a aplicação repetida da função de transição. Exemplo 3.5 Seja DFA M = ({p, }, {, }, δ, p, {}), com função de transição δ p p p Dada a string, então a computação da string pode ser vista como
3.. AUTÔMATOS FINITOS DETERMINÍSTICOS 9 ˆδ(p, ) = δ(ˆδ(p, ), ) = δ(δ(ˆδ(p, ), ), ) = δ(δ(δ(ˆδ(p, ), ), ), ) = δ(δ(δ(δ(p, ), ), ), ) = δ(δ(δ(, ), ), ) = δ(δ(p, ), ) = δ(p, ) =. Dada a string, então a computação da string pode ser vista como ˆδ(p, ) = δ(ˆδ(p, ), ) = δ(δ(ˆδ(p, ), ), ) = δ(δ(δ(ˆδ(p, ), ), ), ) = δ(δ(δ(δ(p, ), ), ), ) = δ(δ(δ(p, ), ), ) = δ(δ(, ), ) = δ(, ) = p. i. A função de transição estendida ˆδ( i, w) computa ual o estado alcançado a partir de Podemos usar esse fato para definir (redefinir) as strings aceitas por um DFA (veja Definition 3.3) bem como a linguagem de uma DFA M (veja Definição 3.4). Definição 3.6. Seja M = (Q, Σ, δ,, F ) um DFA. Uma string w Σ é aceita se ˆδ(, w) F. Definição 3.7. Seja M = (Q, Σ, δ,, F ) um DFA. A linguagem de M é o conjunto
Aula 3: Autômatos Finitos L(M) = {w w Σ, ˆδ(, w) F }. Definição 3.8. Uma linguagem é chamada de linguagem regular se ela é aceita por um autômato finito determinístico. Exemplo 3.6 Vamos construir o autômato ue aceita L = {w w {, } e contém a substring }. Não existe um método para construir autômatos para uma linguagem. A tarefa é basicamente criativa. Uma dica é tentar simular o ue ocorre para cada entrada e tomar decisões sobre o ue o automato precisa lembrar. Para a linguagem L, o automato pode aceitar uma string se ele lembra ue processou dois s justapostos. Lembrar tal fato significa criar um estado como o significado foi lida a string. Tal estado deve ser um estado final. Mas antes de lembrar ue leu, o automato precisa saber ue leu o primeiro. Para isso basta um estado ue signifiue a lembrança acabei de ler um e se eu ler mais um eu posso aceitar a string. O estado inicial do autômato seria o estado ainda não li a substring. Poderíamos então definir tais estados: ˆ : nenhuma substring foi lida. ˆ : acabei de ler um, estou no meio do caminho. ˆ 2 : já li a string e portanto posso aceitar a string de entrada. Nosso diagrama de estados parcial seria start 2 Agora, para cada estado, precisamos saber ual transição realizar para cada um dos símbolos do alfabeto. Se estivermos no estado e lermos um, nada ajuda no reconhecimento de. Podemos simplesmente criar uma transição de para ele mesmo e continuar lendo a entrada. Se lermos um, no entanto, podemos mudar para o estado pois estamos no meio do caminho. start 2
3.. AUTÔMATOS FINITOS DETERMINÍSTICOS No estado, ler um significa ue não há mais possibilidade de ler. Portanto precisamos recomeçar, por exemplo, voltando ao estado inicial. Por outro lado, se lermos um significa ue acabamos de ler a seuência e podemos entrar o estado final 2. start 2 Ainda não terminamos, em um DFA todo estado possui transições para todos os símbolos do alfabeto. Aui basta criar transições de 2 para ele mesmo independentemente do símbolo do alfabeto. A string já foi aceita e tudo o ue precisamo e lê-la até o final., start 2 Formalmente, o DFA é descrito por M = ({,, 2 }, {, }, δ,, { 2 }), com função de transição δ 2 2 2 2 Exercício 3.. Dê a definição formal e o diagrama de estados para um DFA ue aceite strings w, sobre o alfabeto Σ = {, }, ue contêm um número ímpar de s. Exercício 3.2. Conforme a definição do autômato ue você produziu no exercício anterior, mostre a computação da função de transição estendida, como no Exemplo 3.5, para as strings dos itens abaixo. a). b).
2 Aula 3: Autômatos Finitos c). d). e) Quais dessas strings são aceitas? Como a função de transição estendida mostra isso? Exercício 3.3. Dê a definição formal e o diagrama de estados para um DFA ue aceite strings w, sobre o alfabeto Σ = {, }, ue contêm um número ímpar de s e um número par de s. Exercício 3.4. Dê a definição formal e o diagrama de estados para um DFA ue aceite strings w, sobre o alfabeto Σ = {, }, ue não contêm um número ímpar de s. Exercício 3.5. Construa o diagrama de estados para o autômato ue aceita strings sobre {a, b, c} ue não contém a string nula e cujos a s precedem os b s, ue por sua vez, precedem os c s. Exercício 3.6. {a, b} ue não iniciam com aaa. Exercício 3.7. Construa o diagrama de estados para o autômato ue aceita strings sobre Construa o diagrama de estados para o autômato ue aceita strings sobre {a, b} ue não contêm a substring aba. Exercício 3.8. Construa o diagrama de estados para o autômato ue aceita strings sobre {a, b} para as uais o número de a s é divisível por 3. Exercício 3.9. Analise os autômatos ue você definiu nos Exercícios 3. e 3.4. Você consegue perceber alguma relação entre os dois? Se sim, ual? Exercício 3.. A função de transição estendida ˆδ de um DFA com função de transição δ é uma função de Q Σ em Q definida recursivamente no tamanho da string de entrada. i) Base: Se w =, então w = λ e ˆδ( i, λ) = i. Se w =, então w = a, para a Σ, e ˆδ( i, a) = δ( i, a). ii) Passo recursivo: Se w é uma string de tamanho n >, então w = ua e ˆδ( i, ua) = δ(ˆδ( i, u), a). Podemos substituir o passo recursivo por:
3.. AUTÔMATOS FINITOS DETERMINÍSTICOS 3 ii) Passo recursivo: Se w é uma string de tamanho n >, então w = au e ˆδ ( i, au) = ˆδ (δ( i, a), u). Prove por indução ue ˆδ = ˆδ.