You are on page 1of 13

Lista 4

MAC4722 - Linguagens, Autômatos e Computabilidade

Carlos Eduardo Leal de Castro∗

1. Projete uma gramática livre de contexto para cada uma das linguagens a seguir.
Dê a definição formal e argumente porque funciona (não é necessário dar uma de-
monstração formal). Mostre passo a passo uma derivação da palavra dada como
exemplo.
(b) {w ∈ {a, b, c, d}∗ | w = am bn cp dq , m, n, p, q ≥ 0 e m+n = p+q}} Ex: aaabbccccd.

Solução. Vamos construir uma gramática livre de contexto Gb que descreve a


linguagem Lb = {w ∈ {a, b, c, d}∗ | w = am bn cp dq , m, n, p, q ≥ 0 e m + n = p + q}}.
Considere a gramática Gb = (V, Σ, R, S) definida como segue:

– V = {S, A, B, C} é o conjunto das variáveis.


– Σ = {a, b, c, d} é o conjunto dos terminais.
– R é o conjunto de regras definidas por

R = {S → aSd | A | B,
A → aAc | C,
B → bBd | C,
C → bCc | ε}

– S a variável inicial.

Seu funcionamento se dá da seguinte forma: Sejam os números m, n, p, q ∈ N ∪ {0}


quaisquer tais que m + n = p + q e considere a palavra am bn cp dq ∈ Lb . Se m = n =
p = q = 0 podemos formar a palavra vazia fazendo

S⇒A⇒C⇒ε

Aluno de Doutorado - NUSP: 11921804 - E-mail: carlos.castro@ime.usp.br

1
ou
S ⇒ B ⇒ C ⇒ ε.

Podemos, ainda, dividir a geração de palavras em Gb de três maneiras: palavras com


m ≥ q, palavras com m ≤ q ou palavras com m = q.
Para qualquer palavra com m = q, observe que como m + n = p + q, temos que
n = p, e assim, estas podem ser formadas de duas maneiras:

· ⇒ am Sdm} ⇒ am Adm ⇒ am Cdm ⇒


S ⇒ |aSd ⇒ · · {z
m vezes
m m
⇒ a · ⇒ am bn Ccn dm} ⇒ am bn cp dq
| bCcd ⇒ · ·{z
n vezes

S ⇒ aSd
| · ⇒ am Sdm} ⇒ am Bdm ⇒ am Cdm ⇒
⇒ · · {z
m vezes
m m
⇒ a · ⇒ am bn Ccn dm} ⇒ am bn cp dq .
| bCcd ⇒ · ·{z
n vezes

Para qualquer palavra com m ≥ q, observe que como m + n = p + q temos que


m − q ≥ 0 e, ainda, n = p − (m − q) ≥ 0. Assim, estas têm a derivação:

S ⇒ aSd
| · ⇒ aq Sd}q ⇒ aq Adq ⇒
⇒ · ·{z
q vezes
q q q m−q
⇒ |a aAcd ⇒ · · · ⇒
{z a a Acm−q d}q ⇒ am Ccm−q dq ⇒
m − q vezes
⇒ |am bCccm−q dq ⇒ · · · ⇒ a{z
m p−(m−q)
b Ccp−(m−q) cm−q d}q ⇒ am bn cp dq .
n = p − (m − q) vezes

Para qualquer palavra com m ≤ q, observe que como m + n = p + q temos que


q − m ≥ 0 e, ainda, p = n − (q − m) ≥ 0. Assim, estas têm a derivação:

S ⇒ aSd
| · ⇒ am Sdm} ⇒ am Bdm ⇒
⇒ · · {z
m vezes
m m m q−m
⇒ |a bBdd ⇒ · · · ⇒
{z a b Bdq−m dm} ⇒ am bq−m Cdq ⇒
q − m vezes
⇒ |am bq−m bCcdq ⇒ · · · ⇒ a{z
m q−m n−(q−m)
b b Ccn−(q−m) d}q ⇒ am bn cp dq .
n − (q − m) vezes

2

Para obtermos S ⇒
= aaabbccccd:

S ⇒ aSd ⇒ aAd ⇒ aaAcd ⇒ aaaAccd ⇒ aaaCccd ⇒


⇒ aaabCcccd ⇒ aaabbCccccd ⇒ aaabbccccd.


2. Projete um autômato com pilha não-determinı́stico para cada umas das linguagens
do exercı́cio anterior. Dê a definição formal, o diagrama e argumente porque ele
funciona (não é necessário dar uma demonstração formal). Mostre passo a passo a
computação da palavra dada como exemplo.
(b) {w ∈ {a, b, c, d}∗ | w = am bn cp dq , m, n, p, q ≥ 0 e m+n = p+q}} Ex: aaabbccccd.

