Você está na página 1de 55

UNIVERSIDADE

FEDERAL DO OESTE DO PARÁ


INSTITUTO DE ENGENHARIA E GEOCIÊNCIAS

Autômatos e linguagens formais

FÁBIO MANOEL FRANÇA LOBATO


{fabio.lobato@ufopa.edu.br}
Agenda
• Introdução
• Propriedades de Fechamento
– Sob operações booleanas
– Sob o complemento
– Sob a interseção
– Sob a diferença

2
Introdução
• Na aula passada vimos uma importante propriedade
das linguagens regulares – o lema do bombeamento.

• Ele nos permite verificar provar que linguagens não


são regulares.

3
Introdução
• Intuitivamente, vimos a propriedade de fechamento,
tema desta aula.

• Neste âmbito, apresentaremos diversos teoremas da


forma “se certas linguagens são regulares, e uma
linguagem L é formada a partir delas por certas
operações (por exemplo, L é a união de duas
linguagens regulares), então L também é regular.

4
Introdução
• Estes teoremas são chamados com frequencia de
propriedades de fechamento das linguagens
regulares, pois mostra que a classe de linguagens
regulares é fechada sob a operação mencionada.

• Elas também servem como uma ilustração de como


as representações equivalentes das linguagens
regulares (autômatos e expressões regulares)
reforçam uma à outra.

5
Introdução
• Vejamos as 9 propriedades de fechamento:

1. A união de duas LR é regular;


2. A interseção de duas LR é regular;
3. O complemento de uma LR é regular;
4. A diferença de duas linguagens regulares é
regular;
5. O reverso de uma linguagem regular é regular;

6
Introdução
• Vejamos as 9 propriedades de fechamento:

6. O fechamento (estrela) de uma linguagem


regular é regular;
7. A concatenação de linguagens regulares é
regular;
8. O homomorfismo de uma linguagem regular é
regular;
9. O homomorfismo inverso de uma linguagem
regular é regular.

7
Fechamento de Linguagems
regulares sob Operações
Booleanas

8
Operações booleanas
• As primeiras propriedades falam de união, interseção e
complementação.

1. Sejam L e M linguagens sobre o alfabeto Σ. Então, L U


M é uma linguagem que contém todos os strings que
estão em L, em M ou em ambos.

• PROVA: Seja L e M linguagens das expressões regulares R


e S, respectivamente.
• Então R+S é uma expressão regular a qual produz a
linguagem, também regular L ∪ M.

9
União Exemplo --L1
L1 = { x ∈ {0,1}* | x tem comprimento par}

0,1 0,1

10
União Exemplo –L2
L2 = { x ∈ {0,1}* | x termina com 11 }

1
1
0

0 1

11
União: Exemplo –L1∪L2
Para obter o autômato para a união, usamos
o Produto Cartesiano:

1
0
0 0 0 1 1 1
1
1
0
0

12
União: Exemplo
Vejamos como isso funciona. Comece com
os dois automata e considere o string
1101101
1
1
0

0,1 0,1 0 1

13
União: Exemplo

1
1
0

0 1
0,1 0,1
0

1 1 1 0 1 0 1

14
União: Exemplo

1
1
0

0 1
0,1 0,1
0

1 1 1 0 1 0 1

15
União: Exemplo

1
1
0

0 1
0,1 0,1
0

1 1 1 0 1 0 1

16
União: Exemplo

1
1
0

0 1
0,1 0,1
0

1 1 1 0 1 0 1

17
União: Exemplo

1
1
0

0 1
0,1 0,1
0

1 1 1 0 1 0 1

18
União: Exemplo

1
1
0

0 1
0,1 0,1
0

1 1 1 0 1 0 1

19
União: Exemplo

1
1
0

0 1
0,1 0,1
0

1 1 1 0 1 0 1

20
União: Exemplo

Rejeitado! 1
1
0

0 1
0,1 0,1
0

Rejeitado! 1 1 1 0 1 0 1
21
União: Exemplo
Resumo: Para dizer se um string pertence à união,
basta guardar os estados correntes em ambos os
automata. Ao final do processamento, o string está
na união se é aceito por pelo menos um autômato.
Seria bom se pudéssemos guardar os dois estado em
um único autômato.
1
1
0

