Linguagens Livres-do-Contexto

Documentos relacionados
Linguagens Não-Regulares

ACH2043 INTRODUÇÃO À TEORIA DA COMPUTAÇÃO

ACH2043 INTRODUÇÃO À TEORIA DA COMPUTAÇÃO

Gramáticas Livres de Contexto

Lema do Bombeamento Linguagens Livres de Contexto

Lema do Bombeamento para Linguagens Livres do Contexto

Autômatos Finitos e Não-determinismo

Linguagens Livres do Contexto. Adaptado de H. Brandão

Propriedades das Linguagens Livres do Contexto

Linguagens Formais e Problemas de Decisão

Lema do Bombeamento. Aplicação para Linguagens Regulares e Livres de Contexto. Maria Adriana Vidigal de Lima. Abril

SCC Capítulo 2 Linguagens Livres de Contexto e Autômatos de Pilha (versão 2)

Linguagens Formais e Autômatos P. Blauth Menezes

Segunda Lista de Exercícios 2004/2...

Capítulo 9: Linguagens sensíveis ao contexto e autômatos linearmente limitados.

Decidibilidade. Mário S. Alvim Fundamentos de Teoria da Computação (FTC) DCC-UFMG (2018/02)

Expressões regulares

Terceira Lista de Exercícios 2004/2...

ACH2043 INTRODUÇÃO À TEORIA DA COMPUTAÇÃO

Máquinas de Turing - Computabilidade

AFNs, Operações Regulares e Expressões Regulares

LINGUAGEM LIVRE DE CONTEXTO GRAMÁTICA LIVRE DE CONTEXTO

Linguagens livres de contexto e autômatos de pilha

Construção de Compiladores Aula 16 - Análise Sintática

LFA Aula 09. Gramáticas e Linguagens Livres de Contexto 18/01/2016. Linguagens Formais e Autômatos. Celso Olivete Júnior.

Universidade Federal de Alfenas

Exercícios Associados à Aula 28 (27/11/2013) Feitos em sala e em equipes

Lema do Bombeamento Operações Fechadas sobre LR s Aplicações

a n Sistemas de Estados Finitos AF Determinísticos

Propriedades de Linguagens Livres de Contexto. Propriedades de Linguagens Livres de Contexto. Propriedades de Linguagens Livres de Contexto

Linguagens Formais - Preliminares

Um alfabeto é um conjunto de símbolos indivisíveis de qualquer natureza. Um alfabeto é geralmente denotado pela letra grega Σ.

Análise Sintática Bottom-up

Aula 8: Gramáticas Livres de Contexto

Linguagens Livres de Contexto

Gramáticas Livres de Contexto Parte 1

Compiladores. Prof. Bruno Moreno Aula 8 02/05/2011

Compiladores - Análise Ascendente

Linguagens Livres de Contexto

Autômatos de Pilha (AP)

Compiladores - Análise Ascendente

Lema do Bombeamento Operações Fechadas sobre LR s Aplicações

a * Lema do Bombeamento Linguagens regulares e não-regulares

Editor de Autômatos Finitos. Acadêmica: Josiane Patrícia Morastoni Orientadora: Joyce Martins

Curso: Ciência da Computação Turma: 6ª Série. Teoria da Computação. Aula 4. Autômatos Finitos

Aula 7: Autômatos com Pilha

LLC's: Lema do Bombeamento e Propriedades de Fechamento

Linguagens Formais e Autômatos 02/2015. LFA Aula 02. introdução 28/09/2015. Celso Olivete Júnior.

Marcos Castilho. DInf/UFPR. 21 de março de 2019

Universidade de São Paulo Instituto de Ciências Matemáticas e de Computação Curso de Ciências de Computação

Gramáticas e Linguagens independentes de contexto

LINGUAGENS FORMAIS E AUTÔMATOS. Prova 2-10/06/ Prof. Marcus Ramos

Universidade Federal do Rio de Janeiro Departamento de Ciência da Computação

Autômatos com Pilha: Reconhecedores de LLCs

Universidade Federal de Alfenas

Autômato com pilha. IBM1088 Linguagens Formais e Teoria da Computação. Evandro Eduardo Seron Ruiz

IV Gramáticas Livres de Contexto

Linguagens Livres de Contexto

INE5317 Linguagens Formais e Compiladores. AULA 4: Gramáticas

LR's: Lema do Bombeamento e Propriedades de Fechamento

Compiladores. Análise lexical. Plano da aula. Motivação para análise lexical. Vocabulário básico. Estrutura de um compilador

COMPILADORES. Análise sintática. Prof. Geovane Griesang Universidade de Santa Cruz do Sul UNISC Departamento de informática

INE5403 FUNDAMENTOS DE MATEMÁTICA DISCRETA

Modelos Universais de Computação

Gramá3ca Livre de Contexto (GLC)

Redutibilidade. Mário S. Alvim Fundamentos de Teoria da Computação (FTC) DCC-UFMG (2018/02)

Transformações úteis para GLC: (1) eliminação de produções nulas; (2) eliminação de produções unitárias; (3) Eliminação de símbolos estéreis e

A. (Autómatos finitos determinísticos e não determinísticos AFD e AFND)

MAC-4722 Linguagens, Autômatos e Computabilidade Lista L3

Gramática. Prof. Yandre Maldonado e Gomes da Costa. Prof. Yandre Maldonado - 1

Gramática. Gramática. Gramática

Linguagens Formais e Autômatos P. Blauth Menezes

Formas normais. Forma normal de Greibach (FNG) todas as produções são da forma

Disciplina: LINGUAGENS FORMAIS, AUTÔMATOS E COMPUTABILIDADE Prof. Jefferson Morais

Aula 3: Autômatos Finitos

Autômatos com Pilha. Douglas O. Cardoso docardoso.github.io

COMPILADORES. Revisão Linguagens formais Parte 02. Prof. Geovane Griesang

Linguagens Formais e Autômatos P. Blauth Menezes

SCC Capítulo 1 Linguagens Regulares e Autômatos Finitos

INE5317 Linguagens Formais e Compiladores AULA 6: Propriedades das Linguagens Regulares

Modelos de Computação Folha de trabalho n. 8

Teoria de Linguagens 1 o semestre de 2018 Professor: Newton José Vieira Primeira Lista de Exercícios Data de entrega: 17/4/2018 Valor: 10 pontos

Aula de 28/10/2013. sticas; Implementação. em Ruby

O que é Linguagem Regular. Um teorema sobre linguagens regulares. Uma aplicação do Lema do Bombeamento. Exemplo de uso do lema do bombeamento

15/03/2018. Professor Ariel da Silva Dias Aspectos sintáticos e semânticos básicos de linguagens de programação

As linguagens regulares são I.C Proposição Qualquer linguagem regular é independente de contexto.

Linguagens Formais. Aula 01 - Conceitos Básicos. Prof. Othon Batista Mestre em Informática

Automata e Linguagens Formais

Linguagens Regulares. Prof. Daniel Oliveira

TEORIA DAS LINGUAGENS 3. GRAMÁTICAS INDEPENDENTES DE CONTEXTO

LINGUAGENS FORMAIS E AUTÔMATOS

IBM1088 Linguagens Formais e Teoria da

COMPILADORES. Revisão Linguagens formais Parte 01. Geovane Griesang

Universidade Federal de Alfenas

