Grátis
271 pág.

Denunciar
5 de 5 estrelas









3 avaliações
Enviado por
Giovanni Pereira
5 de 5 estrelas









3 avaliações
Enviado por
Giovanni Pereira
Pré-visualização | Página 5 de 49
EXEMPLO 2.14. Para começar determinaremos uma expressão regular no al- fabeto {0, 1, . . . , 9} que denote os inteiros positivos no sistema decimal. À pri- meira vista pode parecer que a expressão seja simplesmente (0 ∪ 1 ∪ · · · ∪ 9)∗. O problema é que isto inclui palavras como 00000, que não correspondem a um número formado de maneira correta. A solução é não permitir que as palavras comecem com o símbolo 0, tomando (1 ∪ · · · ∪ 9)(0 ∪ 1 ∪ · · · ∪ 9)∗. EXEMPLO 2.15. Já a expressão que denota os inteiros não negativos é 0 ∪ (1 ∪ · · · ∪ 9)(0 ∪ 1 ∪ · · · ∪ 9)∗. 3. EXERCÍCIOS 25 EXEMPLO 2.16. Finalmente, suponhamos que uma certa linguagem de pro- gramação tem por variáveis todas as palavras nos símbolos 0, 1, . . . , 9, A,B,C, . . . , Z que não começam por um número inteiro. A expressão regular que denota as variáveis nesta linguagem de programação é (A ∪B ∪ · · · ∪ Z)(A ∪B ∪ · · · ∪ Z ∪ 0 ∪ 1 ∪ · · · ∪ 9)∗. 3. Exercícios (1) Seja Σ = {0, 1}. Se L1 = {0} e L2 = {1}∗, determine: a) L1 ∪ L2 e L1 ∩ L2; b) L∗1 e L∗2; c) (L1 ∪ L2)∗; d) L∗1 ∩ L2; e) L1; f) L2 ∩ L∗1. (2) Se L é uma linguagem em um alfabeto Σ então LR = {wR : w ∈ L}. Se L = {0} · {1}∗ calcule LR. (3) Seja L uma linguagem no alfabeto Σ. Considerando que L∗ = {ε} ∪ L ∪ L.L ∪ L.L.L ∪ . . . e L+ = L ∪ L.L ∪ L.L.L ∪ . . . , o que podemos concluir a respeito de L se L+ = L∗ \ {ε}? (4) Sejam Σ1 e Σ2 dois alfabetos e seja φ : Σ1 → Σ∗2 uma aplicação. Se L é uma linguagem no alfabeto Σ1, mostre que φ(L∗) = φ(L)∗. (5) Descreva em português o conjunto denotado por cada uma das expressões regulares abaixo: a) 1∗0; b) 1∗0(0)∗ c) 111 ∪ 001; d) (1 ∪ 00)∗; 26 2. EXPRESSÕES REGULARES e) (0(0)∗1)∗; f) (0 ∪ 1)(0 ∪ 1)∗00; (6) Expresse cada uma das seguintes linguagens no alfabeto {0, 1} usando uma expressão regular: a) o conjunto das palavras de um ou mais zeros seguidos de um 1; b) o conjunto das palavras de dois ou mais símbolos seguidos por três ou mais zeros; c) o conjunto das palavras que contêm uma sequência de 1s, de modo que o número de 1s na sequência é congruente a 2 módulo 3, seguido de um número par de zeros. (7) Se r e s são expressões regulares, vamos escrever r ≡ s se e somente se L(r) = L(s). Supondo que r, s e t são expressões regulares, mostre que: a) (r ∪ r) ≡ r; b) ((r · s) ∪ (r · t)) ≡ (r · (s ∪ t)); c) ((s · r) ∪ (t · r)) ≡ ((s ∪ t) · r); d) (r∗ · r∗) ≡ r∗; e) (r · r∗) ≡ (r∗ · r); f) r∗∗ ≡ r∗; g) (ε ∪ (r · r∗)) ≡ r∗; h) ((r · s)∗ · r) ≡ (r · (s · r)∗); i) (r ∪ s)∗ ≡ (r∗ · s∗)∗ ≡ (r∗ ∪ s∗)∗. (8) Usando as identidades do exercício anterior, prove que ((abb)∗(ba)∗(b ∪ aa)) ≡ (abb)∗((ε ∪ (b(ab)∗a))b ∪ (ba)∗(aa)). Observe que alguns parênteses e o símbolo “·” foram omitidos para faci- litar a leitura. CAPíTULO 3 Relação entre AFD’s e Expressões Regulares Conforme já vimos, uma linguagem regular é uma linguagem que é aceita por algum AFD. No capítulo anterior, estudamos as expressões regulares, uma forma uniforme e compacta de descrever algumas linguagens. Neste capítulo, vamos mostrar que toda linguagem regular pode ser denotada por uma expressão regu- lar (de forma que o nome “expressão regular” é realmente apropriado). Para isso, vamos mostrar que, para todo AFD A, podemos construir uma expressão regular r tal que L(A) = L(r) e que podemos fazer isto através de um método algorít- mico. Na verdade, existe mais de um algoritmo capaz de calcular r, mas um que é bastante simples e intuitivo é o algoritmo de substituição desenvolvido por John Brzozowski. 1. Introdução Desejamos obter um algoritmo que, dado um autômato finito M, determine a linguagem L(M) que ele aceita. O algoritmo é recursivo, e para poder descrevê-lo começamos por generalizar a noção de linguagem aceita por um autômato. Seja M um autômato finito definido pelos ingredientes (Σ, Q, q1, F, δ). Para cada q ∈ Q definimos Lq como sendo a linguagem Lq = {w ∈ Σ ∗ : (q, w) ⊢∗ (f, ε) onde f ∈ F}. Em outras palavras, Lq é formada pelas palavras que levam o autômato do estado q a algum estado final. Quando os estados do autômato forem numerados como q1, . . . , qn, escrevermos Li em vez de Lqi para simplificar a notação. Portanto, se q1 é o estado inicial de M, então Lq1 = L1 = L(M). 27 28 3. RELAÇÃO ENTRE AFD’S E EXPRESSÕES REGULARES Sejam p e q estados de M, e digamos que δ(p, σ) = q. Esta transição estabe- lece uma relação entre as linguagens Lp e Lq. De fato, temos que (p, σ) ⊢ (q, ε) ao passo que, se w ∈ Lq, então (q, w) ⊢∗ (f, ε). Combinado estas duas computações obtemos (p, σw) ⊢ (q, w) ⊢∗ (f, ε). Portanto, {σ}Lq ⊆ Lp. Mais uma vez, com a finalidade de não sobrecarregar a notação, eliminaremos as chaves, escrevendo simplesmente σLq ⊆ Lp. A não ser que o alfabeto Σ tenha apenas um símbolo, não há a menor chance de que σLq ⊆ Lp seja uma igualdade. Isto porque teremos uma inclusão como esta para cada σ ∈ Σ. Portanto, se Σ = {σ1, . . . , σn} e se δ(p, σi) = qi, então n⋃ i=1 σiLqi ⊆ Lp. Desta vez, porém, a inclusão é, de fato, uma igualdade, desde que p não seja um estado final do autômato! Para ver isto suponhamos que u ∈ Lp. Podemos isolar o primeiro símbolo de u, escrevendo u = σiw, para algum σi ∈ Σ. Mas, pela definição de Lp, (p, u) = (p, σiw) ⊢ ∗ (f, ε), para algum f ∈ F . Por outro lado, como δ(p, σi) = qi, temos que (p, σi) ⊢ (qi, ε). Combinando estas duas computações, temos que (p, u) = (p, σiw) ⊢ (qi, w) ⊢ ∗ (f, ε), de onde segue que w ∈ Lqi . Precisamos ainda analisar o que acontece quando p é um estado final do autô- mato. Considerando em detalhe o argumento do parágrafo acima, vemos que as- sumimos implicitamente que u 6= ε, já que estamos explicitando o seu primeiro símbolo. Entretanto, se p for um estado final, teremos, além disso, que ε ∈ Lp. 1. INTRODUÇÃO 29 Resumindo, provamos que, se Σ = {σ1, . . . , σn}, e se δ(p, σi) = qi, então Lp = ⋃n i=1 σiLqi se p /∈ F⋃n i=1 σiLqi ∪ {ε} se p ∈ F O algoritmo que desejamos segue diretamente desta equação, como mostra o seguinte exemplo. EXEMPLO 3.1. Considere o autômato finito determinístico M com alfabeto é {0, 1} e cujo grafo é I // WVUTPQRSq1 0 // 1 �� WVUTPQRSq2 1 // 0 ~~⑥⑥ ⑥⑥ ⑥⑥ WVUTPQRSONMLHIJKq3 0,1vv♥♥♥ ♥♥♥ ♥♥♥ ♥♥♥ ♥ WVUTPQRSq4 0,1 \\ Deste grafo extraímos as seguintes equações L1 = 0L2 ∪ 1L4 L2 = 1L3 ∪ 0L4 L3 = 0L4 ∪ 1L4 ∪ {ε} (já que q3 é estado final) L4 = 0L4 ∪ 1L4. Observe que q4 é um estado morto, de modo que nada escapa de q4. Em particular, nenhuma palavra leva o autômato de q4 a um estado final. Portanto, L4 = ∅. Isto simplifica drasticamente as equações anteriores, que passam a ser L1 = 0L2 L2 = 1L3 L3 = {ε} L4 = ∅. 30 3. RELAÇÃO ENTRE AFD’S E EXPRESSÕES REGULARES Podemos agora resolver este sistema de equações por mera substituição. Assim, substituindo a terceira equação na segunda, obtemos L2 = 1L3 = 1{ε} = {1}. Finalmente, substituindo esta última equação na primeira, obtemos L1 = 0L2 = 0{1} = {01}. Como L1 = L(M), obtivemos uma descrição da linguagem aceita por M. Como seria de esperar, as coisas nem sempre são tão diretas. Afinal, o autô- mato deste exemplo tinha um comportamento muito simples. Vejamos o que acon- tece em um exemplo menos elementar. EXEMPLO 3.2. Seja N o autômato finito determinístico de alfabeto {0, 1} e grafo I // WVUTPQRSq1 0,1 ,, WVUTPQRSONMLHIJKq2 0,1 ll As equações correspondentes a L1 e L2 são: L1 = 0L2 ∪ 1L2 L2 = 0L1 ∪ 1L1 ∪ {ε} (já que q2 é estado final) Continuando a denotar {0} e {1} por 0 e 1, podemos re-escrever estas equações como L1 = (0 ∪ 1)L2 L2 = (0 ∪ 1)L1 ∪ {ε}. À primeira vista, tudo o que temos que fazer para resolver este sistema é substituir a segunda equação na primeira. Contudo, ao fazer isto obtemos