Como provar que um idioma não é regular?


76

Aprendemos sobre a classe de idiomas regulares . É caracterizado por qualquer conceito entre expressões regulares, autômatos finitos e gramáticas lineares à esquerda, portanto é fácil mostrar que um determinado idioma é regular.REG

Como mostro o oposto? Meu TA tem sido inflexível que, para fazer isso, teríamos que mostrar para todas as expressões regulares (ou para todos os autômatos finitos ou para todas as gramáticas lineares à esquerda) que eles não podem descrever o idioma em questão. Parece uma grande tarefa!

Eu li sobre algum lema de bombeamento, mas parece realmente complicado.

Esta pretende ser uma pergunta de referência, coletando métodos de prova usuais e exemplos de aplicação. Veja aqui a mesma pergunta sobre linguagens sem contexto.

Respostas:


60

A prova de contradição é frequentemente usada para mostrar que um idioma não é regular: deixe uma propriedade verdadeira para todos os idiomas regulares, se o seu idioma específico não verificar , ele não será regular. As seguintes propriedades podem ser usadas:PPP

  1. O lema do bombeamento, como exemplificado na resposta de Dave ;
  2. Propriedades de fechamento de linguagens regulares (operações definidas, concatenação, estrela Kleene, espelho, homomorfismos);
  3. Uma linguagem regular possui um número finito de classe de equivalência de prefixos, teorema de Myhill – Nerode .

Para provar que um idioma não é regular usando propriedades de fechamento, a técnica é combinar com idiomas regulares por operações que preservam a regularidade para obter um idioma conhecido como não regular, por exemplo, o idioma arquetípico . Por exemplo, deixe . Suponha que é regular, como línguas regulares são fechados sob complementação assim é 's complemento . Agora faça a interseção de e que é regular, obtemos que não é regular.L I = { a n b n | n N } L = { a p b q | p q } G G G C G C um b ILLI={anbn|nN}L={apbq|pq}LLLcLcabI

O teorema de Myhill-Nerode pode ser usado para provar que não sou regular. Para , . Todas as classes são diferentes e há um infinito contável de tais classes. Como uma linguagem regular deve ter um número finito de classes, não sou regular.p 0 I / a p = { a r b r b p | r N } = I . { b p } euIp0I/ap={arbrbp|rN}=I.{bp}I


3
Não sabia do teorema de Myhill-Nerode, legal!
Daniil

A Wikipedia também possui uma seção sobre o número de palavras em um idioma normal: se você pode provar que seu idioma não corresponde à caracterização, seu idioma não é regular: en.wikipedia.org/wiki/…
Alex ten Brink

@Daniil, expressões regulares não podem contar me parece uma formulação informal popular do teorema de Myhill-Nerode.
APROGRAMM4 #

@AlextenBrink: Isso é legal. Eu acho que as constantes na declaração são os autovalores do Laplaciano do autômato? Isso faria uma boa adição às respostas aqui.
Louis

@Louis: Na verdade, nós encontramos nenhuma referência para esse teorema em tudo, por isso, se você sabe mais sobre ele ... Veja também: cs.stackexchange.com/questions/1045/...
Alex ten Brink

37

Com base na resposta de Dave, aqui está um "manual" passo a passo para usar o lema de bombeamento.

Lembre-se do lema de bombeamento (extraído da resposta de Dave, extraído da Wikipedia):

Seja uma linguagem regular. Existe um número inteiro (dependendo apenas de ), de modo que cada string em de comprimento pelo menos ( é chamado de "comprimento de bombeamento") possa ser escrita como (ou seja, pode ser dividido em três substrings), satisfazendo as seguintes condições:Ln1LwLnnw=xyzw

  1. |y|1
  2. |xy|n e
  3. um "bombeado" ainda está em : para todos , . wLi0xyizL