Linguagens e Programação Gramáticas. Paulo Proença

LINGUAGENS FORMAIS Definições. Desenvolveram-se na História em função da necessidade dos grupos humanos que as empregavam

Teoria da Computação Aula 02 Introdução

Compiladores Aula 4. Celso Olivete Júnior.

Capítulo II Gramáticas

Transcrição:

Linguagens Livres-do-Contexto Mário S. Alvim (msalvim@dcc.ufmg.br) Fundamentos de Teoria da Computação (FTC) DCC-UFMG (2018/02) Mário S. Alvim (msalvim@dcc.ufmg.br) Linguagens Livres-do-Contexto DCC-UFMG (2018/02) 1 / 70

Linguagens Livres-do-Contexto: Introdução Até agora vimos métodos diferentes, porém equivalentes, de descrever linguagens: autômatos finitos e expressões regulares. Vimos que muitas linguagens podem ser descritas dessa maneira, as chamadas linguagens regulares. Porém, vimos que nem toda linguagem é regular, como, por exemplo, L = {w {0, 1} w contém o mesmo número de 0 s e de 1 s}. Isto é um problema, pois se trocarmos 0 por ( e 1 por ), não conseguiríamos reconhecer, por exemplo, a linguagem L = {w {a, b, +,, (, )} w contém o mesmo número de ( s e de ) s}. o que é essencial para verificar se expressões aritméticas estão bem formadas! Mário S. Alvim (msalvim@dcc.ufmg.br) Linguagens Livres-do-Contexto DCC-UFMG (2018/02) 2 / 70

Linguagens Livres-do-Contexto: Introdução Aqui vamos estudar um método mais poderoso de descrever linguagens: as gramáticas livres-do-contexto. Gramáticas livres-do-contexto surgiram para estudar linguagens naturais (como português, inglês, francês). Hoje as gramáticas livres-do-contexto são essenciais para especificar linguagens de programação. Você já parou para pensar que é preciso descrever a linguagem de todos os programas válidos em Python (ou Java, C++, etc)? Além disso, que um compilador precisa verificar se uma cadeia de caracteres em um arquivo é um programa válido em Python (ou Java, C++, etc)? As linguagens geradas por gramáticas livres-do-contexto são chamadas de linguagens livres-do-contexto. As máquinas que reconhecem estas linguagens são os autômatos com pilha. Mário S. Alvim (msalvim@dcc.ufmg.br) Linguagens Livres-do-Contexto DCC-UFMG (2018/02) 3 / 70

Gramáticas Livres-do-Contexto Mário S. Alvim (msalvim@dcc.ufmg.br) Linguagens Livres-do-Contexto DCC-UFMG (2018/02) 4 / 70

Gramáticas Livres-do-Contexto Vamos começar com um exemplo de gramática livre-do-contexto. A 0A1 Exemplo 1 Seja a gramática livre-do-contexto G 1 : A B B # Uma gramática consiste em uma coleção de regras de substituição (ou produções). Cada regra consiste em uma variável do lado esquerdo, uma seta, e uma cadeia de variáveis e terminais do lado direito. Geralmente variáveis são representadas por letras maiúsculas. Os terminais equivalem ao alfabeto de entrada da linguagem, e geralmente representados por letras minúsculas, números ou símbolos. Uma variável é designada como variável inicial, e geralmente ocorre do lado esquerdo da primeira regra. Mário S. Alvim (msalvim@dcc.ufmg.br) Linguagens Livres-do-Contexto DCC-UFMG (2018/02) 5 / 70

Gramáticas Livres-do-Contexto Uma gramática descreve uma linguagem ao gerar cada cadeia dessa linguagem da seguinte forma. 1. Escreva a variável inicial. Ela é a variável à esquerda a primeira regra, a não ser que especificado em contrário. 2. Encontre uma variável que esteja escrita e uma regra que comece com essa variável. Substituta a variável escrita pelo lado direito dessa regra. 3. Repita o passo (2) até que não reste nenhuma variável. A sequência de substituições para se obter uma cadeia é chamada de derivação. Mário S. Alvim (msalvim@dcc.ufmg.br) Linguagens Livres-do-Contexto DCC-UFMG (2018/02) 6 / 70

Gramáticas Livres-do-Contexto Exemplo 2 Eis uma derivação da cadeia 000#111 pela gramática G 1 : A 0A1 (aplicando a primeira regra de G 1 à variável inicial A) 00A11 (aplicando a primeira regra de G 1 à variável A) 000A111 (aplicando a primeira regra de G 1 à variável A) 000B111 (aplicando a segunda regra de G 1 à variável A) 000#111 (aplicando a terceira regra de G 1 à variável B) Árvore sintática para 000#111 na gramática G 1. Mário S. Alvim (msalvim@dcc.ufmg.br) Linguagens Livres-do-Contexto DCC-UFMG (2018/02) 7 / 70

