9. Linguagens Regulares
Por definição, são as linguagens que podem ser representadas por AFDs. Por equivalên-cia, são também as linguagens representadas por AFNs ou ERs.
• Assim, para provar que uma linguagem é regular, basta representá-la com qual-quer um desses modelos.
Existem várias aplicações das linguagens regulares:
• Validação de entradas (ex.: testar se uma entrada está no formato correto para um endereço de e-mail)
• Busca por ocorrências (ex.: procurar todos os links em um arquivo)
• Filtros de spam (ex.: filtrar e-mails que tenham ocorrências de certas palavras) • Compiladores (para gerar uma parte da análise sintática automaticamente)
Porém, esta é a classe de linguagens mais simples estudada nesta disciplina. Assim, vá-rias linguagens e problemas simples não fazem parte dela.
Exemplos de linguagens não-regulares:
• Cadeias na forma anbn, para n ≥ 0
• Cadeias formadas por uma mesma quantidade de a’s e b’s, em qualquer ordem • Cadeias na forma wwr, onde w é uma cadeia qualquer
• Cadeias na forma ww, onde w é uma cadeia qualquer • Cadeias que são palíndromos.
Como provar que essas e outras linguagens não são regulares? Temos como provar que não existe um AFD para a linguagem?
9.1 Lema do Bombeamento para Linguagens Regulares
Antes de apresentar o lema, vamos analisar as condições para uma cadeia w ser aceita em um AFD de p estados:
• Se o caminho que aceita w não repete estado, então |w| < p
• Portanto, se |w| ≥ p, então é porque o caminho (seguido durante a computação)
repete algum estado qi, ou seja, o caminho faz um ciclo no AFD (saindo desse qi
e voltando a qi)
o Vamos considerar que, nesse ciclo de qi até qi, o AFD lê uma subcadeia
de w que chamaremos de y
o Se repetirmos várias vezes essa porção y da cadeia, deixando o resto in-tacto, estaremos criando outras cadeias que o AFD também aceita
Pois essas repetições simplesmente dão mais voltas no ciclo de qi
a qi, seguindo o mesmo caminho para o estado de aceitação
de-pois
o Além disso, é possível provar que uma parte y assim pode sempre ser en-contrada entre os p primeiros símbolos da cadeia. (Pode haver uma parte y depois dos primeiros símbolos sim, mas essa parte anterior será mais
importante).
A idéia básica do lema é essa, porém ele omite qualquer discussão à respeito do AFD, deixando o lema mais poderoso.
Grosseiramente falando, o lema afirma que, para toda linguagem regular, existe um ta-manho máximo p para as cadeias, tal que toda cadeia w de tata-manho maior ou igual a p pode ser “bombeada” gerando outras infinitas cadeias da linguagem.
O livro apresenta um enunciado para o lema, que aqui aparece reorganizado grafica-mente para facilitar o entendimento das partes do lema.
Este é o Lema do Bombeamento para Linguagens Regulares:
Então, existe um número p (o comprimento do bombeamento) tal que o enunciado abaixo é válido para toda cadeia w:
Se L é um linguagem regular
w ∈ L
e | w | ≥ p
A cadeia w pode ser dividida em três partes w = x.y.z, satisfazendo as seguintes condi-ções:
(1) | y | > 0 (2) | x.y | ≤ p
9.2 Provando que uma Linguagem Não é Regular
Para provar que uma linguagem L não é regular, fazemos a seguinte prova por redução ao absurdo (prova por contradição):
• Assumimos que L é regular. Logo, o lema do bombeamento pode ser aplicado e, assim, existe algum valor para p que permite o bombeamento.
• Escolhemos uma cadeia que faz parte de L de modo que ela tenha tamanho maior do que p, para qualquer que seja o valor de p
o Esta talvez seja a parte mais importante e mais difícil da prova
• Provamos que, apesar da cadeia satisfazer as condições do lema, não é possível bombear com sucesso nenhum trecho dessa cadeia.
• Isso contradiz o lema. Essa contradição encerra a demonstração (pois não pode ser verdade a hipótese de que L é regular).
o Reveja prova por redução ao absurdo, de Matemática Discreta.
Exemplo: Prove que a linguagem D = { anbn | n > 0 } não é regular.
Prova por redução ao absurdo. • Hipótese: D é regular
• Pelo lema, existe algum valor máximo p para as cadeias, de forma que toda ca-deia de tamanho maior que p pode ser “bombeada”
• Como não sabemos o valor de p, vamos escolher uma cadeia dada em função de p para bombear: w = apbp
• Veja que esta cadeia:
o Faz parte da linguagem e
• Segundo o lema, nessas condições, podemos dividir a cadeia na forma w=xyz de modo que y não seja vazia (condição 1) e de modo que todo “bombeamento” de y seja cadeia da linguagem (condição 3).
• Porém, veja que a condição 2 exige que essa parte y seja escolhida dentre os primeiros p símbolos, que, neste caso, são todos símbolos as.
• Assim, com esta cadeia, para qualquer escolha de y que fizermos, se “bombear-mos” y, aumentamos a quantidade de as e produziremos cadeias com mais as do que bs. Portanto, tais cadeias “bombeadas” não farão parte da linguagem, o que
contradiz a condição 2 do lema.
9.3 Outras Propriedades das Linguagens Regulares
O Lema do Bombeamento, dado na seção 9.1, é uma propriedade das linguagens regula-res. Nesta seção, apresentamos outras propriedades mais simples.
Considere duas linguagens regulares L1 e L2 quaisquer. Então:
1) A união L1∪∪∪∪ L2 é regular.
Prova: Como elas são regulares, vamos representar L1 e L2, respectivamente, pelas
expressões regulares r1 e r2. Assim, a expressão r1|r2 expressa precisamente a
lingua-gem L1 ∪∪∪∪ L2, logo esta linguagem é regular.
Exercício: tente provar a propriedade anterior usando AFNs.
2) A concatenação L1◦ L2 é regular.
Prova: Como elas são regulares, vamos representar L1 e L2, respectivamente, pelas
expressões regulares r1 e r2. Assim, a expressão r1r2 expressa precisamente a
lingua-gem L1 ◦ L2, logo esta linguagem é regular.
Exercício: tente provar a propriedade anterior usando AFNs.
3) O complemento de L1, representado por L1C (ou L1 com um traço em cima) é
regular.
Prova: Como ela é regular, existe um AFD M1 que aceita L1. Agora, alterarmos M1
trocando os estados de aceitação pelos de rejeição e vice-versa, teremos um outro AFD
se criarmos outro AFD M1C que aceita tudo que L1 rejeita e rejeita tudo que L1 aceita.
Logo, este AFD representa a linguagem L1C, e, assim, esta é uma linguagem regular.
4) A interseção L1 ∩∩∩∩ L2 é regular.
Prova: Com base nas Leis de De Morgan, temos que L1∩L2 =
(
L1∪L2)
. Porém, comoL1 e L2 são regulares, pela propriedade 3, os complementos delas são duas linguagens
com-plemento desta união, pela propriedade 3, é regular. Logo
(
L1∪L2)
é regular. Comoeste conjunto é igual à interseção, concluímos que L1 ∩∩∩∩ L2 é regular.
Prova alternativa (esboço): Vamos considerar os AFDs M1 e M2 que representam,
res-pectivamente, L1 e L2. A partir deles, vamos criar um novo AFD Mnovo em que cada
estado é um par (estado de M1, estado de M2). Assim, Mnovo vai servir para simular, em
paralelo, os dois autômatos M1 e M2. Além disso, os estados de aceitação do novo
au-tômato seriam pares formados por dois estados de aceitação, um de M1 e outro de M2.
Dessa forma, este novo AFD só aceita aquilo que os dois autômatos originais aceitam.
Logo, Mnovo representa a intersecção de L1 e L2. Assim, esta interseção é regular.
Mais detalhes da prova alternativa acima foram dadas em sala de aula.
“Eis que estou à porta e bato.
Se alguém ouvir a minha voz e abrir a porta,
entrarei e cearei com ele, e ele comigo."