1
1Automatos - Revisão
1.1Conceitos Auxiliares
1.1.1 Ordenação Lexicográfica
(n1,m1) < (n2,m2) Þ n1 < n2 Ú ( n1 = n2 Ù m1 < m2 )
1.1.2 Ordenação por “Varredura de Matriz”
m\n
0
1
2
3
4
0
1
3
6
10
1
2
5
9
...
2
4
8
...
3
7
12
4
11
1.2Potência de Conjunto
A potência de um conjunto A é o conjunto de todos os subconjuntos de A.
Denota-se por 2S devido ao fato de que quando A é finito |2S | = 2|S|
Obs:
|X| =
# de elementos no conjunto X
# = número
1.3Produto Cartesiano
Sejam A = { 1,2,3 } e B = { 1,2,3 } dois conjuntos.
Produto Cartesiano AxB = { (1,1),(1,2),(1,3),(2,1),(2,2),(2,3),(3,1),(3,2),(3,3) } = { (x,y) | x Î A e y Î B }
1.4Relação
Uma relação a:A®B /* De A em B */ é um subconjunto de AxB. /* a Í AxB */
Podemos ter uma relação de A em A. ( Denota-se A2 )
Uma grafo orientado é um ótimo recurso para representar este tipo de relação:
Ex: SejaA = { a,b,c,d}
a = { (a,b) , (a,d) , (b,c) , (c,c) , (d,b) }
a
b
c
d
b = { (a,b) , (b,a) , ( a,a ) , (d,d) , (c,c) }
a
b
c
d
Obs: Os laços serão representados por uma seta entrando no vértice e sem origem.
1.4.2Inversa
a-1 = { (x,y) | (y,x) Î a }.
1.4.3Composta
Sejam a Í AxB e b Í BxC
b = a°b = { (x,y) Î AxC | $ z Î B , (x,z) Î a Ù (z,y) Î b }
Propriedades:
· (ab)g = a(bg)
· (ab)-1 = b-1a-1
· a-1 = b-1 Û a = b
· (bÈg) = abÈag /* Não vale para Ç */
· (aÈb)-1 = a-1 È b-1
· (aÇb)-1 = a-1 Ç b-1
1.4.4Equivalência
a:S®S é uma Relação de Equivalência se satisfizer as seguintes propriedades:
· Reflexividade: x Î S Þ (x,x) Î a
· Simetria:
(x,y) Î a Þ (y,x) Î a
· Transitividade (x,y) Î a Ù (y,z) Î a Þ (x,z) Î a
2
Ex: S = { a,b,c,d,e } , a Í S2
a
b
c
d
e
1.4.5Blocos
Seja S um conjunto e a uma relação de Equivalência em S.
[x]a = { y Î S | (x,y) Î a } = Bloco x de a em S
Propriedades:
· [x]a Ç [y]a ¹ f Û [x]a = [y]a
· x Î S Þ $ [y]a | x Î [y]a
S=U
[x]
a
·
xÎS
· Para todo x Î S , [x]a ¹ f
1.5Partição
· Uma partição p de S é um conjunto de subconjuntos de S, ( p Í 2S ) , que satisfaz as seguintes
propriedades:
· aÎpÞa¹f
· a,b Î p Ù aÇb ¹ f Þ a = b
·
S=U
aÎ p
[x]a
1.5.1Teorema Partição ⇔ Relação Equivalência (?)
a Í S2 Þ a induz uma Partição pa dada por { [x]a : x Î S }
Uma partição p de S induz Relação de Equivalência ap em S
1.5.2Teorema da Bijeção entre Relações de Equivalência e Partições
Se uma relação de equivalência a Í S2 induz uma partição pa e
esta partição pa induz uma r.e. ap a então :
α = απ α.
Da mesma forma, se uma partição p induz uma r.e ap e esta
relação induz uma partição pap , então:
π = παπ
Em outras palavras:
Seja A o conjunto de todas as Relações de Equivalência em S e
Seja B o conjunto de todas as partições de S. /* A e B são conjunto de Subconjuntos de S */
Seja g Í AxB uma relação que leva cada relação de A as suas partições induzidas e toda partição de B em
suas relações induzidas.
Pelo teorema, g é uma bijeção de A em B.
1.6Potência de Relação
1.6.1Definição
A potência de uma relação a Î S2 é definida assim:
è a0 = { (x,x) | x Î S }
è an+1 = aan , n > 0
ou seja:
ak = aaa....aα0
k vezes
ou ainda:
ak = { (x,y) | $ um passeio de comprimento k ligando x e y }
Seja S = { a,b,c,d,e,f } e a = { (a,a) , (a,b) , (b,e) , (e,a) , (c,c) , (c,d) }
2
3
a
b
e
f
c
d
a
b
e
f
α0
a
b
e
f
c
d
c
d
α1
c
d
a
b
e
f
α2
α3
1.6.2Fecho Reflexivo, Transitivo de α
a* = Ui³0 ai
(x,y) Î a* Û $ Passeio ligando x a y em a
1.6.3Fecho Transitivo de α
a+ = Ui³1 ai
Este fecho exclui a0
a* = a+ È a0
a+ ¹ a* - a0
A diferença acima é devido ao fato de existirem laços no grafo que representa a, e portanto, ao retirarmos a0
de a* estaremos retirando todos os laços. ( Os laços estão em todos os ai , pois com eles podemos criar
passeios de qualquer tamanho ).
1.7Funções
1.8Cardinalidade
1.8.1Finitude
Um conjunto S é finito quando $ k ³ 0 e uma bijeção h:S®{1,2,...,k}
|S| = k
1.8.2Enumerabilidade
S é enumeravel Û S é finito Ú $ bijeção h:S®{1,2,3,...}
Para mostrar que S2 , Racionais, AÈB são enumeráveis, use ídeia baseadas na ordenação por varredura da
matriz.
1.8.3Relação de Desigualdade ( ≤ ) entre conjuntos infinitos
Existe uma definição mais genérica para a relação “menor que” que pode ser usada entre conjuntos infinitos:
Sejam A e B dois conjuntos
A £ B Û $ função injetiva f:A®B
1.8.4ℜ não é enumerável
Prova-se por absurdo que [0,1] não é enumerável da seguinte maneira:
Assumindo que [0,1] é enumerável, temos que:
$ uma bijeção h:[0,1] ® N e
$ uma bijeção h’:N ® [0,1]
Cada número real h’(n) pode ser representado por uma seqüência h’(n) = 0.dn1dn2dn3... de dígitos.
Logo, podemos criar uma matriz, contendo todos os números Reais, da seguinte forma:
h’(1)
h’(2)
h’(3)
h’(4)
h’(5)
h’(6)
...
d11
d21
d31
d41
d51
d61
...
d12
d22
d32
d42
d52
d62
...
d13
d23
d33
d43
d53
d63
...
d14
d24
d34
d44
d54
d64
...
d15
d25
d35
d45
d55
d65
...
d16
d26
d36
d46
d56
d66
...
...
...
...
...
...
...
...
Tomemos um número real x em [0,1], cuja seqüência de dígitos S = 0,s1s2s3... seja definida da seguinte
forma:
Para todo n ³ 1
Se dnn = 0 então
sn = 1
4
Senão
sn = 0
Por construção, verifica-se facilmente que este número não está na matriz descrita acima, e portanto $ x Î
[0,1] | $‘ y Î N | h’(y) = x. O que é um absurdo, visto que h’ é uma bijeção de N em [0,1].
4
5
2Linguagens
2.1Alfabeto
2.1.1Definição
Um alfabeto é um conjunto å ¹ f de símbolos com apenas uma restrição: Dada uma seqüência contínua de
Símbolos de å deve ser possível identificar deterministicamente cada um dos símbolos da seqüência.
2.1.2Cadeias
Uma cadeia sobre å é uma seqüência de símbolos s = s1s2...sn , n ³ 0 e si Î å , 0 £ i £ n.
|s| = n, ou seja, o comprimento de s é n.
Quando n=0 temos uma cadeia vazia, que é denotada por e .
2.1.3Concatenação de Cadeias
sm = s1s2...snm1m2...mm . /* sm é a concatenação de s e m. */
|sm| = |s| + |m|
es = se = s
2.1.4Concatenação de Conjunto de Cadeias
Sejam A e B dois conjuntos finitos contendo cadeias sobre å.
AB = { sm | s Î A Ù m Î B }
|AB| £ |A|.|B|
A concatenação de AB é uma espécie de Produto Cartesiano, com a diferença que alguns elementos de AB
podem estar contidos em A ou B. Por isto a desigualdade acima.
Ex: å = {a,b}
A = { a , ab } , B = { a , ba }
AB = { aa , aba , aba , abba } = { aa, aba, abba }
2.1.5Potência de um Alfabeto
å0 = { e }
ån+1 = åån , n ³ 0
Notar a seguinte diferença em relação a potência de relações:
åk = åå....åå0 = åå...å ( Uma vez que se = s )
∑k = Conjunto de cadeias com tamanho k
2.1.6Fechos
å* = Ui³0 åi = Conjunto de todas as cadeias de comprimento finito sobre å
å+ = Ui³1åi
Notar que:
å* = å+ È {e} e å+ = å* - {e}
2.1.7Cadeia Inversa
Seja s = s1s2...sn , n ³ 1
sT = sn...s1
eT = e
Quando s=sT , s é dita palíndroma. Ex: ARARA
2.2Linguagem
2.2.1Definição
Seja å um alfabeto.
Uma linguagem sobre å é um subconjunto de å*.
Denota-se por L. ( L Í å* )
å = { 0,1 }
L = { s | #0(s) = 2n , n Î N } /* Número de zeros em s é par */
LT = Conjunto formado pela transposição de cada uma das palavras de L
2.2.2Forma Sucinta de Definir uma Linguagem
Descrição Informal
L que aceita os números binários Impar na notação própria
L que aceita palavras com um número par de zeros
L que aceita palavras onde não ocorram 3 zeros consecutivos
Obs: O alfabeto utilizado acima é å = {0,1}
2.3Considerações concernentes a Enumerabilidade (?)
· Todo alfabeto é contável
· å* é contável
Descrição Sucinta
1å*1È1
1*È(1*01*01*)*
å*-å*000å*
6
· Toda linguagem sobre å* é contável
· L = { L Í å* | L é linguagem } não é contável
6
7
3Autômato de Estados Finitos - FSA
3.1Definição
Um Autômato de Estados Finitos (Finite State Automata) é um sistema M sobre um alfabeto å definido da
seguinte forma:
M = (Q , å , d , qo , F )
Q = Conjunto de estados, finito e |Q|>0
å = Alfabeto de Entrada
qo = Estado Inicial pertencente a Q
F = Conjunto de Estados Finais ( Pode ser vazio )
d = Função de Transição de Qxå ® Q. ( Como Q e å são finitos, d pode ser representado por uma
tabela finita . com entrada para cada elemento de Qxå)
3.2Equivalente Mecânico (Interpretação Intuitiva)
Um autômato M é uma Maquina que lê uma cadeia sobre å , da Esquerda para Direita, um símbolo por vez e
para cada símbolo lido, ela usa a função d para alterar seu estado corrente.
A Máquina começa no estado q0 é quando termina de ler todos os símbolos da Cadeia ela pode estar em uma
destas situação:
Estado Corrente Î F Þ Cadeia Aceita
Estado Corrente Ï F Þ Cadeia não Aceita.
s1 s2 s3 s4 s5 s6 s7 s8 s9 ...
2
2
1
1
3
1
s1 s2 s3 s4 s5 s6 s7 s8 s9 ...
1
2
2
1
q0
1
3
1
s1 s2 s3 s4 s5 s6 s7 s8 s9 ...
1
q4
d(q0,s1)®q4
2
2
1
1
3
1
1
q1
d(q4,s 2)®q1
d(q1,s 3)®q4
3.3Linguagem Aceita pelo Autômato
3.3.1Definição “Intuitiva”
Seja a seguinte propriedade P(s) definida para uma cadeia s de å* e um Autômato M :
P(s) é Verdadeiro Û s é aceita pelo Autômato M
P particiona å* em dois subconjuntos. O Conjunto de cadeias não aceitas por M, e o conjunto de cadeias
aceitas por M, o qual é chamado de Linguagem aceita por M ou L(M).
3.3.2Definições Auxiliares
Estado da Computação ® Estado q Î Q do autômato + cadeia s Î å* que ainda não foi lida ( Resto da
Fita )
Configuração ® É uma par ordenado (q,x) Î Qxå* que representa um estado de computação.
Espaço de Configurações ® Qxå*, denota-se por zM
Passo Elementar ® Relação de Movimento no espaço de configuração. Denota-se por |- .
(q,x) |¾ (p,y) Û ( x = ay , a Î å ) Ù d(q,a) = p
Todo FSA induz uma Relação de Movimento |- ⊆ ζ2
Fecho Reflexivo Transitivo de | ® É denotado por |¾* , e indica a existência de uma
seqüência de passos elementares que leva uma Configuração a outra:
(q,x) |¾* (p,y) Û $ n ³ 0 | (q0,x0) |¾ (q1,x1) |¾ ... |¾ (qn ,xn) com
(q0,x0) = (q,x) e
(qn,xn) = (p,y)
n é o numero de passos necessários para “chegarmos em (p,y) partindo de (q,x)”
8
3.3.3 Definição Formal de L(M)
Seja M = (Q,å,d,q0,F) um FSA.
A linguagem aceita por M é definida como:
L(M) = { σ ∈ ∑* | (q0,σ) | (p,ε) , p ∈ F }
Seja M = (Q,å,d,q0,F) tal que
Q = { q0 , q1 , q2 },
å={0,1}
q0 = q0,,
F = { q0 , q2 }
Função d
(q0,0)
q0
(q0,1)
q1
(q1,0)
q1
(q1,1)
q2
(q2,0)
q2
(q2,1)
q1
Prova de que 0110 é aceita :
Prova de que 01 não é aceita :
(q0,0110) |¾ (q0,110) |¾ (q1,10) |¾ (q2,0) |¾ (q2,e)
Logo, (q0,0110) |¾* (q2,e ).
e portanto, como q2 Î F, 0110 Î L(M)
(q0,01) |¾ (q0,1) |¾ (q1,e ), mas q1 Ï F,
Logo,
01 Ï L(M)
3.3.4Criação de FSA a partir da Linguagem
:
Exemplo: Seja å = { 0,1 }, criar um Autômato que reconheça apenas as cadeias com um número de
0’s múltiplo de 3
Sugestão Genérica
Sugestão Aplicada ao Exemplo
Criar um ou mais estados que irão representar o q0 = Número de 0’s lidos é múltiplo de 3
fato da propriedade ser válida para a cadeia já
lida. F deverá conter todos estes estados
Analisar os tipos de cadeias que não satisfazem a q1 = É preciso mais um 0 para que o número de
Propriedade, procurando separar todas as
zeros lidos seja múltiplo de 3
situações possíveis, e criar um estado para cada q2 = É preciso mais dois 0’s para que o número
situação. Q deverá conter todos estes estados,
de 0’s lidos seja múltiplo de 3
mais os estados de F.
Desenhar um grafo para representar cada um dos
estados. ( Um vértice para cada estado ).
Usar um retângulo para representar os estados
q0
q1
q2
Finais.
Para cada estado, verificar para cada um dos
símbolos de å, qual o próximo estado. Criar d
com base nesta análise.
0
q0
1
1
1
q1
0
q2
0
Definir o estado inicial com base na situação da
palavra vazia.
Assinar o estado inicial com uma seta
diferenciada. ( Azul com sombras, no caso )
A palavra vazia possui um número de zeros igual
a três, portanto, q0 deve ser o estado inicial.
0
q0
1
1
1
q1
0
q2
0
Se necessário, descreva o autômato,
especificando detalhadamente Q,å, q0, F, d
3.3.5Alguns Exemplos
L(M) = Palavras com número par de 0’s
Q = { q0 , q1 , q2 }
å={0,1}
q0 = q0
F = { q0 }
d = {((q0,0),q0), ((q0,1),q1), ((q1,0),q2),
((q1,1),q1), ((q2,0),q0), ((q2,1),q2)}
L(M) = Palavras com um número par de 0’s e um
número impar de 1’s
8
9
1
q0
1
0
q1
1
0
q3
0
q2
0 1
1
q0
q0 = Número par de zeros
q1 = Número ímpar de zeros
q0 =
q1 =
q2 =
q3 =
0
1
q1
0
# Par de
# Impar de
# Par de
# Par de
0
1
1
0
# Impar de
# Impar de
# Impar de
# Par de
1
0
0
1
3.3.6Propriedades
· O menor autômato que reconhece um determinada linguagem é único.
· Um autômato com apenas 1 estado q0, ou aceita o fecho å* ( F = { q0 } ), ou aceita apenas e ( F = f }.
3.4Teoremas Importantes
3.4.1Um FSA nunca bloqueia
Teorema: Se x ≠ ε e q ∈ Q então ∃ y ∈ ∑*, p ∈ Q tais que (q,x) | (p,y)
Prova:
Como x ¹ e , $ y Î å* , a Î å tais que x = ay.
Como d é uma função, $ p Î Q | d(q,a) = p
Logo, pela construção de |¾
(q,ay) |¾ (p,y)
E portanto, como x = ay, (q,x) |¾ (p,y)
3.4.2A parte não lida da cadeia não influi no movimento
Teorema: Sejam q,p ∈ Q , x,y ∈ ∑*
(q,x) | * (p,y) ⇔ ∃ z ∈ ∑* | x = zy e (q,z) | * (p,ε)
Prova (Þ): Se (q,x) |¾* (p,y) então $ n ³ 0 | (q,x) |¾n (p,y)
Provemos por indução em n:
Base: ( n = 0 )
(q,x) |¾0 (p,y) Þ (q,x) = (p,y) Þ q = p e x = y
Fazendo z = e , y = x temos :
x = ex = zx = zy e
(q,z) = (q,e) |¾0 (q,e) = (p,e)
E portanto:
(q,z) |¾* (p,e)
Passo: ( n > 0 )
Assumindo que a propriedade é válido para n-1 , n > 1
tomemos (q,x) |¾n (p,y)
Como n > 0 ,
(q,x) |¾ (r,t) |¾n-1 (p,y)
Pela Hipótese de Indução $ s Î å* | t = sy e (r,s) |¾* (p,e)
(q,x) |¾ (r,t) Þ $ a Î å | d(q,a) = r e x = at
Portanto, fazendo z = as temos:
x = at = asy = zy e
(q,z) = (q,as) |¾ (r,s) |¾* (p,e) Þ (q,z) |¾* (p,e).
10
Prova (Ü): Se (q,z) |¾* (p,e) então, $ n ³ 0 | (q,z) |¾ (p,e)
Provemos então por indução em n:
Base: ( n = 0 )
Para (q,z) |¾0 (p,e) temos que
q=p,z=e
e ainda, x = zy = ey = y
Portanto:
(q, x) = (p,y) e,
(q,x) |¾0 (p,y) e ainda,
(q,x) |¾* (p,y)
Passo: ( n > 0 )
Supondo que a propriedade seja válida para n-1,
Tomemos (q,z) |¾n (p,e) , x = zy
Como n > 0 ,
(q,z) |¾ (r,t) |¾n-1 (p,e)
Pela hipótese de indução, temos que
(r,t) |¾n-1 (p,e) e x’ = ty Þ (r,ty) = (r,x’) |¾* (p,y)
Por construção,
(q,z) |¾ (r,t) Þ $ a Î å | z = at e d(q,a) = r
Portanto,
Como, x = zy e z = at
(q,x) = (q,aty ) |¾ (r,ty) |¾* (p,y)
Logo,
(q,x) |¾* (p,y)
3.4.3Possibilidade de “quebra” do movimento em duas partes:
n
Teorema: (q,xy) |¾* (p,e) Û $ r Î Q | (q,x) |¾* (r,e) e (r,y) |¾* (p,e)
Prova (Þ): Se (q,xy) |¾* (p,e) então $ n ³ 0 | (q,xy) |¾n (p,e)
Provemos por indução em n:
Base: ( n = 0 )
(q,xy) |¾0 (p,e) Þ q = p e xy = e
Portanto, x = y = e
Tomando r = q temos,
(q,x) = (r,x) = (r,e) |¾ (r,e), logo (q,x) |¾* (r,e)
E ainda,
(r,y) = (q,y) = (p,y) = (p,e) |¾ (p,e), logo (r,y) |¾* (p,e)
Passo: ( n > 0 )
Supondo válido para n-1,
Tomemos (q,xy) |¾n (p,e)
Devemos tratar separadamente estes 2 casos:
Caso 1) x ¹ e
Como n > 0, temos que
(q,xy) |¾ (s,t) |¾n-1 (p,e) , t = ky ( Como x ¹ e , y não é lido )
Pela H.I, $ r’ Î Q | (s,k) |¾* (r’,e) e (r’,y) |¾* (p,e)
Pelo teorema da seção anterior temos:
Se (s,k) |¾* (r’,e) e t=ky então (s,ky) |¾* (r’,y) , logo
(q,xy) |¾ (s,ky) |¾* (r’,y) , e
(q,xy) |¾* (r’,y) , e novamente pelo teorema da seção anterior:
(q,x) |¾* (r’,e)
Portanto, tomando r = r’, temos:
(q,x) |¾* (r,e) e (r,y) |¾* (p,e)
Caso 2) x = e
Neste caso, tomando r = q temos:
(q,x) |¾ (r,x) = ( r,e) , e portanto, (q,x) |¾* (r,e)
E ainda,
(r,y) = (q,ey) = (q,xy) |¾* (p,e), e portanto, (r,y) |¾* (p,e)
10
11
3.5Provando que uma Linguagem L é aceita por um Autômato M
3.5.1Definição de um caso especial
Seja L = { x Î å* | #0(x) º3 0 } /* Número de zeros é côngruo módulo 3 de 0, i.e. múltiplo de 3 */
Seja M definido pelo seguinte esquema:
0
1
q0 1
q1
1
0
q2
0
Mostrar que L(M) = L, i.é, que a linguagem aceita pelo autômato acima é L.
obs: Nas provas deste tipo deve-se sempre tomar o cuidado de usar Hipóteses de Indução fortes o
suficiente para contemplar todos os estados da Máquina, ou classes das cadeias de L..
3.5.2Provando que L(M) ⊆ L
Chamemos de P a propriedade L(M) Í L.
Devemos mostrar que para todo x Î L(M) , x Î L.
Mas x Î L(M) Þ (q0,x) |¾* (p,e) , p Î F .
No caso, (q0,x) |¾* (q0,,e). E portanto,
$ n ³ 0 | (q0,x) |¾n (q0,e).
Podemos então usar indução em n para provar P.
Antes porem, devemos tomar o cuidado de criar uma conjectura mais abrangente:
Vamos mostrar que:
(c.1) (q0,x) |n (q0,ε) ⇒ #0(x) ≡3 0
(c.2) (q1,x) |n (q0,ε) ⇒ #0(x) ≡3 2
(c.3) (q2,x) |n (q0,ε) ⇒ #0(x) ≡3 1
Base: ( n = 0 )
(c.1)
(q0,x) |¾ (q0,e) Þ x = e.
Portanto #0(x) = #0(e) = 0 , e x Î L.
(c.2)
Vacuamente verdade ( q1 não é estado inicial , portanto, é impossível mostrar um
contra-exemplo)
(c.3)
Vacuamente verdade
Passo: ( n > 0 )
Assumamos que P é válido para 0,1,2 ... n-1
(c.1)
(c.2)
(c.3)
Como n > 0 , (q0,x) |¾n (q0,e) Þ (q0,ay) |¾ (p,y) |¾n-1 (q0,e)
Devemos subdividir este caso em outros 2 :
(c.1.1) Para a = 0 temos :
(q0,0y) |¾ ( q1,y) |¾n-1 (q0,e)
Pela H.I (c.2) , temos que #0(y) º3 2, e portanto
#0(0y) º3 0.
(c.1.2) Para a = 1 temos :
(q0,1y) |¾ (q0,y) |¾n-1(q0,e)
Pela H.I (c.1), temos que #0(y) º3 0 , e portanto
#0(1y) º3 0.
Análogo a (c.1)
Análogo a (c.1)
3.5.3Provando que L ⊆ L(M) (?)
Usaremos os seguintes fatos:
#0(x) º3 0 Þ #0(x) = 3n , n ³ 0
Usaremos ainda os seguintes fatos:
(f.1)
d(p,1) = p , p Î Q ( Pela construção do autômato )
(f.2)
(p,1*x) |¾* (p,x) ( Por f.1 )
Base: ( n = 0 )
12
x = 1* , e portanto, por (f.2) , (q0,1*e) |¾* (q0,e)
Passo: ( n > 0 )
Assumamos que a propriedade seja válida para 0,1,...,n-1
Como n > 0 , podemos fazer x = ab , tal que #0(a) = 3 e #0(b) = 3(n-1).
( Vamos dividir x logo depois do 3o zero ).
Desta forma, x = 1*01*01*01*b.
Por (f.2)
(q0,x) = (q0,1*01*01*01*b) |¾ (q0,01*01*01*b)
Por construção
(q0,1*01*01*01*b) |¾ (q1,1*01*01*b)
Por (f.2)
(q1,1*01*01*b) |¾ (q1,01*01*b)
Por construção
(q1,01*01*b) |¾ (q2,1*01*b)
Por (f.2)
(q2,01*b) |¾ (q2,01*b)
Por construção
(q2,01*b) |¾ (q0,1*b)
Por (f.2)
(q0,1*b) |¾ (q0,b)
Pela hipótese de indução
(q0,b) |¾* (q0,e)
E portanto:
(q0,x) |¾* (q0,e)
12
13
4FSA não Determinístico - NFSA
4.1Definição
A única diferença de um NFSA em relação a um FSA é que d , que no FSA é uma função, no NFSA é uma
relação.
4.2Conseqüências de δ ser uma relação
4.2.1N pode bloquear
Uma vez que d não é mais uma função, pode ser que existam q Î Q e s Î å tais que d(q,s) não é definido.
4.2.2N não é determinístico
Podem existir q1 e q2 Î Q tais que q1 ¹ q2 e d(q,s) = q1 e d(q,s) = q2.
4.3Determinando a aceitação de uma cadeia
Quando N recebe uma cadeia de entrada, embora o Estado da Computação a cada passo possa não ser único,
podemos definir uma estratégia ( Existem várias ) mais elaborada para determinar se a cadeia é válida ou
não.
Nos autômatos que são conhecidos como NFSA a estratégia é a seguinte:
Uma cadeia é aceita sse existir alguma seqüência de Passos Elementares que levem o
Autômato a um estado q Î F após a leitura de toda a cadeia.
Ou seja:
L(N) = { x ∈ ∑* | (q0,x) |* (p,ε), p ∈ F }
4.4Validade dos teoremas 3.4.2 e 3.4.3 (?)
4.5Alguns Exemplos
L(N) = Palavras terminadas 00 = å*00
1
q0
L(N) = å*00å* È å*111å*
0,1
0
0
q1
0
q2
q0
0
0,1
0
q2
p1 1
p2
q1
1
p0 1
0,1
Observar que o construção de um NFSA apartir de uma Linguagem é bem mais simples que a de um FSA,
aliás, este processo pode ser facilmente definido por um algoritmo.
14
5Linguagens Regulares
5.1Definição
O conjunto de Linguagens Regulares é o conjunto de todas a linguagens que podem ser aceitas por um FSA
qualquer.
Seja LFSA = { L Í å* | $ FSA M com L = L(M) }
Seja LNFSA = { L Í å* | $ NFSA N com L = L(N) }
Seja LR o conjunto das Linguagens Regulares
LR = LFSA = LNFSA
5.2Teorema de Robin/Scott
Toda linguagem aceita por um NFSA é Regular
5.2.2Idéia por trás da prova
Autômato Não Determinístico
1
q0
Autômato Determinístico Equivalente
1
0
q1
0
0
q2
q0 0
0
q 0, 0
1 q1
q 0,
q 1,
q2
1
Cada estado no NFSA irá representar todas as possibilidades de estados X do FSA que podem ser atingidos
em um passo elementar, a partir de um conjunto de estados Y do mesmo FSA, e de um símbolo a.
Quando não existir nenhum estado que é atingido pela leitura do símbolo a, deve-se criar um estado nulo
para garantir que d seja uma função.
5.2.3Definição de um FSA N a partir de um NFSA M
Dado um NFSA M = { Q,å,d,qo,F}
Construímos um FSA N = { Q`,å,d`,{q0},F`} do seguinte modo:
Q`= 2Q ( Q` é o conjunto formado por todos os subconjuntos de Q )
F` = { R Í Q : R Ç F ¹ f }
d` = Q`xå ® Q`
d`(S,a) = UsÎS d(s,a) Í Q , S Í Q , a Î å.
Nas próximas seções mostraremos que L(N) = L(M)
5.2.4Teorema Auxiliar
s Î S , S Í Q , (s,x) |M¾
* (r,e) Û $ R Í Q | (S,x) |n¾ * (R,e) , r Î R
Prova (Þ) :
Base: ( n = 0 )
Quando n = 0 temos que s = r e x = e
Tomando R = S, temos:
(S,x) |n¾ 0 (S,x) = (R,e) , r Î R
Passo: ( n > 0 )
Supondo que a propriedade seja válida para 0,1,2 ... n-1,
Tomemos (s,x) |M¾ n (r,e) , s Î S , S Í Q .
Como n > 0 , temos:
x = ay e (s,ay) |M¾ (t,y) |M¾ n-1 (r,e)
Tomemos (S,ay) |n¾ (T,y)
Pela definição de N:
T = UsÎS d(s,a).
Mas, t = d(s,a), e portanto: t Î T.
Logo, pela hipótese de indução.
(T,y) |n¾ * (R,e) , r Î R
E portanto,
(S,ay) = (S,x) |n¾ (T,y) |n¾ * (R,e) , r Î R \
(S,x) |n¾ * (R,e) , r Î R.
14
15
Prova (Ü):
Base: ( n = 0 )
Como n = 0 temos que : S = R e x = e.
Fazendo s = r temos:
(s,x) = (r,e) |M¾ 0 (r,e)
Passo: ( n > 0 )
Supondo válido para 0,1, ... , n-1.
Tomemos (S,x) |n¾ n (R,e) , r Î R
Como n > 0, temos:
x = ay , (S,ay) |n¾ (T,y) |n¾ n-1 (R,e)
Pela Hipótese de Indução, temos que
$ t Î T | (t,y) |M¾ * (r,e)
mas T = UsÎS d(s,a).
E portanto, temos um s Î S tal que d(s,a) = t.
Logo,
(s,x) = (s,ay) |M¾ (t,y) |M¾ * (r,e) \
(s,x) |M¾ * (r,e) , s Î S
5.2.5Prova de que L(M) ⊆ L(N)
x Î L(M) Þ (q0,x) |M¾ * (p,e) , p Î F
Mas q0 Î {q0 } , e {q0} Í Q.
E portanto, pelo teorema da seção anterior:
$ P Í Q | ({q0},x) |n¾ * (P,e) , p Î P
Mas se p Î F e p Î P
P Ç F ¹ f.
E portanto,
P Î F’
Logo:
x Î L(N)
5.2.6Prova de que L(N) ⊆ L(M)
x Î L(N) Þ ({q0},x) |n¾ * (P,e) , P Î F’
Mas se P Î F’, então P Ç F ¹ f.
Tomemos então p tal que p Î P e p Î F. ( Vamos supor a princípio que F ¹ f )
Pelo teorema da seção anterior temos:
(q0,x) |M¾ * (p,e) , uma vez que q0 é o único elemento de {q0}.
Mas p Î F, e portanto
x Î L(M).
Quando F = f temos que F’ = f, visto que XÇf = f, e portanto, L(M) = L(N) = f
16
6Outros autômatos de estados finitos
6.1ε-NFSA
6.1.1Definição do ε-NFSA
A diferença entre um NFSA e um e-NFSA M = (Q,å,d,q0,F) , é que a relação d é definida sobre QxåÈ{e}
® Q, com isto, o e-NFSA pode mudar a configuração sem consumir entrada.
6.1.2Exemplo
0
q0
1
e
q1
2
e
q2
L(M) = 0*1*2*
6.1.3Relação de Movimento
É análoga a do NFSA, com o acréscimo dos passos elementares que não consomem símbolos.
(q,x) |¾ (p,y) Û [ x = y e p Î d(q,e) ] ou [ x = ay , a Î å , p Î d(q,a) ]
6.1.4Linguagem aceita pelo ε-NFSA
L(M) = { x Î å* | (q0,x) |¾* (p,e) , p Î F }
Ex.: O autômato do exemplo admite a seguinte computação:
(q0,002) |¾ (q0,02) |¾ (q0,2) |¾ (q1,2) |¾ (q2,2) |¾ (q2,e)
Portanto, (q0,002) |¾* (q2,e).
Mas q2 Î F , logo, 002 é aceita.
Seja Le-NFSA = { L Í å* | $ e-NFSA, com L(M) = L }
Lε-NFSA = LREG
6.1.5Demonstração de Lε-NFSA ⊆ LREG
Seja N = (Q,å,d,qo,F) um e-NFSA.
Construiremos um autômato M = (Q,å,d‘,q0,F’) , tal que, L(M) = L(N).
Definiremos uma relação passo-e ( æ ) de Q®Q da seguinte forma:
q æ p Û p Î d( q,e) /* É possível passar do estado q para o estado p sem consumir
símbolo */
No autômato NFSA M, teremos:
p ∈ δ‘(q,a) ⇔ ∃ q’, p’ ∈ Q , tais que , qæ*q’ , p’ ∈ δ(q’,a) e p’æ*p
Graficamente:
q
Û
p
a
q
q’
e*
p’
a
p
e*
F’ = [ F se ε ∉ L(N) ] ou [ F ∪ {q0} se ε ∈ L(N) ]
Teorema 1: (q,x) |n¾ * (p,x) Û q æ* p
Teorema 2: (p,ay) |n¾ * (q,y) Û (p,ay) |M¾ * (q,y)
Prova (Þ):
Sabemos que (p,ay) |n¾ * (q,y) Þ (p,ay) |n¾ n (q,y) , n ³ 0.
Caso 1: ( n = 0 )
Vacuamente verdade, uma vez que é impossível consumir o símbolo a, com n = 0.
16
17
Caso 2: ( n ³ 0 )
(p,ay) |n¾ n (q,y) pode ser rescrito como:
(p0,ay) |¾ (p1,ay) |¾ ... |¾ (pk,ay) |¾ (q0,y) |¾ (q1,y) |¾ ... |¾ (qm,y), onde
p0 = p, qm = q, k ³ 0 , m ³ 0 e n = k + m + 1
Mas,
(p0,ay) |¾ (p1,ay) |¾ ... |¾ (pk,ay) Þ p0 æ* pk
e
(q0,y) |¾ (q1,y) |¾ ... |¾ (qm,y) Þ q0 æ* qm
Temos então que:
p0 æ* pk , q0 Î d(pk,a) , q0 æ* qm
Logo,
q Î d‘(p,a) Þ (p,ay) |M¾ (q,y) Þ (p,ay) |M¾ * (q,y)
Prova (Ü):
Pela construção de M, temos que
Se (p,ay) |M¾ * (q,y) então q Î d(p,a).
Portanto,
(p,ay) |n¾ (q,y) , e (p,ay) |n¾ * (q,y)
Prova de que L(N) Í L(M)
Se x Î L(N) então (q0,x) |n¾ n (p,e) , p Î F , n ³ 0
Caso 1: x ¹ e
Com x ¹ e podemos rescrever (q0,x) |n¾ n (p,e) como:
(q0,a1a2...an) |n¾ (q1,a2...an) |n¾ ... |n¾ (qn,an) |n¾ (p,e) , x = a1a2...an
Pelo Teorema 2, temos que:
(q0,a1a2...an) |m¾ * (q1,a2...an) |m¾ * .... |m¾ * (qn,an) |m¾ * (p,e)
E portanto,
(q0,x) |m¾ * (p,e).
Mas, pela construção, p Î F’.
Logo, x Î L(M).
Caso 2: x = e
Quando x = e temos que q0 Î F’ , e portanto
(q0,x) |m¾ (q0,e) Þ (q0,x) |M¾ * (q0,e) , q0 Î F’ Þ x Î L(M).
6.2FSA-Bidimensional : 2-FSA.
6.2.1Definição
É um autômato determinístico M = (Q,å,d,q0,F) onde d é uma função de Qxå ® Qx{D,E},i.é , a função d,
além de fornecer o próximo estado, indica se a “cabeça de leitura” deve avançar (D) ou recuar (E).
6.2.2Exemplo
Q = { qo,q1,q2 } , å = {0,1} , F = { q2 }
0
1
d
q0
(q0,D)
(q1,D)
q1
(q1,D)
(q2,E)
q2
(q0,D)
(q2,E)
6.2.3Relação de Movimento
Uma configuração no 2-FSA passa a ser uma Tripla (x,q,y) onde:
x = Cadeia já lida
q = Estado atual
y = Cadeia não lida
A relação de movimento no 2-FSA é definida assim:
1. (x,q,ay) , a Î å |¾ (xa,p,y) se d(q,a) = (p,D)
2. (xb,q,ay) , a,b Î å |¾ ( x , p ,bay ) se d(q,a) = (p,E)
Condições de bloqueio conseqüentes da definição acima:
1. Configuração (x,p,e).
2. Configuração (e,q,ay) e d(q,a) = (p,E).
6.2.4Linguagem aceita
L(M) = { x Î å* | (e,q0,x) |¾* (x,p,e) , p $ F }
Observações:
· M pode entrar em um situação de loop ao processar uma cadeia x. Neste caso, x é rejeitada, visto que
não existe n ³ 0 tal que (e,q0,x) |¾ n (x,p,e).
· Se houver um bloqueio na configuração (e,q,x), /* Bloqueio a esquerda */ x é rejeitada.
18
Uma situação de Loop pode ser detectada quando uma mesma configuração é atingida 2 vezes.
6.2.5seqüência de Corte
Usando o autômato do exemplo, vamos mostrar a seqüência de corte da cadeia 101001.
1
q0
S1
0
q1
S2
1
q1
q2
q0
S3
0
q1
S4
0
1
q1
S5
q1
q2
q0
S6
q1
S7
O Gráfico acima representa a seguinte seqüência de movimentos:
(e,q0,101001) |¾ (1,q1,01001) |¾ (10,q1,1001) |¾ (1,q2,01001) |¾ (10,q0,1001) |¾
(101,q1,001) |¾ (1010,q1,01) |¾ (10100,q1,1) |¾ (1010,q2,01) |¾ (10100,q0,1) |¾
(101001,q1,e).
6.2.6seqüências de Corte Válidas
Dada uma seqüência de corte S = <q1,q2,q3,...,qn > , dizemos que S é válida quando:
1. n é impar
2. Para quaisquer qi , qj , i ¹ j , i par, j par , temos que qi ¹ qj
3. Para quaisquer qi , qj , i ¹ j , i par, j par , temos que qi ¹ qj
·
·
Em uma computação na forma (e,q,x) |¾* (x,p,e) , todas as seqüências são válidas.
A primeira e a última seqüência de corte de uma cadeia x tem comprimento 1.
·
O número de seqüências de corte válidas é finito ( Regras 2 e 3 ) e pode ser calculado em função
do número total de estados em Q (n) usando-se a seguinte tabela,: ( Lembre-se que não existem
seqüência válidas com tamanho par )
Comprimento da seqüência
1
3
5
k
Número de seqüências válidas possíveis.
n
n.n.(n-1) = n2.(n-1)
n.n.(n-1)/(n-1)(n-3) = n2.(n-1)2.(n-3)
n2.(n-1)2.(n-2)2. ... .(n-(k-4))2.(n-(n-2))
6.2.7L2-NFSA = LREG
Seja S o conjunto de todas as seqüências de corte possíveis para um autômato 2-NFSA M.
Uma seqüência de corte q será representada por <q0,q1,q2,...,qn>
Para cada a Î å definiremos uma relação Ra e outra relação La, ambas de S ® S, da seguinte forma:
1. <> Ra <> , <> La <>
2. q Ra p se d(q0,a) = (p0,D) e <q1,q2,...,qr> La <p1,p2,...,ps>
3. q Ra p se d(q0,a) = (q1,E) e <q2,...,qr> Ra <p1,...,ps>
4. q La p se d(p0,a) = (p0,E) e <q1,...,qr > Ra <>
5. q La p se d(p0,a) = (p1,D) e <q0,...,qr> La <p2,...,ps>
Construímos um NFSA N equivalente a M da seguinte forma:
N = (Q’,å,d‘,q0’,F’)
Q’= { q | q é uma seqüência de cortes válidas } q0’ = <q0>
F’= { <p> : p Î F } d‘= p Î d‘(q,a) sse q Ra p
18
19
7Gramáticas
7.1Gramáticas Lineares a Direita
7.1.1Definição
É um sistema G = (V,T,S,P), onde
T = Alfabeto /* Terminais */
V = Conjunto Finito de Símbolo, tal que VÇT = f /* Não Terminais */
S = Símbolo Inicial pertencente a V.
P = Relação de V ® (T*V È T* ) /* Produções */
Cada par ordenado (a,b) Î P, pode ser representado como a ® b, onde a é o lado esquerdo e b é o lado
direito da produção.
Notar que nas GLD’s, o lado direito da produção, não pode ter mais de um símbolo não terminal , e além
disto, não podem haver símbolos terminais a direita de símbolos não terminais.
7.1.2Relação de Geração e Linguagem Gerada
Toda Gramática G = (V,T,S,P) induz uma relação ⇒ Í (VÈT)*x(VÈT)*, onde
a Þ b sse a = a1Aa2 , b = a1ga2 , A Î V e (A,g) Î P.
A linguagem de G é L(G) = { x Î T* | S Þ* x }
7.1.3Forma Sentencial e Sentença
Se SÞ*a então
Se a contém não terminais a é uma Forma Sentencial de G
Senão a é uma Sentença de G
7.1.4Exemplo
Gramática G que gera 0+1+ :
G = (V,T,S,P) , onde
T = {0,1}
V = { Z, U }
S=Z
P = { (Z,0Z), (Z,0U), (U,1U), (U,1) }
As produções podem ser escritas da seguinte forma:
Z = 0Z | 0U
U = 1U | 1
Gramática H que gera x Î {0,1}* | #0(x) º3 0
S0 = 1S0 | 0S0 | e
S1 = 1S1 | 0S2
S2 = 1S2 | 0S0
7.2Gramáticas Lineares a Esquerda
São análoga as GLD, com a diferença que no Lado Direito da Produção, não podem haver símbolos
terminais a esquerda de símbolos não terminais.
7.3Forma Normal para GLD
Uma GLD na forma normal (GLD-FN) é uma GLD onde o lado direito da produção não pode ter mais do
que 1 símbolo não terminal.
Portanto, toda produção tem a forma:
A ® aB | B , A,B Î V e a Î T
A ® a | e , a Î T.
20
7.4Equivalência entre GLD e GLD na Forma Normal
7.4.1LGLD ⊆ LGLD-FN
Dada uma gramática GLD G = (V,T,S,P) que gera L(G), construiremos uma gramática GLD-FN G’, e
provaremos que L(G’) = L(G).
G’= (V’,T,S,P’) onde
V’= V È { [wA] | B ® zwA Î P }
P’=
A ® [a] , onde A ® a Î P
[ab] ® a[b] , para todo [ab] Î V’ , a Î T.
[A] ® A
[]®e
Gramática Linear a Direita
Z ® 01Z | U
U ® 1U | 1
Demonstração de Z Þ* 010111
Z Þ 01Z Þ 0101Z Þ 0101U Þ
01011U Þ 010111
GLD na Forma Normal
Z ® [01Z] | [U]
[01Z] ® 0[1Z]
[Z] ® Z
U ® [1U] | [1]
[1Z] ® 1[Z]
[U] ® U
[1U] ® 1[U]
[e] ® e
[1] ® 1[e]
Demonstração de Z Þ* 010111
Z Þ [01Z] Þ 0[1Z] Þ 01[Z] Þ 01[01Z] Þ 010[1Z] Þ
0101[Z] Þ 0101[U] Þ 0101[1U] Þ 01011[U] Þ 01011U
Þ 01011[1] Þ 010111[e] Þ 010111
Provando que L(G) ⊆ L(G’)
Teorema 1: Em G’ , [a] Þ* a , a é uma forma sentencial.
Prova : Por indução no tamanho n de a:
Base: ( n = 0 )
Com n = 0 , a = e \ [a] Þ* a , uma vez que ([e], e) Î P’
Hipótese de Indução: Se k < n e a = a1a2...ak então [a] Þ* a
Passo: ( n > 0 )
Como n > 0 , podemos tomar:
a = ab , onde a Î T e |b| < n.
Por construção, ([ab],a[b]) Î P’, e portanto:
[ab] Þ a[b]
Pela Hipótese de Indução
[b] Þ* b
Logo.
[ab] Þ a[b] Þ* ab \ [ab] Þ* ab \ [a] Þ* a
Devemos mostrar que se x Î L(G) , então x Î L(G’) , ou seja,
Se S Þ* x em G então S Þ* x em G’. /* Representarei Þ em G , por GÞ */
Infelizmente, a conjectura acima, não é forte o suficiente para que possamos usar indução
diretamente. Por isto, criaremos uma conjectura mais abrangente ( Este tipo de estratégia é bastante
usado em provas na teoria dos autômatos ):
Se S GÞn a então S G’Þ* a , onde n ³ 0 e a é uma Forma Sentencial em G.
Base: ( n = 0 )
S GÞ0 a \ a = S \ S G’Þ0 a
Passo: ( n > 0 )
Supondo que a propriedade seja verdadeira para n-1, tomemos S GÞn a
Temos então que:
S GÞn-1 yA GÞ yz = a , onde A ® z Î P.
Pela H.I:
S G’Þ * yA.
Pela Construção, A ® z Î P Þ A ® [z] Î P’, e portanto
yA G’Þ y[z]
Pelo Teorema 1,
y[z] G’Þ yz
Portanto,
S G’Þ* a
Notar que a = x é apenas um caso particular do que acabou de ser provado.
20
21
Provando que L(G’) ⊆ L(G)
Teorema 2: Se A G’Þ* w[a] então A GÞ* wa.
Demonstrando que: Se S G’Þn x , n ³ 0 então S GÞ* x , x Î T*
Pela construção de G’, a única produção cujo lado direito não possui um Não
[e] Þ e, portanto, podemos dizer que:
S G’Þ* x[e] Þ xe = x .
Pelo Teorema 2:
S GÞ* xe
Mas xe = x, e portanto
S GÞ* x
terminal é
7.4.2LGLD-FN ⊆ LGLD
É óbvio, visto que a definição de GLD-FN não passa de um caso particular de GDL.
7.5Equivalência entre GLD e GLE
7.5.1Algoritmo para construção de GLE G2 dado uma GLD G1
Dado uma GLD G1 = (V1,T,P1,S1), construiremos uma GLE G2 = (V2,T,P2,S2) da seguinte forma:
V2 = V1 È {S2}
P2 =
B ® Aw quando A ® wB em P1
S2 ® Aw quando A ® w em P1
S1 ® e
Exemplo:
GLD
S ® abA
A ® aB | bC
B ® a | bC
C®b
S Þ abA Þ abaB Þ ababC Þ ababb
S
a
a
bba Ï L(G1)
b
b
GLE
A ® Sab
S2 ® Ba | Cb
B ® Aa
B ® Aa
C ® Ab
A ® Sab
S2 ® Ba
C ® Ab | Bb
C ® Bb
S®e
S2 ® Cb
( “verão clean”)
S®e
S2 Þ Cb Þ Bbb Þ Aabb Þ Sababb Þ ababb
S2
A
a
C
B
B
a
b
a
b
C
a
b
a
b
b
b
b
b
A
a
b
b
a
b
a
b
b
e
a
b
a
b
S2 Þ Ba Þ ??? \ bba Ï L(G2)
b
S
22
7.5.2Teorema Auxiliar
A G1Þ* wB Û B G2Þ* Aw
Prova (Þ): Se A G1Þ* wB então $ n ³ 0 | A G1Þn wB.
Usemos, pois, indução em n.
Base: ( n = 0 )
A G1Þ0 wB É A = B , w = e. , e portanto:
B G2Þ0 B É BG2Þ0 Aw.
Hipótese de Indução: A G1 Þk wB É B G2 Þ* Aw , para k < n.
Passo: ( n > 0 )
Tomemos A G1 Þn wB .
Como n > 0, temos:
A G1 Þn-1 xC Þ xyB , onde xy = w.
Por construção, (B,Cy) Î P2, e portanto
B G2Þ Cy .
Pela Hipótese de Indução
C G2Þ* Ax.
Portanto,
B G2Þ Cy Þ* Axy \ BG2Þ* Axy \ BG2Þ*Aw
Prova (Ü): Análoga a primeira parte.
7.5.3Demonstração de L(G1 ) ⊆ L(G2 )
Tomemos um w Î L(G1) \ $ n ³ 0 | S1 G1 Þn w
Caso 1: Se (S1,w) Î P1 então
Por construção ,
S2 G2Þ S1w Þ ew Þ w \ w Î L(G2)
Caso 2:
Se (S1,w) Ï P1 temos que:
S1 G1Þ* xA Þ xy , xy = w , (A,y) Î P1
Mas (A,y) Î P1 É (S2,Ay) Î P2
Portanto, S2 G2Þ Ay .
Pelo Teorema, S1 G1Þ* xA É A G2Þ* S1x .
Logo, S2 G2Þ Ay Þ* S1xy .
Mas, (S1,e) Î P2 , e portanto:
S1 G2Þ* xy = w \ w Î L(G2).
7.5.4Demonstração de L(G2 ) ⊆ L(G1 )
Análoga a anterior, usando o mesmo teorema ( A volta ).
7.6Gramáticas Lineares e Linguagens Regulares
7.6.1Construção de uma GLD G apartir de um FSA M
Seja um FSA M = ( Q , å , q0 , d , F ) .
Construiremos uma GLD G = ( V , å , P , S ) da seguinte forma:
V=Q
P = { (q,ap) se p = d(a,q) } È { (p,e) se p Î F }
S = q0
Segue da construção que G é GLD.
Exemplo:
Autômato FSA
Gramática G
1
1
1,0
q0
q1
q2
0
0
q0 ® 1q0 | 0q1 | e
q1 ® 1q1 | 0q2
q2 ® 1q2 | 0q2 | e
(q0,110100) |¾ (q0,10100) |¾ (q0,0100) |¾
(q1,100) |¾ (q1,00) |¾ (q2,0) |¾ (q2,e)
q0 Þ 1q0 Þ 11q0 Þ 110q1 Þ 1101q1 Þ 11010q2
Þ 110100q2 Þ 110100e
22
23
7.6.2Demonstração de L(M) ⊆ L(G)
Teorema Auxiliar:
$ n ³ 0 | (q,xy) |¾n (t,y) , x,y Î å*, x ¹ e É q Þ* xt , t Î V.
Base: ( n = 0 )
(q,xy) |¾0 (t,y) É q = t , x = e , Mas
q Þ q , e portanto, q Þ* xt
Hipótese de Indução: (q,xy) |¾k (t,x) É q Þ* xt , quando k < n
Passo: ( n > 0 )
Tomemos (q,xy) |¾n (t,y).
Como n > 0, temos:
(q,awy) |¾ (r,wy) |¾n-1 (t,y) , aw = x , a Î å.
Por construção , (q,ar) Î P, e portanto
q Þ ar
Pela hipótese de indução, r Þ* wt, portanto
q Þ ar Þ* awt \ q Þ* xt.
Demonstração:
Tomemos um x Î L(M) \ (q0,x) |¾* (q,e) , q Î F
Caso 1: x = e
(q0 ,e) |¾* (q,e) É q = q0 , q0 Î F.
Por construção, (q0,e) Î P, logo
q0 Þ e , e portanto, e = x Î L(G).
Caso 2: x ¹ e
Pelo teorema auxiliar, teremos:
(q0,xe) |¾* (q,e) É q0 Þ* xq.
Por construção, (q,e) Î P, e portanto
q0 Þ* xq Þ x \ q0 Þ* x \ x Î L(G).
7.6.3Demonstração de L(G) ⊆ L(M)
7.6.4Construção de um ε-NFSA apartir de uma GLD G
Dado uma GLD G = (V,å,P,S) na forma normal, construiremos um e-NFSA N = ( Q,å,q0,d,F) onde:
Q = V È { q } , onde q Ï V.
q0 = S.
F={q}
((A,a),B) Î d Û (A,aB) Î P
((A,e),B) Î d Û (A,B) Î P
((A,a),q) Î d Û (A,a) Î P
((A,e),q) Î d Û (A,e) Î P
7.6.5Demonstração de L(M) ⊆ L(G)
7.6.6Demonstração de L(G) ⊆ L(M)
7.7Expressões Regulares
7.7.1Definição de Expressões Regulares
Uma Expressão Regular é uma cadeia sobre { å ,f, +, . ,* }, obedecendo as seguintes regras de Geração:
ER ® f | a | ER+ER | ER.ER | ER* , com a Î å e ER.ER podendo ser resumido por ERER
7.7.2Definição Primitiva de Linguagens Regulares (LRs).
Tipo
I
II
III
IV
V
Linguagem Regular L
f
{a} , a Î å
La È Lb, onde La e Lb são Linguagens Regulares
La ° Lb, onde La e Lb são Linguagens Regulares
La* , onde La é uma Linguagem Regular
Expressão Regular que denota L
f
a
a+b
ab
a*
Na definição primitiva, uma Linguagem Regular nada mais era do que as linguagens que podiam ser
denotadas por uma Expressão Regular.
7.7.3Demonstrando que LRs ⊆ Lreg
Caso 1: LRs do Tipo I
Tomando G = ({S},å,f,S) , temos que L(G) = f, portanto f Î Lreg
24
Caso 2: LRs do Tipo II
Tomando G = ({S},å,(S,a),S), temos que L(G) = a, a Î å, e portanto {a} Î Lreg
Caso 3: LRs do Tipo III
Se La Î Lreg então $ Ga = (Va,å,Pa,Sa) | L(Ga) = La
Se Lb Î Lreg então $ Gb = (Vb,å,Pb,Sb) | L(Gb) = Lb
Tomemos então a gramática G = (Va È Vb È {S} , å , Pa È Pb È {(S,Sa),(S,Sb)} ,S).
Temos então, que, L(G) = L(Ga) È L(Gb) = La È Lb
Caso 4: LRs do Tipo IV
Se La Î Lreg então $ Ga = (Va,å,Pa,Sa) | L(Ga) = La
Se Lb Î Lreg então $ Gb = (Vb,å,Pb,Sb) | L(Gb) = Lb
Tomemos então a gramática G = (Va È Vb , å , (Pa È Pb È P) - Q ,Sa), onde,
(A,wSb) Î P sse (A,w) Î Pa
(A,w) Î Q sse (A,w) Î Pa
Temos então, que, L(G) = L(Ga)°L(Gb) = La°Lb
Caso 5: LRs do Tipo V
Se La Î Lreg então $ Ga = (Va,å,Pa,Sa) | L(Ga) = La
Tomemos então a gramática G = (Va È {S} , å , Pa È P ,S), onde,
(A,wSa) Î P sse (A,w) Î Pa
(S,Sa) Î P
(S,e) Î P
7.7.4Demonstrando que Lreg ⊆ LRs
Construiremos expressões regulares para uma gramática qualquer utilizando as seguintes regras:
S ® aA
A ® aB | bC
B ®aB | bC | e
C ® bC | e
Gramática
Expressões Regulares
Ls = aLa
La = aLb + bLc
Lb = aLb + bLc + e
Lc = bLc + e
Resta agora agrupar todas a expressões regulares em uma única:
Lema de Ardin : X = AX + B (I) , e Ï A , então $ uma única solução para X na forma X = A*B
Provando que é solução:
Vamos substituir a solução proposta na equação (I):
A(A*B)+B = A+B + B = (A++e)B = A*B
Provando que é única:
Vamos supor que não seja única.
Seja C tal que : C Ç A*B = f e C ¹ f.
Vamos assumir que T = A*B È C é uma solução para (I)
Substituindo T em (I) temos:
A*B ÈC = A((A*B)ÈC)+B
A*B+C = A((A*B)+C)+B = A+B + AC + B = A+B + B + AC = A*B + AC.
Portanto,
A*B+C = A*B + AC \
(A*B+C)ÇC = (A*B+AC)ÇC \
f + C = f + AC Ç C \
C = AC Ç C \
C Í AC.
Como C ¹ f , podemos tomar um z Î C de comprimento mínimo.
Tomemos também um y Î AC de comprimento mínimo.
Como e Ï A temos que:
|y| > |z| \ Contradição, visto que C Í AC.
Utilizando este resultado para simplificar as Expressões do exemplo:
1. Ls = aLa
2. La = aLb + bLc
3. Lb = aLb + bLc + e
4. Lc = bLc + e
Começamos de "baixo para cima" :
Lc = bLc + e Þ Lc = b*e Þ Lc = b*
Lb = aLb + bLc + e Þ Lb = aLb + bb* + e Þ Lb=aLb + b* Þ Lb=a*b*
La = aLb + bLc Þ La = aa*b* + bb* = a+b*+bb* = (a++b)b*
Ls = a(a++b)b*
24
25
8Propriedades de Linguagens Regulares
8.1Teorema da Iteração
8.1.1Definição
Se L é regular então $ um n ³ 0 tal que para todo x Î L e |x| ³ n temos que:
x = uvw onde:
· |uv| £ n
· |v| ³ 1
· uviw Î L , i ³ 0.
8.1.2Exemplo I
O teorema da iteração é bastante útil para demonstrar que uma determinada linguagem não é regular.
Demonstremos que L = {0n1n | n ³ 0 } não é regular:
Vamos supor por absurdo que L seja regular. Seja k a constante do teorema da iteração.
|uv| £ n É u = 0k , v = 0t , w = 0m1n , onde, k+t+m = n
|v| ³ 1 É k+t+m ³ k+1+m É n ³ k+1+m É n > k+m
Além disto, uviw Î L, i ³ 0 É uw Î L \ 0k0m1n Î L. Contradição, visto que k+m<n
8.1.3Exemplo II
Provemos que L = { 0p : p é primo } não é regular.
Supondo por absurdo que L é regular, tomemos n como a constante do teorema.
Como o número de primos é infinito, tomemos x = 0m , m > n
Temos então que x = uvw \ u = 0k , v=0l , w = 0s , onde k+l+s = m.
Além disto, l ³ 1
Sabemos que 0k0li0s Î L , para todo i ³ 0.
Tomando então i = k+s temos que 0k0l(k+s)0s Î L
Logo, k+l(k+s)+s é primo. Contradição, visto que:
k+1(k+s)+s = (k+s)(l+1) , e como l ³ 1, (k+s)(l+1) = (k+s)x , x ³ 2.
8.1.4Prova
Se L é regular então $ um FSA M = (Q,å,q0,d,F) tal que L(M) = L.
Sabemos que Q ³ 1 e Q é finito.
Tomemos então |Q| como sendo a constante n do teorema.
Seja x = a1...ar Î L(M) , r ³ n. /* Notar que se não existir tal x, a prova já está concluída */
Como x Î L(M) temos que:
(q0,a1...ar) |¾ (q1,a2...ar) |¾ (qr-1,ar) |¾ (qr,e), onde qi Î Q, 0 £ i £ r.
Portanto, como r ³ |Q|, na seqüência de passos que reconhecem x existem pelo menos dois estados
repetidos. Sejam qa , qb, os primeiros estados que se repetem.
Temos então:
(q0,uvw) |¾|u| (qa,vw) |¾|v| (qb,w) |¾* (qr,e) .
8.2Operações em Linguagens Regulares vistas como Conjuntos
8.2.1União
Dado duas linguagens regulares L1 e L2 temos que L1 È L2 é regular.
Prova: Como L1 e L2 são regulares, tomemos r1 e r2 como sendo as expressões regulares que denotam L1 e L2
respectivamente.
Portanto, r1+r2 denota L1ÈL2 \ L1ÈL2 é regular.
8.2.2Concatenação
L1 e L2 regulares Þ L1L2 regular.
Prova: Basta tomar as expressões regulares que denotam L1 e L2 e concatenalas.
26
8.2.3Fecho Transitivo Reflexivo
Se L é regular então L* é regular.
Prova: Trivial.
8.2.4Inverso
Se L é regular então L' = å* - L é regular.
Prova: Dado o FSA M = (Q,å,d,q0,F) que aceita L, temos que o FSA N = (Q,å,d,q0,Q-F) aceita
8.2.5Interseção
å*-L.
Pelo Teorema de DeMorgan sabemos que: L1 Ç L2 = (L1' È L2')', e portanto, pelas propriedades provadas
anteriormente, L1 Ç L2 é regular, quando L1 e L2 também são.
8.2.6Quociente
Sejam L,Z Í å* linguagens.
L/Z = { x Î å* | xy Î L , y Î Z }.
Exemplo:
L
1001
100
11101
11000
11010
Z
001
00
L/Z
1 ( 1001/001 )
110 ( 11000/00)
Se L é regular então L/Z é regular. /* Notar que Z pode ser qualquer linguagem */
Exemplo: L = { 0n | n º5 3 } Z = { 0p | p é primo } Þ L/Z é regular.
Prova: Seja FSA M = (Q,å,q0,d,F) tal que L(M) = L.
Seja M' = (Q,å,q0,d,F') tal que
F' = {p Î Q | (p,y) |¾* (q,e) ,q Î F , y Î Z }
x Î L/Z Þ xy Î L , y Î Z Þ x Î L(M')
x Ï L/Z Þ ...
Dica: Para provar que L é regular podemos tentar primeiro mostrar que L$ é regular, pois, pela
propriedade do quociente, teremos que L/{$} é regular.
8.3Operações utilizando Substituições
8.3.1Substituições
Dado uma linguagem L Í å* e um alfabeto D , que pode ser diferente de å. Uma substituição de L é obtida
da seguinte forma:
Criamos uma função g que associa todo símbolo b Î å a uma Linguagem B Í D*. Ou seja:
g:å®P(D*).
Além disto, determinamos que:
g(e) = {e}
g(f) = f
g(ax) = g(a).g(x)
Temos agora que g:å*®P(D*)
Exemplo: Seja å = {0,1} , D = {a,b} , L = {00,01}.
Tomemos g:å®P(D*) tal que: g(0) = {ab,bb} g(1) = {aa,ba}.
Temos então que:
g(00) = {g(0)g(0) } = { abab , abbb , bbab , bbbb }
g(01) = {g(0)g(1) } = { abaa , abba , bbaa , bbba }
g(L) = { abab , abbb , bbab , bbbb , abaa , abba , bbaa , bbba }
Quando para todo a Î å , g(a) Í D* é regular, dizemos que g é uma Substituição Regular
8.3.2Teorema da Substituição
Sejam å,D alfabetos, L Í å* uma linguagem regular e g:å®P(D*) uma Substituição Regular.
Temos então que g(L) = ÈxÎL {g(x)ÍD*} é regular.
A prova usa o fato de cada g(a) , a Î å , possuir um FSA que reconhece g(a).
26
27
8.3.3Morfismo
Dada uma substituição g:å®P(D*) qualquer.
Se |g(a)| = 1 , a Î å então g é um morfismo. Além disto, como toda Linguagem finita é regular, temos que:
Todo Morfismo é uma substituição regular.
Exemplo da Utilização de Morfismos para provar a irregularidade de uma Linguagem:
Seja L = {anbcn , n ³ 0 }. Vamos supor por absurdo que L é regular.
Tomemos o seguinte morfismo:
f(a) = 0 , f(b) = e , f(c) = 1.
f(L) = { 0n1n | n ³ 0 }.
Portanto, { 0n1n | n ³ 0 } é regular. Absurdo.
Cuidado:
Nem sempre este tipo de construção ajuda a determinar a irregularidade de uma
Linguagem, por exemplo: Dado L = {anban | n ³ 0 } , f(L) = { 02n | n ³ 0 } é
regular.
8.3.4 Morfismo Inverso
Seja f:å®D* um morfismo.
Tomemos f:å*®D* onde f(e) = e . f(ax) = f(a)f(x).
O morfismo inverso de f é uma função f-1:D*®å* tal que dada uma Linguagem L Í D* temos que: f-1(L) =
{ x Î å* | f(x) Î L }.
å = { 0,1 } D = {a,b }
f:å®D* , tal que f(0) = aa f(1) =aba.
L = (ab+ba)*a
Para descobrir f-1 (L) temos que encontrar as cadeias x Î å* , tais que, f(x) Î
(ab+ba)*a.
Estudemos todos os casos possíveis para x Î å*
Caso 1: x = 0y
f(0y) = aaf(y). Notando que as cadeias de L nunca começam com aa,
podemos afirmar que aaf(y) Ï L, e portanto, nenhum x da forma 0y Ï
f-1(L).
Caso 2: x = 1y
f(1y) = abaf(y)
Caso 2.1: y = e
f(1e) = aba \ 1 Î f-1(L)
Caso 2.2: y = 0w
f(10w) = abaaaf(w) \ 10w Ï f-1(L), visto que L não admite 3
"as" consecutivos.
Caso 2.3: y = 1w
f(11w) = abaabaf(w) \ 11w Ï f-1(L).
Portanto, apenas x = 1 Î f-1(L) \ f-1(L) = {1}
Exemplo:
8.3.5Teorema do Morfismo Inverso
Se L é uma Linguagem Regular então f-1(L) também é.
Demonstração: Como L é regular, $ um FSA M = (Q,D,d,q0,F) tal que L(M) = L.
Construiremos um FSA N = (Q,å,d',q0,F) que aceita f-1(L) usando o fato de que x Î f-1(L) sse f(x) Î L.
Dado q,p Î Q , a Î å temos que: d'(q,a) = p sse (q,f(a)) |M¾ * (p,e).
Temos então que:
(q0,x) |n¾ * (p,e) , p Î F Û (q0,f(x)) |M¾ * (p,e), p Î F
28
Utilizando o Teorema para Mostrar que uma Linguagem Não é regular:
Seja L = { anban | n ³ 0} sobre o alfabeto D = {a,b }
Vamos supor que L seja regular.
Tomemos o seguinte morfismo, f:å®D* , å = {0,1,b}
f(0) = a
f(b) = b
f(1) = a
Temos então que f-1(L) = { (0+1)nb(0+1)n }.
Tomemos a linguagem regular L1 = 0*b1* .
Como f-1(L) é regular, temos que: { (0+1)nb(0+1)n } Ç 0*b1* é regular.
Ou seja, 0nb1n , é regular.
Tomemos então o morfismo g, tal que g(0) = 0 , g(b) = e , g(1) = 1.
Temos então que 0n1n é regular. Absurdo.
8.4Problemas de Decidibilidade
8.4.1Algoritmo para Decidir se L = φ
Teorema: Dado um FSA M = (Q,å,d,q0,F) , L(M) = f sse x não aceita nenhum cadeia de
comprimento £ |Q|.
Prova (Þ): L(M) = f então M não aceita qualquer x, inclusive aqueles tais que |x| £ |Q|
Prova (Ü): Vamos supor por absurdo que L ¹ f.
Tomemos então z Î L(M)
Temos que |z| > |Q|, e portanto, existe pelo menos um estado repetido no caminho
percorrido para reconhecer z. Podemos então tomar u como sendo a cadeia
reconhecida ao "tomarmos
o atalho" possibilitado pela ocorrência de estados
repetidos. Desta forma, encontraremos uma cadeia u
onde |u| £ |Q| , contradição.
Algoritmo para Decidir se L = f
Entrada: L regular
Sadia:
[SIM|NAO]
Descrição: Gere um FSA M tal que L(M) = L
Resposta = SIM
Para todo z Î å* onde |z| £ |Q| faca
Se z Î L(M) então
Resposta = NAO
Retorne( Resposta )
8.4.2Algoritmo para Decidir se L é finita
Teorema: L ¹ f é infinita Û $ x em L com |Q| £ |x| £ 2|Q| tal que x é aceita por M = (Q,å,q0,d,F)
Prova (Þ): O maior laço na representação de M tem comprimento |Q|.
Podemos então encurtar z de uma palavra u tal que 1 £ |u| £ |Q|
Seguinte este procedimento, chegaremos a uma palavra x , onde |Q| £ |x| £ 2|Q|.
Prova (Ü): Como |x| > Q , temos um laço em M, e portanto, podemos gerar infinitas cadeias
passando
por este laço.
Algoritmo para Decidir se L é finita
Entrada: L regular
Saída:
[SIM|NAO]
28
29
Descrição: Use o algoritmo anterior para decidir se L = f
Se L = f então
Retorne( SIM )
Para todo z Î å* onde |Q| £ |z| £ 2|Q| faca
Se z Î L(M) então
Retorne(NAO)
Retorne(SIM)
8.4.3Algoritmo para Testar se L1 ⊆ L2
L1 Í L2 Þ L1 Ç L2' = f ( L2' = Inversa de L2 )
Sabemos que X1' é regular, e X1 Ç X2 é regular, quando X1 ,X2 são regulares. Portanto, L1 Ç L2' é regular.
Logo, para decidir se L1 Í L2 basta encontrar L = L1 Ç L2' , e usar o algoritmo 1.4.1 para decidir se L = f .
8.4.4Algoritmo para Testar se L1 = L2
Basta usar o seguinte fato, junto com o algoritmo anterior:
L1 = L2 Û L1 Í L2 e L2 Í L1.
8.5Minimização de Autômatos FSA
8.5.1Eliminação de Estados Inúteis ( Autômato Reduzido )
Dado M = ( Q,å,q0,d,F) , dizemos que um estado p Î Q é útil se e somente se $ x Î å* tal que (q0,x) |¾*
(p,e).
Para encontrar o conjunto Qu de estados úteis de M, basta fazermos uma busca em profundidade no grafo
dirigido que representa M. Um estado q Î Qu se e somente se q aparecer na Árvore de Profundidade de M.
O autômato N reduzido equivalente a M é dado por (Qu,å,du,q0,Fu ), onde Fu = F Ç Qu e du(p,a) = d(p,a).
8.5.2Eliminação dos Estados Indistinguíveis ( Autômato Mínimo )
Dois estados p,q Î Q são indistinguíveis sse p/todo x Î å* temos:
(p,x) |¾* (f,e) , f Î F Û (q,x) |¾* (f',e) , f' Î F.
Teorema: Se p e q são distinguíveis e d(p',a) = p , d(q',a) = q então p'e q' são distinguíveis.
Algoritmo para encontrar estados indistinguiveis:
Seja M = (Q,å,q0,d,F) um FSA.
Seja D um conjunto de pares que conterá todos os pares de estados distinguíveis.
D = (p,q) | p Î F e q Ï F.
Enquanto D estiver aumentando de tamanho de uma iteração para outra faça
Para Todo (p,q) Î QxQ tal que (p,q) Î D faça
Para Todo a Î å faça
p' = d(p,a)
q' = d(q,a)
Se (p',q') Î D então
D = D È (p,q)
I = { (p,q) | (p,q) Ï D } /* Conjunto de estados indistinguíveis */
Para facilitar a execução manual do algoritmo é aconselhável a utilização de uma Matriz Triangular Inferior:
Exemplo:
1
1
q0
q1
0
q1
q2
q3
q4
a
b
b
b
q0
q2
0
a
a
a
q1
I
I
q2
1
1
q3
0
q4
0
a = Entraram em D antes do laço
b = Entraram em D na primeira iteração
c = Entraram em D na segunda iteração
I
q3
I = Indistinguíveis
1
0
30
Para gerar o Autômato Mínimo devemos observar que a Relação de Indistinguibilidade é uma Relação de
Equivalência sobre Q, e portanto, particiona Q em algumas classes [q] , q Î Q.
Construímos o Autômato Mínimo M' = (Q',å,q0',F',d') da seguinte forma:
Q' = { [q] | q Î Q } /* Partição que contém q */
q0' = [q0]
F' = { [f] | f Î F }
d'([q],a) = [d(q,a)]
8.5.3Construção do Autômato Mínimo
Sabendo que a relação de indistinguibilidade "~" é de Equivalência sobre os estados de Q. Denominemos de
[q] a classe do estado q na partição induzida por ~.
Construamos o autômato M'= (Q',å,F',q0',d') onde:
Q' = { [q] : q Î Q }
q0' = [q0]
F' = { [f]: f Î F }
d'([q],a) = [d(q,a)]
8.6Demonstrando que o autômato M' é mínimo e único
8.6.1A relação de Indistinguibilidade ~ é de Equivalência
8.6.2Se q é final ( não final) então todo p ∈ [q] é final (não final)
8.6.3~ é invariável a direita
d(p,a) ~ d(q,a) para todo a Î å
8.6.4L(M) = L(M')
8.6.5[p] ~ [q] se e somente se [p] = [q]
8.6.6Construção de outro autômato mínimo M''
Vamos tomar um autômato mínimo qualquer M''.
Por M'' ser mínimo, temos que |Q''| é mínimo.
Criemos a relação a que associa cada estado q' de M' a um estado s de M''
8.6.7α é um para um
Demonstrar que [p]as , [q]as Þ [p] = [q]
8.6.8α um para um ⊃ |Q''| ≥ |Q'|
8.6.9|Q''| = |Q'|
Como |Q''| ³ |Q'| e |Q''| é mínimo, temos que |Q''| = |Q'|
8.6.10M' e M'' são isomorfos
d'([p],a) a d''(s,a) onde [p] a s
30
31
9Gramáticas Livres de Contexto
9.1Definição
É uma gramática G = (V,å,P,S) onde
VÇå=f
V e å são finitos
SÎV
P Í Vx(VÈå)* , ou seja, as produções podem conter qualquer seqüência de Terminais e Não
Terminais no Lado Direito. /* Aqui está a diferença em relação a GLD */
G induz uma relação de derivação , Þ , onde Þ Í (VÈå)*x(VÈå)* e
a Þ b sse a = a1Aa2 , b = a1ga2 e A®g Î P.
L(G) = { x Î å* : S Þ* x }
Exemplos:
1
2
3
4
Gramática
E ® E + E | E * E | (E) | i
Linguagem Correspondente
Expressões Algébricas contendo
adição,multiplicação e uma variável.
anbnambm com n,m ³ 1
S ® B1B2
B1 ® aB1b | ab
B2 ® aB2b | ab
S ® 0S1S | 1S0S | e
S ® 0S0 | 1S1 | e
Número de 0's é igual ao número de 1's
xxT : x Î (0,1)*
9.2Árvores de Derivação e Ambiguidade
Se uma gramática G admite mais de uma árvore de derivação para uma mesma cadeia x, dizemos que G é
ambígua.
Tomemos o exemplo 1.
A cadeia i+i*i Î L(G) admite duas árvores de derivações:
Árvore de Derivação I
Árvore de Derivação II
E
E
i
E
+
E
E
i
*
E
E
E
i
i
+
*
E
E
i
Portanto G é ambígua.
No entanto, neste caso, é possível construir uma gramática equivalente a G que não é ambígua:
E®E+T|T
T®T*F|F
F ® (E) | i
9.3Propriedade Principal das Gramáticas Livres de Contexto
Seja G = (V,å,P,S) e a Î (VÈå)* : a Þ* b
Temos então que a = a1...an , ai Î (VÈå) , 1£i£n e
b = b1...bn , bi Î (VÈå) , 1£i£n e
ai Þ* bi , 1£i£n.
Pela propriedade acima é que estas gramáticas são chamadas "Livre de Contexto".
32
9.4Ambiguidade: Definição Formal
9.4.1Derivação mais a direita
É uma relação obtida apartir da relação Þ , acrescentado-se a seguinte propriedade:
A cada passo da Derivação, apenas o Não Terminal que estiver mais a direita deve ser consumido:
Exemplo:
E®E+T|T
T ® T*F | F
F ® (E) | a
Produção de (a+a)*a usando a derivação + a direita:
E dÞ T dÞ T * F dÞ T*i dÞ (E)*a dÞ (E+T)*a dÞ (E+F)*a dÞ (E+a)*a dÞ (T+a)*a dÞ (F+a)*a dÞ (a+a)
*a
9.4.2Derivação mais a esquerda
Análoga ao caso anterior
Para produzir (a+a)*a teríamos:
E eÞ T eÞ T * F eÞ (E)*F eÞ (E+T)*F eÞ (T+T)*F eÞ (F+T)*F eÞ (a+T)*F eÞ (a+F)*F eÞ (a+a)*F eÞ
(a+a)*a
9.4.3Caracterização de Gramática Ambíguas
G = (V,å,P,S) é ambigua sse $ x Î L(G) : x admite mais de uma derivação mais a direita.
9.4.4Caracterização de Linguagens Ambíguas
Um linguagem L é ambígua sse toda GLC G : L = L(G), implica G é ambígua.
9.5Operações de Redução sobre uma GLC
9.5.1Eliminação de Improdutivos
Um não terminal A Î V é produtivo sse A Þ* x , para algum x Î å*.
Algorítmo para obter não terminais improdutivos
N0 = å
i=0
Faça
Ni+1 = Ni È { A : A®g em P e g Î Ni* }
i=i+1
Até que Ni = Ni-1 .
Produtivos = Ni
Improdutivos = V - Ni
Gramática sem improdutivos (Gp):
Dado G = (V,å,P,S) Gp = (Vp,å,Pp,S) onde Vp = Produtivos È {S}
Pp = A®g onde A Î Vp e g Î Vp*
Exemplo:
Gramática
S ® Aa | B | D
A ® aA | bA | B
B®b
C ® ab
N0
a,b
N1
a,b,B,C
N2
N3
a,b,B,C,A,S a,b,B,C,A,S
Produtivos: N3
Improdutivos: { D }
Para demonstrar que dado G uma GLC e G' uma GLC sem símbolos improdutivos, L(G) = L(G') basta
demonstrar e usar o seguinte fato:
a GÞ* x , x Î å* sse a G'Þ*x
9.5.2Eliminação de Inalcançáveis
A Î V é alcançável em G sse G Þ* aAb, p/ algum a,b Î (VÈå)*
Algoritmo para obter inalcançáveis.
A0 = { S }
i=0
Faça
Ai+1 = Ai È { B | A ® aBb Î P e A Î Ai }
32
33
i=i+1
Enquanto Ai = Ai-1
Alcançáveis = Ai
Inalcancáveis = V - Ai
Gramática sem Inalcançáveis (Ga):
Ga = (Va,å,Pa,S) onde Va = Alcançáveis
Pa = A ® a onde A ® g Î P e A,g Î {VaÈå)*
Exemplo:
Gramática
S ® Aa | B
A ® aA | bA | B
B®b
C ® ab
N0
S
N1
S,A,B
N2
S,A,B
Alcançáveis = N2
Inalcançáveis = { C }
Gramática Ga
S ® Aa | B
A ® aA | bA | B
B®b
Para demonstrar que L(G) = L(Ga) basta provar e usar o seguinte fato:
Dado a Î (Va Èå*) a GÞ* b sse a GaÞ* b
9.5.3Grámatica Reduzida
Uma GLC G é reduzida sse todo símbolo de G é produtivo e alcançável
Teorema: Dado GLC G = (V,å,P,S) , $ GLC G' = (V',å,P',S') reduzida tal que L(G) = L(G').
Para gerar G' usamos o seguinte método
Passo 1. Eliminar não produtivos
Passo 2. Eliminar não alcançáveis
Para demonstrar que L(G') = L(G) temos que demonstrar ainda que o passo 2 não reintroduz símbolos não
produtivos.
Fato: Se b é não alcançável e A ® aBb Î P então A é não alcançável.
Fato: A aplicação dos passos 1 e 2 na ordem inversa pode não eliminar todos os não alcançáveis.
Exemplo:
S ® AB | a
Þ
A®a
(Passo 2)
S ® AB | a
Þ
A®a
(Passo 1)
S®a
A→a
9.5.4Eliminação de Regras Tipo Cadeia
São regras do tipo A ® B onde A,B Î V.
Algorítmo para Eliminação de RTC.
Para todo A Î V faça
N1(A) = { B : A ® B Î P }
i=1
Faca
Ni+1(A) = Ni(A) È {B:X®B , X Î Ni(A) }
i=i+1
Até que Ni(A) = Ni-1(A)
NA = Ni(A)
Construção da nova gramática sem regras tipo cadeia (Gs)
A ® a Î Ps para todo A ® a Î P e a Ï V
A ® a Î Ps para todo B ® a Î P e a Ï V e B Î NA
Lema: L(G) = L(G')
Exemplo:
Gramática
S ® A|Aa
A®B
B ® C|b
C ® D|ab
D®b
V
S
A
B
C
D
N1
A
B
C
D
φ
N2
A,B
B,C
C,D
D
φ
N3
A,B,C
B,C,D
C,D
-
N4
N5
NX , X ∈ V
A,B,C,D A,B,C,D A,B,C,D
B,C,D
B,C,D
C,D
D
-
9.5.5Eliminação de produções nulas ( A→ε )
Algoritmo para Eliminação de produções nulas
Gramática G'
S ® Aa|b|ab
A ® b|ab
B ® b|ab
C ® ab|b
D®b
34
/* Calcular quais A Î V quais A Þ+ e */
A1 = { X Î V : X ® e Î P }
Ai+1 = Ai È { X Î V : X ® a , a Î Ai* }
Calcular Ai até que Ai = Ai-1
Ne = Ai
Geração da nova gramática (G') :
Se A ® a Î P , a ¹ e , então A ® a Î P'
Se A ® a0X1a2X2...an-1Xnan , onde Xi Î Ne e a1...an ¹ e então
A ® a0a1...an em P'
Exemplo:
Gramática
S ® a | aAbB |B
A ® ab | e
B ® Aa | e
N1
A,B
N2
A,B,S
Nε Gramática G'
A,B,S S ®a | aAbB | B | abB | aAb | ab
A ® ab
B ® Aa | a
9.5.6Ordem das Eliminações
Para Eliminar corretamente todos os casos acima sitados, o algorítmo deve ser aplicado na seguinte ordem:
Passo 1: Eliminar Produções Nulas
Passo 2: Eliminar Regras do Tipo Cadeia
Passo 3: Eliminar Não Produtivos
Passo 4: Eliminar Não Alcançáveis
9.6Forma Normal de Chomsky
9.6.1Definição
Uma GCL G está na Forma Normal de Chomsky sse toda produção de G é da forma A ® BC ou A ® a
( Note que a forma normal de chomsky pura não admite gramáticas onde e Î L )
9.6.2Algoritmo para transformação de um GLC qualquer em uma GLC na FNC
Passo 1:
Passo 2:
Passo 3:
Passo 4:
Passo 5:
Eliminar produções nular
Eliminar regras do tipo cadeia
Reduzir G
P/toda produção A ® w1w2a , a ¹ e, wi Î (VÈå)
Elimine A ® w1w2a e acrescente
A ® w1y e y ® w2a , onde y é um novo não terminal
Repite este procedimento até que para todo A®a Î P , |a| £ 2
Se A ® aB ou A ® Ba ou A ® ab , onde a,b Î å e A,B Î V então
Elimina a produção e acrescente:
A ® XaB ou A ® BXa ou A ® XaXb e
Xa ® a e Xb ® b , onde Xa e Xb são novo não terminais.
9.6.3Exemplo
Gramática após Passo 3
S ® bA | aB
A ® bAA | aS | a
B ® aBAB | bS | ab
Após Passo 4
S ® bA | aB
A ® bY1 | aS | a
B ® aY2 | bS | ab
Y1 → AA
Y2 → BY3
Y3 → AB
Após Passo 5
S ® XbA | XaB
A ® XbY1 | XaS | a
B ® XaY2 | XbS | XaXb
Y1 ® AA
Y2 ® BY3
Y3 ® AB
Xa → a
Xb → b
34
35
9.7Forma Normal de Greiback
9.7.1Definição
Toda produção esta na forma A ® bX1...Xn , n ³ 0, Xi Î V, b Î å.
9.7.2Algoritmo
Para gerar uma Gramática G na Forma Normal de Greiback, vamos assumir que G esteja na Forma Normal
de Chomsky. Além disto, usaremos uma função A que mapeia n números inteiros nos n símbolos não
terminais de G para podermos fazer referência aos não terminais de G de forma ordenada. Teremos, desta
forma, V = { A1 , A2 , ... , An }.
Passo I : Índices Decrescentes
/* Elimina produções onde o lado direito começa com um Não Terminal "maior"
Terminal do lado esquerdo */
Para i = n até 1 faça
Para toda produção Ai ® Aka com k > i faça
Para m = k até (i+1) faça
Para toda produção Am ® b acrescente
Ai ® ba em P
Eliminie Ai ® Aka
Passo II : Eliminar Recursões
/* Elimina produções onde o lado direito começa com um Não Terminal "igual"
do lado esquerdo ( Produção Recursiva ) */
Para cada X Î V que possui alguma produção Recursiva faça
Crie 2 conjuntos cujos elementos são "lados direitos" de produções de X
N = { a1 , .... , ak } /* Lados direitos de produções não recursivas */
R = { Xb1 , .... , Xbt } /* Lados direitos de produções recursivas */
Substitua as produções de X pelas seguintes produções:
X ® a1 | a2 | ... | ak
X ® a1Zx | a2Zx | .... | akZx
Zx ® b1Zx | b2Zx | .... | btZx
Zx ® b1 | b2 | ... | bt
Onde o x de Zx é o índice de X.
/* Note que as substituições acima vêm do fato de que a linguagem gerada por X
+ .... + αk)(β1 + ... + βt )* */
Passo III : Índices Crescencentes
Para j = 2 até n faça
Para toda produção Aj ® Aka , k < j faça
Para toda produção Ak ® b faça
Acrescente A ® ba em P
Elimine Aj ® Aka
Para i = 1 até n faça
Para toda produção Zi ® Aka faça
Para toda produção Ak ® b
Acrescente Zi ® ba em P
Elimine Zi ® Aka
9.7.3Exemplo
G na FNC
A1 ® A2A3
Após Passo I
A1 ® A1A2A1A3
A1 ® aA1A3
A1 ® bA3
A2 ® A3A1
A2 ® A1A2A1
Após Passo II
A1 ® aA1A3
A1 ® bA3
A1 ® aA1A3Z1
A1 ® bA3Z1
A2 ® A1A2A1
A2 ® b
A3 ® A1A2
A2 ® aA1
A2 ® b
A3 ® A1A2
A2 ® aA1
A2 ® b
A3 ® A1A2
Após Passo III
A1 ® aA1A3
A1 ® bA3
A1 ® aA1A3Z1
A1 ® bA3Z1
A2 ® aA1A3A2A1
A2 ® bA3A2A1
A2 ® aA1A3Z1A2A1
A2 ® bA3Z1A2A1
A2 ® aA1
A2 ® b
A3 ® aA1A3A2
A3 ® bA3A2
A3 ® aA1A3Z1A2
que o Não
ao Não Terminal
ser: (α1
36
A3 ® a
A3 ® a
A3 ® a
Z1 → A2A1A3Z1
Z1 → A2A1A3
A3 ® bA3Z1A2
A3 ® a
Z1 ® aA1A3A2A1 A1A3Z1
Z1 ® bA3A2A1 A1A3Z1
Z1 ® aA1A3Z1A2A1 A1A3Z1
Z1 ® bA3Z1A2A1 A1A3Z1
Z1 ® aA1A3A2A1 A1A3
Z1 ® bA3A2A1 A1A3
Z1 ® aA1A3Z1A2A1 A1A3
Z1 ® bA3Z1A2A1 A1A3
36
37
10Automatos com Pilha - PushDown
10.1Definição
10.1.1Componentes
Um Automato com Pilha é um Sistema S = (å,G,Q,q0,F,d,Z0) onde:
å = Alfabeto de Entrada
G = Alfabeto da pilha
Q = Conjunto finito de Estados
q0 Î Q = Estado Inicial
F Í Q = Conjunto de Estados Finais
d = Relação de Qx(åÈ{e})xG em QxG*
Z0 Î G = Simbolo inicial da Pilha.
10.1.2Configuração
Uma configuração de um AP ( Automato com Pilha ) pode ser representada atravéz de uma tripla ( q , x , g )
onde q Î Q é o estado atual, x Î å* é a parte da cadeia de entrada que ainda não foi lida e g Î G* é o
conteudo da pilha ( Lido apartir do topo ).
10.1.3Relação de Movimento
Seja zA = Qxå*xG* o espaço de configurações de um AP A.
Todo AP A induz uma relação de movimento ( |¾ ) sobre zAxzA de forma que:
(q,sx,Za) |¾ (p,x,ba) sse (p,b) Î d(q,s,Z) p,q ÎQ , ZÎG , s Î åÈ{e}, x Î å*, a,b Î G*
10.2Linguagem aceita por um AP A
10.2.1Aceitação por Estado Final
LF(A) = { x Î å* : (q0,x,Z0) |¾* (f,e,a) onde f Î F }
10.2.2Aceitação por Pilha Vazia
LP(A) = { x Î å* : (q0,x,Z0) |¾* (p,e,e) }
10.2.3Para Linguagem Regular L ∃ um AP que aceita L
Basta tomar o FSA N = (å,Q,d,q0,F) que aceita L, e construir, com base nele, o seguinte AP A:
A = (Q,å,{Z0},d',q0,Z0,F)
d'(q,a,Z0) = (p,Z0) sse p=d(q,a)
Teremos então que LF(A) = L
10.3Exemplos
10.3.1Automato a Pilha que aceita L = {0n1n : n ≥ 0 }
Intuição:
Ler todos os zeros e empilhar
Ler todos os 1's desempilhando um 0 para cada 1.
Definir aceitação por Pilha Vazia
Descrição: A = (å,G,Q,d,q0,Z0,F} onde
å={0,1}
G = { 0 , Z0 }
Q = { q0 , q1 , q2 }
F=f
q0 = q0
Z0 = Z0
d é definida da seguinte forma:
(q0,0Z0) Î d(q0,0,Z0)
; Empilha o primeiro zero
(q0,00) Î d(q0,0,0)
; Empilha os outros zeros
(q1,0) Î d(q1,e,0)
; "Advinha" a hora de começa a desempilhar
(q1,e) Î d(q1,1,0)
; Desempilha um 0 para cada 1
(q1,e) Î d(q1,e,Z0)
; Desempilha Z0 para ficar com a pilha vazia
Exemplo de uma seqüência de movimentos para aceitar 0011:
(q0,0011,Z0) |¾ (q0,011,0Z0) |¾ (q0,11,00Z0) |¾ (q1,11,00Z0) |¾ (q1,1,0Z0) |¾ (q1,e,Z0) |¾
(q1,e,e).
38
10.3.2Autômato que aceita L = { x : #a(x) = #b(x) } ⊆ {a,b}*
É claro que L não é regular, uma vez que, L Ç a*b* = { anbn , n³ 0 }
Intuição:
. Empilha a entrada desde que o símbolo de entrada seja igual ao topo da pilha
Desempilha quando topo da pilha ¹ Entrada
A cada momento a pilha por estar em duas situações.
1) a = an , n ³ 0 , neste caso, #a(y) = n + #b(y)
2) a = bn , n ³ 0 , neste caso, #b(y) = n + #a(y)
. Sempre que n = 0 o autômato entra num estado de aceitação
Descrição: A = ( å,G,Q,d,q0,Z0,F} onde
å={a,b}
G = { Z0 , a , b }
Q = { f , q0 }
F={f}
d é definida da seguinte forma:
(q0,sZ0) Î d(q0,s,Z0) , para todo s Î å
(q0,ss) Î d(q0,s,s) , para todo s Î å
(q0,e) Î d(q0,s,a) , onde a Î å - {s} , para todo s Î å.
(f,e) Î d(q0,e,Z0)
Demonstrando que L = Lf(A)
Dado s Î å , definiremos s' como sendo a quando s = b e b quando s = a
Teorema 1: (q0,x,smZ0) |¾k (q0,e,snZ0) , k ³ 0 , s Î å É #s(x) = #s'(x) + (n-m)
Provemos por indução em k
Base: ( k = 0 )
(q0,x,smZ0) |¾0 (q0,e,snZ0) É x = e , sn = sm \ n = m.
Temos então que #s(x) = #s'(x) = 0, visto que x = e
Portanto #s(x) = #s'(x) + n-m.
Hipótese de Indução:
A conjectura é verdadeira para todo i < k
Passo: ( k > 0 )
Como k > 0, temos que:
Caso 1: x = e
Por construção, apenas (f,e) Î (q0,e,Z0) , portanto.
A conjectura é vacuamente verdadeira ( não é possível chegar
q0 sem ler um símbolo de entrada )
Caso 2: x ¹ e
Como k > 0, temos que:
(q0,x,smZ0) |¾ (t,y,a) |¾k-1 (q0,e,snZ0)
Para chegar ao estado f , teriamos que ter Z0 no topo da pilha.
Portanto, t = q0 e x = cy , c Î å, visto que, apenas o passo que
leva ao estado f , não consome qualquer símbolo.
Caso 1: x = sy
Temos então que (q0,sy,smZ0) |¾ (q0,y,a)
Por construção: a = sm+1Z0
Portanto:
(q0,sy,smZ0) |¾ (q0,y,sm+1Z0) |¾k-1 (q0,e,snZ0)
Pela Hipótese de Indução ( t = k-1 ) temos que:
#s(y) = #s'(y) + n-(m+1)
Mas #s(x) = #s(y)+1 e #s'(x) = #s'(y), portanto:
#s(x) = #s'(x) + n-(m+1))+1 = #s'(x) + (n - m)
Caso 2: x = s'y
Temos então que (q0,s'y,smZ0) |¾ (q0,y,a)
Por construção: a = sm-1Z0
(q0,s'y,sm) |¾ (q0,y,sm-1) |¾k-1 (q0,e,snZ0)
Pela Hipótese de Indução:
#s(y) = #s'(y) + (n-(m-1))
Mas #s(x) = #s(y) e #s'(x) = #s'(y)+1, portanto:
#s(x) = #s'(x) - 1 + (n-(m-1)) = #s'(x) + (n-m)
Demonstrando que Lf(A) Í L
Tomemos x Î Lf(A). Temos então que (q0,x,Z0) |¾* (f,e,a).
Por construção, temos que a = e.
Portanto (q0,x,Z0) |¾* (f,e,e) \ (q0,x,Z0) |¾n (f,e,e)
Caso 1: x = e
É claro que x Î L
Caso 2: x ¹ e
Temos que x = sy , s Î å.
Pela construção, temos que:
(q0,sy,Z0) |¾ (q0,y,sZ0) |¾* (q0,e,Z0) |¾ (f,e,e)
.
38
39
Ou seja,
(q0,sy,Z0) |¾ (q0,y,sZ0) |¾n (q0,e,Z0) |¾ (f,e,e)
Pelo Teorema 1, temos que:
#s(y) = #s'(y) -1 = #s'(y) - 1
Como #s(x) = #s(y)+1 e #s'(x) = #s'(y), temos que:
#s(x) = #s'(x) -1 + 1 = #s'(x).
Logo, x Î L.
Demonstrando que L Í LF(A)
Use a volta do teorema 1
10.3.3Autômato que aceita L = { wwT : w ∈ {a,b}* }
(q0,s,Z0) Î d(q0,s,Z0) , todo s Î {a,b}
(q0,sx) Î d(q0,s,x)
(q1,x) Î d(q0,e,x)
(q1,e) Î d(q1,s,s)
(f,e) Î d(q1,e,Z0)
;
; Fase de Empilhamento
; "Advinha" o centro da cadeia
; Fase de Desempilhamento
; Aceitação
F = {f}
Q = {f,q0,q1}
G = {a,b,Z0}
Este autômato funciona com qualquer um dos modos de aceitação.
10.4Algumas propriedades
10.4.1Limite de "visão" do AP em relação a Pilha
(q,x,a) |¾* (p,e,b) É (q,xy,aγ) |¾* (p,y,bγ)
10.5Autômatos com Pilha Determinísticos
10.5.1Propriedade I
|d(q,s,x)| £ 1 , para todo q Î Q , s Î å È {e} , x Î G
Exemplo de Autômato que não satisfaz esta propriedade:
1. (q1,aa) Î (q0,0,a)
2. (q2, aa) Î (q0,0,a)
10.5.2Propriedade II
Se |d(q,a,a)| ³ 1 para algum a Î å , q Î Q então |d(q,e,a)| = 0
Exemplo de Autômato que satisfaz a primeira mas não satisfaz a segunda:
Q = {q0,q1} G = {a,b} å = {0,1}
1. (q1,aa) Î (q0,0,a)
2. (q1,ba) Î (q0,0,b)
3. (q1,ba) Î (q0,e,a)
Quando o autômato estiver apontando para o símbolo "a" ele pode escolher tanto a regra 1 quando a 3 para
prosseguir. ( Indeterminismo ).
A conjunção das Propriedades I e II geram uma condição Suficiênte ( Mas não necessária ) para que um
autômato seja Determinístico, i.é, todo o autômato que satisfaz estas propriedades é Determinístico. No
entanto, podem existir autômatos que não satisfaçam estas propriedades e mesmo assim sejam
Determinísticos.
40
10.6Equivalência entre os modos de Aceitação de um AP
10.6.1Linguagens aceitas por Estado Final ⊆ Aceitas por Pilha Vazia
Dado um AP A = (Q,å,G,q0,Z0,F,d) tal que LF(A) = L , construiremos um AP A' que aceita L por Pilha
Vazia, da seguinte forma:
A' = (Q',å,G ',q0',Z0',F',d') onde:
Q' = Q È { q0' , q'' }
G ' = G È { Z0' }
F' = f
d' contém todas as transições de d'
; Simula d
(q0,Z0Z0') Î d'(q0',e,Z0')
; Coloca um símbolo "atrás" de Z0
(q'',x) Î d'(f,e,x) , para todo f Î F
; "Advinha" quando A está num estado final e
; pula para um estado que esvazia a pilha
(q'',e) Î d'(q'',e,x) , para todo x Î G '
; Esvazia a pilha.
10.6.2Linguagens aceitas por Pilha Vazia ⊆ Aceitas por Estado Final
Dado um AP A = (Q,å,G,q0,Z0,F,d) tal que LP(A) = L , construiremos um AP A' que aceita L por Estado
Final , da seguinte forma:
A' = (Q',å,G ',q0',Z0',F',d') onde:
Q' = Q È { q0' , q'' }
G ' = G È { Z0' }
F' = { f ' }
d' contém todas as transições de d'
; Simula d
(q0,Z0Z0') Î d'(q0',e,Z0')
; Coloca um símbolo "atrás" de Z0
(f ',e) Î d'(q,e,Z0') , para todo q Î Q
; "Advinha" quando a pilha de A está vazia e
; pula para um estado final de A'
10.7Métodos para Geração da Árvore de Derivação
10.7.1Método Bottom-Up
A árvore vai sendo construida das folhas para a raiz.
Por ser determístico, é usado na construção de compiladores.
Idéia do Autômato:
A cada passo o autômato deve executar uma das seguintes ações:
Redução: Se Pilha contém ba ( Sem contar Z ) e $ produção do tipo P ® a então
Desempilhe a
Empilhe P
Shift: Caso não seja possível fazer uma redução então
Leia símbolo que está sob a cabeça de leitura
Empilhe este símbolo
Exemplo: Dada a Gramática : E ® E+E | E*E | (E) | i reconhecer a cadeia i+i*i
Fita:
Pilha:
Oper:
Fita:
Pilha:
Oper:
i+i*i
i+i*i
E*
Shift
i+i*i
i
Shift
i+i*i
E*i
Shift
i+i*i
E
Redução
i+i*i
E+E
Redução
i+i*i
E+
Shift
i+i*i
E
Redução
i+i*i
E+i
Shift
i+i*i i+i*i
E+E
E
Redução Redução
A cadeia é reconhecida quando
a pilha termina apenas com o
Simbolo inicial.
Obs: O topo da pilha está do lado direito.
10.7.2Método Top-Down
A árvore vai sendo construida da raiz para as folhas
É altamente não determinístico: A cada passo o autômato "advinha" qual a produção que deve ser usada.
Fita:
Pilha:
Fita:
Pilha:
i+i*i
E
i+i*i
*E
i+i*i
E+E
i+i*i
E
i+i*i
i+E
i+i*i
i
i+i*i
+E
i+i*i
f
i+i*i
E
i+i*i
E*E
i+i*i
i*E
Obs: O topo da pilha está do lado esquerdo.
40
41
10.8Teorema Fundamental : GLC ≅ AP
10.8.1Linguagens Reconhecidas por AP's ⊆ Linguagen geradas por GLC's
Dado um AP A = (Q,å,G,q0,Z0,F,d) tal que LP(A) = L , construiremos uma Gramática G, tal que L(G) = L
da seguinte forma:
Consideração Importante: Um autômato que aceita por pilha vazia possui um propriedadefundamental, uma
função que descreva o tamanho da pilha a cada passo do autômato, durante a aceitação de uma
cadeia,decresce para 0. Isto significa que existem pontos bem determinados em que a pilha atinge um
tamanho x e depois nunca mais passa de x. Diremos que nestes pontos a pilha "baixa de nível".
A
L
T
U
R
A
P
I
L
H
A
...
7
6
5
4
3
2
1
0
0 1 2 3 4 5 6 7 8 9 10 11 12 13 ...
PASSOS
Último Passo
No exemplo acima, temos um exemplo da funcão citada descrevendo o reconhecimento de uma cadeia, note
que a pilha começa com tamanho 1 e termina em 0. Estão assinalados alguns pontos onde a pilha "baixa de
nível".
Como o AP só pode retirar um elemento da pilha por vez, podemos garantir que saindo do nível máximo,
para chegarmos ao nível mínimo, teremos que passar por todos os níveis
Os símbolos de G terão a seguinte "forma" : [q,A,p] indicando que o Autômato está no Estado q , com A no
topo da pilha e quando a pilha "baixar um nível" o autômato irá para o estado q.
Produções de G: ( Note que elas são altamente não determinísticas )
Tipo 1: S ® [q0,Z0,p] , para todo p Î Q
Tipo 2: [q,x,p] ® s , onde (p,e) Î d(q,s,x) , s Î å È {e} , x Î G
Tipo 3: [q,x,p] ® s[p,x1,q1][q1,x2,q2]...[qm,,xm,r] para todo q1,...,qm Î Q e onde
(p,x1...xm) Î d(q,s,x).
Exemplo:
Dado o autômato a Pilha que aceita L = {0n1n : n ³ 0 }
(q1,0Z) Î d(q,0,Z)
(q1,00) Î d(q1,0,0)
G={0}
(q2,0) Î d(q1,e,0)
Q = {q0,q1,q2}
(q2,Z) Î d(q1,e,Z)
å = {0,1}
(q2,e) Î d(q2,1,0)
(q2,e) Î d(q2,e,Z)
Gramática Equivalente:
S ® [q1,Z,q1] | [q1,Z,q2]
[q2,0,q2] ® 1
; (q2,e) Î d(q2,1,0)
[q2,Z,q2] ® e
; (q2,e) Î d(q2,e,Z)
[q1,0,r] ® e[q2,0,r] , r Î Q ; (q2,0) Î d(q1,e,0)
[q1,Z,r] ® e[q2,0,r] , r Î Q
; (q2,Z) Î d(q1,e,Z)
[q1,Z,q1] ® 0[q1,0,q1][q1,Z,q1]
; (q1,0Z) Î d(q1,0,Z)
[q1,Z,q1] ® 0[q1,0,q2][q2,Z,q1]
[q1,Z,q2] ® 0[q1,0,q1][q1,Z,q2]
[q1,Z,q2] ® 0[q1,0,q2][q2,Z,q2]
[q1,0,q1] ® 0[q1,0,q1][q1,0,q1]
[q1,0,q1] ® 0[q1,0,q2][q2,0,q1]
[q1,0,q2] ® 0[q1,0,q1][q1,0,q2]
[q1,0,q2] ® 0[q1,0,q2][q2,0,q2]
; (q1,00) Î d(q1,0,0)
42
Geração de 0011
S Þ [q1,Z,q2] Þ 0[q1,0,q2][q2,Z,q2] Þ 00[q1,0,q2][q2,0,q2][q2,Z,q2] Þ
[q2,0,q2][q2,0,q2][q2,Z,q2] Þ 001[q2,0,q2][q2,Z,q2] Þ 0011[q2,Z,q2] Þ
0011
00
Demonstração da Equivalência entre Lp(A) e L(G)
Teorema Auxiliar 1: (q,x,A) |¾* (p,e,e) É [q,A,p] Þ* x
Prova: Por indução.
(q,x,A) |¾n (p,e,e) , n ³ 0 É [q,A,p] Þ* x
Base: n = 0
Vacuamente verdadeiro
H.I: A conjectura é verdadeira para n-1
Passo: (q,x,A) |¾ (r,y,a) |¾n-1 (p,e,e) , logo, (r,a) Î (q,s,A) , x = sy
Caso 1: a = e .
Temos então que n=1, p=r, y=e e portanto
(r,e) Î (q,s,A) \ por construção [q,A,r] ® s \
[q,A,p] ® sy \[q,A,p] ® x
Caso 2: a ¹ e.
Temos então que a = x1...xm , m ³ 1 e xi Î G
e (r,x1...xm) Î d(q,s,A). Portanto, por construção:
[q,A,p] ® s[r,x1,r1][r1,x2,r2]...[rm-1,xm,rm] , rm = p.
Como o autômato reconhece por pilha vazia temos:
(r,y,x1...,xm) |¾n-1 (p,e,e) É y = y1...ym e
(r,y1,x1) |¾n1 (r1,e,e)
(r1,y2,x2) |¾n2 (r2,e,e)
...
(rm-1,ym,xm) |¾nm (rm,e,e)
É H.I
É H.I
[r,x1,r1] Þ* y1
[r1,x2,r2] Þ* y2
É H.I
[rm-1,xm,rm] Þ* ym
Temos então que: [q,A,p] Þ* sy1...ym = x
Demonstração de que Lp(A) Í L(G)
x Î Lp(A) É (q0,x,Z0) |¾* (p,e,e) É [q0,Z0,p] Þ* x
Por construção, S Þ [q0,Z0,p] \ S Þ* x \ x Î L(G)
Demonstração de que L(G) Í Lp(A)
Análogo ao caso anterior ( Basta provar a volta do Teorema Auxiliar )
10.8.2Linguagens Geradas por GLC's ⊆ Linguagens Reconhecidas por AP's
Dada uma Gramática G = (V,å,P,S) construiremos um AP equivalente da seguinte maneira: ( Método TopDown )
Q = {q0 } , F = f , Z0 = S , G = V È å
d é definida como:
(q,e) Î d(q,a,a) , a Î å
; Desempilha quando topo pilha = cabeça de leitura
(q,a) Î d(q,e,A) , para todo A Î V : A ® a Î P
Para demonstrar a equivalência usa-se o seguinte fato:
a Þ* x
Û (q,x,a) |¾* (q,e,e)
42
43
11Propriedades de GLC's
11.1Teorema da Iteração Simples
11.1.1Descrição
Seja L uma LLC. Então $ n ³ 1 tal que para todo x Î L com |x| ³ n, existem x1,x2,x3,x4,x5 tais que x =
x1x2x3x4x5 onde:
. |x2x3x4| £ n
.
.
|x2x4| ³ 1
Para todo i ³ 0 , x1x2ix3x4ix5 Î L
11.1.2Demonstração
Se L é LLC então existe GLC G, tal que L = L(G)
Vamos assumir que G está na FNC.
Temos então que a altura da árvore de derivação é diretamente proporcional a largura da cadeia derivada,
uma vez que as produções são do tipo A ® BC ou A ® b e portanto, "cada nó da árvore possui no máximo
dois filhos".
Temos ainda que os nós internos da árvore são símbolos não terminais.
Portanto, para cadeias bastante longas teremos caminhos longos partindo da raiz e chegando as folhas. Estes
caminhos, eventualmente terão que possuir não terminais repetidos, visto que a quantidade de não terminais
é finita.
Se a linguagem é finita, basta tomar como constante do teorema o tamanho da maior cadeia + 1.
Se a linguagem é infinita podemos garantir que existem cadeias que "exigem" que suas árvores de derivação
possuam "caminhos com símbolos repetidos". Neste caso, tomamos este caminho e escolhemos os 2
primeiros símbolos repetidos indo de baixo para cima na árvore de derivação. As cadeia x1,x2,...,x5 do
teorema são escolhidas da seguinte forma:
S
A
A
x1
x2
x3
x4
x5
Como G está na FNC e portanto, não existem produções do tipo A®B com A e B não terminais temos que |
x2x4| ³ 1. Além disto, como A é o último símbolo que se repete |x2x3x4| £ k ( constante do teorema ).
11.1.3Exemplo I
Demonstrar que L = {anbncn , n ³ 0 } não é LLC.
Vamos supor por absurdo que L seja LLC
Seja então k a constante do Teorema da Iteração
Tomemos x = akbkck .
Temos então que x Î L e |x| ³ k. Portanto, pelo T.I existem x1,x2,x3,x4,x5 que satisfazem aquelas três
propriedades do teorema.
Estudemos todas as possibilidades para x2 :
k
k
k
aaa...aaa bbb...bbbb ccc...cccc
1
2
3
4 5
44
Caso 1: x2 = am , m ³ 0
|x2x3x4| £ k É x2 e x4 não contém c's.
Como |x2x4| ³ 1 temos que x1x20x3x40x5 contém mais c's do que a's e/ou b's.
Caso 2: x2 contém a's e b's
x1x20x3x40x5 não está em L pois não Ï a*b*c* e L Í a*b*c*
Caso 3: x2 = bm , m ³ 1
x2 e x4 não contém a's.
Como |x2x4| ³ 1 temos que x1x20x3x40x5 contém mais a's do que b's e/ou c's.
Caso 4: x2 contém b's e c's
Análogo ao caso 2
Caso 5: x2 = cm , m ³ 1
x2 e x4 só contém c's.
Como |x2x4| ³ 1 temos que x1x20x3x40x5 contém mais a's do que c's.
11.1.4Exemplo II
Demonstrar que L = {aibjcidj , i,j ³ 0 } não é LLC.
Vamos supor por absurdo que L seja LLC
Seja então n a constante do Teorema da Iteração
Tomemos x = anbncndn .
Temos então que x Î L e |x| ³ n. Portanto, pelo T.I existem x1,x2,x3,x4,x5 que satisfazem as 3 propriedades do
teorema.
Estudemos todas as possibilidades para x2:
Caso 1: x2 contém a's
Então x2x4 não contém c's ou d's uma vez que |x2x4| £ n.
Pelo Teorema, y = x1x3x5 Î L, mas como |x2x4| ³ 1, y contém mais c's ou d's que a's ou b's.
Caso 2: x2 contém b's
Então x2x4 não contém d's uma vez que |x2x4| £ n.
Pelo Teorema, y = x1x3x5 Î L, mas como |x2x4| ³ 1, y contém mais d's que b's.
Caso 3: x2 não contém a's nem b's.
Então x2x4 não contém a's ou b's.
Pelo Teorema, y = x1x3x5 Î L, mas como |x2x4| ³ 1, y contém mais a's ou b's que c's ou d's.
11.2Teorema da Iteração Extendido (Ogden)
11.2.1Exemplo de linguagem que não é GLC e o TI simples não auxilia na prova
Demonstrar que L = {aibjckdl : (i=0) ou (j=k=l)} não é LC
Vamos supor por absurdo que L seja LC
Seja n a constante do teorema:
Caso 1: x não contém a's.
Temos que x = bjckdl e portanto, não importa como escolhamos x1,x2,x3,x4,x5 que
i
i
x1x2 x3x4 x5 , i ³ 0 pertencerá a L, pois, quando i=0 a igualdade entre j,k e l não precisa ser mantida.
Caso 2: x contém a's.
Temos que x = aibncndn , e portanto, sempre é possível escolher x1x2x3x4x5 de
forma a satisfazer
as propriedades do teorema: basta fazer x2 = am , x4 = e , 1 £ m
£ n.
11.2.2Descrição do Teorema ou Lema de Ogden
Para cada LLC $ uma constante n ³ 1 tal que para todo x Î L onde existem ³ n posições marcadas em x.
Existem cadeias x1,x2,x3,x4,x5 tais que x = x1,x2,x3,x4,x5 e valem as seguintes propriedades:
. x2x3x4 tem £ n posições marcadas
.
.
x2x4 tem ³ 1 posições marcadas
Para todo i ³ 0 , x1x2ix3x4ix5 Î L
11.2.3Demonstração do Teorema
Tomemos a gramática G = (V,å,P,S) na FNC que gera uma LLC L.
Chamemos de Não Terminais Marcados os símbolos não terminais T tais que se T Þ* b , b Î å* então b
possui símbolos marcados.
Seja x Î L tal que x = yz.
Tomemos um não terminal A tal que A ® BC Î P e B Þ* y , C Þ* z e y e z tem marcas.
Seja H a árvore de derivação x.
Se houverem h posições marcadas em x então altura de H ³ log(h).
Portanto, em H, existe um passeio a, de S para um terminal a, tal que em a existem pelo menos log(h) não
terminais marcados.
Escolhendo a constante do teorema, n , como sendo 2k+1, onde k = |V| teremos que para todo x com
posições marcadas ³ n, na árvore de derivação de x existe um passeio a de S para um terminal, tal que pelo
menos alguns deles se repetem.
Portanto, podemos tomar x1,x2,x3,x4,x5 da seguinte forma:
S Þ* x1Ax5
44
45
A Þ* x2Ax4
A Þ* x3
Onde A é o último símbolo que se repete e x2x4 possui pelo menos 1 símbolo marcado. Teremos então que
x2x3x4 possuem £ n marcados e x1x2ix3x4ix5 Î L , i ³ 0.
11.2.4Exemplo
Demonstrar que L = {aibjckdl : (i=0) ou (j=k=l)} não é LC
Vamos supor por absurdo que L seja LC
Seja n a constante do teorema:
Tomemos x = abncndn com bncn marcados.
Caso 1: x2 contem a's.
x2 e/ou x4 contém pelo menos um b e nenhum c ou d. Portanto x1x22x3x42x5 Ï L
Caso 2: x2 não contem a's
Caso 2.1 : x2 contem b's
x2x4 não contem d's e portanto x1x22x3x42x5 Ï L
Caso 2.2: x2 não contem b's
x2x4 não contem b's mas contem c's e portanto x1x203x405 Ï L
11.3Operações do Tipo Conjunto
11.3.1Fecho por União
Dados L1 e L2 Î LLC temos que existem gramáticas G1 = (V1,å,S1,P1) e G2 = (V2,å,S2 ,P2) que geram L1 e
L2 respectivamente
Construindo G3 = ( V1ÈV2ÈS3 , å , S3 , P1 È P2 È S3®S1|S2 ) teremos que L(G3) = L(G1)ÈL(G2), e portanto,
LLC é fechado por União.
11.3.2Fecho por Produto
Dados L1 e L2 Î LLC temos que existem gramáticas G1 = (V1,å,S1,P1) e G2 = (V2,å,S2 ,P2) que geram L1 e
L2 respectivamente
Construindo G3 = ( V1ÈV2ÈS3 , å , S3 , P1 È P2 È S3®S1.S2 ) teremos que L(G3) = L(G1)L(G2), e portanto,
LLC é fechado por Produto.
11.3.3Fecho por Kleene
Dados L1 Î LLC temos que existe gramática G1 = (V1,å,S1,P1) que gera L1
Construindo G3 = ( V1ÈS3 , å , S3 , P1 È S3®S1.S3 | e ) teremos que L(G3) = L(G1)*, e portanto, LLC é
fechado pelo Fecho de Kleene.
11.3.4Não validade do Fecho por Interseção
Dadas L1 = {anbnck , n,k ³ 0 } e L2 = {akbncn , n,k ³ 0 } temos que
L1 Ç L2 = {anbncn , n ³ 0 } Ï LLC. No entanto, L1 e L2 Î LLC.
11.3.5Não validade do Fecho por Complemento
Vamos supor por absurdo que para toda L Î LLC , L' = å* - L Î L.
Tomemos L1 e L2 Î LLC. Temos então que L1' e L2' Î LLC.
Pelo fecho da união temos que L1' È L2' Î LLC.
Pela suposição, temos que (L1' È L2' )' Î LLC.
Pelo teorema de DeMorgan (L1' È L2' )' = L1 Ç L2 e portanto L1 Ç L2 Î LLC. Contradição.
11.3.6Fecho por Interseção com Linguagens Regulares
Dadas L Î LLC e R Î LR temos que LÇR Î LLC.
Seja o AP A tal que LF(A) = L
Seja o FSA M tal que L(M) = R
Construiremos um AP A' para reconhecer LÇR da seguinte forma:
Estados de A' = [p,q] onde p é estado de A e q é estado de M.
Relação de transição de A' :
· ([p1,q1],a) Î d'([p,q],a,x) , a Î å sse (p1,a) Î dA(p,a,x) e q1 = dM(q,a).
· ([p1,q],a) Î d'([p,q],e,x) sse (p,a) Î dA(p,e,x)
F' = { [p,q] : p Î FA e q Î FM }
q0' = [p0,q0] : p0 é inicial de A e q0 é inicial de M.
11.4Substituições
11.4.1Fecho por Substituições Livres de Contexto
Se L é LLC e g é uma substituição Livre de Contexto, então g(L) é LLC.
Demonstração:
Seja G a gramática que gera L na FNC
Sejam Ga , para todo a Î å as gramáticas que geram La.
Para construirmos um gramática que gere g(L) basta tomarmos cada produção de G do tipo T®a , a Î å e
substitui-las por T ® Sa onde Sa é o símbolo inicial de Ga.
46
11.4.2Fecho por Morfismo
Segue-se do Fecho por Substituições Livres de Contexto e do fato de todas as Linguagens Finitas serem
Livres de Contexto.
11.4.3Fecho por Morfismo Inverso
Seja h um morfismo de å ® D*
Seja L Í D* uma Linguagem Qualquer
h-1 (L) = { x Î å* : h(x) Î L } é um Morfismo Inverso de L.
Teorema: A Classe LLC é fechada por morfismos inversos.
Demonstração:
Seja L Í D* uma LLC. Existe então um AP, A para aceitar L.
Construiremos um novo AP, M para aceitar h-1(L) da seguinte forma:
Estados de M:
Pares na forma [p,x] , onde p Î QA , x Î D* , e x = h(a) para alguma a Î å.
Movimento (d):
([p,y],a) Î dM([q,ay],e,Z) quando (p,a) Î dA(q,a,Z) onde a Î åÈ{e}
([p,h(a)],Z) Î dM([q,e],a,Z)
Aceitação:
Se aceitação de A for por pilha vazia, M aceita por pilha vazia e estado [q,e]
Exemplo:
L = { ww : w Î {a,b}* }.
Vamos supor por absurdo que L Î LLLC .
Temos então que L1 = { aibjaibj , i,j ³ 0 } Î LLLC uma vez que
L1 = L Ç a+b+a+b+ e a+b+a+b+ é regular.
Seja o seguinte morfismo:
h(a) = h(c) = a
h(b) = h(d) = b
Como L1 é Livre de Contexto, temos que h-1(L1) também é. Portanto,
L2 = h-1(L1) Ç a*b*c*d* é Livre de Contexto, visto que a*b*c*d* é regular.
No entanto, L2 = { aibjcidj , i,j ³ 0}, o que contradiz o fato de L2 Ï LLLC .
Obs: h-1(L1) = (a+c)i(b+d)j(a+c)i(b+d)j.
46
47
12Máquinas de Turing
12.1Definição "Intuitiva"
12.1.1Características principais
A máquina de Turing possui uma fita de tamanho infinito a direita com duas características diferencias em
relação aos FSA's:
· A fita pode tanto ser escrita como lida.
· A cabeça de leitura pode andar tanto para direita quanto para esquerda.
12.1.2Aceitação
Uma cadeia de entrada é aceita por uma máquina M se e somente se M passar por um estado final f. ( É
importante notar que uma cadeia x pode ser aceita mesmo que a cabeça não passe por todos os símbolos
de x ).
12.1.3Condições de parada (bloqueio)
Quando houver uma tentativa de movimento para uma posição anterior a primeira cela (posição) da fita.
Quando a relação d não determinar o próximo movimento. ( A relação d é restrita normalmente a uma
função parcial )
12.1.4Movimentos além de último símbolo da cadeia de entrada
Inicialmente a fita está completamente preenchida por um símbolo denominado branco. Este símbolo não
pode pertencer ao alfabeto da cadeia de entrada. Representaremos este símbolo por b. Desta forma, quando a
cadeia de entrada é copiada para a fita, teremos branco depois do final da cadeia, possibilitando que a
máquina continue se movimentando mesmo depois do ultimo símbolo da cadeia ( desde que d esteja
definido para b ).
12.2Descrição
Uma máquina de turing é um sistema M = (Q,å,G,q0,F,d) onde:
Q = Conjunto de estados ( ¹ f , finito )
q0 Î Q = Estado inicial
F Í Q = Estados Finais
G = Alfabeto de fita.
å Í G = Alfabeto de entrada.
d:QxG ® QxGxD , onde D = {R,L,I} indica a direção de movimento.
R = Right
L = Left
I = No Moviment
Restrições adicionais:
bÎG-å
d é uma função parcial ( Portanto d é determinística )
Maneira de representar um elemento de d
d(q,a) = (p,x,D) , onde:
q = Próximo Estado
a = Símbolo a ser escrito na posição atual
p = Estado anterior
x = Símbolo na posição atual
D = Direção a ser tomada após a escrita de a.
12.3Movimento da Máquina
12.3.1Configuração
Para obter a situação instantânea da máquina devemos possuir as seguintes informações:
Estado atual
Conteúdo da Fita
Posição da cabeça de leitura.
Representaremos estas informações da seguinte forma:
(a,q,b) onde a,b Î G* , q Î Q , conteúdo da fita = ab e a posição da leitora é na cela |a|+1.
Observações:
Como o símbolo a ser lido é o primeiro símbolo de b temos que b ¹ e
O conteúdo da fita na posição |ab|+1 em diante é b .
48
12.3.2Relação de Movimento
Esta relação sobre o espaço de configurações é definida da seguinte forma:
d(q,a) = (p,x,I) , q,p Î Q e a,x Î G
(a,q,ab) |¾ (a,p,xb)
d(q,a) = (p,x,R) , q,p Î Q e a,x Î G
b = e /* Note que existe um símbolo antes de b */
(a,q,a) |¾ (ax,p,B)
b¹e
(a,q,ab) |¾ (ax,p,b)
d(q,a) = (p,x,L) , q,p Î Q e a,x Î G
a = a'b
(a'b,q,ab) |¾ (a',p,bxb)
a=e
Bloqueio.
12.4Linguagem aceita por M
12.4.1L(M) = { x ∈ ∑* : (ε,q0,x) |* (α,f,β) onde f ∈ F }
12.5Exemplo de uma Máquina de Turing
12.5.1Construiremos uma Máquina de Turing para aceitar L = {anbncn , n ≥ 1 } que como se sabe não é uma
LLC.
12.5.2Idéia da Máquina:
aaaaa
Xaaaa
XXaaa
XXXaa
XXXXa
XXXXX
bbbbb
Ybbbb
YYbbb
YYYbb
YYYYb
YYYYY
ccccc
Zcccc
ZZccc
ZZZcc
ZZZZc
ZZZZZ
bbbbb
bbbbb
bbbbb
bbbbb
bbbbb
bbbbb
Fita Inicial
Fita depois do primeiro "loop"
Fita depois do segundo "loop"
...
...
...
12.5.3Estados:
q0 :
Se lendo "a" troca "a" com "X" e procura b andando para direita.
Senão pula para estado q4
q1 :
Troca "b" por "Y" e procura c andando para direita
q2 :
Troca "c" por "Z"
q3 :
Anda para esquerda até encontrar "X" é pula para q0
q4 :
Anda para direita enquanto não encontrar b's nem c's. Se encontrar bloqueia
( Cadeia tem mais
b's ou c's do que a's ). Senão encontrar irá certamente
encontrar um b , neste caso vai para o estado
final f.
f:
Estado Final. ( Quando chega aqui nada mais interessa )
12.5.4Movimento:
Troca a por X e anda para Direita
d(q0,a) = (q1,X,R)
Passa por a's e Y's até encontrar um b
d(q1,a) = (q1,a,R)
d(q1,Y) = (q1,Y,R)
Troca b por Y e anda para Direita
d(q1,b) = (q2,Y,R)
Passa por b's e Z's até encontrar um c
d(q2,b) = (q2,b,R)
d(q2,Z) = (q2,Z,R)
Troca c por Z e fica no mesmo lugar
d(q2,c) = (q3,Z,I)
Anda para esquerda até encontrar um X
d(q3,c) = (q3,c,L)
d(q3,Z) = (q3,Z,L)
d(q3,b) = (q3,b,L)
d(q3,Y) = (q3,Y,L)
d(q3,a) = (q3,a,L)
Move para direita e retorna ao estado q0
d(q3,X) = (q0,X,R)
Finalização: Ao encontrar um Y estando em q0 entra em estado de finalização
d(q0,Y) = (q4,Y,R)
Anda para direita enquanto estiver passando por Y's ou Z's
d(q4,Y) = (q4,Y,R)
d(q4,Z) = (q4,Z,R)
48
49
Se encontrar um b vai para um estado final
d(q4,b) = (f,B,I) , onde f Î F.
50
13Máquinas de Turing Generalizadas
13.1Fita infinita nas duas direções
Simularemos esta máquina I com uma máquina simples M da seguinte forma: ( Note que o problema inverso
é trivial )
Fita infinita nas duas direções
...
-3
-2
-1
1
2
3
Fita infinita a direita
...
1
-1
2
-2
3
-3
4
-4
5
-5
...
...
Trilha 1
Trilha 2
Posição inicial
A trilha 1 da fita de M simula as posições a direita (inclusive) da posição inicial na fita de I
A trilha 2 da fita de M simula as posições a esquerda da posição inicial na fita de I
Para simular as duas trilhas alteraremos o alfabeto de fita da nova maquina:
G(M) = G(I)xG(I)
; Se I tem k símbolos no alfabeto de fita, M terá k2 .
Além disto, teremos para cada um destes símbolos um outro equivalente para indicar o início da fita.
( Teremos 2k2 símbolos no total )
Estados:
Para cada estado q Î Q(I) teremos um estado q+ ( representando que a máquina está focalizando a trilha 1 )
e um estado q- ( foco na trilha 2 ).
Além disto teremos um novo estado q0.
Os estados finais serão os mesmos de I ( acrescentando-se o + e o - )
Movimentos:
Inicialização
dM(q0,[a,b]) = (q0+, [â,b] , I ) ; O símbolo com ^ indica que estamos na primeira cela.
Movimento para direita na máquina I estando na trilha 1
dM( q+ , [a,b] ) = (p+ , [u,b] , R ou I ) se d(q,a) = (p,u,R ou I )
dM( q+ , [â,b] ) = (p+ , [û,b] , R ou I ) se d(q,a) = (p,x,R ou I )
Movimento para esquerda na máquina I estando na trilha 1
dM( q+ , [a,b] ) = (p+ , [u,b] , L ) se d(q,a) = (p,u,L )
dM( q+ , [â,b] ) = (p- , [û,b] , I ) se d(q,a) = (p,x,L )
Para trilha 2 os movimentos são similares (Invertendo esquerda e direita )
13.2Mais de uma Fita
Neste tipo de máquina teremos que d: QxG3 ® (GxD)3.
Idéia da simulação:
Máquina com 3 fitas
Máquina com 1 fita
1
^
1
2
3
4
...
1
2
3
4
...
1
2
3
4
...
Cabeça
R/W
1
1
X
2
X
2
3
4
3
2
3
4
X
4
...
...
...
...
...
...
Trilha 0
Trilha 1 - Setor 1
Trilha 1 - Setor 2
Trilha 2 - Setor 1
Trilha 2 - Setor 2
Trilha 3 - Setor 1
Trilha 3 - Setor 2
Cabeça
R/W
A trilha 0 será usada apenas para marcar o início da fita.
As trilha 1,2,3 simulam as fitas 1,2,3 sendo que:
Setor 1 guarda o conteúdo da fita e o setor 2 a posição em que a fita está.
50
51
Macro Funcionamento da nova máquina:
· Excursiona para direita (3 vezes) para capturar o que cada fita contém nas respectivas posições atuais
( setor 2)
· Consulta d e descobre os novos símbolos e direções
· Excursiona para direita (3 vezes) até as posições atuais de cada fita , altera os valores (setor 1) e muda a
posição (setor 2).
13.3Máquinas Não Determinísticas
Para simularmos uma máquina não deterministica ( d não é restrita a uma função parcial ) usaremos uma
máquina com 3 fitas da seguinte maneira:
· Fita 1: Contém a entrada.
· Fita 2: Rascunho para a entrada.
· Fita 3: seqüência de movimentos que devem ser aplicados na fita 2 ( copia da fita 1).
A chave para o funcionamento desta máquina está na geração sistemática da seqüência na fita 3 de forma a
simular uma busca em largura na árvore que descreve todos os possíveis movimentos da máquina não
determinística.
Para cada seqüência gerada a máquina copia a fita 1 na fita 2 e começa a simular a máquina 2 ( usando os
dados da fita 3 para limitar as opções de d ).
Note que se fosse usada uma busca em profundidade a máquina poderia entrar num estado de loop infinito
antes de chegar a um estado final que estivesse em outra ramificação.
11
6
12
3
1
2
13
14
7
4
8
15
9
16
5
20
Na busca em largura é garantido que o estado 15 será
atingido. Numa busca em pro
fundidade poderia acontecer
de entrarmos em uma situação de loop (estados 12 - 20 11 )
10
13.4Máquinas de Turing como calculadoras
13.4.1Transformando aceitadora (Normal) em calculadora
Dado uma máquina aceitadora que aceita cadeias do tipo x#f(x) podemos construir uma calculadora que
dado uma cadeia de entrada x na fita, substitui x por f(x) da seguinte forma:
Vamos supor que x e f(x) estejam codificados num sistema unário, por exemplo: Se f(x) é função que eleva
um número ao quadrado teremos que f(3) = 9 seria representado por 000#000000000 , ou , 03#(03)2.
Funcionamento da calculadora:
Recebe como cadeia de entrada x.
Acrescenta # na frente de x.
i¬0
Faça
Substitui o que está na frente de # por i
Usa a máquina aceitadora como subrotina para verificar se x#i Î L
Se x#i Î L sai do laço
i¬i+1
52
Apaga fita e coloca i
13.4.2Transformando calculadora em aceitadora
Dado uma calculadora que calcula f(x) tendo x como entrada construiremos uma máquina que aceita x#f(x)
da seguinte forma:
Aceitadora recebe como entrada cadeias do tipo x#f(x)
Salva x#f(x) num rascunho
Extrai o x de x#f(x) que vem antes de #
Usa calculadora como subrotina para calcular f(x)
Concatena x , # , e f(x) e compara este resultado com aquele do rascunho.
Aceita sse o rascunho está igual ao resultado.
13.4.3Dove Tailing
Ao criar uma calculadora apartir de uma aceitadora deve-se tomar o seguinte cuidado:
Ao não aceitar uma cadeia de entrada, a máquina aceitadora pode entrar num estado de loop infinito. Se a
calculadora entrar neste estado antes de ter calculado o valor correto teremos um grande problema. Para
evitar que isto ocorra utiliza-se uma técnica chamada "dove tailing" , onde os números vão sendo testados
"paralelamente"
52
53
14Gramáticas tipo 0
14.1Definição
Nas gramáticas tipo 0 o lado esquerdo das produções pode conter uma cadeia com terminais e não terminais
( igual ao lado direito das gramáticas livre de contexto ). Ou seja, as produções das gramáticas tipo 0 são do
tipo: a ® b , a e b Î (VÈå)* e a ¹ e.
Observe no exemplo a seguir que este tipo de gramática permite que se simule movimentos sobre a cadeia
gerada até um determinado instante.
14.2Exemplo
Gramática para gerar L = {a2i , i ³ 1 } ; "a" elevado a ( 2 elevado a "i" )
S ® ACaB
Ca ® aaC
CB ® DB
aD ® Da
AD ® AC
CB ® E
aE ® Ea
AE ® e
; A e B são marcadores de início e fim
; dobra número de a's e vai para "anda" para direita
; inicia procedimento de fim de "linha"
; "anda" para esquerda
; Prepara para repetir o ciclo de geração de a's
; Para de gerar a's : Apaga marcador de fim (B)
; "anda" para esquerda
; apaga o marcador de inicio
Idéia do funcionamento: Começa sempre gerando 2 a's e vai dobrando a cada passo.
Geração de a23 , ou seja, aaaaaaaa
S Þ ACaB Þ AaaCB Þ
AaaDB Þ AaDaB Þ ADaaB Þ ACaaB
AaaCaB Þ AaaaaCB Þ
AaaaaDB Þ AaaaDaB Þ AaaDaaB Þ AaDaaaB Þ ADaaaaB Þ ACaaaaB
AaaCaaaB Þ AaaaaCaaB Þ AaaaaaaCaB Þ AaaaaaaaaCB
AaaaaaaaaE Þ
AaaaaaaaEa Þ AaaaaaaEaa Þ ... Þ AEaaaaaaaa Þ
eaaaaaaaa = aaaaaaaa
54
15Máquinas de Turing ≅ Gramáticas tipo 0
15.1Simulação de Gramáticas tipo 0 utilizando Máquinas de Turing
Simularemos uma gramática tipo 0, G, utilizando uma Máquina de Turing Não Determinística com 2 fitas:
Fita 1: Entrada
Fita 2: Rascunho
Funcionamento:
Inicializa fita 2 com "S"
Escolhe-se não deterministicamente uma das produções de G e aplica-se a um ponto do conteúdo da fita 2
( Este ponto também é escolhido não determinísticamente ).
Para cada escolha compara conteúdo da fita 2 com fita 1 e aceita se forem iguais.
15.2Simulação de Máquinas de Turing utilizando Gramáticas tipo 0
Vamos assumir que a Máquina de Turing M seja a mais específica possível ( Uma única fita infinita a direita
).
Principal dificuldade: A máquina de turing pode destruir a cadeia de entrada durante o seu funcionamento.
Idéia da gramática G que simula M:
Cada símbolo não terminal será representado por um par [a,x] , onde a é o símbolo inicial da fita e x é o
conteúdo da fita ( Cela da fita ) durante a computação.
Fase 1:
Gera cadeia inicial mais cópia
Gera espaço de rascunho à direita da "fita" ( A máquina pode usar o espaço que vem depois da cadeia de
entrada como rascunho )
S ® q0A0
; gera estado inicial
A0 ® [a,a]A0
; Para todo a Î å ( Permite a geração de qualquer cadeia inicial )
A0 ® A1
A1 ® [e,B]A1
; Permite a geração de uma quantidade qualquer de brancos.
A1 ® e
Fase 2:
Simula operação de M nos segundos elementos de cada par ( Não Terminal )
d(q,x) = (p,y,R) Þ q[a,x] ® [a,y]p , para todo a Î å
d(q,x) = (p,y,I) Þ q[a,x] ® p[a,y] , para todo a Î å
d(q,x) = (p,y,L) Þ [m,z]q[a,x] ® p[m,z][a,y] , para todo a,m Î å
Fase 3:
Se M entra num estado final, G regenera a fita inicial
q[a,x] ® qaq , para todo q Î F
[a,x]q ® qaq
q®e
54
55
16Linguagens Recursivamente Enumeráveis
16.1Definição
LRE = { L Í å* : Existe M.T , M tal que L = L(M) }
16.2Demonstrando que LLLC ⊆ LRE (Propriamente)
16.2.1Mostrando que LLLC ⊆ LRE
Para construir uma Máquina de Turing que simule um Autômato a Pilha P basta usar a generalização que
admite duas fitas:
Fita 1: Cadeia de entrada.
Fita 2: Simulação da Pilha.
16.2.2Mostrando que LLLC ⊆ LRE propriamente
As linguagens L1 = { ww : w Î å* } e L2 = { anbncn , n ³ 1 } não são LLC, no entanto, é possível construir
uma M.T para reconhecelas, portanto LLC ¹ RE.
16.3Propriedades
16.3.1União
Demonstração similar a LLC's
16.3.2Interseção
Sejam duas linguagens recursivamente enumeráveis L1 e L2 e duas máquinas M1 e M2 que as reconheçam.
O funcionamento da Máquina M ( 2 fitas ) que aceita L1 Ç L2 é o seguinte:
Copia fita com cadeia de entrada para fita rascunho
Simula M1 no rascunho.
Se M1 aceita : Copia fita de entrada para rascunho
Se M1 não aceita: rejeita ( Note que se M1 não parar M também não para )
Simula M2 no rascunho.
Aceita sse M2 aceita.
16.4Propriedades Não Válidas (Não Fechadas )
16.4.1 Complemento
16.4.2Produto ?
16.4.3Kleene ?
16.5Exemplo de Linguagem que não pertence a LRE
Toda RE pode ser aceita por uma máquina com 3 símbolos de fita.
Se M possuir k símbolos de fita ( k ³ 3 ) podemos codificar cada símbolo de M em um bloco de 0's , 1's e b's
( Cada bloco com cerca de log(k) símbolos ).
Para simular a máquina original a nova máquina deve seguir os seguintes procedimentos:
Transformar a entrada no código correspondente
Simular: lendo um bloco, obtendo novo estado e o código do novo símbolo , escreve novo bloco e move a
cabeça (de bloco em bloco ).
Máquinas de Turing podem ser descritas por um cadeia de 0's e 1's
Um exemplo de descrição de máquinas de turing usando 0's e 1's é o seguinte:
1 1 1
d
1 1
d
1 1
d
1 1
...
1
1
1
111
Sinaliza inicio/fim da descrição
11
Sinaliza inicio/fim de cada entrada de d
d 0a10b1Oc10d10e
a : Estado atual
b : Símbolo na fita
c : Novo Estado
d : Novo símbolo
e : Direção do Movimento
Desta forma conseguimos uma correspondência entre as máquinas de turing e um número binário positivo
que a representa.
56
Descrição da Linguagem Ld
Seja uma matriz w bidimensional de números binários onde cada elemento wm,n de w é definido da seguinte
forma:
1 : Se a i-ésima Máquina aceita a cadeia j
0 : Se i não é descrição de Máquina ( Não está na forma 111d11...11d111 ) ou a
i-ésima máquina rejeita j.
Tomemos Ld Í å* tal que Ld = { i : wi,i = 0 } ; Diagonal da matriz com elementos 0.
; Cadeia de entrada é a própria máquina.
Demonstrando que Ld ∉ LRE
Vamos supor por absurdo que L = L(M) para alguma Máquina de Turing M.
Seja k o número binário (cadeia sobre {0,1}* ) que corresponde a descrição de M.
Vejamos o que ocorre em w quando a cadeia k é fornecida como entrada para M:
Caso 1: k Î Ld
Pela definição de Ld temos que wk,k = 0.
No entanto, pela construção de w temos que Mk ( = M ) rejeita k. Contradição.
Caso 2: k Ï Ld
Pela definição de Ld temos que wk,k = 1
No entanto, pela construção de w temos que Mk rejeita k. Contradição.
Conclusão: Ld Ï LRE
56
57
17Linguagens Recursivas
17.1Definição
Conjunto de todas as linguagens aceitas por Máquinas de Turing que sempre param ( Aceitando ou Não ).
Linguagens Recursivas @ Problemas Decidíveis @ Algoritmos
17.2Propriedades
17.2.1União
Sejam L1 e L2 linguagens recursivas.
Construímos M para aceitar L1 È L2 da seguinte forma:
Simular máquina M1 que aceita L1
Simular máquina M2 que aceita L2
Parar e aceitar sse M1 ou M2 aceitam.
17.2.2Complemento
Para construir uma máquina que aceita L , basta inverter o resultado da máquina que aceita L.
17.2.3Interseção
Basta usar as duas propriedades anteriores (De Morgan)
17.2.4Se L ∈ LRE e L ∈ LRE então L,L ∈ LRC
Dado x Î å* construiremos um Autômato que sempre para assim:
Copia x para fita 2 e para fita 3
Simula alternadamente um movimento da máquina de L (M1) na fita 2 e outro da máquina de L (M2) na fita 3
Como x Î L ou x Î L uma das duas simulações sempre para.
Se M1 parar aceita , se M2 parar rejeita.
Possibilidades para L e L:
· L , L Î LRE ( É L,L Î LRC )
· L ( ou L ) Î LRE e L ( ou L ) Ï LRE
· L e L Ï LRE
17.3Linguagem Universal ∈ LRC e ∉ LRE
Lu = { <M>w : <M> aceita w } ; Linguagem Universal
<M> : Código binário que descreve uma Máquina de Turing.
Demonstração de que Lu Ï LRC
Vamos supor por absurdo que Lu seja recursiva.
Seja A uma Máquina de Turing que sempre para e que aceita Lu
Usaremos A para construir um algoritmo ( Máquina ) B para aceitar Ld ( código representando máquinas de
turing que aceitam seu próprio código como entrada ) que opera assim: ( Redução )
B recebe como entrada uma cadeia k ( Representação de uma Máquina de Turing )
Copia k para outra fita
Dobra k; Fita passa a conter kk
Usa A p/verificar se kk Î Lu. ( Sempre pára, visto que A é algoritmo )
Retorna o resultado de A.
Temos então que Ld Î LRC . Como RC é fechado por complemento, temos que, Ld = Ld Î LRC. Contradição.
17.4Problemas de Decisão
17.4.1Definição
São problemas cuja solução é SIM ou NÃO.
Um problema de decisão P é decidível sse a linguagem Lp que contém todos os códigos de instâncias de P
que representam SIM é recursiva.
17.4.2Técnica básica para mostrar que um problema é Indecidível
·
·
·
·
Construir Linguagem L equivalente ao problema.
Supor por absurdo que é Decidível e que portanto L Î LRC
Tomar a Máquina A que aceita L.
Reduzir a máquina A a uma máquina B que aceita um Linguagem L que sabidamente não pertença a LRC
58
17.4.3Problema Indecidível I: Problema da Parada
Descrição: Determinar se uma M.T. pára ao analisar uma cadeia de entrada que também é dada.
Para responder se este problema é decidível devemos resolver o seguinte problema:
Ly = {#<M>#w : M.T para ao computar sobre w } Î LRC
Vamos supor por absurdo que Ly Î LRC
Seja A a Máquina (Que sempre pára) que aceita Ly.
Reduziremos A a uma Máquina B para aceita Lu ( Linguagem Universal ).
Operação de B:
B recebe como entrada #<M>#w
Executa A sobre #<M>#w ( A sempre para )
Se A pára então
Se A rejeita então
M não pára sobre w \ M não aceita w \ B rejeita
Senão ( A aceita \ M pára )
B simula M sobre w ( Note que M pára )
Se M aceita , B aceita
Se M rejeita , B rejeita
Senão ( A não para )
B também não para e portanto rejeita ( Como tinha que ser )
Temos então que Lu Î LRC \ Contradição.
17.4.4Problema Indecidível II: Problema de Parada com fita branca
Descrição: Determinar se uma M.T, M pára ao computar sobre a fita branca.
Lb = { <M> : M pára ao computar sobre a fita branca }
Vamos supor por absurdo que Lb Î LRC
Seja A a Máquina que aceita Lb
Usaremos A para construir uma Máquina B para aceitar Ly ( Problema da Parada )
Operação de B:
B recebe como entrada #<M>#w
B constrói a descrição de uma nova máquina B' que opera assim:
B' Inicia com a fita vazia
; Máquina B' nunca para aqui
B' Escreve w na fita
; Máquina B' nunca para aqui
B' Simula M na fita.
; Máquina B' pode parar aqui dependendo de M e w
B aciona A sobre o código B'
Se A para então
Se A aceita então
B' para com fita vazia \ M pára com w \ B aceita
Senão ( A rejeita )
B' não para com fita vazia \ M não pára com w \ B rejeita
Senão ( A não para )
B também não pára e portanto rejeita.
Temos então que Ly Î LRC \ Contradição
58
59
18Classificação Geral das Linguagens
∑*
Recursivamente Enumeráveis
( Máquinas de Turing , Gramática 0)
Recursivas
( Máquinas de Turing Determ.)
(Algoritmos)
Livres de Contexto
( Autômatos a Pilha , Gramáticas
livre de Contexto )
Regulares
( FSA
Gramáticas Regulares
NFSA
e-FSA
Expressões Regulares
2-FSA )
0*1*
0n1n
ww
Lu
Ld
Download

Notas de Aula NÃO REVISADAS