Suponha que você receba algum idioma e deseje mostrar que ele não é regular através do lema de bombeamento. A prova é assim:L

  1. Suponha que seja regular.L
  2. Se for regular, o lema do bombeamento diz que existe algum número que é o comprimento do bombeamento.n
  3. Escolha uma palavra específica de comprimento maior que . A parte difícil é saber qual palavra levar.wLn
  4. Considere TODAS as formas de particionar em 3 partes, , com e não vazios. Para cada uma destas formas, mostram que ele não pode ser bombeado: sempre existe algum tais que .ww=xyz|xy|nyi 0 x y i z Li0xyizL
  5. Conclua: a palavra não pode ser "bombeada" (não importa como a dividimos em ) em contradição com o lema de bombeamento, ou seja, nossa suposição (etapa 1) está errada: não é regular.wxyzL

Antes de darmos um exemplo, deixe-me reiterar as etapas 3 e 4 (é aqui que a maioria das pessoas erra). Na Etapa 3, você precisa escolher uma palavra específica em . escreva-o explicitamente, como "00001111" ou " ". Exemplos de coisas que não são uma palavra específica: " " ou "uma palavra que tem 000 como prefixo".Lanbn ww

Por outro lado, na Etapa 4, você precisa considerar mais de um caso. Por exemplo, se , não basta dizer e, em seguida, chegar a uma contradição. Você também deve verificar , e , e todas as outras opções possíveis.w=000111x=00,y=01,z=00x=0,y=0,z=0111x=ϵ,y=000,z=111


Agora vamos seguir as etapas e provar que não é regular.L={0k12kk>0}

  1. Suponha que seja regular.L
  2. Seja o comprimento de bombeamento fornecido pelo lema de bombeamento.n
  3. Seja . (verificação de integridade: conforme necessário. Por que essa palavra? outras palavras também podem funcionar .. é preciso alguma experiência para encontrar o certo ). Novamente, observe que é uma palavra específica: .w=0n12n | w | > n w w 000 0 n  vezes 111 1 2 n  vezes
    |w|>nww0000n times11112n times
  4. Agora vamos começar a considerar os vários casos para dividir em com e . Como não importa como dividimos , consistirá em apenas 0 e . Vamos supor e . Precisamos considerar todas as opções, ou seja, todos os possíveis tal que e . PARA ESTE a prova para todos esses casos é o mesmo, mas em geral pode ser diferente. tome e considerewxyz|xy|n|y|>0|xy|<nwxy|x|=s|y|=ks,ks0,k1s+knL i = 0 x y i z = x z LL
    i=0xyiz=xz . esta palavra não está em , uma vez que é da forma (não importa o que e foram), e desde que , esta palavra não está em e chegamos a uma contradição .L0nk12nskk1L
  5. Assim, nossa suposição está incorreta e não é regular.L

Um clipe do youtube que explica como usar o lema de bombeamento nas mesmas linhas pode ser encontrado aqui


1
É n que é o comprimento de bombeamento nesta definição!
Saadtaame

28

Na Wikipedia, o idioma de bombeamento para idiomas regulares é o seguinte:

Seja uma linguagem regular. Existe um número inteiro (dependendo apenas de ), de modo que cada string em de comprimento pelo menos ( é chamado de "comprimento de bombeamento") possa ser escrita como (ou seja, pode ser dividido em três substrings), satisfazendo as seguintes condições:p 1 L w L p p w = x y z wLp1LwLppw=xyzw

  1. |y|1
  2. |xy|p e
  3. para todos , . é a substring que pode ser bombeada (removida ou repetida várias vezes e a sequência resultante está sempre em ). x y i z L y Li0xyizL
    yL

(1) significa que o circuito y a ser bombeado deve ter pelo menos um comprimento; (2) significa que o loop deve ocorrer dentro dos primeiros caracteres p. Não há restrição para x e z.

Em palavras simples, para qualquer idioma regular L, qualquer palavra suficientemente longa pode ser dividida em 3 partes. isto é , de modo a que todas as cordas para também estão em .w = x y z x y k z k 0 LwLw=xyzxykzk0L

