De onde vêm as restrições de comprimento do lema de bombeamento?

8

Para uma linguagem com comprimento de bombeamento e uma string , os lemas de bombeamento são os seguintes:LpsL

Versão regular : If , então pode ser escrito como , atendendo às seguintes condições:|s|psxyz

  1. |y|1
  2. |xy|p
  3. i0:xyizL

Versão sem contexto : If , então pode ser escrito como , satisfazendo as seguintes condições:|s|psuvxyz

  1. |vy|1
  2. |vxy|p
  3. i0:uvixyizL

Minha pergunta é a seguinte: alguém pode dar uma explicação concisa e clara de como a regularidade (ausência de contexto) implica a primeira e a segunda condições acima? O comprimento do bombeamento é determinado pelas propriedades (finitas) (número finito de estados ou propriedades finitas das regras de produção, respectivamente); as terceiras propriedades garantem que um estado (regra de produção) possa ser ignorado ou repetido arbitrariamente várias vezes, mas onde é o primeiro e segunda condições se originam? Como eles são justificados?

BlueBomber
fonte
Estou comentando, pois talvez não receba sua pergunta, mas me parece óbvio que, se você tiver uma palavra de comprimento pelo menos , poderá particionar a palavra em três partes, forma que e . Simplesmente deixe estar vazio, seja o primeiro caractere e o resto. Eu entendi completamente sua pergunta? p1xyz|y|1|xy|pxyz
GD
@ PålGD, não acho óbvio no contexto das outras condições do lema (comprimento diferente de zero do substrato bombeável e bombeamento arbitrário). Concordo, é óbvio que uma sequência de comprimento pelo menos pode ser particionada em substrings de modo que o primeiro tenha comprimento , mas a obviedade (para mim) não é transferida quando você mantém as outras condições. Talvez eu deva esclarecer a postagem original? xx
precisa saber é o seguinte
Não, visto à luz da terceira condição, deve-se ter um pouco mais de cuidado. Como você notou, as duas primeiras condições não dizem nada de útil. Como você também aviso, forçando o ser não vazio (como é realmente o que a primeira condição diz), nos faz realmente em uma posição para "bomba". y
precisa saber é o seguinte
O PL sem contexto é necessário para sua pergunta? Não faz muito sentido considerar algumas dessas condições isoladamente.
Raphael
@BlueBomber, em ambos os casos, sem condição (1), o bombeamento não faz sentido (pode sempre selecionar a substring vazia). Para idiomas regulares, (2) é apenas que em símbolos o DFA para o idioma está em estados e, pelo princípio do pigeonhole, se o DFA tiver estados, é preciso repetir (e você pode percorrer o ciclo vezes, bombeando a corda). nn+1nk
vonbrand

Respostas:

8

A primeira condição, ie , é claramente necessário se você quiser dizer algo interessante: para , trivialmente e sempre é válido.|y|1y=εxyizL

A segunda condição, ou seja, , é "arbitrário": o lema ainda diz algo interessante se você o soltar, e ainda é verdade porque a declaração se torna mais fraca.|xy|p

Mas lembre-se para o que queremos usar os lemas de bombeamento: queremos encontrar uma palavra (suficientemente longa) para que todas as decomposições válidas em falhem ao bombear. Portanto, é útil permitir o menor número possível de decomposições. Por sorte que somos, a prova do lema de bombeamento prontamente gera uma forte restrição, a saber, que deve haver uma decomposição bombeável com com constante .x,y,z|xy|p p

Agora temos que refutar apenas finitos muitos prefixos (com possivelmente infinitas continuações diferentes, é claro). Se você observar exemplos de aplicativos , verá que eles fazem muito uso dessa restrição.xy

Rafael
fonte
11
a condição 2 é "arbitrária" de outras maneiras. Por exemplo, um lema equivalente é dado se substituirmos (2) por|yz|<p. Existe ainda uma versão mais forte do lema de bombeamento em que oyparte pode estar em qualquer lugar (não necessariamente no começo ou no fim). A variante comum (|xy|<p, isso é, yé ao lado do começo) é a conveniência.
Ran G.
@Tocou. Como é uma versão em que a posição deyarbitrário é mais forte? Eu acho que expliquei como isso seria mais fraco. Ou essa versão indica outras coisas?
Raphael
É mais forte, pois oferece mais flexibilidade: talvez a parte que você deseja bombear não esteja no começo da palavra. De fato, ainda tem um equivalente a|xy|<ppor não ser "mais fraco" como você diz, mas sem a necessidade de localizá-lo exatamente no começo. Pense no lema de Ogden como a forma mais generalizada.
Ran G.
11
@ Rafael, por exemplo, a versão dada acima não é suficiente para provar que {abncn:n0}aa+bc não é regular (pode bombear o a), mas com ydeitado em qualquer lugar é fácil.
vonbrand
@ vonbrand: Agora vejo o que Ran significa, obrigado.
Raphael
3

