43
Curso: Ciência da Computação Turma: 6ª Série Teoria da Computação Aula 3 Autômatos Finitos

02. Automatos Finitos

Embed Size (px)

Citation preview

Page 1: 02. Automatos Finitos

Curso: Ciência da Computação Turma: 6ª Série

Teoria da Computação

Aula 3

Autômatos Finitos

Page 2: 02. Automatos Finitos

Teoria da Computação

2

Alfabeto

Alfabeto● Conjunto finito de símbolos;● Normalmente descrito por ∑;● Exemplos:

– ∑={a, b}– ∑={1, 2, 3}– ∑={00, 11}– Ø

– Alfabeto romano {a,b,c,...,z}– Alfabeto binário {0,1}

Page 3: 02. Automatos Finitos

Teoria da Computação

3

Símbolo ou Letra

Símbolo ou letra:● é todo elemento pertencente à um alfabeto;● a é um símbolo de se a є ∑;● Exemplo: dado o alfabeto ∑={0, 1, 23}

– 0 é um símbolo de ∑;– 1 é um símbolo de ∑;– 23 é um símbolo de ∑;

Page 4: 02. Automatos Finitos

Teoria da Computação

4

Conceitos

Essas duas primeiras definições são bastante livres. Embora os símbolos também possam ser chamados de letras, eles não precisam ter necessariamente um único caractere. E além disso, os símbolos de um alfabeto não precisam todos ter o mesmo número de caracteres. A única restrição é que o tamanho do símbolo seja finito.

Page 5: 02. Automatos Finitos

Teoria da Computação

5

Cadeia ou Palavra● Cadeia ou palavra:

● É uma concatenação de símbolos de um mesmo alfabeto;● É uma sequência finita de símbolos do alfabeto justapostos;● Assim, dado um alfabeto ∑ e uma sequência de símbolos

x=a1a

2a

3...a

n, x é uma cadeia sobre ∑ se a

i є ∑ para

i=1,2,...,n.● ε denota uma cadeia vazia ou uma palavra vazia.

– Uma palavra como computação é um cadeia do nosso alfabeto.

– Assim 01010111 é uma cadeia do alfabeto {0,1}– Cadeia sem nenhum símbolo é a cadeia vazia.

Page 6: 02. Automatos Finitos

Teoria da Computação

6

Tamanho da Cadeia

Comprimento de Cadeia ou Tamanho de Palavra:● É o número de símbolos que compõem uma dada

cadeia (ou palavra). ● O comprimento de uma cadeia x é denotado por |x|● Então, a cadeia x=a

1a

2a

3...a

n, tem seu comprimento

|x| = n.● Cadeia nula ou palavra vazia: é um caso especial,

ela é denotada por λ (ou ε) e tem tamanho igual a zero.

Page 7: 02. Automatos Finitos

Teoria da Computação

7

Exemplo● Exercício: dado o alfabeto ∑ ={a, b, c, de},

verifique se as cadeias a seguir são formadas sobre este alfabeto, e se for, verifique qual o comprimento das mesmas:● x = ababac● y = abdec● z = abedc● w = abdceaba● s = d● t = a● x=de● y=dee

Page 8: 02. Automatos Finitos

Teoria da Computação

8

Exponenciação● Exponenciação de Alfabetos: ∑k é o conjunto

de todas as cadeias com tamanho k, formadas sobre o alfabeto ∑.● Exemplo: considere ∑ = {0, 1}● ∑0 = {ε}● ∑1 = {0, 1} = S● ∑2 = {00, 01, 10, 11}● ...

● Exercício: Encontre ∑3 para o exemplo anterior.

Page 9: 02. Automatos Finitos

Teoria da Computação

9

Conceitos● Fechamento de um Alfabeto: Seja ∑ um

alfabeto, então o fechamento de ∑, descrito por ∑* é definido como:

– ∑* = ∑0 U ∑1 U ∑2 U … U ∑n ...

● ∑* é o conjunto de todas as cadeias possíveis de se formar sobre o alfabeto ∑ incluindo a cadeia vazia.

● Fechamento positivo ∑+ = ∑* - {ε}● Questão: quando ∑* é infinito?