Agora vamos considerar um exemplo . Seja .L={(01)n2nn0}

Para mostrar que isso não é regular, é necessário considerar como são todas as decomposições , para que todas as coisas possíveis x, ye z possam ser dadas que (escolhemos olhar para esta palavra em particular, de comprimento , onde é o comprimento de bombeamento). Precisamos considerar onde a parte da string ocorre. Pode se sobrepor à primeira parte e, portanto, será igual a , , ou , para alguns (não esqueça disso ). Pode se sobrepor à segunda parte, significando quex y z = ( 01 ) p 2 p 3 p p y ( 01 ) k + 1 ( 10 ) k + 1 1 ( 01 ) k 0 ( 10 ) k k 0 | y | 1 y = 2 k k > 0 ( 01 ) k +w=xyzxyz=(01)p2p3ppy(01)k+1(10)k+11(01)k0(10)kk0|y|1y=2k, para alguns . Ou pode se sobrepor entre as duas partes da palavra e terá a forma , , ou , para e .k>0 (10 ) k + 1 2 l 1(01 ) k 2 l 0(10 ) k 2 l k0l1(01)k+12l(10)k+12l1(01)k2l0(10)k2lk0l1

Agora bombeie cada uma delas para obter uma contradição, que será uma palavra que não está no seu idioma. Por exemplo, se tomarmos , o lema de bombeamento diz, por exemplo, que deve estar no idioma , para uma escolha apropriada de e . Mas essa palavra não pode estar no idioma, pois aparece antes de . x y 2 z = x 0 ( 10 ) k 2 l 0 ( 10 ) k 2 l z x z 2 1y=0(10)k2lxy2z=x0(10)k2l0(10)k2lzxz21

Outros casos resultarão no número de sendo maior que o número de ou vice-versa, ou resultarão em palavras que não terão a estrutura , por exemplo, tendo dois seguidos.2 ( 01 ) n 2 n 0(01)2(01)n2n0

Não esqueça que . Aqui, é útil encurtar a prova: muitas das decomposições acima são impossíveis porque tornariam a parte muito longa.z|xy|pz

Cada um dos casos acima precisa levar a essa contradição, que seria então uma contradição do lema de bombeamento. Voila! O idioma não seria regular.


Um exemplo em que a hipótese é necessária seria bom. |xy|p
Gilles

@ Gilles: nem tenho certeza do significado da frase que você adicionou.
perfil completo de Dave Clarke

@ Gilles: Eu acho que todas as decomposições são possíveis, apenas que será limitado. Não tenho certeza do que isso tem a ver com o comprimento de . zkz
perfil completo de Dave Clarke

Duh! Eu vejo agora. Obrigado. No entanto, não descarta nenhuma das formas de decomposição mencionadas na resposta; -lo únicos limites que valores de e I pode tomar. lkl
perfil completo de Dave Clarke

1
A quantidade de edição que foi feita para responder a uma pergunta tão fácil me faz pensar por que todo mundo ensina o lema de bombeamento como "a" maneira de provar a não regularidade. Por curiosidade, por que não considerar sua corda como algo como ? O lema de bombeamento diz que não tem s, dos quais uma contradição é mais direta. y 2(01)2p22py2
Louis

14

Para um determinado idioma , deixeLΣ

SL(z)=n0|LΣn|zn

a função geradora (comum) de , ou seja, sua sequência de palavras conta por comprimento.L

A seguinte declaração contém [ FlSe09 , p52]:

LREGSL rational

Ou seja, com polinômiosSL(z)=P(z)Q(z)P,Q

Portanto, qualquer linguagem cuja função geradora não seja racional não é regular. Infelizmente, todas as linguagens lineares também têm funções geradoras racionais¹, portanto, esse método não funcionará nas linguagens não regulares mais simples. Outra desvantagem é que obter (e mostrar que não é racional) pode ser difícil.SL

Exemplo: considere o idioma das palavras entre parênteses aninhadas corretamente, ou seja, o idioma Dyck . É gerado pela gramática inequívoca

