Você está na página 1de 4

Nome: Rogério Marcos Fernandes Neto NUSP: 10284632

Curso: Bacharelado em Ciência da Computação


MAC0414 - Autômatos, Computabilidade e Complexidade

LISTA 1

21. Seja Σ = {a, b}. Então a linguagem L descrita por

{x : |x|a = |x|b } + (a + b)∗ (aa + bb)(a + b)∗

é regular e pode ser descrita pela seguinte expressão regular:

(ab)∗ + (ba)∗ + (a + b)∗ (aa + bb)(a + b)∗

Isso é, temos que L = L ((ab)∗ + (ba)∗ + (a + b)∗ (aa + bb)(a + b)∗ ).

Prova. Sejam L1 = {x : |x|a = |x|b }, L2 = L ((a + b)∗ (aa + bb)(a + b)∗ ), L3 = L ((ab)∗ + (ba)∗ )
e, por fim, L0 = L ((ab)∗ + (ba)∗ + (a + b)∗ (aa + bb)(a + b)∗ ). Iremos provar que L0 = L.
Agora sim, seja x uma palavra qualquer de L, então temos que x ∈ L1 ou x1 ∈ L2 .

• Suponha que x ∈ L1 . Se existe um ı́ndice i com 1 ≤ i < |x| para o qual xi = xi+1 , então
temos que x ∈ L2 e, portanto x ∈ L0 . De fato, se existe um ı́ndice i com 1 ≤ i < |x| para o
qual xi = xi+1 , então x pode ser escrito como zyw, onde y ∈ {aa, bb}, e portanto, x ∈ L1
Por outro lado, se não existe tal ı́ndice então todas as letras de x se alternam e como
|x|a = |x|b , temos que x ∈ L3 e portanto, x ∈ L0 .

• Suponha que x ∈ L2 . Nesse caso, é direto que x ∈ L0 .

Portanto, temos que L ⊆ L0 .


Seja y uma palavra qualquer de L0 , então temos que y ∈ L2 ou y ∈ L3 .

• Suponha que y ∈ L2 . Nesse caso, é direto que y ∈ L.

• Suponha que y ∈ L3 . Então é fácil de ver que |y|a = |y|b e portanto y ∈ L1 .

Portanto, temos que L0 ⊆ L.


Mas se L0 ⊆ L e L ⊆ L0 , então L0 = L, o que conclui a prova.
22. a) Iremos definir cada um dos alementos de A = {K, Σ δ, s, F }. Σ é o mesmo deifnido no
enunciado. Como devemos decidir se [x]k ≡ i mod n, é uma boa escolha tomar os estados como
K = {0, 1, . . . , n − 1}, onde s = 0 e F = {i}. Por fim, basta tomar δ(q, σ) = (kq + σ) mod n
que dessa forma teremos que δ(0, x) = [x]k mod n. Segue a prova sobre a afirmação sobre δ:

Prova. Faremos indução no tamanho m da palavra x. Suponha m = 0, nesse caso, temos x = λ


e
δ(0, λ) = 0 mod n

o que é verdade.
Suponha agora que m > 1 a afirmação vale para qualquer palavra com tamanho até m − 1.
Nesse caso, podemos escrever x = yσ, onde |y| = m − 1. Então

δ(0, x) = δ(0, yσ)


= δ(δ(0, y), σ)
= k[y]k mod n + σ
= (k[y]k + σ) mod n
= [yσ]k mod n
= [x]k mod n

Portanto, só serão reconhecidas as palavras em que δ(0, x) = i mod n, o que está correto.

b) Assim como no item anterior iremos definir cada elemento de A = {K, Σ δ, s, F } que
descreve essa linguagem. Σ é o mesmo deifnido no enunciado. Diferentemente do item anterior,
queremos calcular
Xn
( k i xi ) mod n
i=0

Assim, um bom candidato ao conjunto de estados é K = {0, 1, . . . , n−1}×{0, 1, . . . , n−1}, onde a


primeira componente armazena ( m i
P
i=0 k xi ) mod n e a segunda armazena a próxima potência de
k, ou seja, k m mod n, onde m = |x| − 1 em ambos os casos. Com isso, devemos tomar s = (0, 1)
e F = {(j, k) ∈ K : j = i}. Por fim, basta definir δ((p, q), σ) = ((p + qσ) mod n, kq mod n).
Dessa forma, temos que δ((0, 1), x) = (( m i m+1 mod n). Uma prova desse fato
P
i=0 k xi ) mod n, k
segue:

Prova. Faremos indução no tamanho m da palavra x. Suponha que m = 0, nesse caso temos
que x = λ e
δ((0, 1), λ) = (0, 1)

o que é verdade.
Suponha agora que m > 1 e que a afirmação vale para palavras com tamanho até m, iremos
mostrar que vale para palavras com tamanho m + 1. Nesse caso, podemos escrever x = yσ,

