Escolar Documentos
Profissional Documentos
Cultura Documentos
2/113
2.
atravs da injeo g:Nat2 Nat definida por g( (i,j) ) = 2i 3j. Esta numerao
dos pares de inteiros s vezes chamada de numerao de Goedel. Esse
processo pode ser estendido a potncias superiores de Nat. Por exemplo,
podemos associar tripla (i, j, k) o nmero 2i 3j 5k. Para n-uplas, poderiam ser
usados como bases os primeiros n nmeros primos.
definindo diretamente a ordem de enumerao:
repita para cada k = 0, 1, 2,
enumere os pares (i, j) tais que i+j = k, na ordem crescente de i:
(0, k), (1, k-1), , (k-1, 1), (k, 0).
J.L.Rangel - Ling. Formais - 0-3
3/113
4/113
Isso corresponde a
(0, 0), (0, 1), (1, 0), (0, 2), (1, 1), (2, 0), (0, 3)
ou seja, a uma sobrejeo f: Nat Nat dada por
f(0) = (0,0), f(1) = (0,1), f(2) = (1,0), f(3) = (0,2),
o
Teorema: O conjunto P(Nat) dos subconjuntos de Nat no um conjunto enumervel.
Dem.: por "diagonalizao".
Uma vez que a definio de conjunto enumervel se baseia na existncia de uma
funo com certas propriedades, devemos mostrar que tal funo no existe, e a
demonstrao ser feita por contradio (ou reduo ao absurdo).
Suponhamos que o conjunto P(Nat) enumervel. Isto significa que existe uma
enumerao de P(Nat), ou seja uma sobrejeo f: Nat P(Nat). Assim, para cada
elemento A de P(Nat) (um conjunto A de naturais), existe um nmero i tal que f(i) = A.
Vamos considerar o conjunto X definido a seguir:
X = { j Nat | j f(j) }
Como X um conjunto de naturais, X P(Nat). Entretanto, veremos que X no faz
parte da enumerao acima. Seja k qualquer. Duas possibilidades podem ocorrer:
Esta tcnica ser usada neste curso em diversas ocasies para demonstraes
semelhantes anterior; foi usada por Cantor, para mostrar que a cardinalidade de um
conjunto P(A) sempre superior cardinalidade de A. O mesmo vale aqui: a
cardinalidade de todos os conjuntos enumerveis infinitos A a mesma, equivalente de
Nat, mas a cardinalidade dos conjuntos potncia P(A) superior de Nat, sendo
equivalente de P(Nat). Falando informalmente,
o
Relaes binrias. Quando tratamos de relaes binrias, normalmente usamos uma
notao mais simples para indicar que (x, y) um elemento de uma relao binria R em
J.L.Rangel - Ling. Formais - 0-5
5/113
reflexiva
no
sim
sim
no
simtrica
no
no
sim
sim
transitiva
sim
sim
sim
no
o
Equivalncia. Uma relao R uma relao de equivalncia (ou simplesmente uma
equivalncia) se reflexiva, simtrica, e transitiva.
Exemplo: A relao = no conjunto Nat uma relao de equivalncia; outros exemplos
de relaes de equivalncia so as relaes de paralelismo entre retas, de semelhana de
tringulos, de congruncia mdulo n. (Dois naturais x e y so congruentes mdulo n se o
resto da diviso de x por n igual ao resto da diviso de y por n.)
o
Composio de relaes: definimos a composio de relaes da forma a seguir:
se R A B e S B C so relaes, definimos a relao RS A C, a composio
de R e S, por
RS = { (x, z) A C | y B, (x, y) R e (y, z) S }.
Se as relaes R e S so funes, a composio RS se reduz exatamente
composio de funes: se (x, y) R e (y, z) S, temos y = R(x), z = S(y) = S(R(x)), e
portanto (RS)(x) = S(R(x)), como era de se esperar1.
Exemplo: Sejam as relaes
R = { (1, 2), (1, 3), (1, 4), (2, 3), (2, 4), (3, 4) }
S = { (2, 1), (3, 2), (4, 3) }
Temos:
RS = { (1, 1), (1, 2), (1, 3), (2, 2), (2, 3), (3, 3) }
SR = { (2, 2), (2, 3), (2, 4), (3, 3), (3, 4), (4, 4) }
o
1Alguns
6/113
7/113
o
Operaes com relaes binrias. Se R uma relao binria num conjunto A (isto ,
R A A), podemos definir as potncias Ri de R, para i Nat de forma recursiva:
R0 = IA = { (x, x) | x A }
Ri+1 = Ri R, para i Nat
Fato:
1. A relao IA a identidade para a composio de relaes, associada ao conjunto
A, ou seja, para qualquer R A2, R IA = IA R = R.
2. Para qualquer R A2, R1 = R.
3. Para quaisquer R A2, i, j Nat, Ri Rj = Rj Ri, ou seja, potncias da mesma
relao sempre comutam.
Dem.: Exerccio.
o
Exemplo: Sejam A = { 1, 2, 3, 4 } e R = { (1,2), (1,3), (1,4), (2,3), (2,4), (3,4) }.As
potncias de R so:
R0 = I = { (1,1), (2,2), (3,3), (4,4) }.
R1 = R = { (1,2), (1,3), (1,4), (2,3), (2,4), (3,4) }
R2 = R1 R = R R = { (1,3), (1,4), (2,4) }
R3 = R2 R = { (1,4) }
R4 = R5 = = .
No caso do exemplo, podemos provar que (x, y) R se y-x 1. Assim, em
geral, (x, y) Ri se y-x i. Naturalmente, no conjunto A, a maior diferena possvel 3,
e todas as potncias alm da terceira so relaes vazias: nunca podem ser satisfeitas.
o
Fechamento. Definimos o fechamento reflexivo-transitivo R* de uma relao binria R
em um conjunto A atravs de
x R* y se e somente se para algum i Nat, x Ri y,
ou, equivalentemente,
R = U R i = R 0 U R1 U R 2 U R 3 U L
*
i =0
R + = U R i = R1 U R 2 U R 3 U L
i =1
o
Parties. Dado um conjunto A, definimos uma partio de A como sendo uma famlia
de conjuntos (chamados de blocos da partio) = { Bi | i I } com as seguintes
propriedades:
(1)
para cada i I, Bi .
(2)
U = U Bi = A
se ij, Bi I Bj = .
i I
(3)
8/113
9/113
10/113
(base da induo)
P(0)
II.
(passo de induo)
Para qualquer i Nat, P(i) implica P(s(i)).
P(0)
(I)
(1)
P(0) P(1)
(II)
(2)
P(1) P(2)
(II)
(3)
P(2) P(3)
(II)
11/113
Para provar o passo de induo, devemos assumir a hiptese de induo Si= f(i) e provar
a tese de induo Si+1 = f(i+1). Temos ai+1 = ai q, e Si+1 = Si + ai+1.
Portanto,
(a q a 0 )
(a a )
+ a i +1 = i +1 0 + a i +1 =
Si +1 = Si + a i +1 = f (i) + a i +1 = i
(q 1)
(q 1)
(a a + a q a i +1 ) (a i +1q a 0 )
=
= f (i + 1).
= i +1 0 i +1
(q 1)
(q 1)
o
Uma forma alternativa de induo, que pode facilitar as demonstraes, em vez
de usar apenas o ltimo resultado anterior P(i) para provar P(i+1), usa todos os
resultados anteriores, ou seja, P(0), P(1), , P(i).
Assim, para mostrar P(i) para todos os naturais i, mostramos
I.
P(0)
II.
ji P(j) P(i+1).
Induo em estrutura. Quando trabalhamos com estruturas que apresentam uma lei de
formao bem definida, tais como cadeias, rvores, expresses, podemos usar para a
induo um nmero natural, como, por exemplo, o tamanho da estrutura considerada;
muitas vezes, entretanto, isso no necessrio, ou no conveniente, e podemos fazer a
induo de outra forma, baseada na prpria estrutura.
Por exemplo, dados um conjunto I e uma propriedade Q, suponha um conjunto X
definido como o menor conjunto, no sentido da incluso, que satisfaz 1 e 2 a seguir:
1. todo x I pertence a X, ou seja, I X.
2. se x X e Q(x,y), ento y X.
Ou seja, um elemento x de X ou pertence a um conjunto inicial I, ou satisfaz a
propriedade Q, que liga x a um (outro) elemento y de X. Para provarmos uma
propriedade P(x) para todos os elementos de X, basta provar:
I.
(base da induo)
se x I, P(x)
II.
(passo de induo)
se x X, P(x) e Q(x,y), ento P(y).
Este esquema pode ser generalizado para permitir vrias propriedades Q, e para
incluir a possibilidade que essas propriedades relacionem vrios elementos de X a um
(novo) elemento. Este caso mais geral de induo em estrutura est ilustrado a seguir.
Exemplo: Suponha que definimos uma expresso da seguinte maneira:
1. a, b, c so expresses.
2. Se e so expresses, ento + uma expresso.
3. Se e so expresses, ento * uma expresso.
4. Se uma expresso, [] uma expresso.
J.L.Rangel - Ling. Formais - 0-11
12/113
13/113
1Em
geral, possvel usar alguma forma de codificao, e representar cada smbolo de um alfabeto
infinito enumervel atravs de uma sequncia de smbolos de um alfabeto finito.
J.L.Rangel - Ling. Formais - 1-1
14/113
x(i)
c
b
b
a
i
1
2
y(i)
a
c
i
1
2
3
4
5
6
xy(i)
c
b
b
a
a
c
{}
{a, aa, aaa}
{a, b}*
{x | |x| par}
{a, b}
notao ambgua
15/113
Nota: J observamos que a notao aqui usada ambgua; essa ambiguidade se torna
aparente neste ltimo exemplo: {a, b} pode ser uma linguagem (conjunto de sequncias)
ou um alfabeto (conjunto de smbolos). Isto vale para qualquer alfabeto . Se isso fosse
necessrio, a ambiguidade poderia ser evitada usando-se uma notao apropriada: em
uma das notaes possveis, representamos sequncias entre aspas, e smbolos entre
plicas, de forma que "a" fica sendo a sequncia, 'a' o smbolo, {"a", "b"} a linguagem e
{'a', 'b'} o alfabeto. Para ns, entretanto, tais distines no sero necessrias.
Operaes com linguagens. Linguagens so conjuntos, de forma que as operaes de
conjuntos podem ser diretamente usadas com linguagens. Assim, no h necessidade de
definir unio, interseo ou diferena de linguagens; no caso do complemento, podemos
usar como universo o conjunto * de todas as sequncias no alfabeto considerado .
Se L e M so linguagens em , temos:
unio:
interseo:
diferena:
complemento:
L M = { x | x L ou x M }
LM={x|xLexM}
L-M={x|xLexM}
L = * - L = { x * | x L }
o
Concatenao de linguagens. A operao de concatenao, que foi definida para
sequncias, pode ser estendida a linguagens:
L M = { xy | x L e y M } .
Exemplo: Sendo L e M como no exemplo anterior,
L M = {aaa, abb, acc, abc, acb, bcaa, bcbb, bccc, bcbc,
bccb, cbaa, cbbb, cbcc, cbbc, cbcb}
M L = {aaa, aabc, aacb, bba, bbbc, bbcb, cca, ccbc,
cccb, bca, bcbc, bccb, cba, cbbc, cbcb}
Fato: A linguagem I = { } o elemento neutro (identidade) da concatenao de
linguagens, ou seja, para qualquer linguagem L,
L I = I L = L.
Dem.: Exerccio.
o
Potncias. Podemos introduzir as potncias Li (para i natural) de uma linguagem L
atravs de uma definio recursiva:
J.L.Rangel - Ling. Formais - 1-3
16/113
L0 = { }
Li+1 = L Li, para qualquer iNat.
Exemplo: Seja L = {0, 11}. Ento temos:
L0 = { }
L1 = L L0 = { } {0, 11} = {0, 11}
L2 = L L1 = {0, 11} {0, 11} = {00, 011, 110, 1111}
L3 = L L2 = {0, 11} {00, 011, 110, 1111} =
= {000, 0011, 0110, 01111, 1100, 11011, 11110, 111111}
e assim por diante.
o
Fato:
(1) Para qualquer linguagem L, L1 = L.
(2) Para qualquer linguagem L, temos Li Lj = Li+j , para i e j quaisquer.
Dem.: Exerccio.
o
Fechamento. Podemos definir, para uma linguagem L qualquer, o seu fechamento L*
como sendo a unio de todas as potncias de L:
L* =
Li = L0 L1 L2 L3
i =0
L+ =
U L = L1 L2 L3
i
i =1
17/113
Observamos que a ordem alfabtica simples no seria adequada para as cadeias, uma vez
que teramos, neste caso,
, a, aa, aaa, aaaa, aaaaa, .
excluindo, portanto, da enumerao, todas as sequncias que no pertencessem a {a}*
Assim, a cadeia b, por exemplo, nunca seria atingida.
O esquema apresentado se baseia no fato de que, para cada comprimento, o nmero de
sequncias de comprimento n finito. Assim, se pudesse ser infinito, a enumerao
no seria possvel, como descrita, uma vez que no teramos um nmero finito de
sequncias para cada comprimento.
o
No que se segue, usaremos a notao xi para representar a i-sima sequncia
numa enumerao de *, para um alfabeto fixo, supondo uma ordenao fixada para
*.
Fato: Qualquer linguagem enumervel.
Dem.: Toda linguagem em um subconjunto de *.
o
18/113
19/113
dois conjuntos enumerveis infinitos. Isso significa que podemos, usando essa bijeo
como codificao, usar valores em um conjunto enumervel qualquer para substituir
valores em outro. Em particular, a codificao atravs de nmeros naturais (numerao),
e a descrio atravs de cadeias de smbolos (muitas vezes conhecidos como
identificadores) so idias familiares.
Procedimentos. Vamos definir um procedimento como sendo uma sequncia finita de
instrues, e definir instruo como uma operao claramente descrita, que pode ser
executada mecanicamente, em tempo finito.
"mecanicamente" quer dizer que no h dvidas sobre o que deve ser feito;
"em tempo finito" quer dizer que no h dvidas de que a tarefa correspondente
instruo pode, em qualquer caso, ser levada at sua concluso.
Exemplo: O procedimento a seguir pra e diz "sim" se o nmero inteiro i, dado como
entrada, for par e no negativo.
1.
2.
3.
Exemplo: O procedimento a seguir pra e diz "sim" se o nmero inteiro i for par e no
negativo; pra e diz "no" nos demais casos.
20/113
21/113
de A. Isto quer dizer que existe um procedimento que emite todos os elementos de A,
possivelmente com repeties.
22/113
Fato: A classe dos conjuntos recursivos fechada para as operaes de unio, interseo
e complementao.
Dem.: (unio) Sejam A e B conjuntos recursivos. Sejam e algoritmos que
determinam pertinncia em A e em B, respectivamente. Podemos construir um algoritmo
que determina se x A B, da seguinte forma:
1. execute com entrada x.
2. se respondeu "Sim", responda "Sim" e pare.
3. execute com entrada x.
4. pare e responda o que respondeu.
(interseo) Sejam A, B, , como acima. Construa um algoritmo que
determina se x A B da seguinte forma:
1. execute com entrada x.
2. se respondeu "No", responda "No" e pare.
3. execute com entrada x.
4. pare e responda o que respondeu.
(complemento) Sejam A e como acima. Construa um algoritmo que
determina se x A = Nat - A da seguinte forma:
1. execute com entrada x.
2. se respondeu "Sim", responda "No" e pare.
3. se respondeu "No", responda "Sim" e pare.
o
Fato: Um conjunto A recursivamente enumervel se e somente se existe um
procedimento que, com entrada x, pra e diz "Sim", se x A, o que no acontece se
x A. Isto quer dizer que, se x , ou (1) o procedimento no pra, ou (2) pra, mas
no diz "Sim".
Dem.: () Se A r.e., existe um procedimento que enumera seus elementos. Construa
um procedimento que aceita um elemento x qualquer como entrada, modificando da
seguinte maneira: quando emite um valor y, testa se y = x. Se isso acontecer, pra
e diz "Sim". Portanto, dir "Sim" exatamente quando sua entrada for emitida por , ou
seja quando for um elemento de A.
() Seja um procedimento que pra e diz "Sim" quando sua entrada x A, e que ou
no pra, ou no diz "Sim", quando x A. Um procedimento que enumera os
elementos de A pode ser construdo usando , da seguinte maneira:
1. faa k = 0;
2. para cada x = 0, , k execute (2.1) e (2.2).
2.1. execute um passo (adicional) de com entrada x
2.2. se parou e disse "Sim", emita x.
3. faa k = k + 1.
4. v para 2.
J.L.Rangel - Ling. Formais - 2-5
23/113
Note que necessrio executar "em paralelo" com as vrias entradas x porque, se os
diversos valores de x fossem tentados sequencialmente, e no parasse para algum valor
de x, nunca chegaria a ser executado com os valores subsequentes de x.
o
Fato: A classe dos conjuntos recursivamente enumerveis fechada para as operaes
de unio e de interseo.
24/113
o
(reviso de 27fev97)
25/113
Captulo 3: Gramticas
J vimos que procedimentos podem ser usados para definir linguagens de duas
maneiras essenciais: como geradores, procedimentos que enumeram os elementos da
linguagem, e como reconhecedores (ou aceitadores), procedimentos que indicam
quando uma sequncia faz parte da linguagem. O tipo mais comum de gerador a
gramtica. A idia original de gramtica vem do estudo de linguagens naturais, e as
definies que apresentaremos aqui so essencialmente devidas ao linguista Noam
Chomsky.
Fundamentalmente, uma gramtica composta por regras de produo, ou
regras de re-escrita, atravs das quais possvel obter todos os elementos da linguagem
a partir de um smbolo inicial, usando as regras para re-escrever (produzir) os elementos.
Formalmente, definimos uma gramtica G como sendo uma construo
<N, , P, S>, onde
representam
noterminais
terminais
smbolos quaisquer
cadeias quaisquer
cadeias de terminais
alfabetos
Como acontece com toda conveno, haver alguns casos em que esta no ser
seguida.
o
J.L.Rangel - Ling. Formais - 3-1
26/113
Assim, por trs vezes S substitudo por 0S1, e finalmente, S substitudo pela
sequncia vazia . Como veremos a seguir, aplicar uma regra equivalente a
simplesmente remover .
o
Relao (deriva em um passo). Podemos definir a aplicao de uma regra atravs de
uma relao: dizemos que se e somente se . Caso seja necessrio
distinguir entre vrias gramticas, podemos usar o smbolo G para indicar
explicitamente qual a gramtica G utilizada.
Quando consideramos vrios passos de uma derivao, podemos usar as definies de
operaes com relaes vistas no captulo 0, e indicar i (deriva em i passos), *
(deriva em zero ou mais passos, ou, simplesmente, deriva), + (deriva em um ou mais
passos).
Uma sequncia derivvel de S, (tal que S * ) chamada uma forma sentencial da
gramtica considerada.
Exemplo: Em referncia gramtica do exemplo anterior, podemos escrever
S 0S1, 0S1 00S11, 00S11 000S111, 000S111 000111
ou, de forma mais compacta,
S 0S1 00S11 000S111 000111
Podemos tambm escrever S 4 000111, e S * 000111. As cadeias S, 0S1,
00S11, 000S111, e 000111 so formas sentenciais da gramtica. Dessas, a mais
importante 000111, composta exclusivamente por terminais, que far parte da
linguagem da gramtica, de acordo com a prxima definio.
Linguagem de uma gramtica. Definimos a linguagem da gramtica G = <N, , P, S>
por
L(G) = { x * | S * x }.
J.L.Rangel - Ling. Formais - 3-2
27/113
Para mostrar a equivalncia destas duas gramticas, basta apenas mostrar que, de forma
diferente, ambas geram exatamente as cadeias cujo primeiro smbolo igual ao ltimo.
Isso pode ser feito observando que:
A demonstrao completa deve ser feita por induo, e fica como exerccio para o leitor
interessado mostrar que
L(G1) = L(G2) = { cxc | c {a,b} e x {a,b}* }.
Por exemplo, a cadeia aabba da linguagem, e pode ser derivada como a seguir:
em G1 : S aTa aaTa aabTa aabbTa aabba
em G2 : S aA aaA aabA aabbA aabba
o
J.L.Rangel - Ling. Formais - 3-3
28/113
Se uma linguagem tem uma gramtica tipo 0, ela uma linguagem tipo 0; se tem
uma gramtica tipo 1, ela uma linguagem tipo 1, ou uma linguagem sensvel ao
contexto (lsc); se tem uma gramtica tipo 2, ela uma linguagem tipo 2, ou uma
linguagem livre de contexto (llc); se tem uma gramtica tipo 3, ela uma linguagem tipo
3, ou uma linguagem regular.
Observaes:
As gramticas tipo 3 so chamadas regulares pela simplicidade da estrutura de
suas linguagens, garantida pelos rgidos formatos de suas regras.
As gramticas tipo 2 so chamadas de livres de contexto porque uma regra
A indica que o noterminal A, independentemente do contexto em que
estiver inserido, pode ser substitudo por .
Finalmente, as gramticas tipo 1 so chamadas de sensveis ao contexto por
permitirem regras da forma A : A pode ser reescrito como ,
dependendo do contexto em que A aparece ( esquerda, direita).
O caso especial da regra S , nas gramticas sensveis ao contexto tem uma
nica finalidade: permitir que a cadeia vazia pertena a algumas linguagens
sensveis ao contexto. Com efeito, a aplicao de uma regra em que
| | | | no pode diminuir o comprimento da sequncia qual aplicada,
porque temos sempre | | | |. Como | S | = 1, e | | = 0, h
necessidade de alguma regra que permita a diminuio do comprimento, para que
uma derivao S* seja possvel, em algumas gramticas sensveis ao contexto.
As definies de gramticas acima no formam exatamente uma hierarquia.
Certamente, uma gramtica tipo 3 sempre tipo 2, e uma gramtica tipo 1
J.L.Rangel - Ling. Formais - 3-4
29/113
sempre tipo 0, mas nem todas as gramticas tipo 2 so tipo 1. Isso acontece
porque as regras da forma A no satisfazem a restrio de comprimento,
pois | A | > | |, j que 1 > 0. Na ltima seo deste captulo, entretanto,
mostraremos um resultado que suficiente para nossos propsitos: qualquer glc
pode ser transformada, atravs de um algoritmo relativamente simples, em uma
gramtica que satisfaz simultaneamente as definies de glc e de gsc, e que, alm
disso, equivalente gramtica original. Com esse resultado, vemos que, ao
contrrio das classes de gramticas, as classes de linguagens definidas acima
formam uma hierarquia. Ou seja, toda linguagem regular uma llc, toda llc uma
lsc, e toda lsc uma linguagem tipo 0.
Seguem-se alguns exemplos de gramticas e linguagens de diversas classes.
Naturalmente, mais fcil mostrar que uma gramtica pertence a uma certa classe, do
que mostrar o resultado oposto: num caso, basta exibir uma gramtica apropriada; no
outro, necessrio mostrar que nenhuma gramtica apropriada. Algumas tcnicas para
obter esses resultados negativos sero apresentadas posteriormente, durante o decorrer
do curso.
5. Z0 0Z
6. Z1 1Z
7. U0 0U
8. U1 1U
9. ZZ' Z'0
10. ZU' Z'1
11. UZ' U'0
12. UU' U1
13. Z' 0
14. U' 1
1 a 4: regras usadas para gerar os smbolos das duas metades de xx. Os smbolos
da segunda metade so indicados por Z (zero: 0) e U (um: 1). U' ou Z' indica o
ltimo smbolo da segunda metade.
J.L.Rangel - Ling. Formais - 3-5
30/113
5 a 8: regras usadas para levar todos os smbolos da segunda metade para depois
dos smbolos da primeira metade:
0Z0Z1U0Z' 7 0Z0Z10UZ' 6 0Z01Z0UZ' 5 0Z010ZUZ' 5 00Z10ZUZ'
6 001Z0ZUZ' 5 0010ZZUZ'
31/113
Sabemos que uma gsc pode ter uma regra S , se S no aparecer direita em
nenhuma regra. Para cada uma das outras regras, o comprimento do lado esquerdo no
pode ser maior que o do lado direito, e cada aplicao da regra pode manter ou aumentar
o comprimento, mas nunca diminu-lo. Portanto, para considerar todas as derivaes que
podem levar a uma sequncia x, basta considerar as formas sentenciais de comprimento
menor ou igual ao de x: se x , S * * x implica que 1 | | | x |. Esta idia est
aplicada no algoritmo a seguir:
1. Se x , v para 4.
2. Se P contm uma regra S , pare e diga "sim".
3. Pare e diga "no".
4. Faa X = { S }, e Y = .
5. Se x X, pare e diga "sim"
6. Se X = , pare e diga "no"
7. Escolha uma cadeia qualquer em X, retire de X, e acrescente a Y
8. Para cada tal que , se Y, e se | | | x |, acrescente a X.
9. v para 5
O tratamento da entrada x = se resume a verificar se existe a regra correspondente
S; para as demais entradas, todas as possibilidades so consideradas, e uma forma
sentencial s eliminada se j foi considerada antes (pertence a Y), ou se longa demais
(comprimento maior que o de x). Durante a execuo do algoritmo, X guarda as formas
sentenciais que ainda devem ser consideradas. Note que se trata de um algoritmo: em
cada execuo do passo 7, escolhida uma cadeia de comprimento menor ou igual ao
de x, e no so permitidas repeties.
o
Exemplo: Considere a gsc G com noterminais S e T, terminais a, b e c, smbolo inicial
S e regras
S aSa | bSb | T
T cT | c
(Note que G tambm uma glc.) Seja x = aabbb. Para determinar se x L(G), so
consideradas as formas sentenciais abaixo, que compem o conjunto Y, ao final da
execuo:
{ S, aSa, bSb, T, aaSaa, abSba, aTa, baSab, bbSbb, bTb, cT, c, aaTaa, abTba,
acTa, aca, baTab, bbTbb, bcTb, bcb, ccT, cc, aacaa, abcba, accTa, acca,
bacab, bbcbb, bccTb, bccb, cccT, ccc, accca, bcccb, ccccT, cccc, ccccc }
Fica como exerccio a execuo passo a passo do algoritmo, mostrando que x L(G).
32/113
1. Faa X = { S }
2. Emita todos os elementos X *.
3. Faa Y = { | X e }
4. Faa X = Y
5. v para 2.
A cada iterao do procedimento acima, X contm todas as sequncias derivveis de S
em um passo adicional. Assim, se S * x em n passos, em n passos o procedimento
emitir x.
o
Outros resultados sobre as classes de linguagens ainda dependem de resultados
que sero apresentados posteriormente. Em particular, mostraremos posteriormente que
todo conjunto r. e. uma linguagem tipo 0, e apresentaremos os exemplos que mostram
que as demais incluses entre as classes de linguagens so prprias.
Gramticas livres de contexto, gramticas sensveis ao contexto, e regras com lado
direito vazio. Retomamos aqui o problema das regras com lado direito vazio em glc's e
gsc's. Como j vimos anteriormente, a definio de glc permite indiscriminadamente a
presena de regras A, onde A um noterminal; essas regras podem violar a restrio
da definio de gsc, uma vez que a nica regra permitida com lado direito vazio uma
regra S, desde que o smbolo inicial S no aparea direita em nenhuma regra.
Dessa maneira, no imediato que toda llc uma lsc, uma vez que uma glc pode
no satisfazer a definio de gsc.
Esta seo tem como principal finalidade mostrar que cada glc pode ser
transformada em outra glc equivalente, que satisfaz a definio de gsc. Como corolrio
desse fato, temos que toda llc tambm uma lsc.
Noterminais anulveis. Dizemos que um noterminal A de uma glc G anulvel se
possvel derivar a cadeia vazia a partir de A, ou seja, se A * .
Lema: Dada uma gramtica livre de contexto G = <N, , P, S>, o algoritmo a seguir
determina quais so os noterminais anulveis de G, isto , quais so os noterminais A a
partir dos quais pode ser derivada a cadeia vazia .
Dem.: Considere o algoritmo:
1. Faa X = { A N | A P }
2. Repita o passo 3 at que nenhum elemento novo possa ser acrescentado a X:
3. Para cada regra BX1 X2 Xn, se todos os smbolos X1 , X2 , Xn
pertencem a X, acrescente B a X.
Claramente, ao final da execuo do algoritmo, X contm exatamente os noterminais
anulveis da gramtica considerada.
o
Teorema: Para qualquer gramtica livre de contexto G existe uma gramtica livre de
contexto G', equivalente a G, que satisfaz a definio de gramtica sensvel ao contexto.
33/113
Dem.: Seja G = <N, , P, S>. Execute o algoritmo anterior para determinar quais os
noterminais anulveis de G. Seja S' um smbolo novo, no pertencente a N ou a .
Defina a gramtica G' = <N {S'}, , P', S'>, sendo P' como obtido como
descrito a seguir:
1.
2.
3.
4.
5.
6.
Claramente, a gramtica G' satisfaz as definies vistas de glc e de gsc. Note que,
como S' um smbolo novo, no ocorre direita em nenhuma das regras de G'.
Resta assim provar que G e G' so equivalentes. Para isto, observamos que o uso
das regras- em G corresponde ao uso de regras mais curtas em G': em vez de usar uma
regra de G, que introduz (ocorrncias de) noterminais anulveis, e depois usar as regras
necessrias para a transformao desses noterminais anulveis em , usamos de sada
uma regra mais curta de G', em que as correspondentes ocorrncias desses noterminais
anulveis no aparecem (ver passo 3 do algoritmo acima). Na outra direo,
similarmente, o uso de uma regra mais curta pode ser substitudo pelo uso da regra mais
longa de que se originou, seguida pelo uso das regras necessrias para transformar os
noterminais que se deseja anular na sequncia vazia.
o
Exemplo: Considere a gramtica G, com o conjunto de regras P a seguir:
S ABC | ABD
A aA |
B Bb | AC
C CC | c |
Dd
Para a aplicao do algoritmo acima, temos sucessivamente os seguintes valores para o
conjunto X:
{ A, C }
{ A, B, C }
{ A, B, C, S }
regras A e C
regra B AC
regra S ABC
34/113
B
A
rvore de derivao em G
Corolrio: Toda glc cuja linguagem no contm a sequncia vazia pode ser
transformada em uma glc equivalente que no tem regras com lado direito vazio.
Dem.: Se o smbolo inicial da gramtica no anulvel, a construo vista na
demonstrao do teorema acima nos leva a uma gramtica sem nenhuma regra-.
o
35/113
36/113
Linguagens Formais
Captulo 4: Autmatos finitos e expresses regulares
com Luiz Carlos Castro Guedes
4.1 - Introduo
Neste captulo estudaremos uma mquina (um procedimento aceitador, ou
reconhecedor), chamada autmato finito (af). A palavra finito includa no nome para
ressaltar que um af s pode conter uma quantidade finita e limitada de informao, a
qualquer momento. Essa informao representada por um estado da mquina, e s
existe um nmero finito de estados.
Essa restrio faz com que o af seja severamente limitado na classe de linguagens
que pode reconhecer, composta apenas pelas linguagens regulares, como mostraremos
neste captulo.
Duas verses do af so estudadas aqui: o af determinstico (afd) e o af no
determinstico (afnd). Este captulo mostra que uma linguagem regular pode ser definida
de quatro formas:
37/113
De forma simplificada, podemos dizer que um afd aceita uma cadeia se, partindo
do estado inicial, e mudando de estado de acordo com a funo de transio, o afd
atinge um estado final ao terminar de ler a cadeia. Uma das maneiras de visualizar o
funcionamento de um afd atravs de um controle finito que l smbolos de uma fita de
entrada (onde se encontra a cadeia de entrada), sequencialmente, da esquerda para a
direita. Os elementos do conjunto de estados K representam os estados possveis do
controle finito. A operao se inicia no estado inicial i, lendo o primeiro smbolo da fita
de entrada. Por convenincia, considera-se que a cabea de leitura se move sobre a fita,
ao contrrio do que seria de se esperar.
A Figura 4.1 representa um afd cujo controle est no estado q, e que est lendo o
quarto smbolo da cadeia de entrada, um b.
q0
q1
q2
q3
a
q1
q0
q3
q2
b
q2
q3
q0
q1
seja, F = { q3 };
J. L. Rangel, L. C. Guedes - Ling. Formais - 4-2
38/113
(q1, a) = q0, etc, ou seja, a mesma funo representada pela tabela acima.
nmero de a's
par
mpar
par
mpar
nmero de b's
par
par
mpar
mpar
39/113
Exemplo 1: (continuao) Para mostrar que abaa L(M), basta ver que
$ (q0, abaa) = $ (q1, baa) = $ (q3, aa) = $ (q2, a) = $ (q3, ) = q3 F
40/113
q0
q1
q2
q3
a
q1
q2
q3
q4
b
q3
q0
q1
q2
J. L. Rangel, L. C. Guedes - Ling. Formais - 4-5
41/113
42/113
Pela definio, portanto, uma funo que aceita como argumentos q e a, onde q
um estado e a pode ser um smbolo de ou a cadeia vazia . Em qualquer caso, (q, a)
sempre um conjunto de estados, ou seja, um subconjunto de K.
Se tivermos (q, a) = {p1, p2, ..., pk}, entendemos que o autmato M, a partir do estado
q, pode escolher um dos estados p1, p2, ..., pk para ser o prximo estado. Se a = ,
nenhum smbolo da entrada lido; se a , o smbolo a da entrada lido. Podemos
considerar o caso a= como correspondendo a transies espontneas: M muda de
estado sem estmulo da entrada. Se tivermos (q, a) = , no h transies possveis a
partir do estado q com o smbolo a.
Definimos configuraes para o caso do afnd da mesma forma que anteriormente. A
mudana de configurao dada pela relao |, definida abaixo:
(q, ax) | (p, x) se e somente se p (q, a)
Note que a pode ser a cadeia vazia, caso em que temos, particularizando,
(q, x) | (p, x) se e somente se p (q, )
Podemos agora definir a linguagem L(M) por
L(M) = { x * | (i, x) |* (f, ), com f F }
Exemplo 2: (continuao) Temos, para a mesma cadeia ababa de entrada,
(q0, ababa) | (q1, baba) | (q1, aba) | (q1, ba) | (q1, a) | (q2, )
e, portanto, ababa L(M). Temos tambm o "caminho errado"
(q0, ababa) | (q1, baba) | (q1, aba) | (q1, ba) | (q1, a) | (q1, )
que leva configurao no final (q1, ), e no permite nenhuma concluso.
Cadeias como bab e abab no levam a configuraes finais e no so aceitas. Da
configurao (q0, bab) nenhuma configurao atingvel; para abab temos:
(q0, abab) | (q1, bab) | (q1, ab) | (q1, b) | (q1, )
Adicionalmente, temos um outro caminho
(q0, abab) | (q1, bab) | (q1, ab) | (q2, b)
que tambm no atinge nenhuma configurao final. Assim, as cadeias bab e abab no
so aceitas e no fazem parte de L(M).
Exemplo 3: Considere o afnd M da Fig. 4.5. M aceita cadeias da forma c y c, onde c
pode ser a ou b e y pode ser qualquer cadeia de a's e b's.
A cadeia ababa = cyc = ababa aceita por M, atravs da sequncia de configuraes
abaixo, em que a primeira e a ltima transies so realizadas atravs de transies-.
J. L. Rangel, L. C. Guedes - Ling. Formais - 4-7
(A, ababa)
| (B, ababa)
| (C, baba)
| (C, aba)
| (C, ba)
| (C, a)
| (D, )
| (I, )
43/113
Sugesto: M adivinha se a cadeia de entrada contm aaa ou bb, e apenas verifica esse
fato.
44/113
Isso deve ser feito repetidamente enquanto novas transies forem acrescentadas a ', e
enquanto novos estados forem acrescentados a F. Aps isso, retiramos de as transies
com , e chamamos os resultados de ' e F'.
Exemplo 4: Considere o afnd M do Exemplo 3 (Fig. 4.5). A construo descrita na
prova do Lema 1 permite construir o afnd equivalente M' (Fig. 4.6), que no tem
J. L. Rangel, L. C. Guedes - Ling. Formais - 4-9
transies com . Note que M' tem estados inteis: B, F e I passaram a ser inacessveis a
partir do estado inicial.
45/113
Configuraes de M'
(A, ababa)
--(C, baba)
(C, aba)
(C, ba)
(C, a)
(D, )
--- final
---
Lema 2: Toda linguagem aceita por um afnd sem transies com aceita por um afd.
46/113
Exemplo 4 (continuao): Podemos construir um afd M'' a partir de M', como descrito
na demonstrao do Lema 2. M'' ser equivalente a M (Exemplo 3) e a M'.
Temos: i'' = { A }. A tabela abaixo mostra a funo ''. Note que os 251 estados no
acessveis a partir de { A } foram ignorados. O afd pode ser visto tambm na Fig. 4.7.
''
{A}
{C}
{G}
{ C, D }
{ G, H }
a
{C}
{ C, D }
{G}
{ C, D }
{G}
b
{G}
{C}
{ G, H }
{C}
{ G, H }
Os estados finais de M'' que precisam ser considerados so, portanto, {C, D} e {G, H},
que contm os estados finais D e H de M'. Para comparao, a tabela abaixo apresenta as
configuraes assumidas por M, M' e M'' na aceitao de ababa.
J. L. Rangel, L. C. Guedes - Ling. Formais - 4-11
47/113
M
(A, ababa)
(B, ababa)
(C, baba)
(C, aba)
(C, ba)
(C, a)
(D, )
(I, )
M'
(A, ababa)
--(C, baba)
(C, aba)
(C, ba)
(C, a)
(D, )
---
M''
({A}, ababa)
--({C}, baba)
({C}, aba)
({C, D}, ba)
({C}, a)
({C, D}, )
---
48/113
(reflexividade)
(simetria)
(transitividade)
(Demonstrao: exerccio.)
O algoritmo que vamos descrever aqui se baseia no fato de que mais fcil
provar que dois estados p e q no so equivalentes do que provar que so. Para mostrar
que p e q no so equivalentes, basta achar uma cadeia x tal que $ (p, x) final e
$ (q, x) no final, ou vice-versa. Dizemos que essa cadeia x distingue o estado p do
estado q, e que p e q so distinguveis.
As propriedades que vamos usar no algoritmo so:
Propriedade 1. (Equivalncia se propaga para a frente.) Se p q, ento para qualquer
a , os estados p' = (p, a) e q' = (q, a) so equivalentes.
Dem. Seja x * uma cadeia qualquer. Devemos mostrar que p'' = $ (p', x) e
q'' = $ (q', x) so ambos finais ou ambos no finais.
Seja y = ax. Temos
p'' = $ (p', x) = $ ((p, a), x) = $ (p, ax) = $ (p, y)
e
q'' = $ (q', x) = $ ((q, a), x) = $ (q, ax) = $ (q, y)
Como p q, p'' e q'' so ambos finais ou ambos no finais.
Propriedade 2. (Distinguibilidade se propaga para trs.) Para qualquer a ,
se p' = (p, a) e q' = (q, a) no so equivalentes, ento p e q tambm no so
equivalentes.
Dem. Se p'e q' no so equivalentes, existe uma cadeia x que distingue p' e q'. Ou seja,
chamando p'' = $ (p', x) e q'' = $ (q', x), temos que um deles final e o outro no.
Fazendo y = ax, temos
p'' = $ (p', x) = $ ((p, a), x) = $ (p, ax) = $ (p, y)
e
q'' = $ (q', x) = $ ((q, a), x) = $ (q, ax) = $ (q, y)
J. L. Rangel, L. C. Guedes - Ling. Formais - 4-13
49/113
1John
50/113
A
B
C
D
E
F
a
B
C
D
E
F
A
b
A
B
C
D
E
F
51/113
X
X
X
X
A
X
X
X
B
X
X
C
X
X
D
X
E
52/113
a
{B, E}
{C, F}
{A, D}
b
{A, D}
{B, E}
{C, F}
A
B
C
D
E
F
a
B
C
D
E
F
A
b
A
B
C
D
E
F
53/113
X
X
X
X
X
A
X
X
X
X
B
X
X
X
C
X
X
D
X
E
54/113
S
A
B
f
a
{A}
{ A, f }
{B}
b
{B}
{A}
{ B, f }
55/113
Seja a cadeia x=ababa. A cadeia x pertence linguagem, como se pode ver pela
derivao
S aA abA abaA ababA ababa.
A cadeia x tambm aceita por M, como se pode ver pela sequncia de configuraes
(S, ababa) | (A, baba) | (A, aba) | (A, ba) | (A, a) | (f, )
Note que os estados e os smbolos no terminais aparecem na mesma ordem, exceto por
f, que no aparece na derivao. Os smbolos terminais, entretanto, tem tratamento
diverso: so gerados na derivao, e aparecem desde sua introduo at a cadeia final, e
so consumidos nas transies do afnd, aparecendo desde a configurao inicial at o
momento de sua leitura.
S
A
f
{f}
a
{A}
{S}
b
{A}
{S}
q0
q1
56/113
a
q1
q0
b
q1
q0
uma er.
uma er.
para cada a , a uma er.
Se e so er's, ento ( ) uma er.
Se e so er's, ento ( ) uma er.
Se uma er, ento (*) uma er.
Naturalmente, uma er se e somente se isso pode ser provado a partir de ER1 ER6.
Usualmente, so omitidos os parenteses de er's, de acordo com a ordem de precedncia
*
e considerando os operadores como associativos esquerda. Alm disso, o smbolo
frequentemente omitido.
Exemplo 10: Seja = {a, b} e seja a expresso regular = (ab)* a b b, ou seja, com
todos os parnteses, = (((((ab)*)a)b)b). Mostramos que uma er, mostrando
sucessivamente que so er's as expresses a seguir:
1.
2.
3.
4.
a
b
(ab)
(ab)*
de ER3
de ER3
de 1, 2 e ER4
de 3 e ER6
J. L. Rangel, L. C. Guedes - Ling. Formais - 4-21
5.
6.
7.
(ab)*a
(ab)*ab
(ab)*abb
57/113
de 4, 1 e ER5
de 5, 2 e ER5
de 6, 2 e ER5.
Definio. A linguagem L[] associada a uma er (ou denotada pela er) definida de
forma recursiva, seguindo a definio de er:
ER1. L[] = ;
ER2. L[] = {};
ER3. para cada a , L[a] = {a};
ER4. L[()] = L[] L[];
ER5. L[()] = L[] L[];
ER6. L[(*)] = (L[])*.
Exemplo 11: Seja = (ab)*abb, como acima. Podemos determinar a linguagem
L[] seguindo o mesmo caminho usado para provar que uma er.
1. L[a] = {a}
de ER3
2. L[b] = {b}
de ER3
3. L[ab] = L[a] L[b] = {a} {b} = {a, b}
de 1, 2 e ER4
4. L[(ab)*] = (L[ab])* = {a, b}*
de 3 e ER6
5. L[(ab)*a] = L[(ab)*] L[a] = {a, b}*{a}
de 4, 1 e ER5
6. L[(ab)*ab] = L[(ab)*a] L[b] =
= {a, b}*{a}{b} = {a, b}*{ab}
de 5, 2 e ER5
7. L[(ab)*abb] = L[(ab)*ab] L[b] =
= {a, b}*{ab}{b} = {a, b}*{abb}
de 6, 2 e ER5
Assim, L[] a linguagem das cadeias que terminam em abb.
Uma outra forma de indicar as mesmas propriedades de pertinncia vistas acima,
mais adequada para provar a pertinncia em casos isolados :
ER1.
ER2.
ER3.
ER4.
ER5.
ER6.
a L[a]
a L[ab]
b L[b]
b L[ab]
de 1
de 3
J. L. Rangel, L. C. Guedes - Ling. Formais - 4-22
58/113
L[(ab)*]
a L[(ab)*]
de 2 e 5
ba L[(ab)*]
de 4 e 6
aba L[(ab)*]
de 2 e 7
abaa L[(ab)*a]
de 8 e 1
abaab L[(ab)*ab]
de 9 e 3
abaabb L[(ab)*abb] de 10 e 3
Note que cada ocorrncia de um smbolo (a ou b) em x fica associada a uma ocorrncia
do mesmo smbolo em . No fundo a construo da prova de que x L[] consiste
exatamente na descoberta de uma associao adequada. No exemplo acima, a nica
associao possvel est indicada abaixo, pela numerao das ocorrncias de smbolos, na
er e na cadeia considerada:
5.
6.
7.
8.
9.
10.
11.
= (a1 b2 )* a3 b4 b5 , x = a1 b2 a1 a3 b4 b5
Em outros casos, podem ser possveis vrias associaes. Por exemplo, considere o
alfabeto = {a, b, c}, a er = (ab)* (bvc)* e a cadeia y = bb. Neste caso, temos
= (a1 b2)* (b3 c4)*
e podemos ter y = b2 b2, ou y =b2 b3, ou ainda, y =b3 b3 .
Definio. Dizemos que duas er's e so equivalentes se as linguagens a elas
associadas so iguais: L[] = L[]. A equivalncia indicada por .
Exerccio 11: Mostre que, dada uma er , sempre possvel construir uma er
equivalente a , de forma que ou = , ou no contm o smbolo .
Sugesto: considere as equivalncias
*
Exerccio 12: Mostre que, dada uma er , sempre possvel construir uma er
equivalente a , de forma que ou = , ou = , e no contm o smbolo .
Sugesto: considere as equivalncias
( )* *
( ) ( )
( ) ( )
Exerccio 13: Suponha a seguinte definio: uma er ambgua se para algum xL[],
existe mais de uma associao possvel entre as ocorrncias de smbolos em x e em .
Sejam as expresses
= (a b)* (b c)*
= (a b)* (aa bb) (a b)*
J. L. Rangel, L. C. Guedes - Ling. Formais - 4-23
59/113
Teorema 4.8: Toda linguagem denotada por uma expresso regular regular.
Demonstrao. Seja uma er qualquer. Vamos mostrar que L() regular construindo
um afnd M() que aceita L(), preparando para uma demonstrao por induo na
estrutura de .
Por simplicidade, vamos construir todos os afnd M() considerados nesta demonstrao
com exatamente um estado final, distinto do estado inicial. Para uma er no elementar,
o afnd M() ser construdo a partir dos afnd's das er's componentes. Para evitar a
necessidade de nomear cada estado de cada uma dessas mquinas, vamos indicar a forma
de composio graficamente. Por conveno, sempre representaremos o estado inicial
esquerda, e o estado final direita.
ER1. O afnd M() que aceita
ER2.
60/113
ER6. Se uma er, podemos supor (pela Hiptese de Induo) que j est construdo
M(). O afnd M(*) que aceita * obtido acrescentando um estado inicial e um final
novos a M(). As novas transies so transies com entrada do estado inicial novo
para o antigo estado inicial de M() e para o novo estado final e do antigo estado final
de M() para o novo estado inicial.
61/113
final:
A
B
a
{B}
C
D
b
{D}
E
A
B
C
D
F
{A, C}
{F}
{F}
{B}
{D}
62/113
M((a b)*)
inicial:
final:
M((a b)*a)
inicial:
final:
G
E
A
B
C
D
F
H
{E, H}
{A, C}
{F}
{F}
{G}
{B}
{D}
I
G
E
A
B
C
D
F
H
A'
B'
J
{G}
{E, H}
{A, C}
{F}
{F}
{G}
{A'}
{J}
{B}
{B'}
{D}
Note que a sub-expresso a ocorre duas vezes em M(), e porisso foi necessrio incluir
duas vezes M(a); para a segunda vez renomeamos os estados, que passaram a ser A' e B'.
Exerccio 14: Construa um afd mnimo para a linguagem denotada pela er do Exemplo
13, a partir do afnd M() construdo no exemplo.
Exerccio 15: Construa afd's mnimos que aceitem as linguagens denotadas pelas
expresses regulares do Exerccio 13,
= (a b)* (b c)*
= (a b)* (aa bb) (a b)*
Teorema 4.9: Toda linguagem regular denotada por uma expresso regular.
Demonstrao: ver referncia citada.
A demonstrao do Teorema 4.9 constri a expresso regular que representa a
linguagem aceita por um afd examinando os caminhos entre o estado inicial e os estados
finais do afd. O operador usado para tratar caminhos alternativos, o operador para
tratar caminhos de comprimento maior que 1, e o operador * para tratar laos. Embora a
construo seja interessante, na prtica o uso normalmente feito de er's para
J. L. Rangel, L. C. Guedes - Ling. Formais - 4-27
63/113
v = 01
v = 10
v = 1010
w = 01
w=1
w=1
Note que todas as cadeias das formas 1(01)i01, 10(10)i1, (1010)i1 pertencem a L.
64/113
65/113
(reviso de 27fev97)
66/113
Linguagens Formais
Captulo 5: Linguagens e gramticas livres de contexto
Jos Lucas Rangel, maio 1999
5.1 - Introduo
Vimos no captulo 3 a definio de gramtica livre de contexto (glc) e de
linguagem livre de contexto (llc). As regras de uma glc so da forma A , onde
uma cadeia qualquer de terminais e noterminais, possivelmente vazia. Como vimos,
o que caracteriza a gramtica livre de contexto a propriedade de que o smbolo no
terminal A pode ser substitudo pela cadeia do lado direito da regra, onde quer que
A ocorra, independentemente do contexto, isto , do resto da cadeia que est sendo
derivada. Por essa razo, possvel representar derivaes em glc's atravs de rvores
de derivao: para usar a regra A , acrescentamos rvore, como filhos de A, ns
correspondentes aos smbolos de .
5.2 - rvores de derivao
Uma rvore de derivao uma rvore composta da seguinte maneira:
67/113
S
B
A
a
A
a
B
A
68/113
T
T
F
a
E
E
)
T
a
Fig. 2- rvore de derivao de a*(a+a)+a
Como todas as derivaes correspondentes mesma rvore de derivao
descrevem a mesma forma de construo da cadeia derivada - as mesmas regras
aplicadas nos mesmos lugares - consideramos que a forma de construo da cadeia
pode ser representada pela rvore ou por uma derivao esquerda, ou por uma
derivao direita. Entretanto, se existem duas ou mais rvores de derivao (duas ou
mais derivaes esquerdas, duas ou mais derivaes direitas), para a mesma cadeia,
consideramos que a gramtica no define de forma nica a maneira pela qual a cadeia
derivada, e dizemos que a gramtica ambgua.
Exemplo 5.3: Seja a gramtica G1, dada por suas regras:
E E + E | E * E | ( E ) | a
Pode-se verificar que G1 equivalente a G0, vista no exemplo 5.2 acima. Entretanto,
diferentemente de G0, G1 uma gramtica ambgua. Considere, por exemplo a cadeia
a+a*a. As duas derivaes (esquerdas) abaixo correspondem a duas rvores de
derivao distintas.
E E+E a+E a+E*E a+a*E a+a*a
E E*E E+E*E a+E*E a+a*E a+a*a
69/113
G1:
S1 T C
G2:
S2 A V
T a T b |
A a A |
C c C |
V b V c |
S S1 | S2
S1 T C
S2 A V
T a T b |
A a A |
C c C |
V b V c |
Para verificar que G ambgua, basta observar que todas as cadeias pertencentes
interseo M = L1 L2 = {ai bj ck | i=j=k } podem ser derivadas de duas formas
distintas, dependendo da regra inicial escolhida para a derivao. Por exemplo,
aabbcc pode ser obtida por uma das duas derivaes esquerdas abaixo:
S S1 TC aTbC aaTbbC aabbC aabbcC
aabbccC aabbcc
S S2 AV aAV aaAV aaV aabVc aabbVcc
aabbcc
70/113
S
A
B
C
Y
Z
A
a
b
c
y
z
B
A
B
D
|
|
|
|
|
|
z
y
A C | B D
a
b
d C
Z
Y
71/113
S * uAy,
A * vAx,
A * w
Portanto, podemos derivar
i=0:
uwy
S * uAy * uwy
i=1:
uvwxy
i=2:
uvvwxxy
i=3:
uvvvwxxxy
T
T
F
a
E
E
)
T
a
Fig. 3- rvore de derivao de a*(a+a)+a
Temos: E * T+a, T * a*(T+a), T * a. Ou seja, u = , v = a*(, w = a, x =
+a), y=+a. Ou seja, as seguintes cadeias devem ser da linguagem:
J. L. Rangel Linguagens Formais 5-6
72/113
i=0:
uwy
i=1:
uvwxy
i=2:
uv2wx2 y
i=3:
uv3wx3 y
+a
a*( a +a)
+a
+a
73/113
Captulo 6:
Linguagens livres de contexto e autmatos de pilha
Jos Lucas Rangel, maio 1999
6.1 - Introduo.
Os aceitadores, ou reconhecedores, das linguagens livres de contexto so os
chamados autmatos de pilha ou ap's. Usaremos aqui o modelo mais geral de ap, o ap
no determinstico, ou apnd, que consiste basicamente de um autmato finito no
determinstico, com uma memria adicional, em forma de pilha. Numa pilha,
smbolos novos s podem ser acrescentados no topo da pilha; apenas o ltimo
smbolo armazenado, o smbolo que se encontra no topo da pilha pode ser consultado;
esse smbolo deve ser retirado para que os demais possam ser alcanados.
Neste captulo vamos provar que a classe de linguagens reconhecidas pelos
apnd's exatamente a classe das llc.
6.2 - Autmatos de pilha no determinsticos
Definio. Definimos um autmato de pilha no determinstico (apnd) como uma
construo (tupla) A = < K, , , , i, I, F >, formada pelos seguintes elementos:
K - conjunto (finito) de estados
- alfabeto de entrada
- alfabeto da pilha
- funo de transio
: K ( {}) P(K *)
i - estado inicial
iK
I - smbolo inicial da pilha
I
F - conjunto de estados finais
FK
O alfabeto contm os smbolos que podem ser armazenados na pilha, ou
seja, empilhados. Para simplificar a especificao da funo de transio ,
consideramos que a cada passo, um smbolo lido (e retirado) do topo da pilha, e, no
mesmo passo, uma seqncia de comprimento qualquer pode ser empilhada. Assim,
se queremos retirar um smbolo do topo da pilha, basta que a sequncia a ser
empilhada seja a seqncia vazia . Por outro lado, se quisermos manter o smbolo do
topo da pilha, ele deve ser re-empilhado.
Escolher de forma no determinstica, uma opo (p, ) (q, a, Z) quer dizer
que a partir do estado q, lendo a da entrada, e lendo Z do topo da pilha, uma transio
Linguagens Formais, J. L. Rangel, 6-1
possvel para A ter como prximo estado p, e a seqncia ser empilhada, depois
da remoo de Z da pilha.
Da mesma forma que num autmato finito no determinstico (afnd), temos a
possibilidade de executar uma transio sem avanar na leitura dos smbolos da
entrada, e essa ao representada pela leitura da cadeia vazia . Por essa razo, o
segundo argumento de pode ser , alm de poder ser um smbolo de .
Usamos P(K *) para representar o conjunto potncia de K *, ou seja o
conjunto de todos os subconjuntos de K *. Como se trata aqui de um conjunto
infinito, necessrio especificar que, em qualquer caso, (q, a, Z) ser sempre um
conjunto finito, de forma a manter finita a descrio do apnd A.
Para descrever os passos de uma computao realizada por um apnd,
utilizamos configuraes [q, y, ] K * *. Os trs elementos de uma
configurao so o estado corrente q K, a parte da entrada ainda a ser lida, y *,
e o contedo * da pilha. Por conveno, o topo da pilha fica esquerda, isto , o
primeiro smbolo de considerado como sendo o smbolo do topo da pilha. A
configurao inicial correspondente entrada x [i, x, I].
Vamos definir a relao mudana de configurao, representada por | ou
por |A, se quisermos explicitar o apnd A considerado. Para isso utilizamos a funo
de transio . Suponha uma configurao [q, ax, Z], com (p, ) (q, a, Z).
Escolhida esta opo, o prximo estado ser p, e a cadeia deve ser empilhada, aps
a leitura de Z. Assim, podemos passar da configurao [q, ax, Z]para a configurao
[p, x, ], em que o estado passou a ser p, o "smbolo" a da entrada e o smbolo Z da
pilha foram lidos, e a seqncia foi empilhada. Ou seja,
se
(p, ) (q, a, Z)
74/113
75/113
utilizado na definio da linguagem que A aceita por pilha vazia. Por essa razo
costuma-se, neste caso, fazer F = , sem perda de generalidade.
Um ponto importante a observar que, no caso geral, as linguagens Lef(A) e
Lpv(A) podem ser distintas.
Exemplo 6.1: Seja o apnd A = < K, , , , i, I, F >, com
K = {0, 1, 2} i = 0
= {a, b}
I=X
= {X, A}
F = {2}
(1, b, A) = {(1, )}
(0, b, A) = {(1, )}
Convencionamos, neste exemplo, e nos seguintes, que o valor da funo , para as
combinaes de valores no especificadas, sempre o conjunto vazio . No caso
presente, portanto,
(0, b, X) = (0, , X) = (0, , A) = (1, a, X) = (1, a, A) = (1, b, X)
= (1, , A) = (2, a, X) = (2, a, A) = (2, b, X) = (2, b, A)
= (2, , X) = (2, , A) = .
Suponhamos agora que a entrada do apnd A x=aaabbb. A configurao inicial
correspondente [0, aaabbb, X]. A partir dessa configurao, os seguintes passos so
possveis:
[0, aaabbb, X] | [0, aabbb, AX] | [0, abbb, AAX] | [0, bbb, AAAX]
| [1, bb, AAX] | [1, b, AX] | [1, , X] | [2, , X]
A ltima configurao indica que o estado final 2 foi atingido e que toda a entrada foi
lida. Podemos assim dizer que aaabbb Lef(A).
Se examinarmos o funcionamento de A para a entrada acima, e, atravs da funo o
funcionamento para as demais sequncias em {a, b}*, podemos verificar:
Portanto, Lef (A) = { aj bj | j1 }. Por outro lado, nenhuma das transies prev a
retirada de X do fundo da pilha, de forma que Lpv(A)=.
i=0
= {a, b}
I=X
= {X, A}
F=
(0, b, A) = {(1, )}
(1, b, A) = {(1, )}
76/113
77/113
78/113
B passa de sua configurao inicial [i', x, I'] para a configurao [i, x, I I'], idntica
configurao inicial de A, exceto pelo smbolo I' acrescentado no fundo da
pilha;
configuraes de B
[i', x, I']
[i, x, I]
[i, x, I I']
....
....
[q, ?, ?]
[q, ?, I']
[f', ?, ?]
Portanto, se A aceita x por pilha vazia, B aceita x por estado final. Para a
recproca, observamos que A pode esvaziar a pilha sem completar a leitura de sua
entrada x, atingindo uma configurao [q, y, ], com y, que no uma configurao
final. Simulando A, B pode atingir configuraes [q, y, I'] e [f', y, I'], mas esta ltima,
apesar do estado final, no uma configurao de aceitao, pela mesma razo
anterior.
Teorema 6.2: Para qualquer apnd A, existe um apnd B tal que B aceita por pilha vazia
a mesma linguagem que A aceita por estado final.
Dem.: Seja A = < K, , , , i, I, F >.
Defina B = < K {i', d'}, , {I'}, ', i', I', >, com ' dada por
'(i', , I') = {(i, I I')}
para qK, a {}, Z, '(q, a, Z) = (q, a, Z)
para fF, Z{I'}, '(f, , Z) = {(d', Z)}
para Z{I'}, '(d', , Z) = {(d', )}
A idia fundamental da construo de B que, com entrada x,
B passa de sua configurao inicial [i', x, I'] para a configurao [i, x, I I'], idntica
configurao inicial de A, exceto pelo smbolo I' acrescentado no fundo da
pilha;
configuraes de B
[i', x, I']
[i, x, I]
[i, x, I I']
....
....
[f, , ]
[f, , I']
[d', , I']
.
[d', , I']
[d', , ]
Portanto, se A aceita x por estado final, B aceita x por pilha vazia. Para a recproca,
observamos que A pode esvaziar a pilha sem aceitar sua entrada x, atingindo uma
configurao [q, y, ], com qF, que no uma configurao final. Simulando A, B
pode atingir a configurao [q, y, I'], mas, como q no final, o estado d' no pode ser
atingido, e I' no pode ser removido da pilha.
6.4 - Equivalncia das classes de linguagens definidas por apnd's e
glc's
Esta seo mostra que os apnd's reconhecem exatamente as llc's, isto , as
linguagens definidas por glc's. Devido aos resultados da seo anterior, basta
considerar aqui uma forma de aceitao, no caso, a aceitao por pilha vazia. O
primeiro resultado corresponde ao Teorema abaixo.
Teorema 6.3: Seja L uma llc. Ento existe um apnd que aceita L por pilha vazia.
Dem.: Se L uma llc, ento existe uma glc G = < N, , P, S > tal que L=L(G). A
demonstrao feita atravs da construo de um apnd A que aceita L por pilha vazia
a partir da gramtica G, de forma semelhante utilizada em um dos exemplos vistos
anteriormente.
O apnd em questo tem apenas um estado: A = < {q}, , N, , q, S >, com como
se segue:
A prova de que Lpv(A) = L(G) se baseia na relao entre uma computao de A (uma
seqncia de configuraes sucessivas de A) que aceita uma cadeia x, e uma
derivao esquerda da mesma cadeia x. Deixamos como exerccio completar os
Linguagens Formais, J. L. Rangel, 6-7
79/113
80/113
B s tem um estado.
transio geral:
caso particular n = 0:
81/113
incio da simulao:
1
2
3
4
5
6
7
8
9
10
11
a
a
b
a
a
b
b
a
b
Z
I
I
a
b
a
b
I
a
b
a
b
p
0
0
0
0
0
0
1
1
1
1
1
a
b
aa
ab
ba
bb
a
b
Z
X
u
u
u
u
a
a
b
b
[0, I, 0]
[0, I, 1]
[0, I,0]
[0, I, 1]
p
u
u
u
u
u
u
[0, I, 0]
[0, I, 1]
[0, a, 0]
[0, a, 1]
[0, b, 0]
[0, b, 1]
comentrios
iniciao
1
2
Linguagens Formais, J. L. Rangel, 6-9
q
u
a
a
Z
[0, a, 0]
[0, a, 1]
[0, b, 0]
[0, b, 1]
[0, a, 0]
[0, a, 1]
[0, b, 0]
[0, b, 1]
u
u
u
u
u
u
u
a
a
[0, I, 1]
[0, a, 0]
[0, a, 1]
[0, b, 0]
[0, b, 1]
[1, a, 1]
[1, b, 1]
p
u
u
u
u
u
u
u
u
u
u
u
u
u
u
u
u
u
u
u
u
u
u
u
[0, a, 0] [0, a, 0]
[0, a, 1] [1, a, 0]
[0, a, 0] [0, a, 1]
[0, a, 1] [1, a, 1]
[0, a, 0] [0, b, 0]
[0, a, 1] [1, b, 0]
[0, a, 0] [0, b, 1]
[0, a, 1] [1, b, 1]
[0, b, 0] [0, a, 0]
[0, b, 1] [1, a, 0]
[0, b, 0] [0, a, 1]
[0, b, 1] [1, a, 1]
[0, b, 0] [0, b, 0]
[0, b, 1] [1, b, 0]
[0, b, 0] [0, b, 1]
[0, b, 1] [1, b, 1]
[1, a, 0]
[1, a, 1]
[1, b, 0]
[1, b, 1]
82/113
comentrios
3
7
8
9
10
11
A ltima coluna indica a associao das linhas da tabela de ' com as linhas da tabela
de .
Suponhamos agora que as mquinas A e B recebem como entrada x = aabaabaa.
Vamos mostrar as configuraes assumidas pelas duas mquinas, durante a anlise de
x.
A
B
[u, aabaabaa,
X]
[0, aabaabaa,
I] [u, aabaabaa,
[0, I, 1]]
[0, abaabaa,
a] [u, abaabaa,
[0, a, 1]]
[0, baabaa,
aa] [u, baabaa,
[0, a, 1][1, a, 1]]
[0, aabaa,
baa] [u, aabaa,
[0, b, 1][1, a, 1][1, a, 1]]
[0, abaa,
abaa] [u, abaa,
[0, a, 1][1, b, 1][1, a, 1][1, a, 1]]
[1, abaa,
abaa] [u, abaa,
[1, a, 1][1, b, 1][1, a, 1][1, a, 1]]
[1, baa,
baa] [u, baa,
[1, b, 1][1, a, 1][1, a, 1]]
[1, aa,
aa] [u, aa,
[1, a, 1][1, a, 1]]
[1, a,
a] [u, a,
[1, a, 1]]
[1, ,
] [u, ,
]
Como se pode ver, cada terceira componente de smbolo da pilha de B
corresponde exatamente ao estado de A, no momento em que o smbolo (ou aquele
que o substituiu) retirado da pilha.
Linguagens Formais, J. L. Rangel, 6-10
83/113
84/113
(maio 99)
85/113
Linguagens Formais
Captulo 7: Mquinas de Turing
Jos Lucas Rangel
7.1 - Introduo
Neste captulo vamos estudar a mquina de Turing (mT), introduzida por Alan
Turing como um modelo matemtico do processo de computao. Sua estrutura
simples proposital, uma vez que Turing pretendia, com sua definio, chegar a um
modelo que fosse universalmente aceito. A mquina que vamos apresentar aqui
apenas uma das diversas variantes encontradas na literatura, escolhida por ser
suficientemente prxima de um sistema de computao real, e por no oferecer
maiores dificuldades de definio.
A mT o principal modelo usado para o estudo do que ou no computvel.
De acordo com a tese de Church, todos os modelos razoveis de procedimento so
equivalentes, e a mT se revelou simples e flexvel o suficiente para permitir todas as
demonstraes dos resultados principais. Pode-se usar uma mT como aceitador ou
reconhecedor, ou ainda como a implementao de um procedimento mais geral, que
transforma uma cadeia de entrada em uma cadeia de sada. Neste captulo vamos
definir a mT e apresent-la como o reconhecedor das linguagens tipo 0, e procurar
mostrar, atravs de exemplos, sua universalidade. Demonstrar a tese de Church,
naturalmente, est fora de cogitao, de maneira que a universalidade da mquina de
Turing s pode ser confirmada pelo fato de que todos os procedimentos encontrados
na prtica podem ser implementados atravs de mquinas de Turing.
7.2 - A mquina de Turing
Vamos definir a mquina de Turing com um controle finito, como todas as
mquinas at aqui, e uma fita, que pode servir como dispositivo de entrada
(inicialmente a cadeia de entrada est escrita na fita), como rea de trabalho
(memria, ou rascunho) , ou como dispositivo de sada (possveis resultados estaro
escritos na fita ao final da computao).
O modelo aqui apresentado tem uma fita semi-infinita: considera-se a fita
arbitrariamente extensvel apenas para o lado direito. Por conveno, a fita finita,
mas pode ser aumentada sempre que houver necessidade de mais espao, com mais
uma clula em branco. A justificativa para isso que o que computvel no pode
depender do tamanho do bloco usado como rascunho pelo matemtico: sempre deve
ser possvel arranjar outro bloco e continuar escrevendo. O novo bloco do matemtico
estar em branco, como sempre estar em branco a parte da fita em que ainda nada foi
escrito.
Por conveno, um trecho da fita em branco ser representado por um ou mais
smbolos branco. Alm disso, vamos convencionar um branco no pode ser escrito,
ou seja um trecho de fita em que ocorre o smbolo branco um trecho onde nada foi
escrito at agora. Assim, a qualquer momento, valem as seguintes propriedades:
86/113
Isto acontece porque a mquina avana ou recua na fita uma clula de cada vez e, em
um nmero finito de passos, apenas um nmero finito de posies da fita pode ter sido
alcanado.
Alguns autores preferem falar de uma fita infinita, cujo contedo de
smbolos branco, exceto nas posies que j foram visitadas; outros preferem dizer
que a fita potencialmente infinita e que estendida a cada vez que se tenta andar
para a direita a partir da ltima posio. O fato importante a ser considerado que, a
qualquer momento, a quantidade de informao contida na fita finita, embora no
haja um limite para a quantidade de informao que nela pode ser armazenada.
Essa informao pode ser representada por uma cadeia de caracteres composta
pelos smbolos gravados na fita, da primeira posio at o primeiro branco
(exclusive). Note que, ao contrrio do que ocorre em gravadores de fita, consideramos
que a cabea de leitura/gravao que se move, e no a fita.
87/113
88/113
primeiro de y, e (2) a fita semi-infinita para a esquerda. Note que esta definio
impede a passagem da cabea para a esquerda do primeiro smbolo.
Notamos, para uso futuro, que a mudana de configurao pode ser descrita
atravs da substituio de cadeias que envolvem no mximo trs smbolos:
qa bp, q bp, cqa pcb ou cq pcb,
O restante da configurao no se altera.
Linguagem reconhecida por uma mT. A linguagem aceita, ou reconhecida por uma
mT M definida por
L(M) = { x * | ix |* yfz, onde f F }
ou seja, L(M) o conjunto das cadeias x, compostas de smbolos do alfabeto de
entrada, que levam M da configurao inicial ix (correspondente entrada x) para
alguma configurao final yfz (em que o estado f final).
A aceitao se d quando o estado final atingido, no interessando em que
ponto da fita est a cabea, ou se h possibilidade de continuar a partir desse ponto. Se
possvel atingir uma configurao cujo estado final, a cadeia de entrada j est
aceita. Caso contrrio, a cadeia no ser aceita. No sequer necessrio que a entrada
seja inteiramente lida.
Para no aceitar uma cadeia x (x no pertence linguagem), a mquina pode
parar em algum estado no final, ou pode simplesmente no parar, e continuar se
movendo indefinidamente sem nunca aceitar.
Exemplo 7.1: Considere a mT M = ( K, , , , i, F ), onde
K = { q0, q1, q2, q3, q4 }
= { a, b }
= { a, b, X, Y, }
i = q0
F = { q4 },
e dada pela tabela abaixo, onde a notao foi simplificada, e cada valor da funo
em algum ponto representado por uma quntupla. Assim, se (q, a)=(p, b, D),
representaremos este fato pela quntupla qapbD. Quando nenhuma quntupla iniciada
por qa aparece, o valor de (q, a) indefinido. (Como estamos considerando apenas o
caso determinstico, no mximo pode ocorrer uma quntupla para cada par (q, a).
q0aq1XR
q0Yq3YR
q0q4XR
q1aq1aR
q1bq2YL
q1Yq1YR
q2aq2aL
q2Xq0XR
q2Yq2YL
q3Yq3YR
q3Yq4XR
q3q4XR
Considere a cadeia de entrada x = aaabbb. A seqncia de configuraes
assumida por M com entrada x :
q0aaabbb | Xq1aabbb | Xaq1abbb | Xaaq1 bbb | Xaq2aYbb
| Xq2aaYbb | q2XaaYbb | Xq0aaYbb | XXq1aYbb | XXaq1Ybb
| XXaYq1bb | XXaq2YYb | XXq2aYYb | Xq2XaYYb | XXq0aYYb
| XXXq1YYb | XXXYq1Yb | XXXYYq1b | XXXYq2YY
| XXXq2YYY | XXq2XYY | XXXq0YYY | XXXYq3YY
Linguagens Formais - J. L. Rangel 7-4
89/113
q1
q2
q3
q4
(aceita)
(aceita)
90/113
G$A$L
I$M$R
J$J$R
K$K$R
L$I$L
M$M$R
E0E0R
F0F0R
G0G0L
H0H0R
I0JxR
J0J0R
K0K0R
L0L0L
M0M0R
A1A1L
B1CxR
C1D1R
D1CxR
E1E1R
F1F1R
G1G1L
H1H1R
I1KxR
J1J1R
K1K1R
L1L1L
M1M1R
AxAxL
BxBxR
CxCxR
E1GL
F0GL
HI$L
IxIxL
JxJxR
KxKxR
JL0L
KL1R
MxMxR
MN$R
$B1111$
$x1xC1$
$x1x1G$0
$xA1x1$0
$Bx1x1$0
$xxCx1$0
$xxx1$F0
$xxx1G$00
$xAxx1$00
$Bxxx1$00
$xxxB1$00
$xxxx$0E0
$xxxx$G001
$xxAxx$001
A$xxxx$001
$xxBxx$001
$xxxx$H001
$xxxx$001H
$xxxx$00x$K
$xxxx$0I0x$1
$xxxx$0xx$J1
$xC111$
$x1x1D$
$x1xA1$0
$Ax1x1$0
$xB1x1$0
$xxxC1$0
$xxx1$0F
$xxxA1$00
$Axxx1$00
$xBxx1$00
$xxxxC$00
$xxxx$00E
$xxxxG$001
$xAxxx$001
$Bxxxx$001
$xxxBx$001
$xxxx$0H01
$xxxx$00I1$
$xxxx$00xL$1
$xxxx$0xJx$1
$xxxx$0xx$1J
Linguagens Formais - J. L. Rangel 7-6
91/113
$xxxx$0xx$L10
$xxxx$0Ixx$10
$xxxx$xxJx$10
$xxxx$xxx$1J0
$xxxx$xxx$L100
$xxxx$xIxx$100
$xxxx$Mxxx$100
$xxxx$xxxM$100
$xxxx$xxx$10M0
$xxxx$0xxL$10
$xxxx$I0xx$10
$xxxx$xxxJ$10
$xxxx$xxx$10J
$xxxx$xxxL$100
$xxxx$Ixxx$100
$xxxx$xMxx$100
$xxxx$xxx$M100
$xxxx$xxx$100M
$xxxx$0xIx$10
$xxxx$xJxx$10
$xxxx$xxx$J10
$xxxx$xxx$1L00
$xxxx$xxIx$100
$xxxxI$xxx$100
$xxxx$xxMx$100
$xxxx$xxx$1M00
$xxxx$xxx$100$N
Exerccio 7.2. Construa uma mquina de Turing que faa a converso inversa, isto ,
recebendo como entrada a representao binria de um nmero natural, constri sua
representao unria.
Sugesto: A sada desejada pode ser construda usando o seguinte ciclo: se o bit for 1,
acrescente um 1 sada; dobre o nmero de 1s para todos os bits exceto o mais
significativo. Por exemplo, para converter 1101 (13) podemos fazer:
para o bit 1, acrescenta 1 (1);
para o bit 1, dobra (11) e acrescenta 1 (111)
para o bit 0, dobra (111111)
para o bit 1, dobra (111111111111) e acrescenta 1 (1111111111111)
Como a mquina de Turing s trabalha com smbolos e cadeias, para que uma
mquina de Turing possa trabalhar com conjuntos que no so linguagens,
necessrio usar uma codificao, usando cadeias de smbolos para representar os
elementos do conjunto. Na nossa definio informal de procedimento, no foi feita
nenhuma restrio sobre os valores aceitveis como entradas para procedimentos, mas
esta restrio existe para a mT: apenas cadeias de smbolos podem ser usadas como
entradas ou sadas. Conjuntos que no so linguagens s podem ser tratados por um
procedimento atravs de alguma codificao de seus elementos em cadeias de alguma
linguagem. Por exemplo: podemos dizer que o conjunto Nat2 de pares de naturais
r.e., e justificar esta afirmativa apresentando o procedimento enumerador (ou gerador)
abaixo.
1.
2.
3.
4.
Faa i=0.
Para j=0, ..., i, emita (i-j, j).
Incremente i de 1.
V para 2.
92/113
93/113
94/113
$xx$xxx$0xxx$$101
$xx$xxx$xxxx$$1010
$xx$xxx$xxxx$$1010$$
Outra possibilidade a seguinte: usamos tcnicas semelhantes s do Exemplo 7.2 e do
Exerccio 7.2, para as converses de binrio para unrio e vice-versa; a soma pode ser
feita em unrio. Neste caso, podemos ter contedos de fita, em alguns instantes da
computao, como os seguintes:
$11$111$
3 = 112; 7=1112
$xx$111$111$
3= 1111
$xx$xxx$111$1111111$
7 = 11111111
$xx$xxx$1111111111$x
10 = 11111111111
$xx$xxx$xxxxxxxxxx$x$1010$
10 = 10102
A efetiva construo da mquina, por uma das duas maneiras mencionadas, fica como
um exerccio.
7.4 - Tcnicas para a construo de mquinas de Turing
Vamos apresentar a seguir algumas tcnicas de construo de mT's. Em
virtude do interesse apenas terico das mT's, apenas algumas mquinas muito
pequenas so efetivamente construdas. Isso se deve ao fato de que a construo de
uma mT pode ser extremamente trabalhosa. Assim, normalmente feita apenas uma
descrio da mquina, como fizemos nos exemplos 7.3 e 7.5. Vamos examinar aqui
algumas tcnicas, que podem ser usadas para efetivamente construir mT's, mas que
so mais frequentemente usadas em descries de mT's. Vamos apresentar tambm
algumas modificaes do modelo bsico, que no alteram a capacidade de
computao da mT.
1. anotao de informaes no controle finito. A mT pode mudar de estado para
guardar uma informao adicional. Por exemplo, a mT pode decorar o smbolo
que encontrou em uma posio, para mov-lo para outra, ou para compar-lo com
outro smbolo em outra posio.
2. cpia e verificao de smbolos, possvelmente em ordem inversa. Uma mT pode
decorar e marcar smbolos em uma parte A (devidamente demarcada) da fita, para
alguma ao em outra parte B (tambm devidamente demarcada) da fita. O
smbolo decorado em A pode ser copiado em B, ou pode ser comparado com
outro smbolo em B para verificar se duas cadeias so iguais. Se em A comeamos
pelo ltimo smbolo, e em B pelo primeiro, a operao se d na ordem inversa.
3. Mltiplas trilhas. Podemos incluir no alfabeto smbolos que sejam tuplas de
outros smbolos. Por exemplo, pode conter pares de elementos de . Esta
construo permite simular a existncia de vrias trilhas na fita. Por exemplo,
usando triplas como smbolos, (a1, b1, c1) (a2, b2, c2) ... (an, bn, cn) pode ser vista
como uma cadeia de n smbolos (que so triplas) ou pode ser vista como a
combinao de trs cadeias, uma em cada trilha: a1a2...an, b1b2...bn, e c1c2...cn.
A situao est representada na figura abaixo, onde podemos ver a cadeia de triplas,
95/113
a1
b1
c1
a2
b2
c2
an
bn
cn
Em alguns casos, queremos verificar alguma condio sobre uma cadeia x, o que
usualmente destri a cadeia, mas, para alguma finalidade, a cadeia deve ser
preservada. Podemos construir uma cpia de x na outra trilha, simplesmente
trocando cada smbolo ai de x por (ai, ai). Se x = a1a2...an, ento x pode ser substitudo
por (a1, a1) (a2, a2) ... (an, an). Uma das cpias pode ser destruda no processamento, e
ao final x reconstitudo a partir da cpia salva na outra trilha.
4. Subrotinas. Podemos considerar que qualquer ao para a qual uma mT foi
construda (ou descrita) pode ser usada na construo de outra mT, em que a ao
desejada como parte do processamento. Basta para isso incluir uma cpia dos
estados e transies da subrotina. Se quisermos fazer vrias chamadas, entretanto,
ser necessrio dar novos nomes aos estados, para isolar uma chamada da subrotina das demais.
5. Fita infinita nos dois sentidos. Se for interessante, podemos considerar que a fita
da mT se estende de forma ilimitada tambm para a esquerda da posio inicial.
Para a simulao de uma mT com fita infinita nos dois sentidos, bastaria
considerar uma fita semi-infinita com duas trilhas, cada qual representando uma
das "metades". Podemos anotar no controle finito em qual das duas metades da
fita a mT est no momento, e ignorar a outra metade.
Por exemplo, se o contedo da fita infinita
a-3
a-2
a-1
a0
a1
a2
a3
a1
a-2
a2
a-3
a3
a-4
(a1, a-2)
(a2,a-3)
(a3, a-4)
6. Vrias fitas. Podemos considerar uma mT com vrias fitas, a que podem ser
atribudas funes diferentes, caso desejado. Por exemplo, podemos considerar
que a mquina tem uma fita de entrada, uma fita de sada, e uma ou mais fitas de
memria. A simulao de uma mT com n fitas pode ser feita em uma mT com um
fita s, cujos smbolos so tuplas, que contm todos os smbolos de todas as fitas,
e marcas com as posies de todas as cabeas.
7. Mquinas de Turing no determinsticas. Para definir uma mquina no
determinstica, devemos considerar uma funo que pode oferecer mais de uma
possibilidade de transio, a partir de cada configurao. Uma mT no
determinstica pode ser simulada por uma mt determinstica. Isto ser descrito a
seguir.
Definio. Uma mquina de Turing no determinstica M pode ser definida por uma
tupla M = < K, , , , i, F >, onde K um conjunto (finito, no vazio) de estados,
Linguagens Formais - J. L. Rangel 7-11
96/113
A1CxR
B1B1R
C1C1R C1DyL
D1D1L
E1GxR
F1F1R
G1G1R
I1DyL
AKxR
DxExR
DyDyL
EyJyR
FyHyR
GyIyR
HyHyR
IyIyR
JyJyR
JKxR
A escolha no determinstica feita em dois estados, B e C. Em ambos os casos, tratase de adivinhar qual o primeiro smbolo da segunda metade da cadeia xx. No caso do
Linguagens Formais - J. L. Rangel 7-12
97/113
xC1011101
x1D01y101
xx0G1y101
xxD01yy01
xxx1yHy01
xxDx1yyy1
xxxxyyyI1
xxxxEyyyy
xxxxyyyyxK
x1C011101
xD101y101
xx01Gy101
xDx01yy01
xxx1yyH01
xxxE1yyy1
xxxxyyDyy
xxxxyJyyy
x10C11101
Dx101y101
xx01yI101
xxE01yy01
xxx1yDyy1
xxxxGyyy1
xxxxyDyyy
xxxxyyJyy
x101C1101
xE101y101
xx01Dyy01
xxxF1yy01
xxx1Dyyy1
xxxxyIyy1
xxxxDyyyy
xxxxyyyJy
98/113
M ignora sua entrada, e escreve $S$ no fim da fita. Em seguida, M simula uma
derivao em G escolhendo e aplicando no-deterministicamente uma regra em cada
passo. Para isso, escolhida a regra , M encontra (no-deterministicamente) uma
ocorrncia de e substitui esta ocorrncia por . Quando esta derivao tiver como
resultado a cadeia x, M ter em sua fita duas cpias de x que devem ser comparadas.
Neste ponto M passa para um estado final.
Uma outra possibilidade de construo de M atravs de uma mT determinstica, que
em vez de "adivinhar" as regras a serem usadas, testa todas, sucessivamente.
O prximo resultado a recproca do teorema acima.
Teorema 7.3. Toda linguagem recursivamente enumervel tipo 0.
Demonstrao. Seja L uma linguagem r.e. Portanto, L aceita por alguma mT
(determinstica) M. Vamos mostrar que L tipo 0, construindo uma gramtica (tipo 0)
G que aceita L. Uma derivao em G simula uma computao de M, e tem o seguinte
aspecto:
S * ix$x * yfz$x * x
A partir do smbolo inicial S, derivamos uma cadeia da forma ix$x, onde i o estado
inicial de M, de forma que ix a configurao inicial de M com entrada x. A
simulao da computao de M ser feita a partir dessa configurao inicial. A
segunda cpia de x fica inalterada at o final. A cadeia x contm apenas smbolos do
alfabeto de entrada de M, que so os terminais de M; o separador $ e os smbolos de
estados de M so noterminais de G. Para esta fase as regras de G podem ser obtidas
adaptando as regras de uma gramtica sensvel ao contexto de { xx | x*},
acrescentando os smbolos noterminais i e $.
A segunda parte,
ix$x * yfz$x
simula a computao de M com entrada x. Para isto, as regras de G so construdas a
partir das transies de M. Para cada valor (q, a), G tem uma ou mais regras que
simulam a mudana de configurao. Se (q, a) = (p, b, R), basta uma regra qabp.
Se (q, a) = (p, b, L), h necessidade de uma regra cqa pcb para cada smbolo c do
alfabeto da fita. O fim da fita de M identificado pela presena do separador $.
Portanto, quando M l um branco, o separador $ alcanado, e transies em que um
envolvido tem regras correspondentes das formas q$ pb$ e cq$ pcb$.
Supondo que x pertence a L(M), uma configurao final yfz ser eventualmente
alcanada, com ix |* yfz. Portanto, em G, ser possvel a derivao ix$x * yfz$x,
onde f um estado final.
Na ltima fase, os restos da computao de M so removidos, restando apenas a cpia
no usada da cadeia x. Para obter yfz$x * x, G tem regras fX para cada estado
final f. O noterminal X pode ser visto como um apagador usando regras cX X e
Xc X para cada smbolo c do alfabeto da fita, e X$ , podemos eliminar todos
os vestgios da simulao, e ficar apenas com a cadeia x.
Por construo, G gera x se e somente se M aceita x. Para a construo da primeira
parte de G, veja o exerccio abaixo.
99/113
Este captulo foi escrito a partir de uma verso inicial escrita com a colaborao de Luiz Carlos
Castro Guedes
2jul99
100/113
101/113
A cadeia correspondente tupla (qi, sj, qk, sl, r) em * q|i s|j q|k s|l r. Se M
uma mT no determinstica, podemos ter vrias tuplas com os mesmos valores nos
dois primeiros elementos.
Por exemplo, se tivermos a tupla (q1, s2, q3, s4, L), indicando que (q3, s4, L)
(q1, s2), a cadeia correspondente em * ser q|s||q|||s||||L. Para representar a funo ,
concatenamos as representaes das quntuplas correspondentes a , separadas por #.
Para representar F, basta concatenar, sem separao, as cadeias que
representam os estados. Por exemplo, F = {q1, q3, q5 } representado por q|q|||q|||||. A
representao de M se reduz apenas representao de F e de , que podem ser
separadas por ##.
Exemplo: Seja M = <K, , , , i, F>, onde
K = { p, q, r }
= { a, b }
= { , a, b, X }
i=q
F = { r },
sendo dada por
(p, a) = {(q, a, R)}
(q, a) = {(q, X, R)}
(q, b) = {(r, a, L)}
(q, ) = {(r, X, L)}
Fazendo q0 = q, q1 = p, q2 = r, s0 = , s1 = a, s2 = b, s3 = X, temos a seguinte
representao de M:
q||##q|s|qs|R#qs|qs|||R#qs||q||s|L#qsq||s|||L
Uma entrada aaab de M ser codificada em * como s|s|s|s||.
Com essa codificao (ou alguma outra codificao semelhante), possvel
representar as mT's e suas entradas atravs de cadeias em *, onde um alfabeto
apropriado. Sabemos que * enumervel, e que podemos atribuir um natural a cada
cadeia de *, e fazer referncia s cadeias de * como x0, x1, x2, . Assim, podemos
atribuir mT representada por xi o nmero i, e fazer a referncia a ela como a i-sima
mquina de Turing Mi.
Entretanto, para que a notao Mi sempre represente uma mT, uma conveno
adicional necessria. Observe que nem todas as cadeias xi de * correspondem a
mT's. Por exemplo, a cadeia LLL no descreve nenhuma mT. Para que a cada natural
i corresponda uma mT Mi, vamos associar a cada i tal que xi no descreve nenhuma
mquina a mquina vazia ##, que no tem nenhum estado final, e nenhuma transio
possvel. Incidentalmente, ## aceita a linguagem vazia .
Assim, podemos falar em Mi, para qualquer i: ou M a mquina representada por xi,
ou xi no representa nenhuma mquina, e Mi a mquina representada por ##. Note
que fcil distinguir as cadeias de * que representam mT's das demais, uma vez que
elas formam um conjunto regular.
Semelhantemente, podemos enumerar as cadeias que representam entradas:
x0, x1, x2 ...,
Linguagens Formais J.L.Rangel 8-2
102/113
103/113
104/113
105/113
(junho 99)
106/113
107/113
108/113
109/113
110/113
(julho 99)
111/113
112/113
configurao nenhuma outra pode ser atingida, nenhum smbolo de z ser lido, e a
cadeia y no ser aceita.
Exerccio: Seja L uma linguagem qualquer num alfabeto , e seja $ um smbolo novo,
no pertencente a .
(a) Mostre que a linguagem L{$} = { x$ | x(L} tem a propriedade dos prefixos;
(b) Mostre tambm que se L uma linguagem determinstica, ou seja, se L aceita
por estado final por um apd, L{$} aceita por um apd por pilha vazia.
Exerccio: Mostre que as linguagens { ai bj | i=j }, { ai bj | i>j }, { ai bj | i<j } e
{ ai bj | ij }, so determinsticas.
10.3 Propriedades de fechamento da classe das linguagens
determinsticas
Para as linguagens determinsticas, no existe um correspondente do Lema do
Bombeamento (pumping lemma), de forma que a principal maneira de provar que
uma linguagem livre de contexto no determinstica atravs do uso de
propriedades de fechamento. Por exemplo, veremos posteriormente que a classe das
linguagens determinsticas fechada para a operao de complemento. Assim, uma
llc cujo complemento no uma llc no pode ser determinstica.
Vamos comear pela propriedade do fechamento com o complemento.
Teorema: A classe das linguagens determinsticas fechada para o complemento.
Dem.: Seja M um apd que aceita uma linguagem L, por estado final.
Vamos mostrar como construir um apd M' que aceita o complemento de L. A idia
central semelhante da prova do fechamento da classe das linguagens regulares
para o complemento: vamos trocar os estados finais pelos no finais. Assim, pelo
menos em princpio, se L a linguagem aceita por M = < K, , , , i, I, F>, o apd
M' = < K, , , , i, I, K-F> deve aceitar o complemento de L.
Entretanto, algumas possibilidades devem ser consideradas:
1. M no aceita uma entrada x porque M pra sem que a entrada x tenha sido toda
lida. Se construirmos M' apenas pela troca dos estados finais e no finais de M, x
continuaria no sendo aceita, o que seria incorreto.
2. M l toda a entrada x, mas aps isso, M executa uma infinidade de passos com
entrada , sem retirar smbolos da pilha, e, nessa fase, passa por estados finais e
no finais. Note que M aceita x, mas se construirmos M' apenas pela troca dos
estados finais e no finais, x continuaria sendo aceita, o que seria incorreto.
Para resolver esses problemas, necessrio fazer vrias transformaes em M antes
de trocar os estados finais e no finais. Os detalhes da efetiva construo de M' a
partir de M podem ser vistos no livro de Hopcroft e Ullman.
A partir deste resultado, podemos mostrar que a classe das linguagens
determinsticas contida propriamente na classe das llc.
Fato: A llc L = { ai bj ck | ou ij ou jk } no determinstica.
Dem. Basta mostrar que o complemento no uma livre de contexto.
113/113
linguagens recursivas
linguagens determinsticas
(julho 99)