Programação  
 
Rede de conhecimento computador >> Programação >> Programação De Computador Idiomas >> Content
Como o lema de bombeamento pode ser usado para demonstrar que os seguintes idiomas não são livres de contexto?
O lema de bombeamento para idiomas livres de contexto é uma ferramenta poderosa para provar que um idioma * não é * sem contexto. Funciona por contradição:assumimos que o idioma * é * sem contexto, depois mostramos que essa suposição leva a uma contradição. Veja como é aplicado, juntamente com exemplos:

O lema de bombeamento (para CFLs):

Se L é uma linguagem sem contexto, existe uma constante * p * (o comprimento do bombeamento) de modo que qualquer string * w * em l com | w | ≥ *p *pode ser escrito como *w =uvxyz *, onde:

1. | Vxy | ≤ *p *
2. | Vy | ≥ 1
3. Para todos *i *≥ 0, *uv i xy i Z* está em L.

A estratégia de prova é encontrar uma string *W *no idioma de tal forma que, não importa como a decomponhamos em *uvxyz *satisfazendo as condições do lema, bombeando -o (aumentando *i *) produzirá uma corda que não *não *no idioma. Isso contradiz o lema, provando que o idioma não é livre de contexto.


Exemplos:

Vamos ilustrar com alguns exemplos de idiomas e como provar que eles não estão sem contexto usando o lema de bombeamento:

1. L₁ ={a n B n c n | n ≥ 0}

1. suponha que L₁ esteja livre de contexto. Isso significa que o lema de bombeamento se aplica.

2. Escolha uma string w: Vamos escolher *w =a p b p c p *, onde *p *é o comprimento do bombeamento. | W | ≥ *p *.

3. bombeamento: Porque | vxy | ≤ *p *, *vxy *pode abranger no máximo duas das seções (aaa ... bbb ... ccc ...). Existem três possibilidades:
* vxy contém apenas a's e b's: O bombeamento alterará o número de A e/ou B sem alterar o número de C's, resultando em uma string não em L₁.
* vxy contém apenas B e C's: Semelhante ao acima, o número de B e/ou C's mudará desproporcionalmente.
* vxy contém apenas A's: O bombeamento afetará apenas o número de A's.

4. contradição: Em todos os casos, o bombeamento produz uma corda não em L₁. Isso contradiz a afirmação do lema de bombeamento de que *uv eu xy i Z* está em l₁ para todos* i* ≥ 0.

5. Conclusão: Portanto, L₁ não está livre de contexto.


2. L₂ ={a n b m c n+m | n, m ≥ 0}

1. suponha que L₂ esteja livre de contexto.

2. Escolha uma string w: Vamos *w =a p b p c 2p *.

3. bombeamento: Novamente, | vxy | ≤ *p *. As possibilidades são semelhantes a L₁:se * vxy * contiver apenas A e B, o bombeamento alterará o número de A e B sem alterar proporcionalmente o número de C's.

4. contradição: O bombeamento levará a cordas não em L₂.

5. Conclusão: L₂ não está livre de contexto.


3. L₃ ={ww | w ∈ {a, b}*} (A linguagem das cordas que são a concatenação de uma corda consigo mesmo)

1. suponha que L₃ esteja livre de contexto.

2. Escolha uma string w: Vamos *w =a p b p A p b p *.

3. bombeamento: Porque | vxy | ≤ *p *, *vxy *não pode atravessar o meio da corda (não pode abranger as duas metades de `ww`). Se * vxy * estiver inteiramente no primeiro tempo, o bombeamento desequilibrará as duas metades.

4. contradição: A corda bombeada não estará em L₃.

5. Conclusão: L₃ não está livre de contexto.


Considerações importantes:

* Escolhendo a string certa *W *: Isso é crucial. A sequência deve ser cuidadosamente escolhida para explorar as limitações impostas por | vxy | ≤ *p *. Freqüentemente, as cordas com padrões repetidos são úteis.
* lidar com todos os casos: Você deve considerar todas as maneiras possíveis de decompor * w * em * uvxyz * satisfazendo as condições do lema e mostrar que o bombeamento leva a uma contradição em cada caso.
* O comprimento do bombeamento * p * é arbitrário: Você não precisa saber o valor de *p *; A prova funciona para qualquer *p *.


Ao aplicar cuidadosamente essas etapas, você pode usar o lema de bombeamento para mostrar que muitos idiomas não estão livres de contexto. Lembre-se de que o lema de bombeamento fornece apenas um método para provar idiomas * não * sem contexto; Não pode ser usado para provar que um idioma * é * sem contexto.

Anterior :

Próximo :
  Os artigos relacionados
·Como Realizar um Teste de Aceitação ( UAT ) Usuário 
·Como remover um valor de seqüência no Regedit 
·Como converter tags HTML com texto simples em C # 
·Como usar o proxy em C # 
·O que é o destaque da sintaxe 
·Como fazer um fluxograma que imprime todos os números …
·Como usar o MATLAB Sem Desktop 
·O que está perto PASCAL e FAR PASCAL 
·Como criar uma lista de distribuição compartilhado no…
·Os tipos de computadores que pode ler HTML 
  Artigos em destaque
·Como passar parâmetros para um Applet 
·Como converter Infixo para Postfix usando o Visual Basi…
·Java Duplo Formatação 
·O que significa ordem de precedência em linguagem de c…
·Como compreender algoritmos de computador 
·De que é feito um programa de computador? 
·Como Incorporar a MySQL no Visual C 
·Como carregar Bares em Visual Basic 
·Classe e objetos no VB 6.0 Tutorial 
·Como exibir um calendário PHP em uma página HTML 
Cop e direita © Rede de conhecimento computador https://ptcomputador.com Todos os Direitos Reservados