Linguagens Livres-do-Contexto O conjunto de todas as cadeias geradas pela uma gramática G constitui a linguagem da gramática, denotada por L(G). Por exemplo, a linguagem gerada pela gramática G 1 é: L(G 1 ) = {0 n #1 n n 0}. Qualquer linguagem que pode ser gerada por uma gramática livre-do-contexto é chamada de uma linguagem livre-do-contexto (LLC). Por conveniência, quando apresentamos as regras de uma LLC, abreviamos várias regras com o mesmo lado esquerdo em uma mesma linha, usando o símbolo para significar ou. Por exemplo, em G 1 as regras A 0A1 e A B podem ser abreviadas como A 0A1 B. Mário S. Alvim (msalvim@dcc.ufmg.br) Linguagens Livres-do-Contexto DCC-UFMG (2018/02) 8 / 70

Gramáticas Livres-do-Contexto Exemplo 3 A GLC G 2 abaixo descreve um fragmento da ĺıngua inglesa. sentence noun-phrase verb-phrase noun-phrase cmplx-noun cmplx-noun prep-prhase verb-phrase cmplx-verb cmplx-verb prep-prhase prep-phrase prep cmplx-noun cmplx-noun article noun cmplx-verb verb verb noun-prhase article a the noun boy girl flower verb touches likes sees prep with Mário S. Alvim (msalvim@dcc.ufmg.br) Linguagens Livres-do-Contexto DCC-UFMG (2018/02) 9 / 70

Gramáticas Livres-do-Contexto Exemplo 3 (Continuação) As 10 variáveis de G 2 são: sentence, noun-phrase, verb-phrase, prep-phrase, cmplx-noun, cmplx-verb, article, noun, verb, e prep. Os 27 terminais de G 2 são as 26 letras do alfabeto latino (a, b,..., z) mais o espaço em branco. A gramática tem 18 regras. As cadeias geradas por G 2 incluem os exemplos abaixo: a boy sees the girl sees a flower a girl with a flower likes the boy Mário S. Alvim (msalvim@dcc.ufmg.br) Linguagens Livres-do-Contexto DCC-UFMG (2018/02) 10 / 70

Gramáticas Livres-do-Contexto Exemplo 3 (Continuação) Uma derivação para a cadeia a boy sees pela gramática G 2 é a seguinte. sentence noun-phrase verb-phrase cmplx-noun verb-phrase article noun verb-phrase a noun verb-phrase a boy verb-phrase a boy cmplx-verb a boy verb a boy sees Mário S. Alvim (msalvim@dcc.ufmg.br) Linguagens Livres-do-Contexto DCC-UFMG (2018/02) 11 / 70

Gramáticas Livres-do-Contexto Exemplo 4 GLCs são usadas para definir a sintaxe de linguagens de programação (como C, Java, Python, Haskell, ML, Prolog, etc.) O fragmento de GLC abaixo descreve uma linguagem de programação. program begin program command-list end program comannd-list command command-list command command assign-command if-then-else-command while-command... assign-command variable = expression if-then-else-command if boolean-expression then command-list else command-list end if while-command while boolean-expression do command-list end while...... variable letter variable-tail letter variable-tail letter variable-tail digit variable-tail letter digit letter A B... Z a b... z digit 0 1... 9 Mário S. Alvim (msalvim@dcc.ufmg.br) Linguagens Livres-do-Contexto DCC-UFMG (2018/02) 12 / 70

Gramáticas Livres-do-Contexto: Definição formal Uma gramática livre-do-contexto (GLC) é uma 4-tupla (V, Σ, R, S), onde: 1. V é um conjunto finito denominado variáveis, 2. Σ é um conjunto finito, disjunto de V, denominado terminais, 3. R é um conjunto finito de regras, com cada regra sendo uma variável e uma cadeia de variáveis e terminais, e 4. S V é uma variável inicial (ou variável de partida). Mário S. Alvim (msalvim@dcc.ufmg.br) Linguagens Livres-do-Contexto DCC-UFMG (2018/02) 13 / 70

Gramáticas Livres-do-Contexto: Notação e terminologia Se u, v e w são cadeias de variáveis e terminais, e A w é uma regra da gramática, dizemos que uav origina uwv, escrito Dizemos que u deriva v, escrito uav uwv. u v se u = v ou se existe uma sequência u 1, u 2,..., u k, para k 0, tal que u u 1 u 2... u k v. Dada uma gramática G = (V, Σ, R, S), linguagem da gramática é L(G) = {w Σ S w}. Mário S. Alvim (msalvim@dcc.ufmg.br) Linguagens Livres-do-Contexto DCC-UFMG (2018/02) 14 / 70

Gramáticas Livres-do-Contexto: Notação e terminologia Frequentemente especificamos uma gramática escrevendo somente suas regras. Podemos identificar as variáveis como os símbolos do lado esquerdo de cada regra, e os terminais como os símbolos restantes. Por convenção, a variável de partida é colocada do lado esquerdo da primeira regra. A 0A1 Exemplo 5 Voltando à gramática G 1 : A B B # Formalmente, G 1 = (V, Σ, R, S), onde: suas variáveis são V = {A, B}, seu alfabeto é Σ = {0, 1, #}, a variável de partida é S = A, e e a coleção de regras R é dada acima. Mário S. Alvim (msalvim@dcc.ufmg.br) Linguagens Livres-do-Contexto DCC-UFMG (2018/02) 15 / 70

Gramáticas Livres-do-Contexto: Exemplos Exemplo 6 Considere a gramática G 3 = ({S}, {a, b}, R, S). O conjunto de regras, R, é S asb SS ɛ. Essa gramática gera cadeias como: abab aaabbb aababb ɛ Se interpretarmos o símbolo a como parênteses à esquerda (, e o símbolo b como parênteses à direita ), a linguagem L(G 3 ) gerada pela gramática é a linguagem de todas as cadeias com parênteses propriamente aninhados. Por exemplo, as cadeias acima representariam: ()() ((())) (()()) ɛ Mário S. Alvim (msalvim@dcc.ufmg.br) Linguagens Livres-do-Contexto DCC-UFMG (2018/02) 16 / 70

Gramáticas Livres-do-Contexto: Exemplos Exemplo 7 Considere a gramática G 4 = (V, Σ, R, expr ), em que V = { expr, term, factor }, Σ = {a, +,, (, )}, e as regras em R são expr expr + term term term term factor factor factor ( expr ) a Mário S. Alvim (msalvim@dcc.ufmg.br) Linguagens Livres-do-Contexto DCC-UFMG (2018/02) 17 / 70

Gramáticas Livres-do-Contexto: Exemplos Exemplo 7 (Continuação) As seguintes cadeias podem ser geradas por G 4, com suas árvores sintáticas. a + a a (a + a) a Mário S. Alvim (msalvim@dcc.ufmg.br) Linguagens Livres-do-Contexto DCC-UFMG (2018/02) 18 / 70

Projetando Gramáticas Livres-do-Contexto Assim como é o caso com autômatos finitos, projetar gramáticas livres-do-contexto é uma arte. GLCs são, de fato, mais complicadas de construir que AFDs, uma vez que geram linguagens mais expressivas. De fato, as linguagens livres-do-contexto são estritamente mais gerais que as linguagens regulares. (Note que já tínhamos mostrado que L = {0 n 1 n n 0} não é uma linguagem regular, mas em breve construiremos uma GLC para a L, mostramos que ela é livre-do-contexto!) A melhor maneira de ser capaz de projetar GLCs para linguagens é praticando! Mário S. Alvim (msalvim@dcc.ufmg.br) Linguagens Livres-do-Contexto DCC-UFMG (2018/02) 19 / 70

Projetando Gramáticas Livres-do-Contexto Exemplo 8 Projete uma GLC para a linguagem L = {0 n 1 n n 0}. Solução. A seguinte gramática gera L. S 0S1 ɛ Exemplo 9 Projete uma GLC para a linguagem L = {a m b n m < n}. Solução. A seguinte gramática gera L. S IB I ai b ɛ B Bb b Mário S. Alvim (msalvim@dcc.ufmg.br) Linguagens Livres-do-Contexto DCC-UFMG (2018/02) 20 / 70

Gramáticas Livres-do-Contexto: Ambiguidade Às vezes uma gramática pode gerar a mesma cadeia de várias formas diferentes. Tal cadeia terá várias árvores sintáticas diferentes e, portanto, vários significados diferentes. Isto é indesejável em algumas aplicações. Em linguagens de programação, por exemplo, queremos que cada programa tenha uma única interpretação. Mário S. Alvim (msalvim@dcc.ufmg.br) Linguagens Livres-do-Contexto DCC-UFMG (2018/02) 21 / 70

Gramáticas Livres-do-Contexto: Ambiguidade Exemplo 10 Seja a gramática G 5 : expr expr + expr expr expr ( expr ) a. Esta gramática gera a cadeia a + a a ambiguamente, como mostram as duas árvores de derivação distintas: Esta gramática pode agrupar a some (+) antes da multiplicação ( ), ou vice-versa, não dando um significado único a cada sentença matemática. Já a gramática G 4 é equivalente (gera a mesma linguagem), mas não é ambígua: ela força a multiplicação a ser avaliada antes da soma. Mário S. Alvim (msalvim@dcc.ufmg.br) Linguagens Livres-do-Contexto DCC-UFMG (2018/02) 22 / 70

Gramáticas Livres-do-Contexto: Ambiguidade Uma derivação de uma cadeia w em uma gramática G é uma derivação mais à esquerda se a cada passo a variável remanescente mais à esquerda é aquela que é substituída. Uma cadeia w é derivada ambiguamente na gramática livre-do-contexto G se ela tem duas ou mais derivações mais à esquerda diferentes. A gramática G é ambígua se ela gera alguma cadeia ambiguamente. Às vezes uma gramática ambígua pode ser convertida em uma gramática equivalente sem ambiguidade. Este foi o caso da gramática G 5 acima, que pôde ser convertida numa gramática não-ambígua equivalente G 4. Quando isto não é possível (ou seja, quando só exitem gramáticas ambíguas para a linguagem) dizemos que a linguagem é inerentemente ambígua. Um exemplo de linguagem inerentemente ambígua é: {a i b j c k i = j ou j = k}. Mário S. Alvim (msalvim@dcc.ufmg.br) Linguagens Livres-do-Contexto DCC-UFMG (2018/02) 23 / 70

Forma normal de Chomsky: Definição formal Quando trabalhamos com linguagens livres-do-contexto, é frequentemente conveniente simplificá-las. Uma das formas simplificadas mais usadas é a forma normal de Chomsky, que é útil para aplicar algoritmos a GLCs. Uma gramática livre-do-contexto está na forma normal de Chomsky se toda regra tem uma das seguintes formas: A BC A a S ɛ (A, B, C são variáveis quaisquer, e B e C não são a variável de partida) (A é um variável qualquer, e a é um terminal) (apenas se S é a variável de partida) Intuitivamente, a forma normal de Chomsky garante que a derivação de uma palavra não desperdiça tempo : cada passo ou adiciona uma variável ou transforma uma variável em um terminal. (Para gerar qualquer palavra de tamanho n são necessários no máximo 2n 1 passos!) Mário S. Alvim (msalvim@dcc.ufmg.br) Linguagens Livres-do-Contexto DCC-UFMG (2018/02) 24 / 70

Forma normal de Chomsky: Definição formal Teorema Qualquer linguagem livre-do-contexto é gerada por uma gramática livre-do-contexto na forma normal de Chomsky. Prova. A prova formal encontra-se no livro-texto. Aqui, em vez de dar a prova formal, vamos estudar sua ideia central com um exemplo em que transformamos uma GLC em uma GLC equivalente na forma normal de Chomsky. Mário S. Alvim (msalvim@dcc.ufmg.br) Linguagens Livres-do-Contexto DCC-UFMG (2018/02) 25 / 70

Forma normal de Chomsky: Exemplo Exemplo 11 Seja a GLC G 6 abaixo. Usando o método proposto na prova do teorema anterior, encontre uma gramática na forma normal de Chomsky equivalente a G 6, (isto é, que gere a mesma linguagem). Solução. A transformação é dada passo-a-passo, em que cada passo uma nova versão equivalente da gramática é apresentada. As regras mostradas em negrito acabam de ser adicionadas, enquanto as regras mostradas em cinza acabam de ser removidas. Mário S. Alvim (msalvim@dcc.ufmg.br) Linguagens Livres-do-Contexto DCC-UFMG (2018/02) 26 / 70

Forma normal de Chomsky: Exemplo Exemplo 11 (Continuação) 1. A GLC original G 6 está à esquerda. A primeira modificação consiste em introduzir uma nova variável inicial, obtendo a GLC da direita. 2. Remova as regras ɛ: B ɛ (mostrado à esquerda), A ɛ (mostrado à direita). Mário S. Alvim (msalvim@dcc.ufmg.br) Linguagens Livres-do-Contexto DCC-UFMG (2018/02) 27 / 70

Forma normal de Chomsky: Exemplo Exemplo 11 (Continuação) 3a. Remova as regas unitárias: S S (mostrado à esquerda), e S 0 S (mostrado à direita). 3b. Remova as regras unitárias: A B (mostrado à esquerda), A S (mostrado à direita). Mário S. Alvim (msalvim@dcc.ufmg.br) Linguagens Livres-do-Contexto DCC-UFMG (2018/02) 28 / 70

Forma normal de Chomsky: Exemplo Exemplo 11 (Continuação) 4. Converta as regras remanescentes para a forma apropriada acrescentando variáveis e regras adicionais. A gramática final em forma normal de Chomsky, abaixo, é equivalente à GLC original G 6. Note que o procedimento dado no teorema produz diversas variáveis U i com regras U i a, mas aqui nós simplificamos a gramática com uma única variável U e a regra U a. Mário S. Alvim (msalvim@dcc.ufmg.br) Linguagens Livres-do-Contexto DCC-UFMG (2018/02) 29 / 70

Autômatos com Pilha Mário S. Alvim (msalvim@dcc.ufmg.br) Linguagens Livres-do-Contexto DCC-UFMG (2018/02) 30 / 70

Autômato com Pilha Para reconhecer linguagens livres-do-contexto vamos precisar de máquinas mais poderosas que os autômatos finitos. Um autômato finito pode ser esquematizado da seguinte forma: Que modificações poderíamos fazer no esquema de autômatos finitos para transformá-los em máquinas mais poderosas? Mário S. Alvim (msalvim@dcc.ufmg.br) Linguagens Livres-do-Contexto DCC-UFMG (2018/02) 31 / 70

Autômato com Pilha Lembre-se de que o lema do bombeamento para linguagens regulares diz, essencialmente, que autômatos finitos se perdem em contagens longas. Mais precisamente, os autômatos finitos têm sérias limitações em se lembrar do que viram no passado. Isto sugere que podemos incluir algum tipo de memória nos AFs! Vamos adicionar à máquina uma memória extremamente simples, uma pilha, em que o último símbolo empilhado é o primeiro a ser desempilhado. Assim, chegamos aos autômatos com pilha: Mário S. Alvim (msalvim@dcc.ufmg.br) Linguagens Livres-do-Contexto DCC-UFMG (2018/02) 32 / 70

Autômato com Pilha: Definição formal Notação: dado um conjunto A, denotamos por A ɛ o conjunto A {ɛ}. Um autômato com pilha (AP) é uma 6-tupla (Q, Σ, Γ, δ, q 0, F ), onde: 1. Q é um conjunto finito de estados, 2. Σ é o alfabeto (finito) de entrada, 3. Γ é o alfabeto (finito) de pilha, 4. δ : Q Σ ɛ Γ ɛ P(Q Γ ɛ) é a função de transição, 5. q 0 Q é o estado inicial, e 6. F Q é o conjunto de estados de aceitação (ou estados finais). Note que, pela definição da função transição δ, estamos considerando APs não-determinísticos. (Pode-se mostrar que APs determinísticos são estritamente menos poderosos que os não-determinísticos, e não vamos estudá-los aqui.) Mário S. Alvim (msalvim@dcc.ufmg.br) Linguagens Livres-do-Contexto DCC-UFMG (2018/02) 33 / 70

Autômatos com Pilha: Definição formal de computação Seja M = (Q, Σ, Γ, δ, q 0, F ) um AP, e suponha que w = w 1 w 2... w m é uma cadeia em que cada w i Σ ɛ. Então o AP M aceita a cadeia w se existe uma sequência de estados r 0, r 1,..., r m Q e cadeias s 0, s 1,..., s m Γ satisfazendo as condições abaixo. (Aqui as cadeias s i representam a sequência de conteúdo da pilha que M tem no ramo de aceitação da computação.) 1. r 0 = q 0 e s 0 = ɛ. (Esta condição diz que M começa no estado inicial e com a pilha vazia.) 2. Para i = 0,..., m 1, temos (r i+1, b) δ(r i, w i+1, a), onde s i = at e s i+1 = bt para algum a, b Γ ɛ e t Γ. (Esta condição diz que M se move apropriadamente de acordo com a função de transição.) 3. r m F. (Esta condição diz que ao terminar de consumir a cadeia de entrada, M está em um estado de aceitação.) Mário S. Alvim (msalvim@dcc.ufmg.br) Linguagens Livres-do-Contexto DCC-UFMG (2018/02) 34 / 70

Autômatos com Pilha: Exemplos Exemplo 12 Vimos que a linguagem L 1 = {0 n 1 n n 0} não é regular e, portanto, não pode ser reconhecida por um autômato finito. Construa um autômato de pilha que reconheça L. Solução. A ideia central do autômato de pilha para L é ir lendo os símbolos de entrada e fazendo o seguinte: 1. Sempre que um 0 é lido, empilhe-o. 2. Quando os 1s começarem a ser lidos, desempilhe um 0 para cada 1 lido. 3. Se a leitura da entrada termina exatamente quando a pilha fica vazia de 0s, aceite a entrada. 4. Se a pilha esvazia antes de ler todos os 1s da entrada, ou se os 1s da entrada acabam antes de esvaziarem-se os 0s da pilha, ou se aparecerem quaisquer 0s após algum 1 da entrada, rejeite a entrada. Mário S. Alvim (msalvim@dcc.ufmg.br) Linguagens Livres-do-Contexto DCC-UFMG (2018/02) 35 / 70

Autômatos com Pilha: Exemplos Exemplo 12 (Continuação) O diagrama de estados a seguir implementa a ideia discutida, onde o rótulo a, b c sobre uma aresta indica que a transição satisfaz: 1. O símbolo disponível na entrada é a Σ ɛ, e o símbolo é consumido. 2. O símbolo disponível no topo da pilha é b Γ ɛ, e o símbolo é desempilhado. 3. O símbolo c Γ ɛ é empilhado. Note que uma cadeia é reconhecida apenas se o AP atinge um estado final no momento em que a cadeia foi completamente consumida. Mário S. Alvim (msalvim@dcc.ufmg.br) Linguagens Livres-do-Contexto DCC-UFMG (2018/02) 36 / 70

Autômatos com Pilha: Exemplos Exemplo 12 (Continuação) Computação sobre a cadeia 0011: Transição Estado Cadeia Pilha 0 q 1 0011 ɛ 1 q 2 0011 $ 2 q 2 011 0$ 3 q 2 11 00$ 4 q 3 1 0$ 5 q 3 ɛ $ 6 q 4 ɛ ɛ Cadeia aceita: AP para em estado final consumindo a cadeia inteira. Computação sobre a cadeia 011: Transição Estado Cadeia Pilha 0 q 1 011 ɛ 1 q 2 011 $ 2 q 2 11 0$ 3 q 3 1 $ 4 q 4 1 ɛ Cadeia rejeitada: AP para sem consumir a cadeia inteira. Computação sobre a cadeia 001: Transição Estado Cadeia Pilha 0 q 1 001 ɛ 1 q 2 001 $ 2 q 2 01 0$ 3 q 2 1 00$ 4 q 3 ɛ 0$ Cadeia rejeitada: AP para em estado não-final. Computação sobre a cadeia 0101: Transição Estado Cadeia Pilha 0 q 1 0101 ɛ 1 q 2 0101 $ 2 q 2 101 0$ 3 q 3 01 $ 4 q 4 01 ɛ Cadeia rejeitada: AP para sem consumir a cadeia inteira. Mário S. Alvim (msalvim@dcc.ufmg.br) Linguagens Livres-do-Contexto DCC-UFMG (2018/02) 37 / 70

Autômatos com Pilha: Exemplos Exemplo 12 (Continuação) O autômato com pilha cujo diagrama foi dado pode ser formalizado como M 1 = (Q, Σ, Γ, δ, q 1, F ), onde: 1. o conjunto de estados é Q = {q 1, q 2, q 3, q 4}, 2. o alfabeto de entrada é Σ = {0, 1}, 3. o alfabeto de pilha é Γ = {0, $}, 4. a função de transição δ é dada pela tabela (entradas em branco significam ): 5. o conjunto de estados de aceitação é F = {q 1, q 4}. Mário S. Alvim (msalvim@dcc.ufmg.br) Linguagens Livres-do-Contexto DCC-UFMG (2018/02) 38 / 70

Autômatos com Pilha: Exemplos Exemplo 13 linguagem Dê o diagrama de estados de um AP que reconheça a L 2 = {a i b j c k i, j, k 0 e i = j ou i = k}. Solução. O seguinte AP M 2, que é não-determinista, reconhece a linguagem L 2. Mário S. Alvim (msalvim@dcc.ufmg.br) Linguagens Livres-do-Contexto DCC-UFMG (2018/02) 39 / 70

Autômatos com Pilha: Exemplos Exemplo 14 Dê o diagrama de estados de um AP que reconheça a linguagem L 3 = {ww R w {0, 1} }. (Lembre-se de que w R é a cadeia w em ordem reversa.) Solução. O seguinte AP M 3, que é não-determinista, reconhece a linguagem L 3. Mário S. Alvim (msalvim@dcc.ufmg.br) Linguagens Livres-do-Contexto DCC-UFMG (2018/02) 40 / 70

Equivalência entre LLCs e APs Agora vamos verificar que as gramáticas livres-do-contexto e os autômatos com pilha são equivalentes em poder. Ou seja, ambas descrevem exatamente a classe das linguagens livres-do-contexto. Isto é útil porque teremos duas maneiras de determinar se uma linguagem L é livre-do-contexto: 1. encontrando um gerador para L, ou seja, uma GLC que gere L, ou 2. encontrando um reconhecedor para L, ou seja, um AP que reconheça L. Teorema Uma linguagem é livre-do-contexto se, e somente se, algum autômato com pilha a reconhece. Prova. Há duas direções a provar: (1) que se uma linguagem é LLC, então existe um AP que a reconhece, e (2) que se existe um AP para uma linguagem, então ela é LLC. A prova segue dos dois lemas a seguir, uma para cada direção. Mário S. Alvim (msalvim@dcc.ufmg.br) Linguagens Livres-do-Contexto DCC-UFMG (2018/02) 41 / 70

Equivalência entre LLCs e APs Lema Se uma linguagem é livre-do-contexto, então algum autômato com pilha a reconhece. Prova. A prova completa encontra-se no livro-texto. Aqui estudaremos sua ideia central. Seja L uma LLC. Então sabemos que existe uma GLC G para L. Vamos converter a GLC em um AP P da seguinte forma. 1. Coloque o símbolo marcador $ e a variável inicial de G no topo da pilha. 2. Repita os seguintes passos para sempre. a. Se o topo da pilha é um símbolo de variável A, não-deterministicamente selecione uma das regras para A, desempilhe A e empilhe o lado direito da regra. b. Se o topo da pilha é um símbolo terminal a, leia o próximo símbolo da entrada e compare-o com a. Se eles casam, repita. Se não casam, rejeite nesse ramo do não-determinismo. c. Se o topo da pilha é o símbolo $, entre no estado de aceitação. Fazendo isso, a entrada é aceita somente se ela tiver sido consumida por completo. Mário S. Alvim (msalvim@dcc.ufmg.br) Linguagens Livres-do-Contexto DCC-UFMG (2018/02) 42 / 70

Equivalência entre LLCs e APs Prova. (Continuação) Agora, para implementar P seguindo a ideia acima, fazemos o seguinte: Primeiro, vamos adotar uma abreviação para a possibilidade de uma transição empilhar mais do que um símbolo por vez na pilha. Por fim, o diagrama de estados do AP P que reconhece L é: Mário S. Alvim (msalvim@dcc.ufmg.br) Linguagens Livres-do-Contexto DCC-UFMG (2018/02) 43 / 70

Equivalência entre LLCs e APs Exemplo 15 Use o procedimento desenvolvido no lema anterior para construir um AP P 1 a partir da seguinte GLC G: S at b b T T a ɛ Solução. O seguinte diagrama de estados representa o AP pedido. Mário S. Alvim (msalvim@dcc.ufmg.br) Linguagens Livres-do-Contexto DCC-UFMG (2018/02) 44 / 70

Equivalência entre LLCs e APs Exemplo 15 (Continuação) Como ilustração, considere a cadeia aaabb: Geração da cadeia pela gramática: S at b at ab aab Computação da cadeia pelo AP: Transição Estado Cadeia Pilha 0 q start aab ɛ 2 q loop aab S$ 5 q loop aab at b$ 6 q loop ab T b$ 8 q loop ab T ab$ 9 q loop ab ab$ 10 q loop b b$ 11 q loop ɛ ɛ$ 12 q accept ɛ ɛ Cadeia aceita: AP para em estado final consumindo a cadeia inteira. Mário S. Alvim (msalvim@dcc.ufmg.br) Linguagens Livres-do-Contexto DCC-UFMG (2018/02) 45 / 70

Equivalência entre LLCs e APs Para completar a equivalência entre LLCs e APs, é preciso estabelecer a direção de volta. Lema Se uma linguagem é reconhecida por um autômato com pilha, então ela é livre-do-contexto. Prova. A prova completa encontra-se no livro-texto. Mário S. Alvim (msalvim@dcc.ufmg.br) Linguagens Livres-do-Contexto DCC-UFMG (2018/02) 46 / 70

Relação entre LLCs e linguagens regulares O fato de que GLCs e APs são equivalentes leva ao seguinte resultado que compara as LLCs às linguagens regulares. Corolário Toda linguagem regular é livre-do-contexto. Prova. Se uma linguagem L é regular, então existe um AF M para L. Mas isso garante que exite um AP para L, que se comporta exatamente como M e não usa a pilha para nada. Mas o teorema anterior garante que se existe AP para L, então também existe GLC para L. Logo L é livre-do-contexto. A relação entre linguagens regulares e linguagens livres-do-contexto encontra-se a seguir. Mário S. Alvim (msalvim@dcc.ufmg.br) Linguagens Livres-do-Contexto DCC-UFMG (2018/02) 47 / 70

Linguagens Não-Livres-do-Contexto Mário S. Alvim (msalvim@dcc.ufmg.br) Linguagens Livres-do-Contexto DCC-UFMG (2018/02) 48 / 70

Linguagens Não-Livres-do-Contexto: Introdução Como vimos, os autômatos com pilha são ainda mais poderosos que os autômatos finitos, podendo reconhecer ainda mais linguagens. Porém, APs não conseguem reconhecer todas as linguagens. Ou seja, existem linguagens não-livres-do-contexto, que estão além do poder dos autômatos com pilha e, equivalentemente, além do poder das gramáticas livres-do-contexto. A ideia central da limitação dos autômatos com pilha é, apesar de eles terem uma memória mais geral que os AFs, a pilha permite que os APs se lembrem apenas da última coisa vista. Intuitivamente, qualquer linguagem cujas cadeias precisem que a máquina se lembre de símbolos em ordem arbitrária o suficiente não pode ser uma linguagem livre-do-contexto. Aqui vamos estudar linguagens não-livres-do-contexto, usando a poderosa ferramenta do Lema do bombeamento para linguagens livres-do-contexto. Mário S. Alvim (msalvim@dcc.ufmg.br) Linguagens Livres-do-Contexto DCC-UFMG (2018/02) 49 / 70

Lema do bombeamento para linguagens livres-do-contexto Teorema (Lema do bombeamento para linguagens livres-do-contexto.) Se A é uma linguagem livre do contexto, então existe um número p, chamado de comprimento de bombeamento, tal que, se s é uma cadeia qualquer em A de comprimento pelo menos p, então s pode ser dividida em cinco partes satisfazendo as seguintes condições: 1. para cada i 0, uv i xy i z A, 2. vy > 0, e 3. vxy p. s = uvxyz Prova. A prova completa é dada no livro-texto; aqui veremos sua essência. Seja A uma LLC e suponha que G seja uma GLC que a gere. Temos que mostrar que qualquer cadeia s suficientemente longa (ou seja, de tamanho maior que p) em A pode ser bombeada (Condição (1) do LB) e permanecer em A. Mário S. Alvim (msalvim@dcc.ufmg.br) Linguagens Livres-do-Contexto DCC-UFMG (2018/02) 50 / 70

Lema do bombeamento para linguagens livres-do-contexto Prova. (Continuação) A ideia da prova é simples. Seja s uma cadeia muito longa em A (a definição precisa de muito longa está na prova formal no livro). Então: 1. Como s está em A, s é gerada pela GLC para G e tem, portanto, uma árvore de derivação. 2. Como s é muito longa, sua árvore sintática necessariamente repete pelo menos uma variável no caminho da raiz até uma folha. Por exemplo, na figura seguinte a variável R é repetida na árvore sintática. Mário S. Alvim (msalvim@dcc.ufmg.br) Linguagens Livres-do-Contexto DCC-UFMG (2018/02) 51 / 70

Lema do bombeamento para linguagens livres-do-contexto Prova. (Continuação) 3. Como R foi repetida uma vez na árvore sintática, as regras de G permitem repetir R quanta vezes quisermos (ou seja, quantas repetições de i = 0 até quanto quisermos!) Por exemplo, podemos repetir o uso de R mais uma vez, gerando uv 2 xy 2 z A: Ou podemos eliminar a segunda repetição de R, gerando uv 0 xy 0 z = uvz A: Isso garante que as partes x e y da cadeia s podem ser bombeadas quantas vezes quisermos (Condição (1) do LB). Mário S. Alvim (msalvim@dcc.ufmg.br) Linguagens Livres-do-Contexto DCC-UFMG (2018/02) 52 / 70

Lema do bombeamento para linguagens livres-do-contexto Prova. (Continuação) 5. As Condições (2) e (3) seguem do princípio da casa dos pombos: a) A Condição (2) garante que a recursão na regra R não pode ser uma regra unitária. Em outras palavras, a Condição(2) se combina com a Condição (1) para garantir que a derivação de qualquer cadeia longa o suficiente precisa conter uma chamada recursiva não-trivial. b) A Condição (3), combinada com as demais condições, garante que qualquer substring da cadeia que pode ser derivada sem chamada recursiva tem comprimento no máximo p. Mário S. Alvim (msalvim@dcc.ufmg.br) Linguagens Livres-do-Contexto DCC-UFMG (2018/02) 53 / 70

