Lema do Bombeamento Linguagens Livres de Contexto

Slides:



Advertisements
Apresentações semelhantes
Decidibilidade e Indecidibilidade
Advertisements

Linguagens Livre-de-contexto
FAPE - Curso de Ciência da Computação
Árvores CC/EC/Mestrado Teoria dos Grafos ‏ 1.
Software Básico Silvio Fernandes
Variantes de Máquina de Turing
Teoria da Computação VERIFICAÇÃO DE EQUIVALÊNCIA FORTE DE PROGRAMAS
I - Noções dum compilador
Universidade Federal de Campina Grande – UFCG Centro de Engenharia Elétrica e Informática – CEEI Departamento de Sistemas e Computação – DSC Máquina de.
Teoria da Computação FIC– Ciência da Computação
Máquinas de Turing Não Deterministas
Forma Normal de Chomsky
Lema do Bombeamento – Gramáticas Livres do Contexto
Resolução.
Árvores.
Linguagens Livres de Contexto
Linguagens Não Decidíveis
Minimização; Lema do Bombeamento.
Problemas Algoritmicos
BCC 101 –Matemática Discreta
Linguagens Livre de Contexto
Lema da Bomba (Pumping Lemma) para linguagens livre de contexto
esquerda p/ direita,read only
Linguagens e Máquinas WILSON ROSA DE OLIVEIRA DEPARTAMENTO DE INFORMÁTICA UFPE
autômatos finitos com transições e
Análise Dada uma cadeia de terminais w, queremos saber se wL(G) ou não. Se for o caso, poderemos querer achar uma derivação de w. Um algoritmo que pode.
Identificando Linguagens Não Regulares
Métodos de Classificação por Seleção: HeapSort
SISTEMAS LINEARES I Prof. Marlon.
EQUAÇÕES POLINOMIAIS Prof. Marlon.
Análise Sintática Ascendente
Construção de Compiladores
Construção de Compiladores
Conceitos Básicos.
Prof. Roberto Cristóvão
Teorema do Confronto   Se não pudermos obter o limite diretamente, talvez possamos obtê-lo indiretamente com o teorema do confronto. O teorema se refere.
Informática Teórica Engenharia da Computação
Informática Teórica Engenharia da Computação
Informática Teórica Engenharia da Computação
Informática Teórica Engenharia da Computação
Informática Teórica Engenharia da Computação
Compiladores, Aula Nº 5 João M. P. Cardoso
Compiladores, Aula Nº 9 João M. P. Cardoso
Linguagens Livres de Contexto
Lema do Bombeamento Linguagens Livres de Contexto
BCC 101 –Matemática Discreta
Algorítmos e estrutura de dados III
Gramáticas Livres de Contexto
Erick Vagner Cabral Igor Lucena Vitor Baptista
ÁRVORES Def.: Um grafo é acíclico se não possui ciclos.
Expressões Regulares e Gramáticas
Á R V O R E S.
1 Aplicações do Fecho Regular. 2 A interseção de uma linguagem livre de contexto e uma linguagem regular é uma linguagem livre de contexto livre de contexto.
BCC101 – Matemática Discreta
Capítulo II Gramáticas e Linguagens
Analise sintática aula-07-analise-sintática.pdf.
Redução.
Linguagens Livres de Contexto
Faculdade Pernambucana - FAPE Setembro/2007
Prof. André Luis Roland Tancredo Engenheiro da Computação e Pesquisador em Desenvolvimento Tecnológico para Semicondutores pelo CNPq Especialista em Microeletrônica.
BCC101 – Matemática Discreta
Engenharia/Ciência da Computação
tópicostópicos itens 01. Terminologia 02. Operações básicas 03. Representação de linguagens 04. Formalização de gramáticas 05. Processo de derivação 06.
Prof. Daniel Morais dos Reis
1 Decidibilidade continuação…. 2 Teorema: Para qualquer linguagem recursivamente enumerável é indecidível determinar se é finita Prova: Vamos reduzir.
Informática Teórica Engenharia da Computação. Teoria da Computação Contexto do que vamos começar a estudar As linguagens também podem ser definidas formalmente.
Árvores e Árvores Binárias
Informática Teórica Engenharia da Computação
Transcrição da apresentação:

Lema do Bombeamento Linguagens Livres de Contexto

Agenda Lema do Bombeamento para CFL’s Exemplos de provas usando o lema Motivação Teorema Prova Exemplos de provas usando o lema

Bombeando FA’s 1 x y Strings de comprimento 3 ou mais no DFA acima podem ser bombeados, pois tais strings correspondem a caminhos de comprimento  3, e portanto visitam  4 vértices. O princípio da Casa dos Pombos guarante então que algum vértice é visitado mais de uma vez, resultando em um ciclo de bombeamento. z

