(1) O documento discute propriedades das linguagens regulares, incluindo o teste de bombeamento e operações fechadas como união e concatenação;
(2) Explica como o teste de bombeamento pode ser usado para determinar se uma linguagem é regular ou não através da existência de ciclos;
(3) A classe das linguagens regulares é fechada para operações como união, concatenação e interseção, o que significa que aplicar essas operações em linguagens regulares resulta em outra linguagem regular.
3. Linguagens Regulares
Uma das principais características das linguagens regulares é o fato de
serem representadas por formalismos de pouca complexidade, grande
eficiência e fácil implementação.
No entanto por ser simples é restrita e limitada, sendo fácil definir
linguagens não regulares.
(a)Assim alguma questões sobre linguagens regulares necessitam ser
analisadas.
(b)Como determinar se uma linguagem é regular?
(c)A Classe das Linguagens Regulares é fechada para operações de
união, concatenação e intersecção (ou seja, a oepração de duas
linguagens regulares resulta em uma linguagem regular)?
(d)Como verificar se uma linguagem regular é infinita ou finita (ou até
mesmo vazia)?
(e)É possível analisar duas linguagens regulares quaisquer e concluir
se são iguais ou diferentes?
Vamos responder essas questõesda Computação conteúdo.
Aspectos Teóricos
com esse 3/16
4. Bombeamento para as Linguagens Regulares
A ideia do bombeamento é a seguinte:
● Se uma linguagem é regular, então é aceita por um autômato finito
determinístivo o qual possui um número finito e predefinido de n estados;
● Se o autômato reconhece uma entrada w de comprimento maio ou igual ao
número de estados n, obrigatoriamente o autômato assume algum estado q
mais de uma vez e, portanto, existe um ciclo na função programa que passa
por q;
● Logo, w pode ser dividida em três subpalavras w=uvz tal que |uv| ≤ n, |v| ≥ 1
e onde v é a parte de w reconhecida pelo ciclo;
● Claramente, tal ciclo pode ser executado (“bombeado”) zero ou mais vezes.
Portanto, para qualquer i ≥ 0, uviz, é aceita pelo autômato (ou seja, é
palavra da linguagem)
v
u z
q0 q qf
Aspectos Teóricos da Computação 4/16
5. Bombeamento para as Linguagens Regulares
Se L é uma linguagem regular, então:
existe uma constante n tal que,
para qualquer palavra w de L onde |w| ≥ n,
w pode ser definida como w = uvz onde:
|uv| ≤ n,
|v| ≥ 1
sendo que, para todo i ≥ 0, uviz é palavra de L.
Aspectos Teóricos da Computação 5/16
6. Exemplo
Considere o autômato abaixo.
Qual é a linguagem aceita?
b
q0 a q1 q2 a qf
b
Aspectos Teóricos da Computação 6/16
7. Exemplo
Considere o autômato abaixo.
b
q0 a q1 q2 a qf
b
abb*a
n=4
no caso particular de w = abbba, vale que:
|w| = 5
qr=qs=q1
u=a, v=bb, z=ba
Aspectos Teóricos da Computação 7/16
8. Analisando ainda o nosso autômato
Considere o autômato abaixo.
b
q0 a q1 q2 a qf
b
abb*a
Esse autômato pode ter menos estados para
reconhecer a mesma linguage?
5 minutos para pensar.
Aspectos Teóricos da Computação 8/16
9. Investigação se é Linguagem Regular
Para mostrar que uma linguagem é regular, é
suficiente representá-la usando um dos
formalismos apresentados anteriormente –
Autômato Finito, Expressão Regular ou
Gramática Regular)
No entanto para mostrar que uma linguagem não
é regular temos que fazer a verificação caso a
caso.
Aspectos Teóricos da Computação 9/16
10. Linguagem Não Regular
A seguinte linguagem sobre {a,b} é não regular:
L={w|w possui o mesmo número de símbolos a e b}
A prova que segue é por absurdo.
Suponha que L é regular, Então existe um AFD com n estados que
aceita L.
Seja w=anbn palavra de L sendo |w|=2n ≥ n. Logo, pelo lema anterior –
Bombeamento para as Linguagens Regulares – w pode ser definida
como w=uvz tal que:
|uv| ≤ n
|v| ≥ 1
sendo que, para todo i ≥ 0, uviz é palavra de L, o que é um absurdo,
pois, como |uv| ≤ n, uv obrigatoriamente é composta exclusivamente por
símbolos a. Neste caso, por exemplo, uv2z não pertence a L, pois o
número de símbolos a será maior que o número de símbolos b.
Aspectos Teóricos da Computação 10/16
11. Operações Fechadas sobre as Linguagens Regulares
Operações sobre linguagens podem ser usadas para:
● Construir novas linguagens regulares a partir de
linguagens regulares conhecidas (definida uma álgebra);
● Provar propriedades;
● Construir algoritmos.
Uma importante característica da Classe de Linguagens
Regulares é ser fechada para diversas operações, com
destaque para:
● União;
● Concatenação;
● Complemento;
● Intersecção.
Aspectos Teóricos da Computação 11/16
12. Operação Complemento
Relembrando: O complemento de um conjunto
são todos os elementos que pertencem ao
conjunto universo mas não pertencem ao
conjunto.
Por exemplo:
Seja um linguagem L definida sobre ∑ = {a,b}
Ela é identificada pelo AFD abaixo
q0 a q1 a,b q2 a,b qf
Construa um AFD que aceite somente as
palavras que não são aceitas por L.
Exercício.
Aspectos Teóricos da Computação 12/16
13. Operação Complemento
Suponha que L é uma linguagem regular sobre ∑ *. Então existe um AFD:
M = (∑, Q, δ,q0, F)
tal que: ACEITA(M) = L
A ideia do que segue consiste em inverter as condições de ACEITA/REJEITA de M
para reconhecer ~L. Entretanto, com M pode rejeitar por indefinição é necessário
modificar o autômato, garantindo que somente irá parar ao terminar de ler toda a
entrada. Para tal, é suficiente introduzir um novo estado não-final d. o qual será destino
de todas as transições originalmente indefinidas. Um ciclo em d para todos os símbolos
do alfabeto garante que o autômato terminará de ler toda a entrada. Por fim, a inversão
das condições ACEITA/REJEITA pode ser obtida transformando os estados finais em não
finais e vice-versa.
A construção do AFD: MC = (∑, QC, δC, q0, FC)
tal que: ACEITA(MC) = ~L
é como segue (suponha d não pertence a Q).
QC = QU{d}
FC = Q C – F
δC é como δ , com as seguintes transições adicionais (para todo a Є ∑ e q Є Q):
δC(q,a) = d se δC(q,a) não é definida
δC(d,a) = d
Claramente, o autômato finito MC construído acima é tal que:
ACEITA(MC) = ~L ou seja ACEITA(MC) = REJEITA(M)
Aspectos Teóricos da Computação 13/16
14. Exemplo
Considere o AFD: M = ({a,b}, {q0,q1,q2,qf},δ,q0,{qf})
q0 a q1 a,b q2 a,b qf
Qual é a linguagem aceita por esse autômato?
L = a(a+b)(a+b)
Vamos construir o AFD que reconhece a linguagem complemento
~L, que são todas as palavras que não são aceitas por M.
MC = ({a,b}, {q0,q1,q2,qf,d},δC,q0,{q0,q1,q2,d}
ACEITA(MC) = ~L ou seja ACEITA(MC) = REJEITA(M)
q0 a q1 a,b q2 a,b qf
b a,b
d
a,b
Aspectos Teóricos da Computação 14/16
15. Ler
● Seçao 4.1, 4.2, 4.3 do livro.
Aspectos Teóricos da Computação 15/16
16. Exercícios
1. Desenvolva o AFDC que aceita a LC a linguagem aceita pelo autômato abaixo: Toda string que
começa por a e tiver dois as é aceita e toda string que começa por b e tiver dois bs é aceita.
q0
b
a
q2 a
q1
b
b a
qf
2. (Exercício 4.2 do livro texto) Para cada linguagem abaixo, desenvolva um correspondente autômato
finito e exemplifique o lema do bombeamento para linguagens regulares de forma a ilustrar a
existência de mais de um bombeamento
(a) {anbm | n ≥ 0 e m ≥ 0}
(b) {anbmar | n ≥ 0, m ≥ 0 e r ≥ 0}
3. Prove que as linguagens não são regulares (suponha que n Є N e m Є N):
(a) {ww | w é palavra de {a,b}*}.
(b) {w | (w=anbm ou w=ambn), n ≥ m}
Aspectos Teóricos da Computação 16/16