Solução.
Considere o autômato Mb = (Qb , Σb , Γb , δb , q0 , {q0 , qf }) o autômato finito com pilha
não-determinı́stico onde Qb = {q0 , qa , qb , qc , qf }, Σb = {a, b, c, d} Γ = {$, A} e δb :
Qb × Σb ∪ {ε} × Γb ∪ {ε} −→ P(Qb × Γb ∪ {ε}) é a função de transição cujas transições
não vazias são dadas por

δb (q0 , ε, ε) = {(qa , $)}


δb (qa , a, ε) = {(qa , A)}
δb (qa , ε, ε) = {(qb , ε)}
δb (qb , b, ε) = {(qb , A)}
δb (qb , ε, ε) = {(qc , ε)}
δb (qc , c, A) = {(qc , ε)}
δb (qc , ε, ε) = {(qd , ε)}
δb (qd , d, A) = {(qd , ε)}
δb (qd , ε, $) = {(qf , ε)}.

q0 ∈ Qb é o estado inicial e o conjunto {q0 , qf } ⊂ Qb são os estados finais. A figura


1 representa o diagrama de estados de Mb .
Seu funcionamento se dá da seguinte forma: Como as palavras da linguagem são da
forma am bn cp dq com m + n = p + q, adicionou-se como estado final o estado q0 para
a possibilidade de m + n = p + q = 0. Se m + n = p + q 6= 0, o autômato inicializa
a pilha adicionando um $ no topo da pilha, saindo do estado inicial q0 ao estado qa .
A partir daı́, se ele está no estado qa e para cada a ∈ Σb lido, a função de transição
empilha um A na pilha. Se ele está no estado qb e para cada b ∈ Σb lido, a função de

3
Figura 1: Autômato a pilha não-determinı́stico da linguagem {w ∈ {a, b, c, d}∗ | w =
am bn cp dq , m, n, p, q ≥ 0 e m + n = p + q}}.

transição empilha um A na pilha. A partir do momento que a função de transição


está no estado qc e para cada c ∈ Σb lido, a função de transição desempilha um A
na pilha. Quando a função está em qd e para cada d ∈ Σb lido, a função desempilha
um A. Se ao final do processamento da palavra, não tiver mais nenhum A na pilha,
a função de transição desempilha $ da pilha, levando para o estado final qf . As
transições dos estados qa para qb , qb para qc e qc para qd são feitas através de uma
transição por ε.
Pela definição de computação, o autômato aceita a palavra w se w pode ser escrita
como w = w1 · · · wm , wj ∈ Σb ∪ {ε} e as sequências de estados r0 · · · rm ∈ Qb e
cadeias s0 · · · sm ∈ Γ∗b existem, em que cada sj representa uma sequência do conteúdo
da pilha, em que r0 = q0 , s0 = ε, rm ∈ {q0 , qf } e para j = 0, · · · m − 1, temos
(rj+1 , b) ∈ δb (rj , wj+1 , a), onde sj = at e sj+1 = bt, para algum a, b ∈ Γb ∪ {ε} e
t ∈ Γ∗b .
Assim, computação da palavra w = aaabbccccd se dá, a partir do estado inicial

4
r0 = q0 , iniciando com a pilha vazia s0 = ε, e fazendo w = εaaaεbbεccccεdε obtemos
a seguinte sequência:

j rj wj stack pop rj rj+1 w1 · · · wj s0 · · · sj+1


