Propriedades das livres de contexto
Simplificação de CFG, forma normal de Chomsky, CYK, fecho e lema da repetição.
Em , se puder desaparecer, também tem de poder gerar sozinho uma palavra a partir do início. Apagar sem acrescentar perderia essa possibilidade.
A simplificação substitui o efeito das regras que elimina. Depois, a forma normal de Chomsky organiza as produções de CFG para calcular a pertença numa tabela.
Variáveis anuláveis, unitárias e inúteis
Uma variável é anulável se deriva . Começa nas produções e acrescenta uma variável quando alguma das suas produções contém apenas variáveis já anuláveis. Repete até estabilizar. Um terminal nunca é anulável.
Para eliminar produções vazias, cria todas as combinações de presença e ausência das ocorrências anuláveis em cada lado direito. Em , se for anulável e não for, surgem , , e . As duas ocorrências de são escolhas independentes. Depois retira produções vazias, tratando separadamente a aceitação de .
Uma produção unitária tem forma , com duas variáveis. Calcula os pares em que chega a só com produções unitárias, incluindo . Copia para todas as produções não unitárias de cada alcançado e retira as unitárias. Não basta apagar , porque perderias as palavras geradas através dela.
Uma variável é geradora se deriva alguma palavra terminal. Calcula primeiro as geradoras, a partir de regras só com terminais ou variáveis já geradoras. Retira as não geradoras e as regras que as usam. Depois calcula as variáveis alcançáveis a partir do início na gramática que ficou e retira as restantes.
Por exemplo, em , , sem regras para , não é geradora. Retira e, só depois, vês que ficou inacessível. O resultado é .
Uma ordem segura para a simplificação completa é: eliminar produções vazias, eliminar unitárias e eliminar símbolos inúteis, primeiro não geradores e depois inacessíveis. A eliminação de vazias pode criar unitárias, e as etapas podem tornar símbolos inúteis.
Simplificação acompanhada numa gramática
Considera a gramática
- Só é anulável. Em , omitir cria . Retira depois .
- Agora há as unitárias e . A cadeia chega de a , pelo que copiamos e para ambos e , e retiramos as duas unitárias.
- Todas as variáveis são geradoras, mas é inacessível a partir de e sai.
O resultado completo é:
continua a derivar por . A palavra , que antes dependia de apagar , deriva agora diretamente por . A linguagem mantém-se .
Intercalação de uma CFL com uma regular
Se é CFL e é regular, a intercalação é CFL. A construção usa um PDA por estado final para e um DFA para :
- Usa um fundo novo, que a simulação de não retira, para permitir ler letras de mesmo depois de a pilha simulada ficar vazia.
- Constrói um PDA cujo estado é : ao ler uma letra, escolhe avançar mantendo , ou avançar mantendo e a pilha. Transições vazias de mantêm .
- Aceita quando é final em , é final em e a entrada foi consumida.
Cada letra é atribuída a uma das duas palavras, preservando a ordem interna de cada uma. Isto generaliza a construção para intercalação regular/regular, onde dois DFA chegam; aqui a pilha de acompanha apenas as letras atribuídas a .
Forma normal de Chomsky
Na forma normal de Chomsky, CNF, as produções têm forma
Adota a extensão que permite se a linguagem contém a palavra vazia, desde que o início não apareça em nenhum lado direito. Uma regra é unitária e não fica na CNF final desta convenção.
Depois da simplificação, substitui cada terminal em lados direitos de comprimento pelo menos dois por uma variável nova, como . Não alteres , que já está na forma certa.
Divide os lados direitos compridos: torna-se , , com novo. Para quatro ou mais variáveis, continua a cadeia. Cada regra passa a ter duas variáveis ou um terminal.
Conversão completa
Parte de . Introduz , , ficando . O início é anulável e aparece à direita; cria um início novo para preservar .
Eliminando a ocorrência anulável de no meio, tens . Copia estas regras para para eliminar , e conserva . Finalmente, divide com :
não aparece à direita. Para , a derivação é . A base dá um par, e acrescenta outro par à volta.
CYK: decidir a pertença
O algoritmo CYK usa uma CFG em CNF e uma palavra não vazia . A célula contém as variáveis que geram a subpalavra .
Na diagonal:
Para intervalos maiores, tenta todos os cortes entre e . Se , e , acrescenta a . Preenche por comprimento crescente, porque cada decisão depende de intervalos menores.
Com a CNF anterior e , obténs a tabela abaixo por comprimento crescente. Os índices identificam as posições da subpalavra na entrada:
| Intervalo e palavra | Variáveis |
|---|---|
Em , o corte usa . Em , o corte usa . Como , a palavra pertence à linguagem.
Não juntes todos os símbolos de uma linha sem respeitar o intervalo e o corte. no último só pode combinar com uma variável que gere a parte imediatamente anterior no mesmo intervalo.
Para gramática fixa, há células e cortes por célula, dando tempo e espaço . Se a gramática variar, o custo inclui também o número de produções. Para , não crias uma tabela vazia: verifica diretamente se o início pode gerar a palavra vazia.
Propriedades de fecho
As livres de contexto são fechadas para união, concatenação, estrela e reverso. Para união, usa um início novo , após renomear variáveis para os conjuntos serem disjuntos. Para concatenação, usa ; para estrela, usa .
São também fechadas para interseção com uma regular. O produto entre PDA e DFA guarda ambos os estados, conservando a pilha do PDA. Uma transição vazia do PDA não altera o estado do DFA; uma letra lida atualiza ambos. Aceita quando as duas condições finais se verificam após consumir a entrada.
Não são fechadas para interseção entre duas CFL. Considera:
Cada uma compara apenas dois blocos, mas a interseção é , que não é livre de contexto. Também não há fecho geral para complemento: se houvesse, as leis de De Morgan e o fecho para união dariam fecho para interseção. A diferença geral falha pela mesma razão, pois é um caso de diferença.
Lema da repetição para CFL
Se é livre de contexto, existe tal que toda a palavra , , admite com:
A condição permite que uma das partes seja vazia, mas não ambas; bombeia e com o mesmo expoente, enquanto fica uma única vez. Ao contrário do lema regular, a zona limitada não tem de estar no princípio da palavra.
Uma árvore sintática suficientemente alta repete uma variável num caminho. Podes retirar a parte entre as duas ocorrências, ou repeti-la. Essa parte acrescenta de um lado da subárvore interior e do outro. Uma CNF permite limitar o tamanho da zona que contém a repetição.
Provar que aⁿbⁿcⁿ não é CFL
Supõe que é CFL e seja o comprimento do lema. Escolhe . Considera qualquer decomposição válida.
Como , essa zona não pode conter ao mesmo tempo um e um : teria de incluir todo o bloco de letras , além dos dois extremos. Logo, a zona deixa intacto pelo menos um dos tipos de símbolo extremos.
Com , retiras e . Retiras pelo menos um símbolo, pois , enquanto o tipo que não aparece na zona mantém as suas ocorrências. As três contagens já não são iguais. Portanto, , contradizendo o lema.
Não escolhes uma decomposição conveniente. A limitação da zona cobre todas as decomposições. Como no lema regular, satisfazer o lema não prova pertença à classe.
A palavra escolhida pode admitir uma repetição
Estar na linguagem e ter comprimento suficiente são condições necessárias para uma testemunha, mas não chegam para a prova negativa. Considera
O último bloco tem comprimento , mas as suas letras são livres. Não exige três contagens iguais de símbolos diferentes.
Supondo CFL, recebe o comprimento do lema. Podemos aumentá-lo para , pois a condição continua válida com um limite maior. A candidata pertence a , escolhendo . Porém, admite um corte que o adversário pode usar para escapar à contradição:
O corte tem e . Para qualquer expoente , a palavra bombeada é
Continua em , com e bloco final . Encontrámos um corte que impede a contradição com esta candidata. Isto não prova que seja CFL; mostra que precisamos de escolher outra palavra.
Separar a zona curta dos extremos
Escolhe agora . A zona tem comprimento no máximo e não pode tocar nos dois blocos de , pois teria de atravessar os símbolos . É esta a testemunha que funciona: força o adversário a retirar símbolos de uma região que desequilibra sempre a palavra.
Bombeia com . Seja a quantidade retirada do primeiro bloco, do bloco de e do último. A palavra fica , com
Todos os blocos continuam não vazios, porque retiramos no máximo símbolos. Para pertencer a , a primeira mudança de para fixa . É preciso ter letras para o bloco obrigatório. O que sobra, , deve ter comprimento , portanto .
Estas condições excluem todos os cortes:
| Zona que contém as partes retiradas | Condição que falha |
|---|---|
| Não retira do primeiro bloco, | dá . |
| Retira do primeiro bloco, | O último fica intacto, . A igualdade exigiria , mas exigiria . São incompatíveis. |
Como não são ambos vazios, algum símbolo sai. Em qualquer decomposição válida, a palavra bombeada deixa . Esta contradição prova que não é CFL. A prova usa o significado do último bloco, não uma falsa exigência de que contenha só .
O que se pode decidir sobre CFG
A pertença é decidível por CYK. O vazio é decidível verificando se o início é gerador. Já não há algoritmos gerais que decidam equivalência de duas CFG, universalidade de uma CFG ou ambiguidade de uma CFG.
Isto não impede resolver exemplos particulares com um argumento. Dizer que um problema é indecidível significa que não existe um algoritmo que termine e responda corretamente a todas as entradas desse problema.
Exercícios
A prova de três contagens adapta a linguagem da questão 11 do teste de 13/6/2024. A intercalação adapta a TP de 2022/23, como indicado no enunciado. As gramáticas de CNF e CYK são próprias.
Provar que duas comparações não chegam
Prova que não é livre de contexto.
Pista
A zona vwx tem comprimento no máximo p e não pode tocar simultaneamente em a e c.
Mais uma pista
Se toca em a e/ou b sem c, as contagens de a e b não podem continuar ambas iguais a metade de 2p. Se toca em b e/ou c sem a, o a fica em p.
Solução
Supõe L CFL, recebe p e escolhe . Para qualquer decomposição válida, vwx não contém simultaneamente a e c. Com i=0 retira-se pelo menos um símbolo. Se não há c na zona, o número de c fica em 2p; manter a relação exigiria que a e b continuassem ambos em p, impossível porque algum deles foi retirado. Se não há a na zona, a fica em p; manter a linguagem exigiria b=p e c=2p, novamente impossível porque algum b ou c foi retirado. Logo a palavra bombeada sai de L em todos os casos.
Confere a tua resposta:
- Escolhe a elevado a p, b elevado a p e c elevado a 2p.
- Usa o limite da zona para garantir que algum tipo extremo fica intacto.
- Bombeia com i=0 e mostra que a igualdade a=b ou a relação c=2a falha.
Erros frequentes
Não esqueças que v ou x pode ser vazio. Não exijas que vwx esteja no princípio da palavra.
Preservar a palavra vazia
Converte em CNF, preservando a linguagem, a gramática , , . Explica o tratamento de .
Pista
A linguagem é a estrela de a seguida de zero ou um b. A CNF tem de conservar a palavra vazia.
Mais uma pista
nunca aparece num lado direito, pelo que podes manter como exceção inicial.
Solução
As variáveis anuláveis são . Ao omitir as ocorrências de , surgem . Ao omitir de , surge . Depois de retirar as vazias de e eliminar as unitárias , obtemos
Introduzindo , a CNF final é
não aparece à direita, pelo que a exceção vazia é válida. gera um ou mais seguidos de , gera pelo menos dois , e as bases cobrem . A linguagem continua .
Confere a tua resposta:
- Identifica A, B e S como anuláveis.
- Acrescenta as alternativas resultantes de omitir A ou B antes de eliminar as vazias.
- Elimina unitárias e substitui o a de aA por uma variável.
- Mantém ε apenas no início, ausente dos lados direitos.
Erros frequentes
Não apagues ε da linguagem. Não deixes S→A ou S→B na CNF. Não substituas S→a: já é uma produção válida.
Tentar todos os cortes
Na CNF , , , , calcula a tabela CYK para . A palavra é aceite? Indica cada corte que produz um conjunto não vazio.
Pista
A regra S→AC requer C no intervalo da direita, não S.
Mais uma pista
Os cortes do intervalo total são e .
Solução
A diagonal é . Para , não há regra com corpo , logo o conjunto é vazio. Para , a regra dá .
No intervalo , o corte oferece , mas não existe regra com corpo . O corte tem conjunto esquerdo vazio. Portanto, e a palavra é rejeitada. Esta gramática gera os blocos com , pelo que rejeitar concorda com as contagens.
Confere a tua resposta:
- Na diagonal obtém A, A, B.
- Só ab tem S entre as células de comprimento dois.
- Confere os dois cortes de aab sem fabricar B para aa.
Erros frequentes
Não uses A do primeiro a e B do último b ignorando o símbolo intermédio. Não troques C por S só porque C pode derivar SB.
Intercalação com uma regular
Sejam e . A intercalação preserva a ordem interna de uma palavra de cada linguagem. Decide se , e pertencem a . Descreve depois um PDA para esta intercalação e generaliza a construção para qualquer CFL e qualquer regular. Adaptação do exercício 6d da TP de propriedades de CFL.
Pista
Retira os c para testar a ordem e a contagem dos outros símbolos.
Solução
Em , retirar os deixa , e os formam uma palavra de , logo aceita. Em , sobra e rejeita. intercala com , pelo que aceita.
Usa o PDA por estado final de e o DFA de . Guarda o par de estados, com um fundo novo que a simulação da pilha não retira. Cada letra escolhe entre avançar o PDA mantendo , ou avançar o DFA mantendo e a pilha. As transições vazias do PDA mantêm . No exemplo, os pertencem ao DFA e os ao PDA; para alfabetos sobrepostos, o não determinismo escolhe a origem.
Aceita com entrada consumida e ambas as componentes finais. O fundo novo permite ler mais letras da regular mesmo depois de a pilha simulada esvaziar. Cada ramo define duas subsequências em ordem; um ramo aceitante dá uma palavra de cada linguagem, e qualquer intercalação válida permite escolher um ramo aceitante.
Confere a tua resposta:
- Classifiquei cacb, cbca e ccc, incluindo a palavra vazia de L.
- Mantive a pilha nas letras da regular e um fundo permanente.
- Justifiquei as duas direções da construção geral.
Uma palavra longa que deixa o adversário bombear
Considera e um comprimento de repetição . Um colega tenta provar que K não é CFL usando . O adversário dá , , , e .
Confere se é um corte permitido e calcula a palavra para qualquer expoente i. Esse corte prova que K é CFL? Escolhe depois uma testemunha que permita a contradição e justifica todos os cortes, sem supor que z só contém a. Adaptação da escolha de testemunha da questão 17 do teste de 11/6/2025.
Pista
Na testemunha com três blocos, a primeira mudança para b fixa n. A parte final pode conter b que sobraram, além dos a finais.
Solução
O corte recompõe s, tem e . Para i≥0, dá , com e . Logo esta candidata não força a contradição. Um corte que bombeia uma palavra não demonstra o lema para toda a linguagem, e ainda menos prova que ela seja CFL.
Escolhe . Ao retirar v e x, ficam , todos os blocos não vazios. Se α, β e γ forem as quantidades retiradas dos três blocos, , , . Pertença a K exigiria e .
A zona de comprimento no máximo p não toca nos dois blocos extremos. Se , algum β ou γ é positivo, e . Se , temos γ=0; a igualdade exigiria , mas exigiria , impossível. Portanto i=0 sai de K em qualquer corte. Supondo K CFL, isto contradiz o lema. Podemos exigir p≥3 aumentando o seu comprimento, se necessário.
Confere a tua resposta:
- Verifiquei que a^p b^(2p) pertence a K e que o corte tem zona de comprimento 3.
- Obtive a^(p−1+i) b^(2(p−1+i)) para todo i≥0, sem afirmar que K é CFL.
- Usei a^(2p) b^(2p) a^(2p) e as condições k≥j e k+ℓ=2j para cobrir todos os cortes.