Bombeando PDA’s (, e X ), Xe Entretanto, o lema de bombeamento para linguagem regular falha nesse exemplo. Q: Dê um examplo de string que não pode ser bombeado. e , e$ e , $e q r s

Bombeando PDA’s R: (n )n não pode ser bombeado na primeira metade. (, e X ), Xe R: (n )n não pode ser bombeado na primeira metade. Entretanto, poderíamos bombear dois substrings de uma vez. I.e. tomar k parenteses da esquerda e k da direita. e , e$ e , $e q r s

Bombeamento Duplo DEF: Um string s em L é dito duplamente bombeável se podemos dividir s em s = uvxyz de modo que para todo i  0 temos que s = uv ixy iz  L sendo pelo menos um de v,y não vazio. Q1: 00111 é duplamente bombeável em 0*111? Q2: 00100 é duplamente bombeável em {0n10n}? Q3: 00100100 é duplamente bombeável em {0n10n10n} ?

Bombeamento Duplo R1: Sim. Todo string bombeável é também duplamente bombeável, fazendo-se y = e. Neste caso, tomamos u = e, v = 00, x = y = e, z = 111. uv ixy iz =(00)i111 está de fato em 0*111. R2: Sim. Faça u = e, v = 00, x = 1, y = 11 e z = e uv ixy iz =(00)i1(00)i está de fato em {0n10n} R3: NÃO! Bombeando duplamente 00100100 ou leva a excesso de 1’s, ou aumenta 2 das sequências de 0’s, sem aumantar a sequência de 0’s restante.

Bombeamento Duplo Em geral, como bombeamento implica bombeamento duplo, toda linguagem regular (infinita) é duplamente bombeável. Também é verdade que toda linguagem livre de contexto (infinita) é duplamente bombeável. Mas Q3 pode ser generalizada de modo a mostrar que {0n10n10n} não admite bombeamento duplo para strings com comprimento maior do que um determinado. Isso termina provando que {0n10n10n} não é livre de contexto:

Lema do Bombeamento Livre de Contexto THM: Dada uma linguagem livre de contexto L, existe um número p (no. de bombeamento duplo) tal que todo string em L de comprimento  p é duplamente bombeável dentro de um substring de comprimento p. Em outras palavras, para todo s  L com |s|  p podemos escrever : s = uvxyz |vy |  1 (partes bombeávei não vazias) |vxy |  p (bombeamento dentro da porção p) uv ixy iz  L for all i  0 (bombea v e y)

CFPL – Intuição tk … t2 t1 sk … s2 s1 Intuitivamente s = uvxyz é encontrado do seguinte modo: Apenas um número finito de mudaças na pilha podem ocorrer em um ciclo do grafo de comprimento  n (o número de estado). Portanto, se s é suficient. longo, existirão estados q,r tais que o mesmo string empilhado em q é desemplihado em r e tais que o caminho de q a r começa e termina com a mesma configuração de pilha. Com essa hipótese, podemos bombear juntos v e y já que v empilha o que y desempilha -y -v -x -u q r -z s p sk … s2 s1

CFPL - Prova O que foi mostrado anteriormente possa ser formalizado para provar o Lema do Bombeamento para linguagens livres de contexto. Entrtanto a prova é muito mais complicada do que a prova formal baseada em gramática: Prova do CFPL: Seja L uma linguagem livre de contexto. Considere uma árvore de derivação de um string de L na qual algum nodo de variável tem ele próprio como ancestral:

CFPL – Prova S a A Podemos substituir a última ocorrência de A pela primeira. I.e., substituir na árvore A * “and a” por A * “chuga and a choo” Obtendo o seguinte: A f o r y o u c h u g a a n d a c h o o

CFPL – Prova E novamente: S a A A f o r y o u c h u g a c h o o A c h d a c h o o

CFPL – Prova S a A A f o r y o u c h u g a c h o o A c h u g a c h o o n d a c h o o

CFPL – Prova Ou podemos substituir A * “chuga and a choo” por obtendo o resultado a seguir: A f o r y o u c h u g a a n d a c h o o

a (chuga)i and a (choo)i for you CFPL – Prova S a A No nosso caso particular, podemos criar qualquer string da forma a (chuga)i and a (choo)i for you a n d a f o r y o u

CFPL – Prova De modo geral, qualquer caminho na árvore de derivação que tenha uma varável repetida dá origem a strings da forma uv ixy iz , todos em L. O restante da prova é apenas um argumento de contagem que garante a ocorrência de uma variável repetida.