Lema do bombeamento para linguagens livres-do-contexto: Como usar O uso do Lema do Bombeamento para linguagens livres-do-contexto para mostrar, por contradição, que uma linguagem L não é livre-do-contexto é similar ao que fizemos para linguagens regulares: 1. Assuma que L seja livre-do-contexto. 2. Use o LB para garantir que existe um comprimento p tal que toda cadeia s L com comprimento maior que p possa ser bombeada. 3. Encontre uma cadeia s L com comprimento maior que p que não possa ser bombeada, mostrando que para qualquer divisão de s = uvxyz (possivelmente usando as condições do LB de que vy > 0 e vxy p), existe pelo menos um valor de i tal que uv i xy i z / L. 4. Como você chegou a uma contradição, pois (3) contradiz (2), sua hipótese em (1) era falsa, e L não pode ser uma linguagem livre-do-contexto. Mário S. Alvim (msalvim@dcc.ufmg.br) Linguagens Livres-do-Contexto DCC-UFMG (2018/02) 54 / 70

Observações sobre o uso do Lema do Bombeamento para LLCs O uso do LB para LLCs pode parecer difícil de entender a princípio; as observações abaixo tentam explicar seu uso. Obs. 1 sobre o LB: O LB diz que Se uma linguagem L é livre-do-contexto, então existe uma constante p tal que para toda cadeia s L tal que s p, existe uma divisão da cadeia em s = uvxyz para a qual as Condições (1), (2) e (3) do LB valem. Isto pode ser formalizado em lógica de predicados como: Se uma linguagem L é livre-do-contexto, então p N : s L : [ ( s p) ( div(s) : cond 1 cond 2 cond 3 ) ], (*) onde: div(s) é uma função que divide a cadeia s em uma concatenação uvxyz; cond 1, cond 2 e cond 3 são as Condições (1), (2) e (3) do LB, respectivamente. Mário S. Alvim (msalvim@dcc.ufmg.br) Linguagens Livres-do-Contexto DCC-UFMG (2018/02) 55 / 70