Page 10: 02. Automatos Finitos

Teoria da Computação

10

Linguagem● Uma Linguagem Formal ou simplesmente Linguagem

é um conjunto de palavras sobre um alfabeto.● Linguagem: dado o alfabeto ∑, o conjunto de palavras

L é uma linguagem sobre ∑ , se L contém ∑*

Page 11: 02. Automatos Finitos

Teoria da Computação

11

Linguagem

Exemplo: Suponha o alfabeto Σ = {a, b} então:

a)O conjunto vazio e o conjunto formado pela palavra vazia são linguagens sobre Σ. Lembrando que Ø ≠ { ε }

b)O conjunto de palíndromos (palavras que tem a mesma leitura da esquerda para a direita e vice-versa) sobre Σ é um conjunto de linguagem infinita. Assim: ε, a, b, aa, bb, aaa, aba, bab, bbb, aaaa, ... são palavras desta linguagem.

Page 12: 02. Automatos Finitos

Teoria da Computação

12

LinguagemÉ comum definir linguagens usando um “formador de conjuntos”:● { w | algo sobre w }● Essa expressão é lida como “o conjunto de

palavras w tais que (seja o que for dito sobre w à direita da barra vertical)”. Alguns exemplos:● {w | w consiste em um número igual de 0’s e

1’s}● {w | w é um número inteiro binário primo}● {w | w é um programa em C sintaticamente

correto}

Page 13: 02. Automatos Finitos

Teoria da Computação

13

LinguagemTambém é comum substituir w por alguma expressão com parâmetros e descrever os strings na linguagem declarando condições sobre os parâmetros. Exemplos:

● {0n1n | n ≥ 1}. Lê-se “o conjunto de 0 elevado a n 1 elevado a n tal que n maior ou igual a 1”; essa linguagem consiste nos strings {01, 0011, 000111, ...}. Note que, como ocorre com os alfabetos, podemos elevar um único símbolo a uma potência n para representar n cópias desse símbolo.

● {0i1j | 0 ≤ i ≤ j}. Essa linguagem consiste em strings com alguns 0’s (possivelmente nenhum) seguidos por um número igual ou superior de 1’s.

Page 14: 02. Automatos Finitos

Teoria da Computação

14

Vamos descrever o conjunto da linguagem abaixo

{0i1j | 0 ≤ i ≤ j}. Essa linguagem consiste em strings com alguns 0’s (possivelmente nenhum) seguidos por um número igual ou superior de 1’s.

i j Resultado0 0 Ø 1 0 Ø i>j Ø 0 1 10 2 110 3 1110 ... 1j

1 2 0111 3 0111... ... ...

Page 15: 02. Automatos Finitos

Teoria da Computação

15

Concatenação● Concatenação de cadeias: dado o alfabeto ∑ e

as cadeias x, y є ∑*, a concatenação de x e y, indicada por xy, produz uma cadeia formada pelos símbolos de x seguidos pelos símbolos de y. Em outras palavras são duas cadeias, sobre o mesmo alfabeto, que se juntam para formar uma terceira cadeia.

● Se x = a1a

2...a

n є ∑* e y = b

1b

2...b

m є ∑*, então

xy = a1a

2...a

nb

1b

2...b

m

Page 16: 02. Automatos Finitos

Teoria da Computação

16

Concatenação de PalavrasExemplos: Suponha o alfabeto Σ = {a, b} e as palavras v = baa e w = bb, tem-se que:● vw = baabb● vε = v = baa

Uma concatenação definida sobre uma linguagem L não é necessariamente fechada sobre L, ou seja, a concatenação de duas palavras de L não é necessariamente uma palavra de L.● Exemplo: Suponha a linguagem L de palíndromos

sobre Σ = {a, b}. A concatenação das palavras aba e bbb resultam na palavra ababbb a qual não é palíndromo. Portanto a operação de concatenação não é fechada sobre L.

Page 17: 02. Automatos Finitos

Teoria da Computação

17

Concatenação de Palavras

Exemplos:● ∑ = {a, b}● x = abaa, y = ba, z= ε