0,1 0,1 1
0

0
22
União: Exemplo
1. Atribua rótulos aos estados de cada um
dos autômatos

1
1
0
a x y z

0 1
0,1 0,1

b 0

23
União: Exemplo

2. Mantenha informação dos estados dos dois


automata usando um par de estados.
1
1
0
a x y z

0 1
0,1 0,1

b 0

24
União: Exemplo
Par de estados corrente: (a,x)

1
1
0
a x y z

0 1
0,1 0,1

b 0

1 1 1 0 1 0 1

25
União: Exemplo
Par de estados corrente: (b,y)

1
1
0
a x y z

0 1
0,1 0,1

b 0

1 1 1 0 1 0 1

26
União: Exemplo
Par de estados corrente: (a,z)

1
1
0
a x y z

0 1
0,1 0,1

b 0

1 1 1 0 1 0 1

27
União: Exemplo
Par de estados corrente: (b,z)

1
1
0
a x y z

0 1
0,1 0,1

b 0

1 1 1 0 1 0 1

28
União: Exemplo
Par de estados corrente: (a,x)

1
1
0
a x y z

0 1
0,1 0,1

b 0

1 1 1 0 1 0 1

29
União: Exemplo
Par de estados corrente: (b,y)

1
1
0
a x y z

0 1
0,1 0,1

b 0

1 1 1 0 1 0 1

30
União: Exemplo
Par de estados corrente: (a,z)

1
1
0
a x y z

0 1
0,1 0,1

b 0

1 1 1 0 1 0 1

31
União: Exemplo
Par de estados corrente: (b,y)

Rejeitado! 1
1
0
a x y z

0 1
0,1 0,1

b 0

Rejeitado! 1 1 1 0 1 0 1
32
Operações booleanas
• As primeiras propriedades falam de união, interseção e
complementação.

2. Sejam L e M linguagens sobre o alfabeto Σ. Então, L ∩


M é uma linguagem que contém todos os strings que
estão em L, em M ou em ambos.
• PROVA: Sejam A e B AFD que produzem, respectivamente
as linguagens L e M.
• Construir C, sendo o produto do automato de A e B.
• Faça os estados finais de C serem os pares consistindo de
estados finais de ambos A e B.

33
Exemplo: produto da interseção
0 0

1 0
A B [A,C] [A,D]

0, 1 1
1 1
0
0
1
0 [B,C] [B,D]
1
0
C D

34
Operações booleanas
• As primeiras propriedades falam de união, interseção
e complementação.

3. Sejam L uma linguagem sobre o alfabeto Σ. Então,


o complemento de L é o conjunto de strings em Σ*
que não estão em L.
• Levando em consideração que o um alfabetot Σ de
tal forma que Σ* contém L) então Σ* – L

35
Examplo: Produto da diferença
0 0

1 0
A B [A,C] [A,D]

0, 1 1
1 1
0
0
1
0 [B,C] [B,D]
1
0
C D

Notice: difference
1
is the empty language

36
Observação

37
E se as linguagens tiverem alfabetos
diferentes?
• Quanto tomamos a união ou interseção, elas
podem ter alfabetos diferentes. Por exemplo, é
possível que L1 = { a, b} enquanto L2 = { b, c, d}.

• Porém, se uma linguagem L consiste em strings


com símbolos Σ, então podemos imaginar L
como uma linguagem sobre qualquer alfabeto
finito que seja um superconjunto de Σ.

38
E se as linguagens tiverem alfabetos
diferentes?
• Assim, é só pensar em L1 e L2 como linguagems
sobre o alfabeto {a,b,c,d} .

• O fato de que nenhum dos strings de L1 contém


símbolos c ou d é irrelevante, como também o
fato de strings L2 não conterem a.

39
Continuando com a
programação normal…
1. A união de duas LR é regular;
2. A interseção de duas LR é regular;
3. O complemento de uma LR é regular;
4. A diferença de duas linguagens
regulares é regular;
5. O reverso de uma linguagem regular é
regular;

40
Operações
• Propriedade sobre a diferença.

4. Sejam L e M linguagens regulares sobre o alfabeto


Σ. Então, L – M também o é.
• PROVA: Seja A e B DFA que produzem as linguagens L
e M, respectivamente
• Construa C, sendo o produto dos automatos A e B.
• Faça os estados finais de C os pares onde os A-
estados são finais mas B-estados não.