Observações sobre o uso do Lema do Bombeamento para LLCs Obs. 2 sobre o LB: A nossa prova por contradição parte do princípio de que a linguagem L é livre-do-contexto, mas nega a cláusula (*) de conclusão do LB. Relembrando suas aulas de lógica, note que a negação da cláusula (*) é: p N : s L : [ ( s p) ( div(s) : (cond 2 cond 3 ) cond 1 ) ]. Ou seja, nossa prova por contradição 1. assume que L é livre-do-contexto, 2. e demonstra que LB falha para L ao mostrar que para toda constante p, existe uma cadeia s L tal que s p e, para qualquer divisão de s em uvxyz, se as Condições (2) e (3) do LB forem verdadeiras, a Condição (1) tem que necessariamente ser falsa. Como o LB não pode falhar, a única conclusão da nossa prova é que L não pode ser livre-do-contexto! Mário S. Alvim (msalvim@dcc.ufmg.br) Linguagens Livres-do-Contexto DCC-UFMG (2018/02) 56 / 70

Lema do bombeamento para linguagens livres-do-contexto: Exemplos Exemplo 16 Use o lema do bombeamento para mostrar que a linguagem B = {a n b n c n n 0} não é livre-do-contexto. Prova. Vamos provar por contradição. Assuma que B seja LLC, e que, portanto, ela satisfaça o LB para LLCs. Seja p o comprimento de bombeamento. Escolha s como a cadeia a p b p c p B. Como s B e s p, o LB diz que se pode dividir s em cinco partes s = uvxyz, onde para qualquer i 0, uv i xy i z B (Condição (1) do LB), vy > 0 (Condição (2)), e vxy p (Condição (3)). Mostramos que, independentemente de como dividamos s = uvxyz, pelo menos uma das condições do LB é violada. Mário S. Alvim (msalvim@dcc.ufmg.br) Linguagens Livres-do-Contexto DCC-UFMG (2018/02) 57 / 70