— — — — — — — ε
0 q0 ε $ — q0 q a ε ε$
1 qa a A — qa q a εa ε$A
2 qa a A — qa q a εaa ε$AA
3 qa a A — qa q a εaaa ε$AAA
4 qa ε ε — qa qb εaaaε ε$AAA
5 qb b A — qb qb εaaaεb ε$AAAA
6 qb b A — qb qb εaaaεbb ε$AAAAA
7 qb ε ε — qb qc εaaaεbbε ε$AAAAA
8 qc c — A qc q c εaaaεbbεc ε$AAAA
9 qc c — A qc q c εaaaεbbεcc ε$AAA
10 qc c — A qc q c εaaaεbbεccc ε$AA
11 qc c — A qc q c εaaaεbbεcccc ε$A
12 qc ε ε — q c qd εaaaεbbεccccε ε$A
13 qd d — A qd q d εaaaεbbεccccεd ε$
14 qd ε — $ qd qf εaaaεbbεccccεd ε

Em termos de aplicação da função de transição, a tabela acima traduz-se em:





 PILHA (inicial: s = ε)




 δb (q0 , ε, ε) = {(qa , $)} s=$




 δb (qa , a, ε) = {(qa , A)} s = A$




 δb (qa , a, ε) = {(qa , A)} s = AA$




 δb (qa , a, ε) = {(qa , A)} s = AAA$




 δb (qa , ε, ε) = {(qb , ε)} s = AAA$




 δb (qb , b, ε) = {(qb , A)} s = AAAA$

 δb (qb , b, ε) = {(qb , A)} s = AAAAA$


 δb (qb , ε, ε) = {(qc , ε)} s = AAAAA$




 δb (qc , c, A) = {(qc , ε)} s = AAAA$




 δb (qc , c, A) = {(qc , ε)} s = AAA$




 δb (qc , c, A) = {(qc , ε)} s = AA$




 δb (qc , c, A) = {(qc , ε)} s = A$




 δb (qc , ε, ε) = {(qd , ε)} s = A$




 δb (qd , d, A) = {(qd , ε)} s=$

 δb (qd , ε, $) = {(qf , ε)} s = ε.

5


(c) A linguagem no alfabeto {(, )} formada por todas as palavras balanceadas e


corretamente encaixadas. Ex: ((()())()).

Solução. Considere o autômato Mc = (Qc , Σc , Γc , δc , q0 , {q0 , qf }) o autômato finito


com pilha não-determinı́stico onde Qc = {q0 , q, qf }, Σc = {(, )}, Γc = {$, ζ} e
δc : Qc × Σc ∪ {ε} × Γc ∪ {ε} −→ P(Qc × Γc ∪ {ε}) é a função de transição cujas
transições não vazias são dadas por

δc (q0 , ε, ε) = {(q, $)}


δc (q, (, ε) = {(q, ζ)}
δc (q, ), ζ) = {(q, ε)}
δc (q, ε, $) = {(qf , ε)}

q0 ∈ Qc é o estado inicial e o conjunto {q0 , qf } ⊂ Qc são os estados finais. A figura


2 representa o diagrama de estados de Mc .

Figura 2: Autômato a pilha não-determinı́stico da linguagem definida no alfabeto {(, )}


formada por todas as palavras balanceadas e corretamente encaixadas. Ex: ((()())())..

Seu funcionamento se dá da seguinte forma: Para a palavra vazia, o autômato a


aceita pois o estado inicial q0 também pertence ao conjunto de estados finais. Para
uma palavra de Σ∗c não vazia autômato inicializa a pilha adicionando um $ no topo
da pilha, saindo do estado inicial q0 ao estado q. A partir daı́, se ele está no estado
q e para cada (∈ Σc lido, a função de transição empilha um ζ na pilha e para cada
) ∈ Σc lido, a função de transição desempilha o ζ do topo da pilha. Se ao final do
processamento da palavra, não tiver mais nenhum ζ na pilha, a função de transição
desempilha $ da pilha, levando para o estado final qf .