● xy = abaaba● yx = baabaa● yz = ba = zy = y● A cadeia nula ( ε ) é o elemento neutro da

concatenação.

Page 18: 02. Automatos Finitos

Teoria da Computação

18

Concatenação Sucessivas

Concatenação sucessiva:● concatenação de uma palavra com ela mesma;

● Representada através de um expoente: wn

– Onde w é uma palavra e n indica o número de concatenações sucessivas;

Page 19: 02. Automatos Finitos

Teoria da Computação

19

Conceitos

Dado um alfabeto ∑ e x, y є ∑*, diz-se que:● x é um prefixo de y se existe um w є ∑* tal que

y= xw; ● x é um sufixo de y se existe um w є ∑* tal que

y= wx;● x é um sub-palavra de y se existe um w,u є ∑*

tal que y= wxu;

Exemplo: Seja a palavra abcb– ε, a, ab, abc, abcb são os prefixos;– ε, b, cb, bcb, abcb são os sufixos;

Page 20: 02. Automatos Finitos

Teoria da Computação

20

Conceitos

Operações sobre linguagens;● Considere L1 e L2 linguagens definidas sobre ∑:

● União: L1 U L

2 = {x | x є L

1 v x є L

2}

● Intersecção: Lção: L11 ∩∩ L L

22 = {x | x є L = {x | x є L

11 ΛΛ x є L x є L

22}}

● Diferença: LL11 - L - L

2 2 = {x | x є LL

11 ΛΛ x não є LL

22}

● Concatenação: LL11..LL

22 = {x | x = yz, y є LL

11 Λ Λ z є LL

22}

● Complemento: LL11={x | x є ∑* ΛΛ x não є L

1}

Page 21: 02. Automatos Finitos

Teoria da Computação

21

Conceitos● Exemplos de operações:

● Sejam L1 e L

2 definidas sobre {0,1}:

– L1 = {0,11}

– L2 = {0, 1, 00}

● L1 U L

2= {0, 1, 00, 11}

● L1 ∩ L

2 = {0}

● L1 - L

2 = {11}

● L1.L

2 = {00, 01, 000, 110, 111, 1100}

Page 22: 02. Automatos Finitos

Teoria da Computação

22

Conceitos

Comparando as definições:● Linguagem Natural:

– Uma palavra em português equivale à um símbolo;– Uma sentença da língua portuguesa é uma cadeia

composta por vários símbolos;● Linguagem Computacional:

– Cada programa escrito numa linguagem computacional corresponde a uma cadeia de símbolos que podem ser:

● identificadores;● palavras reservadas;● símbolos especiais e operadores;● constantes numéricas.

Page 23: 02. Automatos Finitos

Teoria da Computação

23

Conceitos Básicos● Uma linguagem computacional como

linguagem formal: ● Alfabeto da linguagem Java

– long, float, for, int;● O código fonte de um programa corresponde à uma

cadeia formada a partir de símbolos do alfabeto.

LINGUAGEM: Conjunto de todas as cadeias descritas a partir do alfabeto que respeitam um conjunto de regras sintáticas.

Page 24: 02. Automatos Finitos

Teoria da Computação

24

Autômatos FinitosOs autômatos finitos constituem um modelo útil para muitos elementos importantes de hardware e software. Alguns exemplos:● Software para projetar e verificar comportamento de

circuitos digitais● Analisador Léxico de um compilador típico (isto é,

componente que divide o texto de entrada em unidades lógicas, como identificadores, palavras-chave, etc.)

● Software para examinar grandes corpos de texto, como páginas Web

● Software para verificar sistemas de todos os tipos que tem um número finito de estados distintos, como protocolos de comunicação ou segurança

Page 25: 02. Automatos Finitos

Teoria da Computação

25

Autômatos Finitos

Estes elementos têm como características estarem a todo o momento em um determinado

“estado” de um conjunto finito deles. Como o conjunto é finito a história toda de execução não pode ser memorizada, assim o sistema deve ser

projetado a fim de memorizar apenas o que é relevante. A vantagem de usar um número finito de estados é que é possível implementá-lo de

uma forma simples em hardware como um circuito, ou em um software que possa tomar