Lema do bombeamento para linguagens livres-do-contexto: Exemplos Prova. (Continuação) Como a Condição (3) do LB garante que vxy p, podemos concluir que vxy não pode conter ao mesmo tempo a s, b s e c s, pois na cadeia a p b p c p contém p símbolos seguidos de cada tipo. (Mais precisamente, note que ou a subcadeia vxy não contém a s, ou se ela contém a s então com certeza ela não contém c s, pois vxy p e há p b s entre o último a o primeiro c de s.) A Condição (2) do LB garante que vy > 0, logo a cadeia uv 2 xy 2 z acrescente símbolos novos à cadeia a p b p c p. Porém, uv 2 xy 2 z não pode ter o mesmo número de a s, b s e c s, porque nem todos os tipos de símbolos foram acrescentados em mesmo número à cadeia. Logo Condição (1) do LB é violada, e chegamos a uma contradição. Assim concluímos que a linguagem não pode ser livre-do-contexto. Mário S. Alvim (msalvim@dcc.ufmg.br) Linguagens Livres-do-Contexto DCC-UFMG (2018/02) 58 / 70

Lema do bombeamento para linguagens livres-do-contexto: Exemplos Exemplo 17 Use o lema do bombeamento para mostrar que a linguagem C = {a i b j c k i j k} não é livre-do-contexto. Prova. Vamos provar por contradição. Assuma que C seja LLC e que, portanto, ela satisfaça o LB para LLCs. Seja p o comprimento de bombeamento. Escolha s como a cadeia a p b p c p C. Como s C e s p, o LB diz que se pode dividir s em cinco partes s = uvxyz, onde para qualquer i 0, uv i xy i z C. Nesta prova vamos bombear para baixo, assim como bombear para cima. Mário S. Alvim (msalvim@dcc.ufmg.br) Linguagens Livres-do-Contexto DCC-UFMG (2018/02) 59 / 70

