Page 1

Teoria da Computação Prof. Cícero Costa Quarto ccquarto@gmail.com

Capítulo 2 Autômatos finitos determinísticos

22/06/2010

Estendendo a função de transição aos strings Explicamos informalmente que o DFA define uma linguagem: o conjunto de todos os strings que resultam em uma sequência de transições de estado, desde o estado inicial até um estado de aceitação.  Em termos do diagrama de transições, a linguagem de um DFA é o conjunto de rótulos ao longo de todos os caminhos que levam do estado inicial a qualquer estado de aceitação.  Precisamos agora tornar exata a noção da linguagem de um DFA. Para isso, definimos uma função de transição estendida que descreve o que acontece quando começamos em qualquer estado e seguimos qualquer sequência de entradas.  Se δ é nossa função de transição, então a função de transição estendida construída a partir de δ será chamada ^ . A função de transição estendida é uma função que

δ

toma um estado q e um string w e retorna um estado p – o estado que o autômato alcança quando começa no estado q e processa a sequência de entradas w. Definimos ^ por indução sobre o comprimento do string de entrada, da seguinte forma:

δ

2

^

BASE: δ ( q , ε )= q . Isto é, se estamos no estado q e não lemos nenhuma entrada, então ainda estamos no estado q. INDUÇÃO: Suponha que w é um string da forma xa; ou seja, a é o último símbolo de w, e x é o string que consiste em tudo, menos o último símbolo3. Por exemplo, w = 1101 é desmembrado em x = 110 e a = 1. Então: ^

^

δ ( q , w)= δ( δ(q, x), a)

(2.1)

δ ( q, w ), primeiro calculamos δ ( q, x ), ^

A equação (2.1) diz que, para calcular

^

o estado em que o autômato se encontra depois de processar tudo, exceto o último ^ ^ símbolo de w. Suponha que esse estado seja p; ou seja, ( q, x = p. Então ( q, x δ δ

)

)

é o que obtemos fazendo uma transição do estado p sobre a entrada a, o último ^ símbolo de w. Isto é,

δ ( q , w)= δ(p, a)

3

1


22/06/2010

Exemplo 2.4: Vamos projetar um DFA para aceitar a linguagem L = {w | w tem ao mesmo tempo um número par de 0´s e um número par de 1´s} Pode-se ter as seguintes interpretações: q0: O número de 0´s vistos até agora e o número de 1´s vistos até agora são ambos pares. q1: O número de 0´s vistos até agora é par, mas o número de 1´s vistos até agora é ímpar. q2: O número de 1´s vistos até agora é par, mas o número de 0´s vistos até agora é ímpar. q3: O número de 0´s vistos até agora e o número de 1´s vistos até agora são ambos ímpares. O estado q0 é ao mesmo tempo o estado inicial e o único estado de aceitação. Ele é o estado inicial porque, antes de ler quaisquer entradas, os números de 0´s e 1´s vistos até o momento são ambos zero, e zero é par. É o único estado de aceitação, porque descreve exatamente a condição para uma sequência de 0´s e 1´s pertencer à linguagem L.

4

Agora sabemos quase tudo o que é necessário para especificar um DFA para linguagem L. Ele é: A = ({q0, q1, q2, q3}, {0,1}, δ, q0, {q0}) onde a função de transição δ é descrita pelo diagrama de transições da Figura 2.6. 1 Início

q0

q1

0

1

Figura 2.6: Diagrama de transições para o DFA que aceita uma string que tem ao mesmo tempo um número par de 0´s e um número par de 1´s.

1 0

q2

0

0

q3

1 5

1 Início

q0

q1

1

0

Figura 2.6: Diagrama de transições para o DFA que aceita uma string que tem ao mesmo tempo um número par de 0´s e um número par de 1´s.

1 0

q2

0

0

q3

1

Pode-se ter as seguintes interpretações: q0: O número de 0´s vistos até agora e o número de 1´s vistos até agora são ambos pares. q1: O número de 0´s vistos até agora é par, mas o número de 1´s vistos até agora é ímpar. q2: O número de 1´s vistos até agora é par, mas o número de 0´s vistos até agora é ímpar. q3: O número de 0´s vistos até agora e o número de 1´s vistos até agora são ambos ímpares.

