Propriedades das livres de contexto

Simplificação de CFG, forma normal de Chomsky, CYK, fecho e lema da repetição.

TLDR

Perguntar sobre esta página

ChatGPTClaudePerplexityGrokGeminiCopiar e abrirDeepSeekCopiar e abrir

Simplificação de CFG

  1. Produções vazias: calcula as variáveis anuláveis, isto é, as que derivam ε\varepsilon. Por cada produção, cria todas as combinações que omitem ocorrências anuláveis. Depois retira as produções vazias e preserva ε\varepsilon apenas se a linguagem original a continha, usando um início novo que não aparece em nenhum lado direito.
  2. Produções unitárias: calcula todos os pares A⇒∗BA\Rightarrow^*B alcançados só com regras unitárias A→BA\to B. Depois copia para AA todas as produções não unitárias de cada BB alcançado e retira as regras unitárias.
  3. Símbolos inúteis: retira primeiro as variáveis não geradoras e as regras que as usam; depois retira as variáveis inacessíveis a partir do início na gramática que ficou.

Em A→BCBA\to BCB com só BB anulável, conserva a produção original BCBBCB e acrescenta CBCB, BCBC e CC. Apagar a regra vazia sem acrescentar estas combinações perderia palavras. A ordem segura é: produções vazias, unitárias, variáveis não geradoras e depois inacessíveis.

Forma normal de Chomsky

Na forma normal de Chomsky, cada produção tem a forma A→BCA\to BC ou A→aA\to a. A extensão admite S0→εS_0\to\varepsilon quando ε\varepsilon pertence à linguagem, desde que o início S0S_0 não apareça em nenhum lado direito.

  1. Simplifica a gramática e usa um início novo quando ε\varepsilon pertence à linguagem.
  2. Substitui cada terminal em corpos com comprimento pelo menos dois por uma variável nova, por exemplo Ta→aT_a\to a; conserva as regras A→aA\to a, que já estão na forma certa.
  3. Divide os corpos compridos: A→BCDA\to BCD passa a A→BXA\to BX e X→CDX\to CD, com XX novo.
  4. A CNF final não conserva regras unitárias como S0→SS_0\to S.

CYK

Usa uma CFG em CNF e uma palavra não vazia w=a1⋯anw=a_1\cdots a_n. A célula T[i,j]T[i,j] contém as variáveis que geram a subpalavra ai⋯aja_i\cdots a_j.

  1. Na diagonal, T[i,i]={A∣A→ai}T[i,i]=\{A\mid A\to a_i\}.
  2. Preenche por comprimento crescente e tenta todos os cortes kk entre ii e jj: quando A→BCA\to BC com B∈T[i,k]B\in T[i,k] e C∈T[k+1,j]C\in T[k+1,j], junta AA a T[i,j]T[i,j].
  3. Aceita a palavra quando o símbolo inicial pertence a T[1,n]T[1,n].

O preenchimento custa tempo O(n3)O(n^3) e espaço O(n2)O(n^2) para gramática fixa. A palavra vazia trata-se à parte, sem tabela. Cada corte respeita o intervalo: numa produção A→BCA\to BC aplicada a [i,j][i,j] com corte kk, a variável BB tem de gerar o prefixo esquerdo ai⋯aka_i\cdots a_k e CC o sufixo direito ak+1⋯aja_{k+1}\cdots a_j.

Conversão e tabela CYK completas.

Fecho e decisão

  • As CFL são fechadas para união, concatenação, estrela, reverso e interseção com uma linguagem regular. O produto entre PDA e DFA conserva a pilha do PDA; uma transição vazia do PDA não altera o estado do DFA.
  • As CFL não são fechadas para interseção geral, complemento ou diferença. Por exemplo, anbncm∩ambncn=anbncna^nb^nc^m\cap a^mb^nc^n=a^nb^nc^n, que não é CFL.
  • A pertença por CYK e o vazio pelo teste de símbolo inicial gerador são decidíveis. Não há decisor geral para equivalência, universalidade ou ambiguidade de CFG.

Lema da repetição para CFL

Se LL é livre de contexto, existe um inteiro p≥1p\ge1 tal que toda a palavra s∈Ls\in L com ∣s∣≥p|s|\ge p admite uma decomposição s=uvwxys=uvwxy com ∣vwx∣≤p|vwx|\le p, ∣vx∣≥1|vx|\ge1 e uviwxiy∈Luv^iwx^iy\in L para todo o inteiro i≥0i\ge0. As partes vv e xx bombeiam com o mesmo expoente e a zona curta pode estar em qualquer posição. Esta condição é necessária, mas não suficiente.

  • Com L={anbncn∣n≥0}L=\{a^nb^nc^n\mid n\ge0\} e s=apbpcps=a^pb^pc^p, a zona ∣vwx∣≤p|vwx|\le p nunca cobre um aa e um cc ao mesmo tempo, pois teria de atravessar todo o bloco de bb. Retirar vv e xx com i=0i=0 deixa um dos extremos intacto e quebra a igualdade das três contagens.
  • Um corte feliz não refuta o lema. Em K={anbnz∣n≥0, z∈{a,b}n}K=\{a^nb^nz\mid n\ge0,\ z\in\{a,b\}^n\}, a palavra apb2pa^pb^{2p} admite um corte que bombeia sempre dentro de KK, por isso não serve como testemunha. A testemunha que funciona é s=a2pb2pa2ps=a^{2p}b^{2p}a^{2p}: a zona curta, com no máximo pp símbolos, nunca toca nos dois blocos extremos de aa ao mesmo tempo. Com o mesmo expoente i=0i=0 em todos os cortes válidos, a palavra obtida sai sempre de KK. A prova completa, com a tabela que cobre todos os cortes, está na lição.

Cortes e prova completa.

À tua maneira

Aparência

Modo de cor
Tema
Cor de destaque

Leitura

Fonte de leitura

Álgebra, lógica e uma ideia de cada vez.

Código

Fonte do código

Navegação

Cursor de leitura, sem edição. h, j, k, l movem; / pesquisa nesta página. v seleciona caracteres; V seleciona linhas; y copia. Tab permite destacar ou comentar. Espaço ou Enter abre blocos recolhíveis. Nos cartões, h, j, k, l mudam o foco.

CSS personalizado

Ativa uma sugestão ou guarda o teu CSS. Só muda este navegador.

Usa --page, --text e --accent para acompanhar o tema.

Seletores e recuperação

.site-header, .prose, .course-card, [data-reading-history], [data-playground] e .page-actions.

Abre a aparência com a tecla vírgula ou no rodapé. Se o CSS esconder os controlos, abre esta página sem CSS personalizado.

Pesquisar

Escreve para pesquisar em todo o site.

para escolher · Enter para abrir · Esc para fechar

Copiar fórmula

A cópia automática não está disponível. Copia o LaTeX abaixo.

Pesquisar nesta página

Enter procura · n / N repetem · Esc cancela. Ctrl / Cmd K pesquisa todo o site.

Atalhos de teclado

Clica numa tecla para a mudar. Esc cancela. Backspace desativa.

PesquisarCtrl / Cmd K

Os atalhos não interferem enquanto escreves. Tab e Enter funcionam sempre.