Conteúdos da cadeira

Limites das linguagens regulares

Lema da repetição com prova completa, fecho e decidibilidade das regulares.

Markdown

Perguntar sobre esta página

ChatGPTClaudePerplexityGeminiCopiar e abrir

Envia o link e pede à IA para ler a página. No Gemini, cola a pergunta copiada.

Ver pergunta para copiar
Nesta página

Os autómatos finitos têm memória finita: kk estados guardam logk\log k bits, e nada mais. Por isso há linguagens que eles nunca reconhecem, como {0n1n}\{0^n 1^n\} (zeros seguidos de igual número de uns), que exigiria contar sem limite. Esta página dá a ferramenta para o provar, o lema da repetição (pumping lemma), mais as propriedades de fecho e os problemas decidíveis das linguagens regulares.

O lema da repetição

Lema. Se LL é regular, existe p1p \ge 1 (o comprimento de repetição) tal que toda a palavra sLs \in L com sp|s| \ge p se parte em s=xyzs = xyz com:

  1. y>0|y| > 0 (o pedaço do meio não é vazio);
  2. xyp|xy| \le p (o pedaço repetível está nos primeiros pp símbolos);
  3. xyizLxy^iz \in L para todo o i0i \ge 0 (repetir ou apagar yy mantém a palavra na linguagem).

Porquê isto vale? Toma um DFA com pp estados que reconheça LL e corre ss com sp|s| \ge p. O caminho visita s+1p+1|s|+1 \ge p+1 estados, por isso algum estado repete (princípio da casa dos pombos). Seja yy o pedaço lido entre as duas visitas ao estado repetido: y>0|y| > 0 porque o caminho andou. Escolhendo a primeira repetição, ela acontece dentro dos primeiros pp símbolos, logo xyp|xy| \le p. E como yy é um ciclo (sai e volta ao mesmo estado), percorrê-lo ii vezes continua a terminar no mesmo estado final. Isto prova as três condições.

Prova completa: {0n1n}\{0^n 1^n\} não é regular

Seja L={0n1nn0}L = \{0^n 1^n \mid n \ge 0\}. Prova por contradição.

  1. Supõe que LL é regular. Então o lema dá um comprimento de repetição p1p \ge 1.
  2. Escolhe a palavra. Toma s=0p1ps = 0^p 1^p. Vale sLs \in L (com n=pn = p) e s=2pp|s| = 2p \ge p, por isso o lema aplica-se a ss. Esta escolha é boa porque os primeiros pp símbolos são todos 00, o que força o pedaço repetível a cair dentro dos zeros.
  3. Considera uma partição arbitrária s=xyzs = xyz com y>0|y| > 0 e xyp|xy| \le p. Como os primeiros pp símbolos de ss são todos zeros e xyp|xy| \le p, os blocos xx e yy ficam inteiramente dentro da zona dos zeros. Logo x=0ax = 0^a e y=0ky = 0^k com a0a \ge 0, k1k \ge 1 (porque y>0|y| > 0) e a+kpa + k \le p. O resto é z=0pak1pz = 0^{p-a-k}1^p.
  4. Repete e conta. O lema garante xy2zLxy^2z \in L. Mas xy2z=0a02k0pak1p=0p+k1pxy^2z = 0^a 0^{2k} 0^{p-a-k} 1^p = 0^{p+k}1^p. Como k1k \ge 1, há p+k>pp + k > p zeros e só pp uns: a palavra tem números diferentes de zeros e uns, logo xy2zLxy^2z \notin L. Contradição.
  5. Conclui. A suposição é falsa: LL não é regular.

Repara na estrutura, que deves reutilizar em qualquer aplicação do lema: supõe e fixa pp; escolhe ss em função de pp (quase sempre com um bloco de comprimento pp); toma partição arbitrária e usa xyp|xy| \le p para localizar yy; escolhe um ii (aqui i=2i = 2; i=0i = 0 também servia) que parte a propriedade definidora; conclui por contradição.

Porque é que i=0i = 0 também servia aqui

Apagar dá xy0z=xz=0pk1pxy^0z = xz = 0^{p-k}1^p, com pk<pp - k < p zeros contra pp uns. Também sai de LL. Em geral, experimenta i=0i = 0 quando a linguagem exige “pelo menos tantos” e i=2i = 2 quando exige “no máximo tantos” ou igualdade.

Propriedades de fecho

As linguagens regulares são fechadas para: união, concatenação, estrela, interseção, complemento e diferença. Isto significa que aplicar estas operações a linguagens regulares produz linguagens regulares. As provas são construções: união por NFA com novo inicial e transições ε\varepsilon para os dois NFA; interseção pelo produto da página anterior; complemento trocando finais com não finais num DFA (atenção: isto exige um DFA completo, num NFA não funciona); diferença via AB=ABA \setminus B = A \cap \overline{B}.

O fecho dá uma segunda técnica para provar não regularidade: se LL fosse regular, então LRL \cap R seria regular para qualquer regular RR. Escolhendo RR que isole a parte “difícil” de LL e caindo num caso conhecido como {0n1n}\{0^n 1^n\}, concluis por contradição. Exemplo: {ww tem igual nuˊmero de 0 e 1}\{w \mid w \text{ tem igual número de } 0 \text{ e } 1\} intersetada com a regular 010^*1^*{0n1n}\{0^n 1^n\}, logo não é regular.

Problemas decidíveis

Para DFA, estas perguntas têm sempre resposta algorítmica:

  • Pertença: wL(M)w \in L(M)? Simula MM em ww e vê onde termina.
  • Vazio: L(M)=L(M) = \emptyset? Vê se algum estado final é alcançável do inicial (procura em grafo).
  • Equivalência: L(M1)=L(M2)L(M_1) = L(M_2)? O teste do produto da página anterior.
  • Inclusão: L(M1)L(M2)L(M_1) \subseteq L(M_2)? Testa se L(M1)L(M2)=L(M_1) \cap \overline{L(M_2)} = \emptyset.

“Decidível” aqui quer dizer que existe um algoritmo que responde sempre sim ou não em tempo finito. Guarda esta palavra: em máquinas de Turing e decidibilidade vais ver problemas onde isto deixa de ser possível.

Para levar para a próxima página

A fronteira das linguagens regulares está traçada: contar sem limite fica de fora. Mas {0n1n}\{0^n 1^n\} é fácil de gerar com regras de substituição, e essas regras são as gramáticas livres de contexto.

Ver o ficheiro no GitHub

À tua maneira

Escolhe como preferes ler.

Aparência
Ajustar cores e largura
Cor de destaque do tema FEUP
Tipo de letra

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

As tuas escolhas ficam guardadas neste navegador.

Pesquisar

Escreve para pesquisar em todo o site.

para escolher · Enter para abrir · Esc para fechar

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.