6
Pela definição de computação, o autômato aceita a palavra w se w pode ser escrita
como w = w1 · · · wm , wj ∈ Σc ∪ {ε} e as sequências de estados r0 · · · rm ∈ Qc e
cadeias s0 · · · sm ∈ Γ∗c existem, em que cada sj representa uma sequência do conteúdo
da pilha, em que r0 = q0 , s0 = ε, rm ∈ {q0 , qf } e para j = 0, · · · m − 1, temos
(rj+1 , b) ∈ δc (rj , wj+1 , a), onde sj = at e sj+1 = bt, para algum a, b ∈ Γc ∪ {ε} e
t ∈ Γ∗c .
Assim, computação da palavra w = ((()())()) se dá, a partir do estado inicial r0 = q0 ,
iniciando com a pilha vazia s0 = ε, e fazendo w = ε((()())())ε obtemos a seguinte
sequência:

j rj wj stack pop rj rj+1 w1 · · · wj s0 · · · sj+1


— — — — — — — ε
0 q ε $ — q0 q ε ε$
1 q ( ζ — qq ε( ε$ζ
2 q ( ζ — qq ε(( ε$ζζ
3 q ( ζ — qq ε((( ε$ζζζ
4 q ) — ζ qq ε((() ε$ζζ
5 q ( ζ — qq ε((()( ε$ζζζ
6 q ) — ζ qq ε((()() ε$ζζ
7 q ) — ζ qq ε((()()) ε$ζ
8 q ( ζ — qq ε((()())( ε$ζζ
9 q ) — ζ qq ε((()())() ε$ζ
10 q ) — ζ qq ε((()())()) ε$
11 q ε — $ qqf ε((()())())ε ε

Em termos de aplicação da função de transição, a tabela acima traduz-se em:

7


 PILHA (inicial: s = ε)

δc (q0 , ε, ε) = {(q, $)} s=$





δc (q, (, ε) = {(q, ζ)} s = ζ$





δc (q, (, ε) = {(q, ζ)} s = ζζ$





δc (q, (, ε) = {(q, ζ)} s = ζζζ$





δc (q, ), ζ) = {(q, ε)} s = ζζ$




δc (q, (, ε) = {(q, ζ)} s = ζζζ$

δc (q, ), ζ) = {(q, ε)} s = ζζ$





δc (q, ), ζ) = {(q, ε)} s = ζ$





δc (q, (, ε) = {(q, ζ)} s = ζζ$





δc (q, ), ζ) = {(q, ε)} s = ζ$





δc (q, ), ζ) = {(q, ε)} s=$





δc (q, ε, $) = {(qf , ε)} s = ε.


3. (a) Coloque a seguinte gramática na Forma Normal de Chomsky usando o procedimento
do Teorema 2.9. G = ({S}, {0, 1}, S → 0S11 | ε, S).

Solução. Colocaremos a gramática G = ({S}, {0, 1}, S → 0S11 | ε, S) na Forma


Normal de Chomsky. Pelo Teorema 2.9 (SIPSER, 2005), para transformar uma
gramática na Forma Normal de Chomsky, precisamos seguir os seguintes passos:
1) Adicionamos uma nova variável inicial; 2) Removemos todas as ε-regra que não
são derivadas da variável inicial e adicionamos uma nova regra para cada ε-regra
apagada, nas possı́veis ocorrências de ε; 3) Removemos as regras unitárias e adicio-
namos uma nova regra para cada regra apagada; e 4) Adicionamos novas regras para
a forma apropriada.
Assim, seguindo esses passos para G = ({S}, {0, 1}, S → 0S11 | ε, S), obtemos:

1. Adicionamos uma nova variável inicial S0

S0 → S
S → 0S11 | ε

2. Removemos a ε-regra

8
S0 → S | ε
S → 0S11 | 011

3. Removemos a regra unitária S0 → S

S0 → 0S11 | 011 | ε
S → 0S11 | 011

4. Adicionamos novas regras A, B, C, D

S0 → CA | CB | ε
S → CA | CB
A → SB
B → DD
C → 0
D → 1

Formando, então, a gramática G = ({S0 , S, A, B, C, D}, {0, 1}, RG , S0 ) onde RG é o


conjunto de regras definidas por

RG = {S0 → CA | CB | ε,
S → CA,
A → SB,
B → DD,
C → 0,
D → 1}.


(c) Produza uma gramática equivalente ao seguinte autômato com pilha não-determinı́stico
M usando o procedimento do Lema 2.27. Descreva explicitamente todas as regras
de derivação do tipo “Apq → aArs b”, mas não é preciso descrever explicitamente
as regras do tipo “Apq → Apr Arq ” e “App → ε”, apenas mencione sua existência.
Mostre passo a passo a derivação da palavra 011 nessa gramática.
Dica: Não se esqueça de conferir se o autômato possui as propriedades supostas no
inı́cio da demonstração do lema.
M = (Q, {0, 1}, Γ, δ, a, {e}) o autômato finito com pilha não-determinı́stico onde
Q = {a, b, c, d, e}, Γ = {$, A} e δ : Q×Σε ×Γε −→ P(Q×Γε ) é a função de transição

9
cujas transições não vazias são dadas por δ(a, ε, ε) = {(b, $)}, δ(b, 0, ε) = {(b, A)},
δ(b, ε, ε) = {(c, ε)}, δ(c, 1, A) = {(d, ε)}, δ(d, 1, ε) = {(c, ε)} e δ(c, ε, $) = {(e, ε)}.

Solução. Vamos utilizar o procedimento do Lema 2.27 (SIPSER, 2005) para pro-
duzir uma gramática equivalente ao autômato M . Primeiramente, observe que o
autômato tem um único estado de aceitação {e}, o sı́mbolo desempilhado no final é
o sı́mbolo que foi empilhado no inı́cio, ou seja, o autômato esvazia sua pilha antes
de aceitar, mas precisamos mudar o autômato para que se adéque à terceira carac-
terı́stica descrita no inı́cio da ideia de prova do Lema, isto é, substituiremos cada
transição que nem empilha nem desempilha por uma sequência de duas transições
que empilha e depois desempilha um sı́mbolo de pilha arbitrário. A modificação que
faremos será como ilustra o diagrama abaixo.

Considere M 0 = (Q0 , {0, 1}, Γ0 , δ 0 , a, {e}) o autômato finito com pilha não-determinı́stico
onde Q0 = {a, b, b0 , c, d, d0 , e}, Γ0 = {$, A, B, D} e δ 0 : Q × Σε × Γ0ε −→ P(Q × Γ0ε ) é
a função de transição cujas transições não vazias são dadas por δ 0 (a, ε, ε) = {(b, $)},

10
δ 0 (b, 0, ε) = {(b, A)}, δ 0 (b, ε, ε) = {(b0 , B)}, δ 0 (b0 , ε, B) = {(c, ε)}, δ 0 (c, 1, A) =
{(d, ε)}, δ 0 (d, 1, ε) = {(d0 , D)}, δ 0 (d0 , ε, D) = {(c, ε)}, δ 0 (c, ε, $) = {(e, ε)}.
Agora, o procedimento descrito no Lema 2.27 pode ser realizado.
Portanto, considere a gramática Gc . As variáveis de Gc são

Vc = {Aaa , Aab , Aab0 , Aac , Aad , Aad0 , Aae ,


Aba , Abb , Abb0 , Abc , Abd , Abd0 , Abe ,
Ab0 a , Ab0 b , Ab0 b0 , Ab0 c , Ab0 d , Ab0 d0 , Ab0 e ,
Aca , Acb , Acb0 , Acc , Acd , Acd0 , Ace ,
Ada , Adb , Adb0 , Adc , Add , Add0 , Ade ,
Ad0 a , Ad0 b , Ad0 b0 , Ad0 c , Ad0 d , Ad0 d0 , Ad0 e ,
Aea , Aeb , Aeb0 , Aec , Aed , Aed0 , Aee }.

Como {a} e {e} são os estados inicial e final, respectivamente, consideramos a


variável inicial de Gc como sendo Aae .
Descreveremos, então, as regras de Gc :

– Pelo Lema, para cada p, q, r, s ∈ Q, t ∈ Γ e a, b ∈ Σε , se tivermos δ(p, a, ε)


contendo (r, t) [i] e δ(s, b, t) contendo (q, ε) [ii], adicionamos a regra Apq →
aArs b.
Note que as únicas transições não vazias com a caracterı́stica [i] são

δ 0 (a, ε, ε) = {(b, $)},

δ 0 (b, 0, ε) = {(b, A)},

δ 0 (b, ε, ε) = {(b0 , B)},

δ 0 (d, 1, ε) = {(d0 , D)},

e as transições não vazias com a caracterı́stica [ii] são

δ 0 (b0 , ε, B) = {(c, ε)},

δ 0 (c, ε, $) = {(e, ε)},

δ 0 (c, 1, A) = {(d, ε)},

δ 0 (d0 , ε, D) = {(c, ε)}.

11
Assim, adicionamos as regras

Aae → εAbc ε,

Abc → εAb0 b0 ε

Abd → 0Abc 1

Adc → 1Ad0 d0 ε.

– Para cada p, q, r ∈ Q, ponha a regra Apq → Apr Arq . Assim, temos as regras

Aaa → Aaa Aaa | Aab Aba | Aab0 Ab0 a | Aac Aca | Aad Ada | Aad0 Ad0 a | Aae Aea

Aba → Aba Aaa | Abb Aba | Abb0 Ab0 a | Abc Aca | Abd Ada | Abd0 Ad0 a | Abe Aea

Ab0 a → Ab0 a Aaa | Ab0 b Aba | Ab0 b0 Ab0 a | Ab0 c Aca | Ab0 d Ada | Ab0 d0 Ad0 a | Ab0 e Aea

Aca → Aca Aaa | Acb Aba | Acb0 Ab0 a | Acc Aca | Acd Ada | Acd0 Ad0 a | Ace Aea

Ada → Ada Aaa | Adb Aba | Adb0 Ab0 a | Adc Aca | Add Ada | Add0 Ad0 a | Ade Aea

Ad0 a → Ad0 a Aaa | Ad0 b Aba | Ad0 b0 Ab0 a | Ad0 c Aca | Ad0 d Ada | Ad0 d0 Ad0 a | Ad0 e Aea

Aea → Aea Aaa | Aeb Aba | Aeb0 Ab0 a | Aec Aca | Aed Ada | Aed0 Ad0 a | Aee Aea
..
.

Aae → Aaa Aae | Aab Abe | Aab0 Ab0 e | Aac Ace | Aad Ade | Aad0 Ad0 e | Aae Aee

Abe → Aba Aae | Abb Abe | Abb0 Ab0 e | Abc Ace | Abd Ade | Abd0 Ad0 e | Abe Aee

Ab0 e → Ab0 a Aae | Ab0 b Abe | Ab0 b0 Ab0 e | Ab0 c Ace | Ab0 d Ade | Ab0 d0 Ad0 e | Ab0 e Aee

Ace → Aca Aae | Acb Abe | Acb0 Ab0 e | Acc Ace | Acd Ade | Acd0 Ad0 e | Ace Aee

Ade → Ada Aae | Adb Abe | Adb0 Ab0 e | Adc Ace | Add Ade | Add0 Ad0 e | Ade Aee

Ad0 e → Ad0 a Aae | Ad0 b Abe | Ad0 b0 Ab0 e | Ad0 c Ace | Ad0 d Ade | Ad0 d0 Ad0 e | Ad0 e Aee

Aee → Aea Aae | Aeb Abe | Aeb0 Ab0 e | Aec Ace | Aed Ade | Aed0 Ad0 e | Aee Aee

– Para cada p ∈ Q, adicione a regra Ap p = ε. Assim, temos as regras

Aaa → ε, Abb → ε, Ab0 b0 → ε, Acc → ε, Add → ε, Ad0 d0 → ε e Aee → ε.

12
Obtemos, assim, a gramática Gc = (Vc , {0, 1}, Rc , Aae ), cujo conjunto de variáveis
Vc e o conjunto das regras Rc estão definidos como descrito anteriormente.

Para obtermos Aae ⇒
= 011:

Aae ⇒ εAbc ε ⇒ εAbd Adc ε ⇒ ε0Abc 1Adc ε ⇒


⇒ ε0Abc 11Ad0 d0 εε ⇒ ε0εAb0 b0 ε11Ad0 d0 εε ⇒
⇒ ε0εεε11εεε ⇒ 011.

13

You might also like