Você está na página 1de 5

Captulo 9: Linguagens sensveis ao contexto e autmatos

linearmente limitados.
Jos Lucas Rangel
9.1 - Introduo.
Como j vimos anteriormente, a classe das linguagens sensveis ao contexto
(lsc) uma classe intermediria entre a classe das linguagens recursivas e a classe das
linguagens livres de contexto (llc). J vimos anteriormente que a classe das llc est
propriamente contida na classe das lsc's: como aplicao do Lema do Bombeamento,
provamos que alguns exemplos de linguagens geradas por gramticas sensveis ao
contexto no so llc's.
Neste captulo, queremos apresentar os autmatos linearmente limitados, uma
classe de mquinas de Turing cuja operao restringida, de forma a aceitar apenas as
lsc's. Adicionalmente, queremos mostrar que a incluso da classe das lsc's na classe
das linguagens recursivas prpria, atravs de um exemplo de linguagem recursiva
que no uma lsc.
9.2 - Autmatos linearmente limitados.
Um autmato linearmente limitado (all) uma mquina de Turing no
determinstica A = <K, , , , i, F>, que satisfaz certas restries:
dois smbolos especiais, um marcador esquerdo [ e um marcador direito ],
so includos em ;
quando [ lido, a mquina no pode se mover para a esquerda, nem
escrever um smbolo distinto de [;
quando ] lido, a mquina no pode se mover para a direita, nem escrever
um smbolo distinto de ].
[ e ] no podem ser escritos em nenhuma outra situao.
Supondo que a fita de um all contm inicialmente uma sequncia da forma
[ x ], estas restries fazem com que o all no possa abandonar a regio entre os dois
marcadores [ e ], nem apag-los ou mov-los. Portanto, todas as computaes de um
all devem ser feitas no espao que originalmente contm sua entrada x.
Como j vimos anteriormente, possvel definir uma fita com k trilhas, e, num
trecho da fita de comprimento n, podemos armazenar kn smbolos. Esta a origem do
nome "linearmente limitado": o all pode manipular em sua fita informao com
tamanho limitado por uma funo linear do tamanho de sua entrada.
Definimos configuraes e transies para um all da mesma forma que para
uma mT. Entretanto, a configurao inicial associada entrada x * i [ x ].
Definimos a linguagem de um all A, por
L(A) = { x* | i [ x ] |* [ f ], com fF }
Exemplo: Vamos descrever informalmente um all A que aceita a lsc { x x | x* },
sendo = { a, b }.
Inicialmente, a fita de A contm [ y ]. Em seguida, A marca o primeiro
smbolo de y, e o primeiro smbolo da segunda metade de y, que verifica ser igual ao
Jos Lucas Rangel Linguagens Formais 9-1