CFPL – Prova Q: Se n é o número de variáveis da gramática, para qual altura da árvore se pode garantir que pelo menos uma variável ocorre repetida? (Lembre-se: a altura da árvore trivial – apenas a raiz – é 0)

CFPL – Prova R: Se n é o número de variáveis da gramática, qualquer subárvore de altura h = n+1 treá uma variável repetida. Isso porque o nível inferior de uma árvore de derivação é composto de terminais, portanto altura n+1 (= n+2 níveis) garante n+1 níveis de variáveis, em pelo menos um ramo da árvore. O princípio da casa dos pombos garante que alguma variável ocorre 2 vezes!

CFPL – Prova Q: Se a gramática está na Forma Normal de Chomsky, de que tipo é qualquer árvore de derivação?

CFPL – Prova R: Uma árvore binária! Q: Qual é o número máximo de folhas que uma árvore binária de altura n pode ter?

CFPL – Prova A: 2n Q: Qual é o número máximo de folhas que pode ter uma árvore de derivação de uma gramática na Forma Normal de Chomsky, se a altura da árvore de derivação é n+1?

CFPL – Prova A: Também 2n! Isso porque a única maneira de obter um terminal é por uma regra da forma Aa e, portanto, não há dois ramos no último nível. Q: Que comprimento de string garante que sua árvore de derivação tem altura  n+1 ?

CFPL – Prova R: 2n. Isso porque nenhuma árvore com comprimento < n+1 poderia gerar essa quantidade de folhas, ou terminais. Isso nos leva a definir o número de bombeamento duplo como p=2n. O resto do teorema segue das considerações feitas previamente. Apenas precisamos verificar que o bombeamento pode ocorrer em um substring de comprimento p. Isso decorre de ocorrer uma variável repetida nos últimos n+2 níveis da árvore. 

Provando que L não CFL Método padrão p/ aplicar o lema do bombeamento Apenas no. 3 muda de exemplo p/ exemplo: 1. Suponha que a linguagem é livre de contexto. 2. Então existe um no. de bombeamento p. 3. Encontre um string s que não seja duplamente bombeável , em um substring de comprimento p 4. 2 e 3 se contradizem, portanto, 1 deve ser falso e a linguagem não é livre de contexto. 2

Provando que L não CFL Exemplo 1 L ={1n0n 1n0n | n  0 }

Provando que L não CFL Exemplo 1 A parte difícil é a número 3!!! Tente s = 1p0p 1p0p Existem 3 casos onde a “janela de visão” vxy poderia estar.

Provando que L não CFL Exemplo 1 Caso I. Bombear p/ baixo (ou p/ cima) modificaria o no. de 0’s e/ou o no. de 1’s na primeira metado do string, sem alterar a segunda metade. Isso viola a definição da language.

Provando que L não CFL Exemplo 1 Casos II e III. Mesmo argumento do Caso I. (Caso III causaria mudança na segunda metade sem alterar a primeira. Caso II causaria mudaça na parte do meio, sem alterar os primeiros 1p ou os últimos.) Isso completa a prova.

Provando que L não CFL Exemplo 2 ADD = { x=y+z | x, y, e z são bit- strings que satisfazem a equação }

Provando que L não CFL Exemplo 1 A parte defícil é a número 3! Seja s: 1p+1=1p+10p Existem duas posições onde o substring vxy pode ocorrer. (Janela-p)

Provando que L não CFL Exemplo 1 Caso I. v deve ocurrer à esq. de “=” enquanto y deve ocorrer à dir. já que, caso contrário, o bombeamento resultaria em excesso de símbolos =, ou afetaria um lado da equação mas não o outro. Seja k o comprimento de v e l o comprimento de y. Bombeando p/ cima obtemos a suposta equação: 1p+1-k=1p-l+10p. A equação não é válida porque o lado direito é muito maior do que o lado esquerdo. Por exemplo, se p=10, k=5, l=5, teríamos a equação: 111111 = 11111+10000000000= 10000111111

Provando que L não CFL Exemplo 1 Caso II. O bombeamento deve ocorrer à direita de “=”: O lado direito é afetado sem que haja alteração do lado esquerdo. Isso não mantém a propriedade de que o string satisfaz a equação. Isso conclui a prova de que a linguagem ADD não é livre de contexto. Por exemplo, se p=10, k=5, l=5, teríamos a equação: 111111 = 11111+10000000000= 10000111111

Exercícios {1n | n é primo} {0n 1n 0n 1n } {int x; x = 3; | x é um string alfabético} Portanto, dizer que Java é livre de contexto não é exato. (Se x = 3 ocorre, x deve ser previamente declarado!) Exercícios p/ próxima aula: Sipser pag 119: 2.18