Programação  
 
Rede de conhecimento computador >> Programação >> Programação De Computador Idiomas >> Content
Como você pode usar o lema de bombeamento para provar que um idioma não é regular?
O lema de bombeamento para idiomas regulares é uma ferramenta poderosa para provar que um idioma * não é * regular. Funciona por contradição:você assume que o idioma * é * regular e depois mostra que essa suposição leva a uma contradição do próprio lema. Aqui está como funciona:

1. A declaração do lema de bombeamento:

O lema de bombeamento afirma que, para qualquer idioma regular L, existe um comprimento de bombeamento P, de modo que qualquer corda w em L com comprimento | W | ≥ p pode ser dividido em três substringas, w =xyz, satisfazendo as seguintes condições:

* | xy | ≤ P: O comprimento da concatenação de x e y é menor ou igual a p.
* | y |> 0: A substring y não está vazia.
* para tudo i ≥ 0, xy i z ∈ L: Bombear zero ou mais vezes (incluindo removê -lo inteiramente quando i =0) resulta em uma string que ainda está no idioma L.

2. Estratégia de prova:

Para provar que um idioma L não é regular usando o lema de bombeamento, siga estas etapas:

* Suponha que L seja regular: Comece assumindo, por uma questão de contradição, que L é um idioma regular.
* Escolha um comprimento de bombeamento p: O lema de bombeamento garante a existência de um comprimento de bombeamento p; Você não precisa encontrar seu valor real, apenas consulte -o como 'P'.
* Escolha uma string w ∈ L tais que | W | ≥ P: Selecione cuidadosamente uma string w no idioma l cujo comprimento é pelo menos p. A escolha de W é crucial; Deve permitir que você crie uma contradição na próxima etapa. Isso geralmente envolve strings com uma estrutura específica relacionada à definição do idioma.
* Mostre que nenhuma decomposição w =xyz satisfaz as condições do lema de bombeamento: Este é o coração da prova. Para * qualquer * possível decomposição de w em xyz satisfazendo | xy | ≤ p e | y |> 0, você deve mostrar que existe alguns i ≥ 0 tal que xy i Z ∉ L. Isso significa que o bombeamento y viola a definição da linguagem L. Frequentemente, você demonstra isso mostrando que a bombeamento y também:
* Apresente um desequilíbrio: Altere o número de ocorrências de algum símbolo, violando uma restrição de contagem em L.
* Crie uma estrutura inválida: Quebre o padrão ou estrutura exigida pela definição de L.
* Apresente uma substring inválida: Crie uma substring que não pertence ao idioma.
* Conclua que L não é regular: Como você mostrou que essa decomposição pode existir para a corda escolhida W, isso contradiz o lema de bombeamento. Portanto, a suposição inicial de que L é regular deve ser falsa e L não é regular.


Exemplo:Provando {a n B n | n ≥ 0} não é regular:

Seja l ={a n B n | n ≥ 0}.

1. Suponha que L seja regular.
2. Escolha P: Seja p o comprimento do bombeamento.
3. Escolha W: Seja w =a p b p . Claramente, w ∈ L e | W | ≥ p.
4. Mostrar nenhuma decomposição satisfaz as condições: Vamos considerar qualquer decomposição w =xyz tal que | xy | ≤ p e | y |> 0. Desde | xy | ≤ p, y deve consistir * somente * de A's (porque y é uma substring dos primeiros caracteres P). Assim, y =a k para alguns k> 0. Agora, bomba y zero vezes:xy 0 z =a p-k b p . Essa string não está em L porque o número de A e B são diferentes. Isso contradiz o lema de bombeamento.
5. Conclua: Desde que alcançamos uma contradição, nossa suposição de que L é regular deve ser falsa. Portanto, l ={a n B n | n ≥ 0} não é um idioma regular.


A chave é escolher cuidadosamente a string `W` e analisar de maneira inteligente todas as decomposições possíveis` xyz` para mostrar que o bombeamento `y` sempre leva a uma string fora do idioma. Quanto mais complexa a linguagem, mais complexa a escolha de `w` e a análise se tornará.

Anterior :

Próximo :
  Os artigos relacionados
·Como construir um programa de computador 
·Procedimentos pré-definidos em Turbo Pascal 
·Como encontrar o tamanho do buffer em DbDataReader getB…
·Como dividir uma String em um Espaço 
·Como imprimir apenas um envelope usando o Word XP 
·Como Alvo de um Formulário de Apresentação de um iFr…
·Como faço para converter String para Data no Oracle 
·Depuração de uma violação de acesso 
·Ciência da Computação Fundamentos Tutorial 
·Como tirar caracteres alfa Mas Deixar caracteres numér…
  Artigos em destaque
·Como alterar Barra de Status SCR em estado de Java Scri…
·As Propriedades de Colunas e Objetos no VBA 
·Como definir um SVN no Eclipse 
·Como ler uma coluna CSV & Convert to Python 
·Como escrever um script de Bot 
·Como Abrir banco de dados MySQL com o MS Access 
·Exemplos Python CGI 
·Como adicionar espaços no Python 
·Como pode ser usado o NP.TensorDot para executar operaç…
·Podemos usar Selenium em Java 
Cop e direita © Rede de conhecimento computador https://ptcomputador.com Todos os Direitos Reservados