Escolar Documentos
Profissional Documentos
Cultura Documentos
Apostila Linguagens Formais PDF
Apostila Linguagens Formais PDF
4.1 - Introduo
Essa restrio faz com que o af seja severamente limitado na classe de linguagens
que pode reconhecer, composta apenas pelas linguagens regulares, como mostraremos
neste captulo.
A Figura 4.1 representa um afd cujo controle est no estado q, e que est lendo o
quarto smbolo da cadeia de entrada, um b.
Em resumo, temos:
nmero de a's nmero de b's
q0 par par
q1 mpar par
q2 par mpar
q3 mpar mpar
A linguagem aceita ou reconhecida por M (ver definio abaixo) a linguagem formada
pelas cadeias em que os nmeros de a's e de b's so ambos mpares. Isso se deve ao fato
de que o nico estado final q3.
Por exemplo, a cadeia abaa da linguagem de M, porque, com essa cadeia, os seguintes
estados so atingidos: q0, q1, q3, q2, q3. Como o ltimo estado final, a cadeia aceita.
A linguagem de um afd. Para definir a linguagem L(M), a linguagem das cadeias aceitas
ou reconhecidas pelo afd M, podemos definir inicialmente uma configurao de M como
sendo um par (q, x) K *, composto pelo estado corrente (o estado atual da
mquina) e pela cadeia x, a parte da entrada que ainda no foi lida. Como observado, o
Exemplo 1: (continuao) Para mostrar que abaa L(M), basta observar que
(q0, abaa) | (q1, baa) | (q3, aa) | (q2, a) | (q3, ),
porque q3 final. Por outro lado, como
(q0, abab) | (q1,bab) | (q3, ab) | (q2, b) | (q0, ),
abab no pertence a L(M).
$ (q, ) = q, q K
Exerccio 2: Mostre que a definio anterior de $ pode ser substituda pela equivalente
$ (q, ) = q, q K
Exerccio 4: Descreva a linguagem do afd M dado pelo diagrama de estados da Fig. 4.3.
Exerccio 5: Descreva a linguagem do afd M = (K, , , i, F), onde K={q0, q1, q2, q3},
= { a, b }, i = q0, F = { q2 }, e dada pela tabela abaixo:
a b
q0 q1 q3
q1 q2 q0
q2 q3 q1
q3 q4 q2
Essa possibilidade de escolha entre vrios caminhos a serem seguidos nos leva a
modificar a definio de aceitao. Um afd aceita se "o ltimo estado atingido final";
mas um afnd aceita se "existe uma sequncia de escolhas tal que o ltimo estado
atingido final". Podemos alternativamente imaginar que o afnd "escolhe", "adivinha", o
caminho certo para a aceitao, uma vez que a existncia de escolhas erradas, que no
levam a um estado final, irrelevante.
Exemplo 2: Considere o afnd dado pelo diagrama da Fig. 4.4 e a cadeia de entrada
ababa.
A cadeia ababa aceita, porque uma das possibilidades a sequncia de estados q0,
q1, q1, q1, q1, q2. Naturalmente, com a mesma cadeia, poderamos escolher a sequncia
q0, q1, q1, q1, q1, q1, que no leva a um estado final. Ou a sequncia q0, q1, q1, q2,
interrompida, porque q2 no prev uma transio com o segundo b. Mas estes casos em
que "o automato adivinhou errado" no criam problemas para a aceitao, porque "existe
um caminho certo".
Este afnd aceita a linguagem das cadeias (de comprimento maior ou igual a 2), cujo
primeiro e ltimo smbolos so a, sendo os restantes quaisquer. (Compare este afnd com
o afd de um dos exemplos anteriores, que aceita a mesma linguagem.)
Pela definio, portanto, uma funo que aceita como argumentos q e a, onde q
um estado e a pode ser um smbolo de ou a cadeia vazia . Em qualquer caso, (q, a)
sempre um conjunto de estados, ou seja, um subconjunto de K.
Se tivermos (q, a) = {p1, p2, ..., pk}, entendemos que o autmato M, a partir do estado
q, pode escolher um dos estados p1, p2, ..., pk para ser o prximo estado. Se a = ,
nenhum smbolo da entrada lido; se a , o smbolo a da entrada lido. Podemos
considerar o caso a= como correspondendo a transies espontneas: M muda de
estado sem estmulo da entrada. Se tivermos (q, a) = , no h transies possveis a
partir do estado q com o smbolo a.
Note que a pode ser a cadeia vazia, caso em que temos, particularizando,
Lema 1: Toda linguagem reconhecida por um afnd reconhecida por um afnd que no
tem transies com .
Demonstrao: Seja M = (K, , , i, F) um afnd qualquer. Vamos construir um afnd
M' = (K, , ', i, F') equivalente a M, isto L(M') = L(M). Para isso vamos "simular" o
efeito das transies com de duas maneiras:
se tivermos a , (p1, ) = p2, e (p2, a) = q, acrescentaremos a ' uma
transio de p1 para q com a, ou seja, acrescentaremos q ao conjunto '(p1, a);
se tivermos (p1, ) = p2, e p2 F, acrescentaremos p1 a F.
(ver figura abaixo)
Isso deve ser feito repetidamente enquanto novas transies forem acrescentadas a ', e
enquanto novos estados forem acrescentados a F. Aps isso, retiramos de as transies
com , e chamamos os resultados de ' e F'.
Exemplo 4 (continuao): Podemos construir um afd M'' a partir de M', como descrito
na demonstrao do Lema 2. M'' ser equivalente a M (Exemplo 3) e a M'.
Temos: i'' = { A }. A tabela abaixo mostra a funo ''. Note que os 251 estados no
acessveis a partir de { A } foram ignorados. O afd pode ser visto tambm na Fig. 4.7.
'' a b
{A} {C} {G}
{C} { C, D } {C}
{G} {G} { G, H }
{ C, D } { C, D } {C}
{ G, H } {G} { G, H }
Os estados finais de M'' que precisam ser considerados so, portanto, {C, D} e {G, H},
que contm os estados finais D e H de M'. Para comparao, a tabela abaixo apresenta as
configuraes assumidas por M, M' e M'' na aceitao de ababa.
J. L. Rangel, L. C. Guedes - Ling. Formais - 4-11
Fig. 4.7 - afd para o Exemplo 4
M M' M''
(A, ababa) (A, ababa) ({A}, ababa)
(B, ababa) --- ---
(C, baba) (C, baba) ({C}, baba)
(C, aba) (C, aba) ({C}, aba)
(C, ba) (C, ba) ({C, D}, ba)
(C, a) (C, a) ({C}, a)
(D, ) (D, ) ({C, D}, )
(I, ) --- ---
O algoritmo que vamos descrever aqui se baseia no fato de que mais fcil
provar que dois estados p e q no so equivalentes do que provar que so. Para mostrar
que p e q no so equivalentes, basta achar uma cadeia x tal que $ (p, x) final e
$ (q, x) no final, ou vice-versa. Dizemos que essa cadeia x distingue o estado p do
estado q, e que p e q so distinguveis.
A tabela de transio de M
a b
A B A
B C B
C D C
D E D
E F E
F A F
Isso pode ser usado para resolver dois problemas interessantes. Primeiro, se
quisermos determinar se dois afd's M1 e M2 so equivalentes, basta construir os afd's M1'
e M2' mnimos correspondentes. Se M1' e M2' forem isomorfos, M1 e M2 so
equivalentes. Segundo, se quisermos mostrar que um afd M dado mnimo, basta aplicar
a M o processo de minimizao, e verificar que o resultado M' isomorfo de M. Isto
feito no Exemplo 6, onde, adicionalmente, para cada par de estados (p, q) distintos de
M, deduzimos exemplos de cadeias que os distinguem.
a b
A B A
B C B
C D C
D E D
E F E
F A F
Exerccio 8: Construa um afd mnimo que aceite a linguagem L no alfabeto = {a, b},
com L ={ cdxcd | c, d , x * }
Inicialmente, faa (A, a)= , para todos os noterminais A e para todos os smbolos a,
e para a = . A seguir, para todas as regras de G,
se G tem uma regra A a B, acrescente uma transio de A para B com o
smbolo a, ou seja, acrescente B a (A, a).
se G tem uma regra A a, acrescente uma transio de A para f com o smbolo
a, ou seja, acrescente f a (A, a).
se G tem uma regra A , acrescente uma transio de A para f com , ou seja,
acrescente f a (A, ).
Devemos mostrar que, para qualquer x *, M aceita x sse x L(G). A demonstrao
se completa pela verificao de que a sequncia de configuraes (S, x) |* (f, ) em M
corresponde exatamente sequncia de passos da derivao S * x em G.
demonstrao: Podemos supor que L aceita por um afd M = (K, , , i, F). Vamos
construir uma gramtica regular G para L. A gramtica G = (K, , P, i) tem como
smbolos no terminais os estados de M, e como smbolo inicial o estado inicial i de M.
As regras de G so dadas pelas transies e pelos estados finais de M:
se p = (q, a) em M, G tem uma regra q ap em P.
se q final (q F), G tem uma regra q em P
A demonstrao semelhante a anterior: devemos mostrar que, para qualquer x *, M
aceita x sse x L(G).
Exemplo 9: Seja o afd M = ({q0, q1}, {a, b}, , q0, {q1}), com dada pela tabela
abaixo.
J. L. Rangel, L. C. Guedes - Ling. Formais - 4-20
a b
q0 q1 q1
q1 q0 q0
M aceita as cadeias de {a, b}* que tem comprimento mpar.
Exemplo 10: Seja = {a, b} e seja a expresso regular = (ab)* a b b, ou seja, com
todos os parnteses, = (((((ab)*)a)b)b). Mostramos que uma er, mostrando
sucessivamente que so er's as expresses a seguir:
1. a de ER3
2. b de ER3
3. (ab) de 1, 2 e ER4
4. (ab)* de 3 e ER6
Definio. A linguagem L[] associada a uma er (ou denotada pela er) definida de
forma recursiva, seguindo a definio de er:
ER1. L[] = ;
ER2. L[] = {};
ER3. para cada a , L[a] = {a};
ER4. L[()] = L[] L[];
ER5. L[()] = L[] L[];
ER6. L[(*)] = (L[])*.
Exemplo 11: Seja = (ab)*abb, como acima. Podemos determinar a linguagem
L[] seguindo o mesmo caminho usado para provar que uma er.
1. L[a] = {a} de ER3
2. L[b] = {b} de ER3
3. L[ab] = L[a] L[b] = {a} {b} = {a, b} de 1, 2 e ER4
4. L[(ab)*] = (L[ab])* = {a, b}* de 3 e ER6
5. L[(ab)*a] = L[(ab)*] L[a] = {a, b}*{a} de 4, 1 e ER5
6. L[(ab)*ab] = L[(ab)*a] L[b] =
= {a, b}*{a}{b} = {a, b}*{ab} de 5, 2 e ER5
7. L[(ab)*abb] = L[(ab)*ab] L[b] =
= {a, b}*{ab}{b} = {a, b}*{abb} de 6, 2 e ER5
Assim, L[] a linguagem das cadeias que terminam em abb.
Exerccio 11: Mostre que, dada uma er , sempre possvel construir uma er
equivalente a , de forma que ou = , ou no contm o smbolo .
Exerccio 12: Mostre que, dada uma er , sempre possvel construir uma er
equivalente a , de forma que ou = , ou = , e no contm o smbolo .
Sugesto: considere as equivalncias
( )* *
( ) ( )
( ) ( )
Exerccio 13: Suponha a seguinte definio: uma er ambgua se para algum xL[],
existe mais de uma associao possvel entre as ocorrncias de smbolos em x e em .
Sejam as expresses
= (a b)* (b c)*
= (a b)* (aa bb) (a b)*
Teorema 4.8: Toda linguagem denotada por uma expresso regular regular.
Demonstrao. Seja uma er qualquer. Vamos mostrar que L() regular construindo
um afnd M() que aceita L(), preparando para uma demonstrao por induo na
estrutura de .
Por simplicidade, vamos construir todos os afnd M() considerados nesta demonstrao
com exatamente um estado final, distinto do estado inicial. Para uma er no elementar,
o afnd M() ser construdo a partir dos afnd's das er's componentes. Para evitar a
necessidade de nomear cada estado de cada uma dessas mquinas, vamos indicar a forma
de composio graficamente. Por conveno, sempre representaremos o estado inicial
esquerda, e o estado final direita.
ER6. Se uma er, podemos supor (pela Hiptese de Induo) que j est construdo
M(). O afnd M(*) que aceita * obtido acrescentando um estado inicial e um final
novos a M(). As novas transies so transies com entrada do estado inicial novo
para o antigo estado inicial de M() e para o novo estado final e do antigo estado final
de M() para o novo estado inicial.
Exemplo 13: Seja a er = (a b)* a. Vamos construir um afnd que aceita L(),
seguindo a construo indicada na demonstrao acima. Os passos intermedirios e os
resultados esto indicados nas tabelas a seguir
M(a) a b
inicial: A {B}
final: B
M(b) a b
inicial: C {D}
final: D
M(a b) a b
inicial: E {A, C}
A {B}
B {F}
C {D}
D {F}
final: F
M((a b)*a) a b
inicial: I {G}
G {E, H}
E {A, C}
A {B}
B {F}
C {D}
D {F}
F {G}
H {A'}
A' {B'}
B' {J}
final: J
Note que a sub-expresso a ocorre duas vezes em M(), e porisso foi necessrio incluir
duas vezes M(a); para a segunda vez renomeamos os estados, que passaram a ser A' e B'.
Exerccio 14: Construa um afd mnimo para a linguagem denotada pela er do Exemplo
13, a partir do afnd M() construdo no exemplo.
Exerccio 15: Construa afd's mnimos que aceitem as linguagens denotadas pelas
expresses regulares do Exerccio 13,
= (a b)* (b c)*
= (a b)* (aa bb) (a b)*
Teorema 4.9: Toda linguagem regular denotada por uma expresso regular.
Demonstrao: ver referncia citada.
Teorema 4.10: (Lema do Bombeamento) Seja L uma linguagem regular. Ento, existe
um natural n tal que qualquer cadeia z de L com comprimento maior ou igual a n pode
ser decomposta em trs cadeias u, v e w (z = uvw) de forma que
|uv| n
v
para qualquer i 0, u vi w L
Demonstrao: A demonstrao se baseia no fato de que para as cadeias longas z
necessrio usar pelo menos um loop de estados num afd que aceite a linguagem. Assim,
os smbolos de u so usados para chegarmos a um estado q do loop; os smbolos de v
so usados para dar a volta no loop, de volta ao estado q; os smbolos de w so usados
para ir de q at um estado final. Portanto, podemos dar quantas voltas no loop
quisermos, e repetir v um nmero qualquer i de vezes: u vi w.
As cadeias curtas (comprimento < n) devem ser excludas porque podem ser
aceitas sem passar por nenhum loop.
Exemplo 14: Seja a linguagem regular L = L[] = L[], com = 1(01)* e = (10)*1.
Considere a cadeia z=10101, pertencente a L. Podemos decompor a cadeia, da forma
descrita no teorema acima, de diversas formas. Por exemplo:
u=1 v = 01 w = 01
u = 10 v = 10 w=1
u= v = 1010 w=1
Note que todas as cadeias das formas 1(01)i01, 10(10)i1, (1010)i1 pertencem a L.
Seja k=n+1. Considere a cadeia z=ak bk. Qualquer decomposio z=uvw deve ter em v o
mesmo nmero de a's e de b's, para que a propriedade de que o nmero de a's igual ao
de b's se mantenha nas cadeias u vi w. Se isso no acontecer, quando acrescentarmos
mais um v (aumentando i de 1), obteremos uma cadeia fora da linguagem. Portanto, v
deve ser da forma aj bj, com j>0, j que v no pode ser vazia. Mas nesse caso, u v2 w
conter a cadeia aj bj aj bj, com pelo menos um a depois de um b, o que no pode
acontecer na linguagem.
Exerccio 19: Mostre que, na construo usada na demonstrao do Teor. 4.11 parte
(c), no pode ser usado um afnd.
(reviso de 27fev97)