decisões examinando apenas um número limitado de dados ou a própria posição no código.

Page 26: 02. Automatos Finitos

Teoria da Computação

26

Autômatos FinitosExemplo de autômato finito: um interruptor que memoriza se está no estado “ligado” ou “desligado”, e permite que o usuário pressione um único botão cujo efeito será diferente de acordo com o estado em que o interruptor se encontra, ou seja, se ele estiver desligado e for pressionado ele irá ligar, e vice-versa.

Os estados estão representados por círculos, e a ação (ou “entrada”) está representada pelos arcos. Neste caso temos os estados ligado e desligado, e ambos os arcos representam a ação de pressionar o botão. O estado inicial é indicado pela palavra “início” e por uma seta que leva a este estado.

Ligado Desligado

Pressionar

Pressionar

Inicio

Page 27: 02. Automatos Finitos

Teoria da Computação

27

Autômatos Finitos

Outro exemplo: um autômato que reconhece a palavra chave case, ele tem cinco estados que representam desde a string vazia até a palavra completa, passando por todos os seus prefixos.

O único estado de aceitação é aquele em que a palavra aparece completa. Podemos imaginar este autômato como parte de um analisador léxico, que estará analisando um a um os caracteres do programa.

C CA CAS CASEinicio C A S E CASE

Page 28: 02. Automatos Finitos

Teoria da Computação

28

Autômatos Finitos

Na teoria dos autômatos, um problema é a questão de verificar se uma dada string (palavra) é elemento de uma linguagem específica. Assim se Σ é um alfabeto e L é uma linguagem sobre Σ, então dado um string w em Σ*, definir se w está ou não em L.

Page 29: 02. Automatos Finitos

Teoria da Computação

29

Autômatos Finitos Determinísticos

Um autômato finito determinístico (AFD, ou DFA em inglês) é um autômato que se encontra sempre em um único estado após ler uma sequência qualquer de entrada. O termo

“determinístico” implica que existe um e somente um estado ao qual o autômato pode transitar a

partir de seu estado atual. Em contraste, autômatos finitos não determinísticos podem estar em vários estados ao mesmo tempo.

Page 30: 02. Automatos Finitos

Teoria da Computação

30

Definição Formal: Autômato Finito DeterminísticoUm autômato finito determinístico consiste em:

a)Um conjunto finito de estados, frequentemente denotado por Q.

b)Um conjunto finito de símbolos de entrada, frequentemente denotado por Σ

c) Uma função de transição que toma como argumentos um estado e um símbolo de entrada e retorna um estado. A função de transição será comumente denotada por δ (delta minúsculo). No grafo é representada pelos arcos e rótulos entre os estados. Se q é um estado, e a é um símbolo de entrada, então δ(q,a) é o estado p tal que existe um arco identificado por a de q até p.

d)Um estado inicial, que é um dos estados em Q

e)Um conjunto de estados finais ou de aceitação F. O conjunto F é um subconjunto de Q.

Page 31: 02. Automatos Finitos

Teoria da Computação

31

Definição Formal: Autômato Finito Determinístico

Frequentemente um AFD é denotado como uma “tupla de cinco elementos”, como se segue:

A = (Q,Σ,δ,q0,F)

Onde A é o nome do AFD, Q é seu conjunto de estados, Σ é seu conjunto de símbolos de entrada, δ sua função de transição, q0 é seu estado inicial e F é seu conjunto de estados de aceitação.

Page 32: 02. Automatos Finitos

Teoria da Computação

32

AFD processando strings

A “linguagem” de um AFD é o conjunto de todos os strings que ele aceita. Suponha que a1, a2, a3, ... an seja uma sequência de símbolos de entrada. Começamos com o AFD em seu estado inicial q0 e procuramos por uma função de transição, algo como δ(q0, a1) = q1, para saber em qual estado o AFD se encontrará após processar a1. Em seguida processaremos a2, avaliando δ(q1, a2) e assim sucessivamente. Se a função procurada não for encontrada é um sinal de que a string de entrada não faz parte da linguagem definida pelo autômato e deve ser rejeitada.