Lema do bombeamento para linguagens livres-do-contexto: Exemplos Prova. (Continuação) Como a Condição (2) do LB garante que v ou y é não-vazia, podemos considerar todas as divisões possíveis de s = uvxyz em apenas dois casos: Caso 1. Quando v ou y contêm mais que um tipo de símbolo cada, uv 2 xy 2 z não contém os símbolos na ordem correta e, portanto, não pertence a C: contradição. Caso 2. Quando tanto v quanto y contêm apenas um tipo de símbolo do alfabeto cada, sabemos que pelo menos um dos tipos de símbolo a, b ou c não vai estar presente nem em v nem em y. Subdividimos, então, este caso em mais três. Caso 2-a. Quando a s não aparecem em v ou y, bombeamos para baixo para obter a cadeia uv 0 xy 0 z = uxz. Esta cadeia contém o mesmo número de a s que a cadeia s, mas contém menos b s ou menos c s. Logo esta cadeia não pertence a C, e chegamos a uma contradição. Mário S. Alvim (msalvim@dcc.ufmg.br) Linguagens Livres-do-Contexto DCC-UFMG (2018/02) 60 / 70

Lema do bombeamento para linguagens livres-do-contexto: Exemplos Prova. (Continuação) Caso 2. (Continuação) Caso 2-b. Quando b s não aparecem em v ou y, então pelo menos um a ou um c vai aparecer em v ou y, pois não pode ocorrer que ambos v e y sejam vazios (Condição (2) do LB). Se a s aparecem em v ou y, a cadeia uv 2 xy 2 z contém mais a s que b s e, portanto, ela não pertence a C. Se c s aparecem em v ou y, a cadeia uv 0 xy 0 z contém mais b s que c s e, portanto, ela não pertence a C. De qualquer forma, temos uma contradição. Caso 2-c. Quando c s não aparecem em v ou y, a cadeia uv 2 xy 2 z contém menos c s que a s ou b s e, portanto, ela não pertence a C, o que é uma contradição. Como um dos casos acima tem que ocorrer, e todos levam a uma contradição, concluímos que a linguagem viola o LB e não pode ser, portanto, livre-do-contexto. Mário S. Alvim (msalvim@dcc.ufmg.br) Linguagens Livres-do-Contexto DCC-UFMG (2018/02) 61 / 70

