Linguagens Formais
Apêndice 1
José Lucas Rangel
Julho 01
Dois teoremas interessantes de fechamento de linguagens
Teorema 1: A classe das linguagens livres de contexto é fechada para interseção com
conjunto regular. Ou seja, se L é uma l.l.c., e R é uma linguagem regular, L∩R é l.c..
Dem. Vamos construir um autômato de pilha não determinístico (apnd) que reconhece
M=L∩R, a partir de um apnd que reconhece L e de um autômato finito determinístico
(afd) que reconhece R.
Sejam
A = < KA, Σ, Γ, δA ,iA, I, FA >
um apnd que reconhece L por estado final, e
B = < KB, Σ, δB ,iB, FB >
um afd que reconhece R. Seja
C = < KC, Σ, Γ, δC , iC, I, FC >
um apnd, sendo
KC = KA×KB
iC = ( iA, iB )
FC = FA×FB
e a função δC definida por
(caso a≠ε)
δC( (qA, qB), a, Z )={ ( (pA, pB), γ ) | (pA, γ)∈δA(qA, a, Z), pB=δB(qB, a) },
para todo qA∈KA, qB∈KB, a∈Σ, Z∈Γ.
(caso a=ε)
δC( (qA, qB), ε, Z )={ ( (pA, qB), γ ) | (pA, γ)∈δA(qA, ε, Z) },
para todo qA∈KA, qB∈KB, Z∈Γ.
A linguagem reconhecida por C é a interseção das linguagens reconhecidas por A e por
B, ou seja, M=L∩R. Para ver isto, basta observar que, se tivermos
( (iA, iB), x, I ) C ( (fA, fB), ε, α ), com fA∈FA e fB∈FB,
teremos também
( iA, x, I ) A ( fA, ε, α ), com fA∈FA
e
( iB, x ) B ( fB, ε ), com fB∈FB,
ou seja,
x∈L(C) implica x∈L(A) e x∈L(B).
As derivações em A e B podem ser construídas diretamente a partir da derivação em C.
No caso da derivação em B, alguns estados aparecerão repetidos, nos passos
correspondentes às transições em A com entrada ε.
Semelhantemente,
x∈L(A) e x∈L(B) implicam x∈L(C),
sendo necessário acrescentar passos sem que B não muda de estado, correspondendo à
transição com ε em A.
Exemplo:
Seja L = { xcy | |x|=|y|, x,y∈{a,b}* }; seja R = L(a*cb*). Neste caso, M = L∩R =
{ ancbn |n≥0}. Podemos ter
A = < { e, d, f }, { a, b, c }, { X, I }, δA, e, I, { f } >
com
δA(e, a, I) = { (e, XI) }
δA(e, b, I) = { (e, XI) }
δA(e, c, I) = { ( d, I ) }
δA(e, a, X) = { (e, XX) }
δA(e, b, X) = { (e, XX) }
δA(e, c, X) = { ( d, X ) }
δA(d, a, X) = { ( d, ε ) }
δA(d, b, X) = { ( d, ε ) }
δA(d, ε, I) = { ( f, I ) }
(e vazio nos demais casos)
e
B = < { r, s, t }, { a, b, c }, δB, r, { s } >
com
δB( r, a ) = r, δB( r, b ) = t, δB( r, c ) = s
δB( s, a) = t, δB( s, b ) = s, δB( s, c ) = t
δB( t, a) = t, δB( t, b ) = t, δB( t, c ) = t
Neste caso, C é
C = < { er, es, et, dr, ds, dt, fr, fs, ft }, { a, b, c }, { X, I }, δC, er, I, { fs } >
com δC dado por
δC(er, a, I) = { (er, XI) }
δC(er, b, I) = { (et, XI) }
δC(er, c, I) = { ( ds, I ) }
δC(er, a, X) = { (er, XX) }
δC(er, b, X) = { (et, XX) }
δC(er, c, X) = { ( ds, X ) }
δC(es, a, I) = { (et, XI) }
δC(es, b, I) = { (es, XI) }
δC(es, c, I) = { ( dt, I ) }
δC(es, a, X) = { (et, XX) }
δC(es, b, X) = { (es, XX) } δC(es, c, X) = { ( dt, X ) }
δC(et, a, I) = { (et, XI) }
δC(et, b, I) = { (et, XI) }
δC(et, c, I) = { ( dt, I ) }
δC(et, a, X) = { (et, XX) }
δC(et, b, X) = { (et, XX) }
δC(et, c, X) = { ( dt, X ) }
δC(dr, a, X) = { ( dr, ε ) }
δC(dr, b, X) = { ( dt, ε ) }
δC(dr, ε, I) = { ( fr, I ) }
δC(ds, a, X) = { ( dt, ε ) }
δC(ds, b, X) = { ( ds, ε ) }
δC(ds, ε, I) = { ( fs, I ) }
(dt,
a,
X)
=
{
(
dt,
)
}
δC
ε
δC(dt, b, X) = { ( dt, ε ) }
δC(dt, ε, I) = { ( ft, I ) }
(e vazio nos demais casos)
Note que os nomes dos estados de C foram abreviados: er em vez de (e, r), etc. Alguns
estados de C são inúteis, e poderiam ser retirados.
Como exemplo, as computações nas três máquinas, para aceitar aaacbbb:
(e, aaacbbb, I)
(e, aacbbb, XI)
(e, acbbb, XXI)
(e, cbbb, XXXI)
(d, bbb, XXXI)
(d, bb, XXI)
(d, b, XI)
(d, ε, I)
(f, ε, I)
(r, aaacbbb)
(r, aacbbb)
(r, acbbb)
(r, cbbb)
(s, bbb)
(s, bb)
(s, b)
(s, ε)
(er, aaacbbb, I)
(er, aacbbb, XI)
(er, acbbb, XXI)
(er, cbbb, XXXI)
(ds, bbb, XXXI)
(ds, bb, XXI)
(ds, b, XI)
(ds, ε, I)
(fs, ε, I)
Teorema 2: A classe das linguagens determinísticas é fechada para interseção com
conjunto regular. Ou seja, se L é determinística, e R é uma linguagem regular, L∩R
também é determinística.
Dem. Basta notar que se a construção acima for aplicada a um apd A ( e um afd B) leva a
um apd C.
Download

Linguagens Formais Apêndice 1