41
Exemplo: produto da diferença
0 0

1 0
A B [A,C] [A,D]

0, 1 1
1 1
0
0
1
0 [B,C] [B,D]
1
0
C D

Notice: difference
1
is the empty language

42
Operações
• Propriedade sobre a reversão

• Sejam L uma linguagem regular, então LR também é


uma linguagem regular e é a reversa de L.
• Exemplo: L = {0, 01, 100}; LR = {0, 10, 001}.
• Prova: Seja E uma expressão regular para L.
• Apresenta-se a reversa de R, para prover a expressão
regular ER para LR..

43
Propriedade sobre a reversão
• Base: Se E é um símbolo a, ε, ou ∅, então ER = E.

• Indução: Se é é
– F+G, then ER = FR + GR.
– FG, then ER = GRFR
– F*, then ER = (FR)*.

44
Exemplo: Reversão de uma ER
• Seja E = 01* + 10*.
– ER = (01* + 10*)R = (01*)R + (10*)R
– = (1*)R0R + (0*)R1R
– = (1R)*0 + (0R)*1
– = 1*0 + 0*1.

• No livro, há outro exemplo ilustrativo.

45
Operações - homomorfismo
• Propriedade sobre o homomorfismo

• “Homomorfismo de strings é uma funcão sobre


strings que atua substituindo cada símbolo por um
string específico.”

• exemplo: h(0) = ab; h(1) = ε.


• Extender para strings: h(w) = h(a1)…h(an), onde w =
a1a2a3…an
• Logo: h(01010) = ababab
46
Fechamento sob homomorfismo

• Se L é uma linguagem regular sobre o alfabeto Σ, e h


é um homomorfismo sobre Σ, então h(L) também é
regular.
– Proof: Seja L = L(R) para alguma expressão regular R. E se
E é uma expressão regular com símbolos em Σ.
– Aplica-se h para cada símbolo em E.
– A linguagem resultante RE é h(L).

47
Exemplo: Fechamento sob o
homomorfismo
• Let h(0) = ab; h(1) = ε.
– Let L be the language of regular expression 01* + 10*.
– Then h(L) is the language of regular expression abε* +
ε(ab)*.

Note: uso dos parenteses para


reforçar o agrupamento
apropriado

48
Exemplo – Continuação
• abε* + ε(ab)* pode ser simplificado.
• ε* = ε, so abε* = abε.
• ε é a identididade sob a concatenação.
• Ou seja, εE = Eε = E para qualquer RE E.
• Logo, abε* + ε(ab)* = abε + ε(ab)* = ab + (ab)*.
• Finalmente, L(ab) está contido L((ab)*), então a RE
para h(L) é (ab)*.

49
Homomorfismos inversos
• Homomorfismos também podem ser aplicados “ao
contrário” e, dessa maneira, também preservam
linguagens regulares. Isto é, suponha que h seja um
homomorfismo e L uma linguagem sobre um
alfabeto do qual é a saída da linguagem h.

• h-1(L) = {w | h(w) is in L}.

50
Exemplo: Homomorfismo inverso
• Seja h(0) = ab; h(1) = ε.
• seja L = {abab, baba}.
• h-1(L) = a linguagem com dois 0’s e qualquer
número de 1’s = L(1*01*01*).

Notice: no string maps to


baba; any string with exactly
two 0’s maps to abab.

51
Exemplo: Construção Homomorfismo
inverso
a 1 Since
h(1) = ε
B 1 B

a
b 0
A b A

b 0 Since
C C h(0) = ab
a
1 , 0

h(0) = ab
h(1) = ε
52
Homomorfismo inverso
• Indica-se a leitura cuidadosa do livro-texto para
fixação e melhor compreensão

53
Exercícios Propostos
• 4.2.1 – a, b, c, e.
• 4.2.2

54
UNIVERSIDADE FEDERAL DO OESTE DO PARÁ
INSTITUTO DE ENGENHARIA E GEOCIÊNCIAS

Autômatos e linguagens formais

FÁBIO MANOEL FRANÇA LOBATO


{fabio.lobato@ufopa.edu.br}

Você também pode gostar