Lema do bombeamento para linguagens livres-do-contexto: Exemplos Exemplo 18 Use o lema do bombeamento para mostrar que a linguagem D = {ww w {0, 1} } não é livre-do-contexto. Prova. Por contradição. Assuma que seja livre-do-contexto e que, portanto, satisfaça o LB para LLCs. Seja p a constante de bombeamento. Tomemos a cadeia s = 0 p 1 p 0 p 1 p. Ela pertence a D e tem comprimento maior que p, logo o LB diz que se pode dividir s em cinco partes s = uvxyz, onde para qualquer i 0, uv i xy i z D (Condição (1) do LB), vy > 0 (Condição (2)), e vxy p (Condição (3)). Mário S. Alvim (msalvim@dcc.ufmg.br) Linguagens Livres-do-Contexto DCC-UFMG (2018/02) 62 / 70

Lema do bombeamento para linguagens livres-do-contexto: Exemplos Exemplo 18 (Continuação) Primeiro, vamos mostrar que a subcadeia vxy deve necessariamente conter o ponto médio da cadeia s (isto é, vxy contém pelo menos um 1 seguido de pelo menos um 0 no meio de 0 p 1 p 0 p 1 p ). Dividimos a situação em dois casos: Se a subcadeia vxy ocorresse integralmente na primeira metade de s, uv 2 xy 2 z deslocaria um símbolo 1 para a primeira posição da segunda metade de s e, portanto, s não seria da forma ww. Similarmente, se vxy ocorresse integralmente na segunda metade de s, uv 2 xy 2 z deslocaria um símbolo 0 para a última posição da primeira metade da cadeia s, e ela não seria da forma ww. Logo, concluímos que a subcadeia vxy deve conter o ponto médio da cadeia s. Mas neste caso, uv 0 xy 0 z = uxz tem a forma 0 p 1 i 0 j 1 p, onde i p j. Claramente essa cadeia não é da forma ww, e a cadeia s não pode ser bombeada, o que contradiz a Condição (1) do LB. Mário S. Alvim (msalvim@dcc.ufmg.br) Linguagens Livres-do-Contexto DCC-UFMG (2018/02) 63 / 70

Propriedades de Fechamento de Linguagens Livres-do-contexto Mário S. Alvim (msalvim@dcc.ufmg.br) Linguagens Livres-do-Contexto DCC-UFMG (2018/02) 64 / 70

Propriedades de Fechamento de Linguagens Livres-do-contexto Lembre-se de que dizemos que um conjunto A é fechado sob uma operação op se ao aplicarmos a operação op a elementos de A, o resultado é também um elemento de A. Lembre-se também de que vimos que a classe das linguagens regulares é fechada sob as operações de: união, interseção, concatenação, fecho de Kleene, e complemento. Vamos agora verificar se a classe das linguagens livres-do-contexto é fechada sob as mesmas operações. Mário S. Alvim (msalvim@dcc.ufmg.br) Linguagens Livres-do-Contexto DCC-UFMG (2018/02) 65 / 70

Propriedades de Fechamento de Linguagens Livres-do-contexto Teorema A classe das linguagens livres-do-contexto é fechada sob união. Prova. Queremos mostrar que para quaisquer linguagens A e B, se A e B são livres-do-contexto (LLC), então A B é livre-do-contexto. Note que se A e B são LLCs, então existem gramática G A = (V A, Σ A, R A, S A ) para A e gramática G B = (V B, Σ B, R B, S B ) para B tais que V A V B = (se não for, apenas renomeie as variáveis de cada gramática). Podemos construir uma gramática G = (V, Σ, R, S ) para A B onde: V = V A V B, Σ = Σ A Σ B, R = R A R B {S S A S B }, S é uma nova variável de partida tal que S / V A e S / V B. Mário S. Alvim (msalvim@dcc.ufmg.br) Linguagens Livres-do-Contexto DCC-UFMG (2018/02) 66 / 70

Propriedades de Fechamento de Linguagens Livres-do-contexto Teorema A classe das linguagens livres-do-contexto é fechada sob concatenação. Prova. Queremos mostrar que para quaisquer linguagens A e B, se A e B são livres-do-contexto (LLC), então A B é livre-do-contexto. Note que se A e B são LLCs, então existem gramática G A = (V A, Σ A, R A, S A ) para A e gramática G B = (V B, Σ B, R B, S B ) para B tais que V A V B = (se não for, apenas renomeie as variáveis de cada gramática). Podemos construir uma gramática G = (V, Σ, R, S ) para A B onde: V = V A V B, Σ = Σ A Σ B, R = R A R B {S S A S B }, S é uma nova variável de partida tal que S / V A e S / V B. Mário S. Alvim (msalvim@dcc.ufmg.br) Linguagens Livres-do-Contexto DCC-UFMG (2018/02) 67 / 70

Propriedades de Fechamento de Linguagens Livres-do-contexto Teorema A classe das linguagens livres-do-contexto é fechada sob fecho de Kleene. Prova. Queremos mostrar que para qualquer linguagem A, se A é livre-do-contexto (LLC), então A é livre-do-contexto. Note que se A é LLC, então existem uma gramática G A = (V A, Σ A, R A, S A ) para A. Podemos construir uma gramática G = (V, Σ, R, S ) para AA onde: V = V A, Σ = Σ A, R = R A {S S S A ɛ}, S é uma nova variável de partida tal que S / V A. Mário S. Alvim (msalvim@dcc.ufmg.br) Linguagens Livres-do-Contexto DCC-UFMG (2018/02) 68 / 70

Propriedades de Fechamento de Linguagens Livres-do-contexto Teorema A classe das linguagens livres-do-contexto não é fechada sob interseção. Prova. Queremos mostrar que existem duas linguagens A e B tais que ambas são LLCs, mas A C não é LLC. Considere A = {a n b n c m m, n 0} B = {a m b n c n m, n 0}. e Tanto A quanto B são LLCs (construa uma GLC para cada uma!), mas a interseção delas é A B = {a n b n c n n 0}, que em um exemplo anterior já provamos não ser uma LLC. Mário S. Alvim (msalvim@dcc.ufmg.br) Linguagens Livres-do-Contexto DCC-UFMG (2018/02) 69 / 70

Propriedades de Fechamento de Linguagens Livres-do-contexto Teorema A classe das linguagens livres-do-contexto não é fechada sob complementação. Prova. Por contradição. Assuma que a classe das linguagens livres-do-contexto fosse fechada sob complementação. Mas note sabemos que LLCs são fechadas sob união, e sabemos que (por DeMorgan) A B = A B. Logo, se LLCs fossem fechadas sob complementação, elas também seriam fechadas sob interseção, o que é uma contradição ao fato de que já provamos que elas não são. Mário S. Alvim (msalvim@dcc.ufmg.br) Linguagens Livres-do-Contexto DCC-UFMG (2018/02) 70 / 70