O idioma é obviamente regular - por exemplo, corresponde à expressão regular . Mas o seguinte argumento do lema de bombeamento parece mostrar que não é regular. O que deu errado?
Eu encontrei uma maneira de dividir uma entrada como satisfazer os requisitos do lema do bombeamento, mas não é verdade que para todo . Isso não significa que o idioma não é regular?
Mais detalhadamente, o lema de bombeamento para idiomas regulares diz que, se um idioma é regular, existe um comprimento de bombeamento , de forma que qualquer string com possa ser escrita como como aquele:
- para todos os .
Então, vamos pegar e escrever como (ou seja, , , ). Isso satisfaz 1. e 2. Mas, considerando , obtemos , que não está em porque seu comprimento é ímpar. Parece que o idioma não é regular, afinal.
Isto é pretendido como uma pergunta de referência que ilustra um erro comum no uso do lema de bombeamento para idiomas regulares. Agradecemos a Ariel por detectar o problema na versão original da pergunta.
fonte
Respostas:
O problema está nos quantificadores. O lema de bombeamento diz que qualquer string com pode ser escrita como modo que as três propriedades sejam mantidas. Não diz que toda maneira de escrevê-lo como que mantém as duas primeiras propriedades também mantém a terceira.s | s | ≥p x yz x yz
Para o idioma , procedemos da seguinte forma. Primeiro, observe que devemos ter , pois se , somos forçados a tomar , , e você já mostrou na pergunta que isso não funciona. Portanto, com , podemos escrever como ( , , ). Nós temos{0 02 n∣ n ≥ 0 } p ≥ 2 p = 1 x = ϵ y= 0 z=0 02 p - 1 p ≥ 2 s =0 02 p s = ϵ000 02 ( p - 1 ) x = ϵ y= 00 z=0 02 ( p - 1 ) |ϵ00|≤p , |00|>1 e (00)i02(p−1)∈L para todos i≥0 . Portanto, existe uma maneira de decompor a string comoxyz isso satisfaz todas as propriedades, mesmo que a primeira decomposição em que você pensou não tenha funcionado.
Para mostrar que um idioma não é regular, você precisa mostrar que toda decomposição emxyz que satisfaz as duas primeiras propriedades falha em satisfazer a terceira. Não basta apenas mostrar que uma decomposição não funciona.
Para entender por que o lema de bombeamento é do jeito que é, ajuda a pensar na prova. Se um idioma é regular, é aceito por algum DFA. Que o DFA tem algum número de estados: chame-op . Pelo princípio pigeonhole, sempre que o DFA lê uma string com mais dep , ele deve visitar algum estado duas vezes: diga estado q . Agora,x é a parte da entrada lida até (e incluindo) a primeira visita a q , y é a parte lida após a primeira visita e até e incluindo a segunda (que deve ter pelo menos um caractere) e z é o resto. Mas agora você pode ver issoxz deve ser aceito: x leva você do estado inicial para q e z leva você de q para um estado de aceitação. Da mesma forma,xyiz deve ser aceito para qualquer positivo i , já que cada repetição de y leva você de q de volta a q . Observe que a decomposição da entrada emx , y e z é inteiramente determinado pelo autômato que, por sua vez, é determinado (mas não exclusivamente) pelo idioma. Portanto, você não escolhe a decomposição: se o idioma é regular, existe alguma decomposição; para mostrar que um idioma não é regular, você deve mostrar que toda decomposição falha.
fonte