S[S]Sε

que pode ser traduzido na equação

S(z)=z2S2(z)+1

uma solução (aquela com todos os coeficientes positivos) da qual é

S(z)=114z22z2 .

Como [ Kuic70 ] e não é racional, a linguagem Dyck não é regular.SL=SS


  1. A prova da afirmação para idiomas regulares funciona através de gramáticas e transfere para gramáticas lineares imediatamente (comutatividade da multiplicação).

   [FlSe09] Combinatória analítica por P. Flajolet e R. Sedgewick (2009) [Kuic70] Sobre a entropia de idiomas livres de contexto por W. Kuich (1970)
  


13

Esta é uma versão expandida da minha resposta aqui. Usar o Lemma de bombeamento para provar que o idioma não é regular,L={(01)m2mm0} pois é uma pergunta de referência.

Então, você acha que o lema de bombeamento parece complicado? Não se preocupe. Aqui está uma abordagem de abordagem um pouco diferente, que também está oculta na resposta de @ Romuald. (Quiz: onde?)

Vamos começar lembrando que toda linguagem comum é aceita por um autômato determinístico de estado finito (DFA). Um DFA é um gráfico direcionado finito, onde cada vértice possui exatamente uma borda externa para cada letra do alfabeto. As strings fornecem um passeio no gráfico com base em um vértice denominado "start", e o DFA aceita se essa caminhada termina em um vértice rotulado como "accept". (Os vértices são chamados de "estados" porque diferentes áreas da matemática gostam de criar sua própria terminologia para a mesma coisa.)

Com esta maneira de pensar, é fácil ver que: Se cordas e conduzir o DFA para o mesmo estado, em seguida, para qualquer outra seqüência de , e conduzir o DFA para o mesmo estado. abcacbcPor quê? Porque o ponto de referência de uma caminhada e a sequência que a define determinam o fim completamente.

Coloque um pouco diferente: Se é regular e amarra e dirigir um autômato reconhecendo ao mesmo estado, em seguida, para todas as cordas , ou e estão ambos em ou não é.LabcacbcL

Podemos usar isso para mostrar que os idiomas não são regulares, imaginando que é e, em seguida, criando e direcionando um DFA para o mesmo estado, para que esteja no idioma e não. Pegue o idioma de exemplo da resposta de @ Dave. Imagine que é regular, portanto, há alguns reconhecendo o DFA com estados. O Pigeon Buraco Princípio diz que pelo menos dois dos enviar o DFA para o mesmo estado, dizer e . Como , vemos que está no idioma eabcacbcm{(01)i:0im+1}a=(01)pb=(01)qpqa2pb2p não é, então esse idioma não pode ser regular.

O bom é que o exemplo é realmente um modelo para provar que os idiomas não são regulares:

  • Encontre uma família de cadeias com a propriedade de que cada uma delas tenha uma "cauda" para que esteja no idioma e , pois não.{ai:iN}tiaitiaitjij
  • Aplique o argumento acima literalmente. (Isso é permitido, pois sempre há suficiente para permitir que você invoque o Princípio do Buraco dos Pombos.)ai

Existem outros truques, mas este funcionará facilmente na maioria dos problemas de sua lição de casa.

Edit: Uma versão anterior teve alguma discussão de como esta idéia se relaciona com o lema de bombeamento.


Eu não acho que reproduzir a prova do Lemma de Bombeamento seja útil em geral, mas YMMV. Em qualquer caso, entender a prova é bom; é imediatamente conectado a um número de fechamento e outras propriedades interessantes de autômatos finitos e linguagens regulares. Mas eu discordo totalmente da última frase: a teoria dos autômatos não é nada chata e certamente não é a parte mais chata das aulas de teoria.
Raphael

@ Louis Na sua resposta, como você chegou a essa afirmação we see that a2p is in the language and b2p is not, so this language can't be regular.no último. Por favor, você pode dar um exemplo
Himanshu