Considerações sobre a Figura 2.6: (i)

Cada entrada 0 faz o estado cruzar a linha tracejada horizontal. Desse modo, depois de ver um número par de 0´s, sempre estamos acima da linha, no estado q0 ou q1. (ii) Depois de ver um número ímpar de 0´s, sempre estamos abaixo da linha, no estado q2 ou q3. (iii) Toda entrada 1 faz o estado cruzar a linha tracejada vertical. Desse modo, depois de ver um número par de 1´s, sempre estamos à esquerda, no estado q0 ou q2. (iv) Depois de ver um número ímpar de 1´s, estamos à direita, no estado q1 ou q3.

6

2


22/06/2010

Também podemos representar o DFA da Figura 2.6 por uma tabela de transições. A Figura 2.7 mostra essa tabela.

*→ q0

0 q2

1 q1

q1

q3

q0

q2

q0

q3

q3

q1

q2

Figura 2.7: Tabela de transições para o DFA que aceita uma string que tem ao mesmo tempo um número par de 0´s e um número par de 1´s.

Pode-se ter as seguintes interpretações: q0: O número de 0´s vistos até agora e o número de 1´s vistos até agora são ambos pares. q1: O número de 0´s vistos até agora é par, mas o número de 1´s vistos até agora é ímpar. q2: O número de 1´s vistos até agora é par, mas o número de 0´s vistos até agora é ímpar. q3: O número de 0´s vistos até agora e o número de 1´s vistos até agora são ambos ímpares.

7

Estendendo a função de transição aos strings ^

Usando o projeto do DFA da Figura 2.6 para ilustrar a construção de δ a partir de sua função de transição δ.  Suponha que a entrada seja 110101. Como esse string tem números pares de 0´s e 1´s, esperamos que ele esteja na linguagem. Portanto, esperamos que: ^

δ ( q 0 ,110101) = q 0, pois

q 0 é o único estado de aceitação.

Base

Vamos verificar essa afirmação!!!

8

A verificação envolve a computação de δ ( q 0 , w)para cada prefixo w de 110101, começando em δ e aumentando de tamanho. O resumo desse cálculo é: ^

^

• δ ( q 0 , ε )= q 0 ^

^

• δ ( q 0 ,1)= δ( δ(q 0 , ε ),1) = δ(q 0 ,1)= q 1 ^

^

• δ ( q 0 ,11)= δ( δ(q 0,1 ),1)= δ(q 1,1)= q 0 ^

^

• δ ( q 0 ,110)= δ( δ(q 0,11 ),0) = δ(q 0,0)= q 2 ^

^

• δ ( q 0 ,1101)= δ( δ(q 0,110 ),1)= δ(q 2,1)= q 3 ^

^

• δ ( q 0 ,11010) = δ( δ(q 0,1101 ),0) = δ(q 3,0)= q 1 ^

^

• δ ( q 0 ,110101) = δ( δ(q 0 ,11010 ),1)= δ(q 1,1)= q 0

9

3


22/06/2010

A linguagem de um DFA Agora, podemos definir a linguagem de um DFA A = (Q, ∑, δ, q0, F). Essa linguagem é denotada por L(A) e definida por:

}

L(A) = {w | δ^(q 0, w) está em F

Isto é, a linguagem de A é o conjunto de strings w que levam o estado inicial q0 até um dos estados de aceitação. Se L é L(A) para algum DFA A, dizemos que L é uma linguagem regular. Exemplo 2.5: Como mencionamos antes, se A é o DFA do Exemplo 2.1, então L(A) é o conjunto de todos os strings de 0´s e 1´s que contêm um substring 01. Em vez disso, se A é o DFA do exemplo 2.4, então L(A) é o conjunto de todos os strings de 0´s e 1´s cujos números de símbolos 0 e 1 são ambos pares.

10

4

Aula5  

Estendendo a função de transição aos strings