Vou oferecer apenas algumas dicas sobre o lema de bombeamento para idiomas regulares; o raciocínio é semelhante o suficiente para o outro. Imaginex como parte de s gerado por tudo antes de iniciar o primeiro loop pela primeira vez; ycomo tudo gerado enquanto estiver naquele determinado loop para o primeiro loop; ez como tudo gerado após o loop pela primeira vez.

  1. Desde a |s|pe p é o número de estados no autômato finito mínimo (por exemplo) que aceita o idioma, o autômato deve ter feito um loop (já que no máximo p1transições teriam sido possíveis, caso contrário). Portanto,yé não vazio; estamos declarando o fato de que, como temos uma sequência de um determinado comprimento, o autômato que a aceita deve ter feito um loop em algum momento, então|y|>1 é justificado.

  2. Desde a y é a primeira vez que você passa pelo primeiro loop e xé tudo antes disso, você não visitou nenhum estado no autômato mais de uma vez. Uma vez que existem|p| estados no autômato, e você não visitou todos eles, você |xy|<p.

Essas não são tantas hipóteses que requerem suporte; são declarações de fato baseadas em como o lema de bombeamento foi inventado em termos de autômatos finitos.

Patrick87
fonte
2

À medida que você se move pelos estados de um autômato, você acaba atingindo um ciclo. O ciclo éy. Não faz sentido bombear uma palavra vazia, daí a condição 1.xyé o número de símbolos que você teve que ler para encontrar o primeiro ciclo. Isso não pode ser maior que o número de estados, daí a condição 2. Quase por definição, um ciclo pode ser repetido inúmeras vezes, portanto, a condição 3.

A variante livre de contexto é muito semelhante. A primeira condição é que estamos apenas procurando por ciclos úteis. A segunda condição diz que um ciclo pode ser encontrado porque você ficará sem terminais. A terceira condição diz que, uma vez que você tenha um ciclo, pode bombeá-lo. Observe que, para ver um ciclo no caso sem contexto, você deve desenhar uma árvore de análise.

Karolis Juodelė
fonte
2

Existem variantes do lema de bombeamento. Eu vou usar o seu.

Observe que você tem realmente três condições de comprimento. O que falta é sobre o comprimento total mínimo da palavra. Eu trato com a segunda condição.

Em poucas palavras (grande):

Eu chamo de subárvore qualquer subparte da árvore de análise que tenha no máximo um não terminal à margem. O lema de bombeamento usa subárvores recursivas em que o não terminal na margem é o mesmo que a raiz da subárvore. A árvore de análise inteira é uma subárvore.

As subárvores, conforme definidas aqui (e as sub-árvores recursivas), são o cerne da questão. Sua existência está diretamente relacionada à ausência de contexto .

1ª condição : declara simplesmente que, se houver uma subárvore recursiva improdutiva (franja sem símbolo de terminação) na árvore de análise, ela poderá sofrer um curto-circuito, para que sempre tenhamos certeza de que a franja contém um símbolo terminal.

Um problema de finitude : será usado duas vezes. Se você tiver uma subárvore que não contenha nenhuma subárvore recursiva, nenhum caminho na subárvore terá o dobro do mesmo rótulo (exceto a raiz da subárvore). A subárvore está se ramificando finitamente com uma profundidade limitada (não mais que o número de não terminais). Portanto, você tem um conjunto finito dessas subárvores, gerando apenas um conjunto finito de cordas à sua margem. Sendo um número finito, existe um limite superior para o comprimento das franjas. Por outro lado, se uma franja excede o limite, é uma indicação certa de que contém uma subárvore recursiva.

"condição ausente" : a "condição ausente" ques∣≥p verifique se a sequência é longa o suficiente para que exista pelo menos uma subárvore recursiva na árvore de análise para bombeamento.

2ª condição : você sempre pode bombear uma subárvore recursiva que não domina nem contém outra subárvore recursiva na árvore de análise. Se isso acontecer, basta pegar a outra subárvore recursiva. Como a árvore de análise é finita, isso termina. Você acaba com subárvores (porvy e para x) que não contêm subárvores recursivas, e a análise de finitude acima garante a existência de um limite superior.

No caso da gramática regular, você apenas possui subárvores que não se ramificam muito. É realmente idêntico ao caso do CF, com algumas cadeias substituídas porϵ.

No caso do CF, é frequentemente conveniente que a prova do lema, ou suas variações, assuma que a gramática é CNF (dependendo também da variante do lema)

Grande parte da prova formal é apresentação matemática, não entendimento.

Este foi um exercício interessante.

babou
fonte