Lema do Bombeamento – Gramáticas Livres do Contexto Programa de Pós-Graduação em Ciência da Computação Profa. Sandra de Amo Forma Normal de Chomsky • Toda gramática livre do contexto é equivalente a uma gramática onde as regras são do tipo: A BC ou Aa • Observação: frequentemente suporemos que a gramática está na forma normal de Chomsky Relação entre tamanho da palavra e tamanho da derivação Se |w| = n então o tamanho da derivação de w é 2n-1 Prova : Por indução sobre n S Base da indução a |w| = 1 w=a 1 regra aplicada Tamanho da derivação = 1 2. 1 – 1 = 1 Logo : Tamanho da derivação = 2n-1 Hipótese de Indução Suponhamos que para toda palavra de comprimento k o tamanho de uma derivação é 2k-1 Seja w uma palavra de comprimento k+1. No exemplo: w=aba...c b Construimos uma outra Gramática G’ substituindo a regra C AB por C c A palavra u= aba....c é gerada por G’ e tem comprimento k, já que |w| = k+1 C C A a b a c c B b Pela Hipótese de Indução : tamanho da derivação de u = 2k – 1 Tamanho da derivação de w = 2k – 1 + 2 = 2(k+1) – 1 Caminhos na árvore de derivação Caminho = S – A1 – A2 - ... – An onde S, A1,...,An são variáveis (nós internos) cada A1 é filho de S e cada Ai é filho de Ai-1 S A1 B A2 a b b c Quando um caminho contém variáveis repetidas ? • Seja K = Número de variáveis da gramática. • Se o caminho tem tamanho maior ou igual a K então com certeza contém variáveis repetidas Quando um caminho da raiz até o nível logo acima de uma folha contém variáveis repetidas ? S 5 B A 4 A C a c A 3 C A a 2 B S a C A c 1 S -> AB S->a A-> AC A -> a B-> AC C -> c C-> SB C K=4 Variáveis repetidas a c Qual a relação entre o tamanho da palavra gerada e o tamanho máximo dos caminhos da árvore de derivação ? Teorema : Se todos os caminhos têm comprimento ≤ n então a palavra derivada tem comprimento ≤ 2n-1 Nivel 1 Nivel 2 Tamanho do maior caminho = Número de níveis da árvore de derivação Se número de níveis = n então : Nivel n-2 Nivel n-1 Nivel n Número máximo de elementos na última camada = 2n-1 Consequentemente : Se a palavra derivada tem comprimento > 2n-1 então existe um caminho de comprimento > n Portanto: Seja K = Número de variáveis da gramática Se a palavra derivada tem comprimento > 2K-1 então existe um caminho de comprimento > K Se um caminho tem tamanho > K então com certeza contém variáveis repetidas. Como detectar se uma linguagem não é livre do contexto ? S A A S A u A v v w u x v w x y y x Bombeamento da subárvore v w x no primeiro nó A (de baixo para cima), obtendo a palavra u v v w x x y S B A S -> AB S->a A-> AC A -> a B-> AC C -> c C-> AB A C a c z=acaaaaacc K = número de variáveis da gram. = 4 |z| = 9 > 24-1 = 8 A C A C c B A a a A C B A a A a a C c S A A a z= acaaaaacc u v w x y B A C C A c a x y x u v v w acaaaaaaaaacaacaac c u v v v w x y x x c BB S SA a acaaaaaaacaac c C S A a C C A a B AA C a c B A a A a C c Como detectar se uma linguagem nao é livre do contexto ? • Se L é livre do contexto então • Existe n > 0 (n > 2K-1, K = número de variáveis da gramática que gera L) tal que • Para toda palavra z em L com |z| > n • Existe uma maneira de dividir z em 5 partes • – z=uvwxy Para todo i ≥ 0 – u vi w xi y pertence a L Restrição “na quebra em 5” Se |z| > n = 2k-1 então existe maneira de dividir z em 5 partes : z = u v w x y tal que : |v w x| ≤ n Prova: • • • • • • • • • Se |z| = n > 2k-1 então existe caminho de comprimento > k Consideremos um destes caminhos Subimos k+1 nós a partir do último nó Com certeza encontramos no caminho 2 nós com a mesma variável A Considere o nó contendo a segunda ocorrência da variável A e pegue a subárvore SA com raiz neste nó. Este vai ser o nó que norteará a divisão de Z em 5 partes. A palavra gerada pela subárvore SA é z’ = v w x Altura de SA é ≤ k +1 Logo |z’| ≤ 2k ≤ n Altura > k A A Altura de SA≤ k+1 Altura > k A A Subárvore SA Palavra derivada por SA tem comprimento ≤ 2k ≤ n Como detectar se uma linguagem nao é livre do contexto ? • Se o texto abaixo não é verdadeiro então L não é livre do contexto • Existe n > 0 (n = 2K-1, K = número de variáveis da gramática que gera L) tal que • Para toda palavra z em L com |z| > n • Existe uma maneira de dividir z em 5 partes – z=uvwxy – | vwx | ≤ n – | vx | > 0 tal que (JUSTIFIQUE !!) • Para todo i ≥ 0 – u vi w xi y pertence a L Logo, se a condição abaixo é verificada então L não é livre do contexto • Para todo n > 0 • Existe uma palavra z em L com |z| > n • Para toda maneira de dividir z em 5 partes • – z= u v w x y – | vwx | ≤ n – | vx | > 0 tal que Existe i ≥ 0 – u vi w xi y não pertence a L Condição suficiente para L não ser livre do contexto • Para todo n > 0 • Existe uma palavra z em L com |z| > n • Para toda maneira de dividir z em 5 partes • – z=uvwxy – | vwx | ≤ n – | vx | > 0 tal que Existe i ≥ 0 – u vi w xi y não pertence a L Exemplos • Vimos que L = {0k1k | k ≥ 0 } não é regular. • Entretanto L é livre do contexto • L = L(G) Sε S0S1 Exemplo Mostrar que {0k1k2k | k ≥ 0} não é livre do contexto (não é gerada por uma Gramática LC) Seja n > 0 Considere w = 000...0 111...1 22...2 = 0 n1 n2 n Seja w = u v w y x com |vwy| ≤ n 1) 2) 3) 4) 5) Então necessariamente uma das possibilidades a seguir se verifica: vwy está contida no grupo de 0’s. Neste caso quando bombeamos v e y obtemos uma palavra com mais 0’s do que 1’s ou 2’s. vwy está contida no grupo de 2’s. Análogo a (1) vwy está contida no grupo de 1’s. Análogo a (1) v contém 0’s e 1’s: bombeando v obtemos uma palavra que não está na linguagem (conterá 0’s seguidos de 1’s) v contém 1’s e 2’s: Análogo a (4) Todas as linguagens Linguagens Turing Decidíveis Linguagens livres do contexto Linguagens Regulares