Limites das linguagens regulares
Lema da repetição com prova completa, fecho e decidibilidade das regulares.
Nesta página
Os autómatos finitos têm memória finita: estados guardam bits, e nada mais. Por isso há linguagens que eles nunca reconhecem, como (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 é regular, existe (o comprimento de repetição) tal que toda a palavra com se parte em com:
- (o pedaço do meio não é vazio);
- (o pedaço repetível está nos primeiros símbolos);
- para todo o (repetir ou apagar mantém a palavra na linguagem).
Porquê isto vale? Toma um DFA com estados que reconheça e corre com . O caminho visita estados, por isso algum estado repete (princípio da casa dos pombos). Seja o pedaço lido entre as duas visitas ao estado repetido: porque o caminho andou. Escolhendo a primeira repetição, ela acontece dentro dos primeiros símbolos, logo . E como é um ciclo (sai e volta ao mesmo estado), percorrê-lo vezes continua a terminar no mesmo estado final. Isto prova as três condições.
Prova completa: não é regular
Seja . Prova por contradição.
- Supõe que é regular. Então o lema dá um comprimento de repetição .
- Escolhe a palavra. Toma . Vale (com ) e , por isso o lema aplica-se a . Esta escolha é boa porque os primeiros símbolos são todos , o que força o pedaço repetível a cair dentro dos zeros.
- Considera uma partição arbitrária com e . Como os primeiros símbolos de são todos zeros e , os blocos e ficam inteiramente dentro da zona dos zeros. Logo e com , (porque ) e . O resto é .
- Repete e conta. O lema garante . Mas . Como , há zeros e só uns: a palavra tem números diferentes de zeros e uns, logo . Contradição.
- Conclui. A suposição é falsa: não é regular.
Repara na estrutura, que deves reutilizar em qualquer aplicação do lema: supõe e fixa ; escolhe em função de (quase sempre com um bloco de comprimento ); toma partição arbitrária e usa para localizar ; escolhe um (aqui ; também servia) que parte a propriedade definidora; conclui por contradição.
Porque é que também servia aqui
Apagar dá , com zeros contra uns. Também sai de . Em geral, experimenta quando a linguagem exige “pelo menos tantos” e 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 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 .
O fecho dá uma segunda técnica para provar não regularidade: se fosse regular, então seria regular para qualquer regular . Escolhendo que isole a parte “difícil” de e caindo num caso conhecido como , concluis por contradição. Exemplo: intersetada com a regular dá , logo não é regular.
Problemas decidíveis
Para DFA, estas perguntas têm sempre resposta algorítmica:
- Pertença: ? Simula em e vê onde termina.
- Vazio: ? Vê se algum estado final é alcançável do inicial (procura em grafo).
- Equivalência: ? O teste do produto da página anterior.
- Inclusão: ? Testa se .
“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 é fácil de gerar com regras de substituição, e essas regras são as gramáticas livres de contexto.