Page 33: 02. Automatos Finitos

Teoria da Computação

33

Exemplo: AFD processando stringsExemplo: Especificar formalmente um AFD que aceita todos e somente os strings de 0’s e 1’s que têm a sequência 01 em algum lugar na string. Podemos escrever essa linguagem como:● {x01y | x e y são quaisquer strings de 0’s e 1’s }

Alguns exemplos de strings presentes na linguagem são 01, 1010, 01010 e 100010. Exemplos de strings que não estão na linguagem são: 0, 111000 e ε .

Page 34: 02. Automatos Finitos

Teoria da Computação

34

Exemplo: AFD processando stringsSabemos então que o alfabeto de entrada é Σ = {0,1}, que existe um conjunto de estados Q, e que há um estado inicial que chamaremos de q0. Para decidir se 01 é uma substring de entrada, o autômato precisa se lembrar:

1. Ele já viu 01? Nesse caso ele aceita toda sequência de entrada adicional; ou seja, ele estará sempre em estado de aceitação de agora em diante

2. Ele nunca viu 01, mas sua entrada mais recente foi 0; assim se agora ele vir o 1, terá visto 01 e poderá aceitar tudo que vir por diante

3. Ele nunca viu 01, mas sua entrada mais recente foi 1 ou não existente (ele apenas iniciou). Nesse caso, ele não pode aceitar até ver um 0 seguido de 1.

Cada uma dessas condições pode ser representada por um estado. A condição 3 é representada pelo estado inicial q0, pois quando iniciamos ainda esperamos por 01. Se estivermos em q0 e recebermos um 1, então devemos permanecer no estado q0. Isto é δ(q0, 1) = q0.

Page 35: 02. Automatos Finitos

Teoria da Computação

35

Exemplo: AFD processando strings cont.

Entretanto, se estamos em q0 e vemos um 0, estaremos na condição 2, isto é, não vimos 01, mas temos um 0. Assim vamos usar q2 para representar esta condição. A transição é, portanto δ(q0, 0) = q2.

Agora, estando em q2, podemos ver um 0, neste caso estaremos na mesma situação que antes, ou seja, continuamos com um 0 e esperando um 1. Portanto devemos ficar no mesmo estado δ(q2, 0) = q2. Porém se estamos em q2 e vemos uma entrada 1, sabemos agora que existe um 0 seguido de 1. Podemos então passar para um estado de aceitação que chamaremos de q1 e que corresponde a condição 1. Assim: δ(q2, 1) = q1.

Page 36: 02. Automatos Finitos

Teoria da Computação

36

Exemplo: AFD processando strings cont.

Finalmente, estando no estado q1 qualquer que seja a entrada, ainda estaremos na condição 1, em que já vimos um 01. Assim permaneceremos neste estado, δ(q1, 1) = δ(q1, 0) = q1.

Portanto, Q = {q0, q1, q2}, q0 é o estado inicial como dito anteriormente e q1 é o único estado de aceitação portanto F = {q1}. Assim a especificação completa do autômato pode ser dada por:

● A = ({q0, q1, q2},{0,1}, δ, q0,{q1})

onde δ (delta minúscula) é a função de transição descrita anteriormente.

Page 37: 02. Automatos Finitos

Teoria da Computação

37

Diagrama de Transições

Especificar um AFD através da tupla de cinco e das funções de transição é algo tedioso e que fica difícil de ler, existem outros tipos de notações que são preferenciais, dentre elas podemos destacar o diagrama de transições, que é um grafo.

Você sabe o que é um grafo?

Um grafo é representado como um conjunto de pontos (vértices) ligados por retas (as arestas). Dependendo da aplicação, as arestas podem ser direcionadas, e são representadas por "setas".

Page 38: 02. Automatos Finitos

Teoria da Computação

38

Diagrama de TransiçãoUm diagrama de transições para um AFD A = (Q,Σ,δ,q0,F) é um grafo definido da seguinte forma:

1. Para cada estado em Q existe um nó correspondente.