Page 2
onde |y| = m. Então

δ((0, 1), x) = δ((0, 1), yσ)


= δ(δ((0, 1), y), σ)
m−1
! ! !
X
=δ k i yi mod n, k m mod n , σ
i=0
m−1
! ! !
X
i m m
= k yi mod n + (k mod n)σ mod n, ((k mod n)k) mod n
i=0
m
! ! !
X
= k i yi mod n + k m σ mod n mod n, k m+1 mod n
i=0
m
! !
X
= k i xi mod n, k m+1 mod n
i=0

Portanto, só serão reconhecidas as palavras em que δ((0, 1), x) = (i mod n, q), para algum
q ∈ {0, . . . , n − 1}, o que está correto.

27. a) Iremos definir recursivamente uma função fpref : E → E que recebe um expressão
regular para L e devolve uma expressão regular para Pref(L). Sejam x e y expressões regulares,
definimos fpref da seguinte forma:

fpref (λ) = λ (1)


fpref (σ) = σ (2)
fpref (xy) = fpref (x) + xfpref (y) (3)
fpref (x + y) = fpref (x) + fpref (y) (4)
∗ ∗
fpref (x ) = fpref (x) (5)
fpref ((x)) = fpref (x) (6)

Agora remos definir recursivamente uma função fsuf : E → E que recebe um expressão
regular para L e devolve uma expressão regular para Suf(L). Sejam x e y expressões regulares,
definimos fsuf da seguinte forma:

fsuf (λ) = λ (7)


fsuf (σ) = σ (8)
fsuf (xy) = fsuf (y) + fsuf (x)y (9)
fsuf (x + y) = fsuf (x) + fsuf (y) (10)
∗ ∗
fsuf (x ) = fsuf (x) (11)
fsuf ((x)) = fsuf (x) (12)

Uma prova de que a defninição de fpref funciona segue:

Page 3
Prova. Faremos indução em n onde n é o tamanho da expressão regular z que descreve L.Suponha
n = 0, nesse caso temos que z = λ e, portanto, fpref (λ) = λ De fato, como a única palavra em
L é λ, então prefixo é λ.
Se n = 1, então z é composto de uma única letra σ e, portanto, L = {σ}. Seguindo fsuf , temos
que o único sufixo de σ é fsuf (σ) = σ, que está correto. Suponha agora que n > 1 e que fpref
vale para expressões de tamanho até n − 1. Então z se enquandra em alguma das oprações
definidas de (3) a (6).
Se z se enquadra em (3), então z pode ser escrito como xy. Os prefixos de xy são todos os
prefixos de x e todos os prefixos de xy. Como, por hipótese, fpref (x) e fpref (y) foram calculados
corretamente, segue que fpref (xy) = fpref (x) + xfpref (y) está definido corretamente.
Se z se enquadra em (4), então z pode ser escrito como x + y. Os prefixos de x + y são todos os
prefixos de x e todos os prefixos de y. Como, por hipótese, fpref (x) e fpref (y) foram calculados
corretamente, segue que fpref (x + y) = fpref (x) + fpref (y) está definido corretamente.
Se z se enquadra em (5), então o prefixo para uma palavra descrita por z ∗ é certa quatidade de
repetições da palvra descrita por z concatenado com algum prefixo de z. Como, por hipótese,
fpref (z) foi calculado corretamente, segue que fpref (z∗) = fpref (z)∗ está definido corretamente.
Por fim, e z se enquadra em (6), é fácil de ver que fpref ((z)) está definido corretamente.

A prova para fsuf é análoga.


b) Suponha que exista um automato A = {K, Σ δ, s, F } para L, então podemos construir
outro automato Apref ix que reconhece Prefix(L) da seguinte forma. Como qualquer palavra x
aceita por A possui um passeio vencedor P = (s, k2 . . . km−1 , f ∈ F ), m = |x|, ki ∈ K no grafo
determinado por A, então o passeio de s até qualquer vértice de P é um passeio que deter-
mina um prefixo de x, pois engloba os i primeiros rótulos do caminho vencedor. Portanto,
seja K ∗ o conjunto de todos os estados que fazem parte de algum passeio vencedor, então
Apref ix = {K, Σ δ, s, K ∗ }, isso é, o conjunto de estados finais de Apref ix é exatamente o con-
junto de todos os vértices que pertecem a algum passeio vencedor de A.

Analogamente, qualquer caminho que comece em um vértice de P e termine em f é


um caminho que determina um prefixo de x, pois esse caminho pega exatamente os j últimos
rotulos do caminho vencendor. Portanto, podemos definir o automato Asuf para Suf(L), da
seguinte forma Asuf = {K, Σ δ, K ∗ , F }, ou seja, o conjunto de estados iniciais de é exatamente
o conjunto de todos os vértices que pertecem a algum passeio vencedor de A.

Page 4

Você também pode gostar