@ Himanshu e levam você para o mesmo estado . Portanto, o que você ler depois disso ( aqui), levará você ao mesmo estado , não importa com o que você começou - ou . abq12pq2ab
Al.G.

7

Seguindo a resposta aqui , descreverei um método para provar a não regularidade com base na complexidade de Kolmogorv.

Essa abordagem é discutida em "Uma Nova Abordagem da Teoria da Linguagem Formal pela Complexidade de Kolmogorov" , de Ming Li e Paul MB Vitanyi (consulte a seção 3.1).

Deixe denotar a complexidade Kolmogorov de uma string , ou seja, o comprimento da codificação mais curta de uma máquina de Turing , de modo que (qualquer uma das definições usuais fará). Pode-se então usar o seguinte lema para provar a não regularidade:K(x)xMM(ϵ)=x

KC-Regularidade : Seja uma linguagem regular, existe uma constante que depende apenas de , de modo que, para todo , se é a n- string ( relativo à ordenação lexicográfica) em , então .LΣcLxΣynthLx={yΣ|xyL}K(y)O(logn)+c

Pode-se entender (e provar) o lema acima da seguinte forma, para qualquer , para descrever a n- string em é necessário especificar:xΣnthLx

  • O autômato que aceitaL
  • O estado no autômato após o processamento do prefixox
  • O índicen

Uma vez que só precisa se lembrar o estado após o processamento , e não em si, podemos esconder esse fator na constante dependendo . O índice requer bits para descrever, e obtemos o resultado acima (para completar, é necessário adicionar as instruções específicas necessárias para gerar , mas isso adiciona apenas um fator constante à descrição final).xxLnlogny

Este lema mostra como vincular a complexidade Kolmogorov de todas as strings que são membros de para algum idioma regular e . Para mostrar não regularidade, pode-se assumir que é regular e provar que os limites são muito restritivos (por exemplo, complexidade limitada de Kolmogrov para um conjunto infinito de strings).LxLxΣL

A resposta vinculada acima contém um exemplo de como usar esse lema para mostrar não é regular, vários outros exemplos são dados no trabalho. Para completar, mostramos aqui como provar não é regular.L={1p|p is prime}L={0n1n|n0}

Dado algum , denotamos por a - palavra em . Observe que . Usando o lema acima, concentrando-se nos prefixos da forma fixando , obtemos . Como , isso significa que podemos vincular a complexidade Kolmogorov de todas as cadeias de caracteres da forma por uma constante, o que é obviamente falso. Vale ressaltar que poderíamos ter examinado um único , por exemplo, para um número suficientemente grande dex{0,1}yixithLxy10i=1ixx=0in=1i0:K(y10i)cy10i=1i1ixx=0nnque satisfaz (começamos com um prefixo de alta complexidade). Como , obtemos , contradição (suponha que ).K(0n)logny1x=1nK(1n)<cn>2c


7

No caso de idiomas unários (idiomas acima de um alfabeto de tamanho 1), existe um critério simples. Vamos corrigir um alfabeto e, para , defina {σ}AN

L(A)={σn:nA}.

Teorema. Deixe . Os seguintes são equivalentes:AN

  1. L(A) é regular.

  2. L(A) é livre de contexto.

  3. Existem de tal modo que para todos , é válido que sse . (Dizemos que é eventualmente periódico .)n0,m1nn0nAn+mAA

  4. Deixe . Então é racional.ai=1iA0.a0a1a2

  5. A função geradora é uma função racional.iAxi

O teorema pode ser provado de várias maneiras, por exemplo, usando o lema de bombeamento, a teoria de Myhill – Nerode, o teorema de Parikh, a estrutura dos DFAs em linguagens unárias (eles se parecem com um " ", como no algoritmo Pollard) e em breve. Aqui está um corolário útil.ρρ