primeiro. (A posio inicial da segunda metade escolhida de forma no


determinstica.) A seguir, o processo se repete com os demais smbolos das duas
metades, marcando o primeiro smbolo no marcado da primeira metade e o primeiro
smbolo no marcado (igual) da segunda metade, at que nenhum smbolo no
marcado reste na fita.
Atingido este ponto, A verificou que o ponto escolhido como incio da
segunda metade era o correto, porque havia um nmero igual de smbolos nas duas
metades, e alm disso, que os smbolos correspondentes das duas metades eram iguais
em todos os casos. Portanto, a cadeia de entrada y pertence linguagem, e pode ser
aceita por A, que passa para um estado final, onde pra.
Exerccio: Construa um all que aceite a linguagem {x x | x*}, onde = {a, b}, em
todos os detalhes.
9.3 - All's e lsc's
Vamos agora provar dois teoremas que mostram que a classe das linguagens
aceitas por all's no determinsticos e a classe das linguagens sensveis ao contexto
(lsc's) so idnticas.
Teorema 9.1: Toda lsc reconhecida por um all no determinstico.
Dem.: Seja L uma lsc, e G uma gsc que gera L. Vamos mostrar como construir um all
A, que aceita L(G). Para verificar que xL(G), A simula uma derivao S*x em
sua fita.
Primeiro, observamos que, se G tem uma regra S , A deve aceitar a entrada vazia,
identificada pelo contedo de fita []. Este caso deve ser tratado especialmente, porque
a derivao S no pode ser simulada sem um espao de comprimento pelo menos
|S| = 1.
Para considerar as demais entradas x = x1 x2 xn, A inicialmente divide sua fita em
duas trilhas, copiando x na primeira trilha, e preparando a segunda para simular uma
derivao de x. Para representar as duas trilhas, vamos usar pares de smbolos, de
forma que
(a1, b1) (a2, b2) (an, bn)
representa uma fita com duas trilhas, que contm, respectivamente, a1a2an e
b1b2bn.
Inicialmente, a fita de A contm
[ x1 x2 xn ].
Dividindo a fita em duas trilhas, temos
[ (x1, S) (x2, ) (xn, ) ]
Na segunda trilha, que contm inicialmente S, A simula uma derivao em G,
sem alterar o contedo da primeira trilha, escolhendo as regras de forma no
determinstica. Supondo-se, naturalmente, que xL, uma derivao de x pode ser
simulada, e ao final da simulao, a fita conter duas cpias de x, uma em cada trilha:
[ (x1, x1) (x2, x2) (xn, xn) ]
Neste ponto, A verifica que o contedo da primeira trilha idntico ao da segunda, e
passa para um estado final.
Jos Lucas Rangel Linguagens Formais 9-2

A idia central da demonstrao a de que, como G uma gsc, as formas sentenciais


intermedirias entre S e x, na derivao S * x, tem todas comprimento menor ou
igual ao de x, e podem portanto ser escritas na segunda trilha.
Nota: a demonstrao acima usa o fato de que o all A no-determinstico de forma
essencial, e essa hiptese no pode ser retirada, pelo menos de forma simples. Na
demonstrao, apenas uma forma sentencial construda a cada vez, sendo a escolha
da regra e da maneira de sua aplicao feita de forma no-determinstica. A
verificao final de que a cadeia x foi obtida, verifica a correo da escolha. (Escolhas
erradas no poderiam derivar x, e portanto no levariam aceitao.)
No caso de um all determinstico, entretanto, isto no seria possvel, e seria
necessrio, em princpio, examinar todas as formas sentenciais possveis, at o
comprimento n da entrada, como foi feito no algoritmo usado para demonstrar que
todas as linguagens sensveis ao contexto so conjuntos recursivos. No possvel,
entretanto, considerar todas as formas sentenciais simultaneamente por causa da
restrio de espao, porque o nmero de formas sentenciais de comprimento menor
ou igual a n pode ser exponencial em n. Uma outra alternativa seria tratar uma forma
sentencial por vez, e anotar apenas o caminho percorrido durante a derivao da
forma sentencial corrente (que regras foram aplicadas em que pontos, por exemplo),
de forma a recuar (backtrack) posteriormente, se a cadeia x no for atingida, para
voltar e considerar as alternativas restantes. Isto tambm no possvel, pois o
comprimento do caminho tambm pode ser exponencial em n.
Como esta demonstrao no pode ser adaptada para o caso determinstico,
pelo menos de forma simples, e nenhuma outra demonstrao alternativa foi
descoberta, o problema da equivalncia das classes das linguagens aceitas por all's
determinsticos e all's no determinsticos um problema ainda em aberto.
Teorema 9.2: Toda linguagem aceita por um all uma lsc.
Dem.: Seja A um all (no determinstico). Para aceitar uma entrada x, A realiza uma
computao
i [ x ] |* f
onde i o estado inicial, e f um dos estado finais de A. Vamos construir uma gsc G
que simula esta computao em cada derivao. Note, entretanto, que uma derivao
de x em G deve partir do smbolo inicial S, e terminar com x, e que a computao
acima s pode ser iniciada aps a definio de x. Usando smbolos no terminais da
forma (a, b, c, d), podemos simular quatro "trilhas":
a primeira trilha guarda uma cpia de x, que no ser alterada;
a segunda guarda outra cpia, que ser usada na simulao;
a terceira guarda o estado corrente e a posio da cabea, durante a
simulao;
a quarta tem as marcas que indicam as extremidades da fita.
A derivao se d em vrias fases:
fase 1: S * (x1, x1, i, [) (x2, x2, , ) ... (xn, xn, , ])
Nesta primeira fase, so geradas as duas cpias de x=x1x2xn, e preparada a
configurao inicial, com o estado i na primeira posio.
Jos Lucas Rangel Linguagens Formais 9-3

fase 2: (x1, x1, i, [) (x2, x2, , ) ... (xn, xn, , ])


* (x1, z1, , [) (x2, z2, , ) (xm, zm, f, ) (xn, zn, , ])
Na segunda fase, feita a simulao de A at que uma configurao final f seja
obtida, com = z1z2zm-1 e = zmzm+1zn.
fase 3: (x1, z1, , [) (x2, z2, , ) (xm, zm, f, ) (xn, zn, , ]) * x1x2xn
Na ltima fase, a partir dos smbolos em que o estado (a terceira componente) final,
feita a substituio, de forma a deixar apenas os smbolos da primeira "trilha".
Os detalhes da construo da gramtica ficam como exerccio para o leitor.
9.4 - Uma linguagem recursiva que no sensvel ao contexto.
Vamos agora apresentar uma linguagem L, definida a seguir, que recursiva,
mas no uma lsc. Para definir L, vamos inicialmente supor uma enumerao das
gsc's, G0, G1, G2, , limitadas ao caso em que o alfabeto dos terminais contm
apenas 0 e 1. Como feito anteriormente com mquinas de Turing, essa enumerao
pode ser baseada na codificao das gramticas em cadeias em um alfabeto adequado.
Apenas para fixar as idias, podemos supor que os smbolos noterminais so
codificados como n, n|, n||, , sendo o noterminal inicial indicado apenas por n.
Dessa forma, para codificar uma gramtica G = < N, , P, S >, no h necessidade de
incluir na codificao de uma gramtica o conjunto de seus terminais (0 e 1 podem
ser representados simplesmente por 0 e 1), o conjunto de noterminais N (sempre
representados por n, n|, n||, , ou o smbolo inicial S (codificado como n). Basta
assim apenas codificar as regras da gramtica, que podem ser separadas por #.
Com isso, o alfabeto pode ser = {0, 1, n, |, , #}. Como fizemos na
enumerao das mquinas de Turing, a enumerao deve eliminar as cadeias de *
que no correspondem a gsc's, e substitu-las por alguma gsc, por exemplo , que
representa a gsc "vazia", que no tem nenhuma regra, e que gera a linguagem vazia
.
Para cada gramtica Gi, possvel construir uma mT que sempre pra e que
reconhece a linguagem de Gi. Seja Mi a mT construda a partir de Gi. Portanto, a
enumerao M0, M1, M2, inclui mT's que aceitam todas as lsc's.
Defina a linguagem L por
L = { xi | Mi no aceita xi }
Fato: L recursiva.
Dem.: Note que, por construo, todas as mquinas Mi aceitam conjuntos recursivos,
e param para todas suas entradas. L aceita por uma mT M que
a partir de sua entrada x, M determina i tal que x=xi, e constri uma
representao de Mi.
simula Mi com entrada xi.
M aceita x=xi se e somente se Mi no aceita xi, ou seja, se Mi, com entrada
xi, pra em um estado que no final.
Fato: L no uma lsc.
Dem.: Por contradio. Suponha que L uma lsc. Neste caso, L tem uma gsc G=Gi, e
aceita pela mquina Mi: L = L(Gi) = L(Mi). Mas ento
Jos Lucas Rangel Linguagens Formais 9-4

xiL Mi no aceita xi xiL(Mi) xiL,


estabelecendo uma contradio. Conclumos, portanto, que L no uma lsc.
As duas propriedades acima estabelecem que a classe das linguagens sensveis
ao contexto est propriamente contida na classe das linguagens recursivas.

(julho 99)

Jos Lucas Rangel Linguagens Formais 9-5