2. Para cada estado q em Q e para cada símbolo de entrada a em Σ, seja δ(q,a) = p. Então, o diagrama de transições tem um arco do nó q para o nó p, rotulado por a. Se existem vários símbolos de entrada que causam transições de q para p, então o diagrama de transições pode ter um arco rotulado pela lista desses símbolos.

3. Existe uma seta no estado inicial q0, identificada como início. Essa seta não se origina em nenhum nó.

4. Os nós correspondentes aos estados de aceitação (aqueles em F) são marcados por um círculo duplo. Todos os outros estados tem um único círculo.

Exemplo: abaixo vemos o diagrama de transições para o AFD que projetamos na seção anterior, e que aceita todos os strings que contem o substring 01:

q0 q2 CASEinicio 0 1 q1

1 0 0,1

Page 39: 02. Automatos Finitos

Teoria da Computação

39

Tabela de TransiçõesOutra maneira mais simples de especificar um AFD é a tabela de transições que é uma representação convencional e tabular de uma função como δ que recebe dois argumentos e retorna um valor. As linhas da tabela correspondem aos estados, e as colunas correspondem as entradas. O conjunto de estados e o alfabeto de entrada são especificados implicitamente. O estado de entrada é indicado com uma seta, e os estados de aceitação são marcados com asterisco.

Exemplo: abaixo vemos a tabela de transição para o nosso mesmo exemplo anterior que aceita todos os strings que contem o substring 01:

0 1

q0 q2 q0

* q1 q1 q1

q2 q2 q1

Page 40: 02. Automatos Finitos

Teoria da Computação

40

Função de Transição EstendidaFunçã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. A função de transição estendida é normalmente denotada por δ, δ* ou ainda δ com acento circunflexo.

Exemplos: funções de transição estendida para cada prefixo da string 11010 com o autômato do nosso exemplo que aceita strings que contem 01 como substring:

δ(q0,11010) = δ(δ(q0,1),1010) =

δ(q0,1010) = δ(δ(q0,1),010) =

δ(q0,010) = δ(δ(q0,0),10) =

δ(q2,10) = δ(δ(q2,1),0) =

δ(q1,0) = q1

Page 41: 02. Automatos Finitos

Teoria da Computação

41

Linguagem de um AFD

A linguagem de um AFD A = (Q,Σ,δ,q0,F), denotada por L(A) é definida por:● L(A) = {w | δ(q0,w) está em F}

ou seja, dado um string w, se construirmos sua função de transição estendida δ e chegarmos a um estado que está em F (o conjunto de estados finais), então w está em A (é aceito pelo autômato A). Se L é L(A) para algum AFD A, dizemos que L é uma linguagem regular.

Page 42: 02. Automatos Finitos

Teoria da Computação

42

Exercícios1. O conjunto do números naturais N é um alfabeto?

2. Exercício: dado o alfabeto ∑ ={ala, bi, c}, verifique se as cadeias a seguir são formadas sobre este alfabeto, e se for, verifique qual o comprimento das mesmas:

• x = ababac

• y = alabi

• z = bic

• w = abdceaba

• s = d

• t = b

3. Seja o conjunto S = {a,b,c}

• Encontre todos os elementos de ∑3

4. Se Σ = {a, b} então: quem é ∑+ e ∑* ?

5. Defina um autômato finito para um jogador de argola. Ele tem direito a 5 argolas para jogar. Se ele acertar 3 argolas ele ganha o jogo.

6. Pense em um problema e defina um autômato finito para ele. Use sua inteligência e criatividade.

Page 43: 02. Automatos Finitos

Teoria da Computação

43

Exercícios7.Forneça os AFDs que aceitam as seguintes linguagens sobre o alfabeto {0,1}:

O conjunto de todos os strings que terminam em 00

O conjunto de todos os strings com três 0’s consecutivos (não necessariamente no final)

O conjunto de strings que têm 011 como um substring

O conjunto de strings que começam ou terminam (ou ambos) com 01.

O conjunto de strings tais que o número de 0’s é divisível por 5, e o número de 1’s é divisível por 3

8.Escreva um grafo que represente um AFD que leia strings e que trabalhe sobre um ∑ = {a,b} e que somente aceite strings que tenham ab consecutivos. Também faça a tabela de transição.