Corolário. Deixe e suponha que seja regular.ANL(A)

  1. O limite existe. (Esta é a densidade assintótica de )ρ=limn|A{1,,n}|nA

  2. Se então é finito.ρ=0A

  3. Se então é cofinito (ou seja, é finito).ρ=1AA¯

Como exemplo, o idioma não é regular, pois o conjunto possui densidade assintótica em desaparecimento, mas é infinito.L({2n:n0})


4

A classe de idiomas regulares é encerrada sob várias operações de fechamento, como união, interseção, complemento, homomorfismo, substituição regular, homomorfismo inverso e muito mais. Isso pode ser usado para provar que um determinado idioma não é regular por redução para um idioma que já é conhecido como não regular.

Como um exemplo muito simples, suponha que sabemos que o idioma não é regular. Então, podemos provar que a linguagem (a língua de todas as palavras com igualmente muitos s e s) não é regular da seguinte maneira:{anbn:n0}{w{a,b}:#a(w)=#b(w)}ab

Suponha que seja regular. Então também seria regular. Mas , que é conhecido por não ser regular.L={w{a,b}:#a(w)=#b(w)}LabLab={anbn:n0}

Aqui está um exemplo mais complicado. Vamos mostrar que o idioma não é regular.L={(0+1)n2(0+1)n:n0}

Seja o mapeamento do homomorfismo dado por , , . Se fosse regular, então seria o seguinte idioma: . No entanto, sabemos que o último não é regular.hh(0)=0h(1)=1h(2)=ϵLh(L021)={0n1n:n0}

Finalmente, aqui está um exemplo usando o homomorfismo inverso. Vamos mostrar que o idioma não é regular.L={0n10n:n0}

Seja o homomorfismo dado por , , . Se fosse regular, então seria, mas essa é apenas a linguagem do exemplo anterior.kk(0)=0k(1)=0k(2)=1Lk1(L)L


3

Use a teoria de Myhill – Nerode.

Seja uma linguagem. Dizemos que duas palavras são inequivalent modulo (ou: com respeito a ) se existe uma palavra tal que exatamente um dos está em . Em qualquer DFA para , (exercício). Isso implica o seguinte critério:Lx,yLLzxz,yzLLδ(q0,x)δ(q0,y)

Seja uma linguagem. Suponha que exista um conjunto infinito de palavras equivalentes aos pares (ou seja, um conjunto infinito modo que quaisquer dois não iguais sejam módulo equivalente ). Então não é regular.LSx,ySLL

Aqui está um exemplo simples de aplicação deste critério:

O idioma não é regular.L={anbn:n0}

Prova. Seja . Afirmamos que quaisquer duas palavras diferentes em são módulo equivalente . De fato, deixe , onde . Em seguida, , mas .S={an:n0}SLai,ajSijaibiLaibjL

Uma característica importante desse método é a garantia de êxito: se não for regular, existe um conjunto infinito de palavras inequívocas aos pares. Isso é uma consequência do teorema de Myhill – Nerode . Resumidamente, o módulo de equivalência (a negação do módulo de desigualdade definido acima) é uma relação de equivalência e uma linguagem é regular se o número de classes de equivalência do módulo de equivalência for finito. Se não for regular, retirar uma palavra de cada classe de equivalência constituiria um conjunto infinito de palavras diferentes.LLLLLL


1

Dada uma linguagem , para cada corda existe um conjunto de strings tais que . Cada conjunto desse tipo pode ser usado como um estado em uma máquina de estado.LxyxyL

Tudo que você precisa fazer é mostrar que o número de tais conjuntos não é finito.

Como exemplo, deixe . Dado para alguns , a única string tal que é . Portanto, para cada , temos um conjunto diferente, o que significa que não é regular.L=anbn:n0x=anbn1yxyLy=bn1nL

Portanto, em geral, se você encontrar um conjunto infinito de strings modo que cada dê um conjunto diferente , o idioma não poderá ser reconhecido por uma máquina de estados finitos e, portanto, não será regular.xx{y:xyL}


Não é apenas Myhill-Nerode?
David Richerby 14/02
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.