Linguagens Formais e Autômatos

Propriedades das Linguagens Livres de Contexto

Última ocorrência: Não ocorreu

Propriedades das linguagens livres de contexto

Como determinar se uma linguagem é livre de contexto?

Para mostrar que uma linguagem é livre de contexto, é suficiente que se crie um autômato de pilha ou uma gramática livre de contexto para expressá-la.

Para demontrar que uma linguagem não é livre do contexto, utilizamos o lema do bombeamento para lingagens livres de contexto, de forma análoga às linguagens regulares.

O lema do bombeamento para linguagens livres de contexto define que, se L é uma linguagem livre de contexto, então:

Assim como no caso das linguagens regulares, a prova é por contradição.

Exemplo 1

Assumimos que L é uma LLC, e que existe wL, logo w=anbncn.

Pelo lema do bombeamento, w=uxvyz e |xvy|n, logo, sabemos que xvy só pode conter:

É impossível conter a, b e c, porque xvy não é grande o suficiente para isso (uma vez que |xvy|n).

Agora, bombeamos “para baixo”, fazendo com que i=0, e a palavra resultante uvw não pode mais conter o mesmo número de a, b e c, porque a palavra xy só pode conter, no máximo, dois dos símbolos, e portanto o resultado não fará parte de L.

Exemplo 2

Para essa demonstração vamos partir do mesmo princípio do exemplo anterior e assumir que i=j=k, e assim como antes, xvy não pode conter o mesmo número de a, b e c, logo, se xvy contém:

Como conseguimos uma contradição para todos os casos, a linguagem não é livre de contexto.

Exemplo 3

Para demonstrar esse caso, precisamos ter cuidado na escolha da palavra para analisar, pois se escolhermos 0n10n1, poderímos dividir a palavra como:

000000u0x1v0y000000w

E conseguiríamos bombear xivyi.

Mas se escolhermos a palava 0n1n0n1n, podemos demonstrar que essa palavra não pode ser bombeada.

Logo, L=ww não é uma LLC.

Fechamento de operações nas LLC

União

As LLC são fechadas para a união.

Dado um autômato de pilha M1 que reconhece L1 e um autômato de pilha M2 que reconhece L2, basta criar um automato de pilha não determinístico M3 que reconhece M1 e M2, e decide por um ou outro caminho sem consumir a entrada (ε) e sem modificar a pilha. O autômoto M3 reconhecerá L3=L1L2.

Concatenação

As LLC são fechadas para a concatenação.

Dada uma gramática G1=(V1,T1,P1,S1) e uma gramática G2=(V2,T2,P2,S2), podemos criar uma gramática G3 como

G3=(V1V2S,T1T2,P1P2{SS1S2},S)

Claramente, G3 é uma linguagem livre de contexto e formada pela concatenação de uma palavra de L1 e uma palavra de L2.

Intersecção

As linguagens livres de contexto não são fechadas para a intersecção.

Sejam L1={anbncm|n0,m0} e L2={ambncn|n0,m0}, ambas linguagens são livres de contexto (Desafio: você consegue demonstrar isso?), pela intersecção das duas linguagens, podemos obter L3

L3={anbncn|n0}

Como sabemos que L3 não é uma linguagem livre de contexto, demonstramos que a intersecção não é fechada para as LLC pro contra-exemplo.

Complemento

Como a intersecção pode ser representada em termos da união e do complemento, e considerando que a intersecção não é fechada para as linguagens livres de contexto, não se pode afirmar que o complemento de uma linguagem livre de contexto é livre de contexto.

Recursos para esta aula

Recursos online