Professional Documents
Culture Documents
Notao. Usaremos Nat para representar o conjunto dos nmeros naturais; Int para
representar o conjunto dos nmeros inteiros. Para cada n Nat, [n] representa o
conjunto dos naturais menores ou iguais a n:
A B = { (x, y) | x A e y B }.
Esse conceito pode ser estendido, usando n-tuplas, para definir o produto cartesiano de n
conjuntos:
Naturalmente, A1 = A.
A B = { (a, d), (a, e), (b, d), (b, e), (c, d), (c, e) }
B A = { (d, a), (d, b), (d, c), (e, a), (e, b), (e, c) }
A1 = A = { a, b, c }
A2 = A A = { a, b, c } { a, b, c } =
= { (a, a), (a, b), (a, c), (b, a), (b, b), (b, c), (c, a), (c, b), (c, c) }
o
Relaes. Podemos agora definir relao: dados n conjuntos A1, A2, , An, uma
relao em A1, A2, , An um conjunto qualquer de tuplas de elementos de A1, A2, ,
An. Portanto, usando a definio acima, R uma relao em A1, A2, , An se
R A1 A2 An.
Um caso especial que ser muito importante no que se segue o caso n=2, com
A1=A2=A. R uma relao binria em um conjunto A, se R A A.
{ y B | ( x A) (f(x) = y) }.
ou
suc: i a i + 1
ou ainda
o
Injeo, sobrejeo, bijeo. Dizemos que uma funo f: AB uma injeo se para
cada b B existe no mximo um a A tal que f(a) = b; dizemos que f: AB uma
sobrejeo se para cada b B existe no mnimo um a A tal que f(a) = b; dizemos que
f uma bijeo se f ao mesmo tempo, uma injeo e uma sobrejeo.
Note que f bem definida para todos os valores de i, porque g uma injeo, e, para
cada i, pode haver, no mximo, um a tal que g(a) = i; f uma sobrejeo, porque g
definida para todos os elementos de A.
o
Fato: Um conjunto infinito A enumervel se e somente se existe uma bijeo
f: A Nat.
Dem.: Exerccio.
o
Fato: Entre dois conjuntos infinitos enumerveis A e B existe sempre uma bijeo
f: AB.
Dem.: Exerccio.
o
Exemplo: O conjunto Nat enumervel.
Basta tomar f como sendo a funo identidade I: Nat Nat, que , claramente, uma
bijeo.
o
Exemplo: O conjunto Nat = Nat Nat de pares de nmeros naturais enumervel.
2
1. 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.
2. 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).
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.
X = { j Nat | j f(j) }
Desta forma, podemos ver que, para qualquer i, f(i) X. Para isso, basta notar
que i pertence a exatamente um dos dois conjuntos f(i) e X. Portanto, qualquer que fosse
a enumerao de P(Nat), X no pertenceria a ela.
(2) Uma das definies possveis para par ordenado a seguinte: definimos o par
ordenado (a, b) como sendo o conjunto {{a, b}, {a}}. Mostre que, com esta definio,
vale a propriedade fundamental:
(a, b) = (c, d) se e somente se a=c e b=d.
(3) Podemos definir uma tripla (ou 3-tupla) a partir da definio de par ordenado:
(a, b, c) = ((a, b), c).
Isto corresponde a definir Nat3 como Nat2Nat. Mostre que com esta definio, vale a
propriedade fundamental:
(4) Para definir uma numerao dos elementos de Nat, podemos usar as funes F1 e F2
definidas a seguir:
F1 ( (i,j,k) ) = 2i 3j 5k
F2 ( (i,j,k) ) = g( (i, g( (j,k) ) ) ),
onde g a funo definida anteriormente:
g( (i,j) ) = 2i 3j.
Experimente calcular F1 ( (5, 5, 5) ) e F2 ( (5, 5, 5) ).
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
A: escrevemos apenas x R y. Essa notao semelhante usada para relaes comuns,
como as relaes de ordem <, , etc.: no escrevemos (x, y) , mas, mais
simplesmente, x y.
1Alguns autores preferem a ordem inversa: (RS)(x) = R(S(x)). A diferena apenas de notao.
J.L.Rangel - Ling. Formais - 0-6
Exemplo: Sejam as relaes
R = { (1, 2), (2, 3), (3, 4), (4, 1) }
S = { (1, 1), (2, 1), (3, 1), (4, 2) }
J que R e S so funes, o mesmo vale para as composies:
RS = { (1, 1), (2, 1), (3, 2), (4, 1) }
SR = { (1, 2), (2, 2), (3, 2), (4, 3) }
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 }
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 = = .
o
Fechamento. Definimos o fechamento reflexivo-transitivo R* de uma relao binria R
em um conjunto A atravs de
ou, equivalentemente,
R = U R i = R 0 U R1 U R 2 U R 3 U L
*
i =0
{ { a, b, c, d, e } }
{ { a }, { b }, { c }, { d }, { e } }
{ { a, b }, { c, d, e } }
{ { a, e }, { b, c, d } }
o
Exerccio: Escreva todas as parties de { a, b, c, d, e }.
o
Classes de equivalncia. Seja R uma equivalncia em um conjunto A. Definimos a classe
de equivalncia [a] de a A da seguinte maneira:
[a] = { x A | x R a },
J.L.Rangel - Ling. Formais - 0-8
ou seja, a classe de equivalncia de aA o conjunto dos elementos de A que so
equivalentes a a. Note que como R uma equivalncia, a [a], para qualquer a.
(2) a R b, b R c, d R e.
e R composta dos pares: (a, a), (a, b), (a, c), (b, a), (b, b), (b, c), (c, a), (c, b), (c, c),
(d, d), (d, e), (e, d), (e, e), (f, f).
Assim podemos ver diretamente que [a] = [b] = [c] = { a, b, c }, que [d] = [e] = { d, e }
e que [f] = { f }.
o
Conjunto quociente. Definimos o conjunto quociente A/R de A por uma equivalncia R
em A, atravs de
A/R = { [x] | x A },
(3) Classes de equivalncia diferentes so disjuntas. Com efeito, suponha que duas
classes [a] e [b] tem sua interseo no vazia, com um elemento c em comum:
c [a] e c [b]. Neste caso, usando o fato de que R simtrica e transitiva,
temos c R a, c R b, e, portanto, a R b. Assim, pela propriedade transitiva, x R a
se e somente se x R b, e [a] = [b]. Consequentemente, as classes de equivalncia
so disjuntas duas a duas, e formam uma partio de A.
o
Assim, se provarmos
I. (base da induo)
P(0)
II. (passo de induo)
Para qualquer i Nat, P(i) implica P(s(i)).
estaremos provando P para todos os naturais, pois teremos
A frmula da soma
(a q a 0 )
S n = f(n) = n
(q 1)
Devemos provar inicialmente a base de induo (para n=0): S0 = f(0). A demonstrao
se resume verificao de que
(a q a 0 )
f(0) = n = a0
(q 1)
I. P(0)
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.
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.
Note que consideramos aqui apenas alfabetos finitos: isso feito por
simplicidade, naturalmente, e tambm porque so raros os casos em que a considerao
de um alfabeto infinito seria desejvel.1
x (i ), se i m
x o y (i ) =
y (i m), se i > m
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
Assim, se tivermos = {a, b, c}, x = cbba, e y = ac, teremos xy = cbbaac.
Representando as funes atravs de tabelas, temos:
x=x=x
Note que todas essas sequncias satisfazem a definio anterior, e tem como
comprimento um nmero natural finito. Podemos assim ter linguagens infinitas, mesmo
sem considerar sequncias infinitas.
{}
{a, aa, aaa}
{a, b}*
{x | |x| par}
{a, b} notao ambgua
Se L e M so linguagens em , temos:
unio: L M = { x | x L ou x M }
interseo: LM={x|xLexM}
diferena: L-M={x|xLexM}
complemento: L = * - L = { x * | x L }
L M = { xy | x L e y M } .
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
o
Fato: A classe de todas as linguagens em um alfabeto no enumervel.
Dem.: A classe de todas as linguagens em P(*), e j vimos que o conjunto formado
por todos os subconjuntos de um conjunto enumervel infinito no enumervel.
o
Exerccio: Aplique a tcnica da diagonalizao diretamente, para mostrar que a classe
P(*) de todas as linguagens no alfabeto no enumervel.
o
Exerccio: Suponha = { a, b, c }.
(a) Escreva um programa que, quando recebe como entrada o natural i, determina a
cadeia xi *.
(b) Escreva um programa que, quando recebe como entrada uma cadeia x *,
determina o natural i tal que x = xi.
rev. 17/6/96
O fato surpreendente a respeito disso que (at hoje) todos os modelos usados
(se no so completamente absurdos) concordam na definio do que quer dizer
"computvel". Uma conjectura, enunciada por Alonzo Church, diz que todos os modelos
razoveis do processo de computao, definidos e por definir, so equivalentes. Essa
conjectura conhecida como a tese de Church. Por sua prpria natureza, a tese de
Church no admite nenhuma prova formal, mas at hoje todos os modelos propostos se
mostraram equivalentes.
"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.
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.
1. Faa X = {}.
2. Emita todas as sequncias de X.
3. Para cada y X, acrescente a X as sequncias ya e yb.
4. V para 2.
Cada sequncia emitida uma infinidade de vezes, como permitido numa enumerao.
o
Exemplo: Seja uma funo f: Nat Nat. Suporemos que est disponvel um algoritmo
para calcular f(i), a partir de qualquer i Nat. Considere o procedimento a seguir:
1. faa i = 0.
2. calcule j = f(i), usando o algoritmo dado
3. se j = k, emita i, e pare
4. incremente o valor de i de 1
5. v para 2.
Note que o passo 2 s pode ser considerado uma instruo por causa da disponibilidade
de um algoritmo para clculo dos valores da funo. O procedimento do exemplo aceita
como entrada um valor k Nat, e s pra se existir um valor de i tal que f(i) = k. Em
particular, o valor de i emitido o menor possvel.
o
Conjuntos recursivamente enumerveis. Dizemos que um conjunto A
recursivamente enumervel (r.e.) se existe um procedimento que enumera os elementos
J.L.Rangel - Ling. Formais - 2-3
de A. Isto quer dizer que existe um procedimento que emite todos os elementos de A,
possivelmente com repeties.
o
Exemplo: Seja f: Nat Nat. O procedimento a seguir mostra que o contradomnio de f
recursivamente enumervel, supondo que existe um algoritmo que calcula o valor de
f(i), a partir de i.
1. i := 0;
2. emita f(i);
3. i := i + 1;
4. v para 2.
o
Conjuntos recursivos. Dizemos que um conjunto A recursivo se existe um algoritmo
que determina, para um valor arbitrrio de sua entrada x, se x A ou se x A. Embora
isso no seja estritamente necessrio, podemos, para fixar as idias, especificar que o
algoritmo deve parar e dizer "sim" ou "no", respondendo pergunta "x A?".
o
Fato: Todo conjunto recursivo recursivamente enumervel.
Dem.: Se o conjunto A Nat recursivo, existe um algoritmo que, para cada entrada
i determina se i A. Considere o procedimento a seguir:
1. i := 0.
2. execute com entrada i.
3. se respondeu "Sim", emita i.
4. i := i + 1.
5. v para 2.
Note que:
i assume todos os valores naturais
sempre pra, qualquer que seja sua entrada i;
responde "Sim" exatamente para os valores de i que pertencem a A.
Portanto, os valores de i emitidos so exatamente aqueles pertencentes a A.
o
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".
() 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
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.
1. execute um passo de .
2. se emitiu i, emita i.
3. execute um passo de .
4. se emitiu i, emita i.
5. v para 1.
0. Faa X = e Y = .
1. execute um passo de .
2. se emitiu i, acrescente i ao conjunto X.
3. execute um passo de .
4. se emitiu i, acrescente i ao conjunto Y.
5. emita os elementos comuns a X e a Y.
6. v para 1.
Dem.: J vimos que se A r.e., existe um procedimento que pra e diz "Sim",
exclusivamente quando sua entrada x um elemento de A; como A tambm r.e., existe
um procedimento que pra e diz "Sim" exclusivamente quando sua entrada x um
elemento de A , ou seja, exatamente quando x no um elemento de A.
1 | 2 | ... | n.
letras representam
S, A, B, C, noterminais
a, b, c, terminais
X, Y, Z, smbolos quaisquer
, , , cadeias quaisquer
x, y, z, cadeias de terminais
V, N, , , , alfabetos
Como acontece com toda conveno, haver alguns casos em que esta no ser
seguida.
o
Para mostrar que a cadeia 000111 faz parte da linguagem associada gramtica,
seguimos, a partir de S, os seguintes passos intermedirios:
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.
Para mostrar a igualdade dos dois conjuntos necessrio mostrar a "dupla incluso" ,
que no caso se reduz a mostrar (a) e (b) a seguir:
(a) cada sequncia da forma 0i1i pode ser derivada a partir de S, ou seja,
L(G) { 0i1i | i Nat }.
Basta observar que uma derivao a partir de S, em que se utiliza i vezes a regra
S 0S1 e uma vez a regra S , gera exatamente 0i 1i .
Basta notar que a partir de S, usando as duas regras de todas as maneiras possveis, s
possvel gerar sequncias (formas sentenciais) da forma 0i1i , e da forma 0iS1i , e que
cadeias da segunda forma no podem fazer parte da linguagem, por conter um smbolo
no terminal.
o
Gramticas equivalentes. Duas gramticas G1 e G2 so chamadas de equivalentes, se
ambas definem a mesma linguagem: L(G1) = L(G2).
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
Gramticas tipo 3 (gramticas regulares). As gramticas tipo 3 s podem ter regras dos
trs tipos descritos a seguir:
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
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.
S 0S0 | 1S1 |
Dem.: Sejam G = <N, , P, S> uma gsc, e L = L(G). Devemos, pela definio de
conjunto recursivo, mostrar que existe um algoritmo que, quando recebe como entrada
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
Dem.: Seja G = <N, , P, S> uma gramtica (tipo 0). O procedimento abaixo enumera
os elementos de L(G).
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.
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 .
Defina a gramtica G' = <N {S'}, , P', S'>, sendo P' como obtido como
descrito a seguir:
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 } regras A e C
{ A, B, C } regra B AC
{ A, B, C, S } regra S ABC
at que X atinge seu valor final: X = { S, A, B, C }.
S S
A B D A D
a A A C d a d
(reviso de 27fev97)
4.1 - Introduo
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.
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.
Em resumo, temos:
nmero de a's nmero de b's
q0 par par
q1 mpar par
q2 par mpar
q3 mpar mpar
A linguagem aceita ou reconhecida por M (ver definio abaixo) a linguagem formada
pelas cadeias em que os nmeros de a's e de b's so ambos mpares. Isso se deve ao fato
de que o nico estado final q3.
Por exemplo, a cadeia abaa da linguagem de M, porque, com essa cadeia, os seguintes
estados so atingidos: q0, q1, q3, q2, q3. Como o ltimo estado final, a cadeia aceita.
A linguagem de um afd. Para definir a linguagem L(M), a linguagem das cadeias aceitas
ou reconhecidas pelo afd M, podemos definir inicialmente uma configurao de M como
sendo um par (q, x) K *, composto pelo estado corrente (o estado atual da
mquina) e pela cadeia x, a parte da entrada que ainda no foi lida. Como observado, o
Exemplo 1: (continuao) Para mostrar que abaa L(M), basta observar que
(q0, abaa) | (q1, baa) | (q3, aa) | (q2, a) | (q3, ),
porque q3 final. Por outro lado, como
(q0, abab) | (q1,bab) | (q3, ab) | (q2, b) | (q0, ),
abab no pertence a L(M).
$ (q, ) = q, q K
Exerccio 2: Mostre que a definio anterior de $ pode ser substituda pela equivalente
$ (q, ) = q, q K
Exerccio 4: Descreva a linguagem do afd M dado pelo diagrama de estados da Fig. 4.3.
Exerccio 5: Descreva a linguagem do afd M = (K, , , i, F), onde K={q0, q1, q2, q3},
= { a, b }, i = q0, F = { q2 }, e dada pela tabela abaixo:
a b
q0 q1 q3
q1 q2 q0
q2 q3 q1
q3 q4 q2
Essa possibilidade de escolha entre vrios caminhos a serem seguidos nos leva a
modificar a definio de aceitao. Um afd aceita se "o ltimo estado atingido final";
mas um afnd aceita se "existe uma sequncia de escolhas tal que o ltimo estado
atingido final". Podemos alternativamente imaginar que o afnd "escolhe", "adivinha", o
caminho certo para a aceitao, uma vez que a existncia de escolhas erradas, que no
levam a um estado final, irrelevante.
Exemplo 2: Considere o afnd dado pelo diagrama da Fig. 4.4 e a cadeia de entrada
ababa.
A cadeia ababa aceita, porque uma das possibilidades a sequncia de estados q0,
q1, q1, q1, q1, q2. Naturalmente, com a mesma cadeia, poderamos escolher a sequncia
q0, q1, q1, q1, q1, q1, que no leva a um estado final. Ou a sequncia q0, q1, q1, q2,
interrompida, porque q2 no prev uma transio com o segundo b. Mas estes casos em
que "o automato adivinhou errado" no criam problemas para a aceitao, porque "existe
um caminho certo".
Este afnd aceita a linguagem das cadeias (de comprimento maior ou igual a 2), cujo
primeiro e ltimo smbolos so a, sendo os restantes quaisquer. (Compare este afnd com
o afd de um dos exemplos anteriores, que aceita a mesma linguagem.)
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.
Note que a pode ser a cadeia vazia, caso em que temos, particularizando,
Lema 1: Toda linguagem reconhecida por um afnd reconhecida por um afnd que no
tem transies com .
Demonstrao: Seja M = (K, , , i, F) um afnd qualquer. Vamos construir um afnd
M' = (K, , ', i, F') equivalente a M, isto L(M') = L(M). Para isso vamos "simular" o
efeito das transies com de duas maneiras:
se tivermos a , (p1, ) = p2, e (p2, a) = q, acrescentaremos a ' uma
transio de p1 para q com a, ou seja, acrescentaremos q ao conjunto '(p1, a);
se tivermos (p1, ) = p2, e p2 F, acrescentaremos p1 a F.
(ver figura abaixo)
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 (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 b
{A} {C} {G}
{C} { C, D } {C}
{G} {G} { G, H }
{ C, D } { C, D } {C}
{ G, H } {G} { 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
Fig. 4.7 - afd para o Exemplo 4
M M' M''
(A, ababa) (A, ababa) ({A}, ababa)
(B, ababa) --- ---
(C, baba) (C, baba) ({C}, baba)
(C, aba) (C, aba) ({C}, aba)
(C, ba) (C, ba) ({C, D}, ba)
(C, a) (C, a) ({C}, a)
(D, ) (D, ) ({C, D}, )
(I, ) --- ---
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.
A tabela de transio de M
a b
A B A
B C B
C D C
D E D
E F E
F A F
Isso pode ser usado para resolver dois problemas interessantes. Primeiro, se
quisermos determinar se dois afd's M1 e M2 so equivalentes, basta construir os afd's M1'
e M2' mnimos correspondentes. Se M1' e M2' forem isomorfos, M1 e M2 so
equivalentes. Segundo, se quisermos mostrar que um afd M dado mnimo, basta aplicar
a M o processo de minimizao, e verificar que o resultado M' isomorfo de M. Isto
feito no Exemplo 6, onde, adicionalmente, para cada par de estados (p, q) distintos de
M, deduzimos exemplos de cadeias que os distinguem.
a b
A B A
B C B
C D C
D E D
E F E
F A F
Exerccio 8: Construa um afd mnimo que aceite a linguagem L no alfabeto = {a, b},
com L ={ cdxcd | c, d , x * }
Inicialmente, faa (A, a)= , para todos os noterminais A e para todos os smbolos a,
e para a = . A seguir, para todas as regras de G,
se G tem uma regra A a B, acrescente uma transio de A para B com o
smbolo a, ou seja, acrescente B a (A, a).
se G tem uma regra A a, acrescente uma transio de A para f com o smbolo
a, ou seja, acrescente f a (A, a).
se G tem uma regra A , acrescente uma transio de A para f com , ou seja,
acrescente f a (A, ).
Devemos mostrar que, para qualquer x *, M aceita x sse x L(G). A demonstrao
se completa pela verificao de que a sequncia de configuraes (S, x) |* (f, ) em M
corresponde exatamente sequncia de passos da derivao S * x em G.
demonstrao: Podemos supor que L aceita por um afd M = (K, , , i, F). Vamos
construir uma gramtica regular G para L. A gramtica G = (K, , P, i) tem como
smbolos no terminais os estados de M, e como smbolo inicial o estado inicial i de M.
As regras de G so dadas pelas transies e pelos estados finais de M:
se p = (q, a) em M, G tem uma regra q ap em P.
se q final (q F), G tem uma regra q em P
A demonstrao semelhante a anterior: devemos mostrar que, para qualquer x *, M
aceita x sse x L(G).
Exemplo 9: Seja o afd M = ({q0, q1}, {a, b}, , q0, {q1}), com dada pela tabela
abaixo.
J. L. Rangel, L. C. Guedes - Ling. Formais - 4-20
a b
q0 q1 q1
q1 q0 q0
M aceita as cadeias de {a, b}* que tem comprimento mpar.
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. a de ER3
2. b de ER3
3. (ab) de 1, 2 e ER4
4. (ab)* de 3 e ER6
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.
Exerccio 11: Mostre que, dada uma er , sempre possvel construir uma er
equivalente a , de forma que ou = , ou no contm o smbolo .
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)*
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.
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.
Exemplo 13: Seja a er = (a b)* a. Vamos construir um afnd que aceita L(),
seguindo a construo indicada na demonstrao acima. Os passos intermedirios e os
resultados esto indicados nas tabelas a seguir
M(a) a b
inicial: A {B}
final: B
M(b) a b
inicial: C {D}
final: D
M(a b) a b
inicial: E {A, C}
A {B}
B {F}
C {D}
D {F}
final: F
M((a b)*a) a b
inicial: I {G}
G {E, H}
E {A, C}
A {B}
B {F}
C {D}
D {F}
F {G}
H {A'}
A' {B'}
B' {J}
final: J
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.
Teorema 4.10: (Lema do Bombeamento) Seja L uma linguagem regular. Ento, existe
um natural n tal que qualquer cadeia z de L com comprimento maior ou igual a n pode
ser decomposta em trs cadeias u, v e w (z = uvw) de forma que
|uv| n
v
para qualquer i 0, u vi w L
Demonstrao: A demonstrao se baseia no fato de que para as cadeias longas z
necessrio usar pelo menos um loop de estados num afd que aceite a linguagem. Assim,
os smbolos de u so usados para chegarmos a um estado q do loop; os smbolos de v
so usados para dar a volta no loop, de volta ao estado q; os smbolos de w so usados
para ir de q at um estado final. Portanto, podemos dar quantas voltas no loop
quisermos, e repetir v um nmero qualquer i de vezes: u vi w.
As cadeias curtas (comprimento < n) devem ser excludas porque podem ser
aceitas sem passar por nenhum loop.
Exemplo 14: Seja a linguagem regular L = L[] = L[], com = 1(01)* e = (10)*1.
Considere a cadeia z=10101, pertencente a L. Podemos decompor a cadeia, da forma
descrita no teorema acima, de diversas formas. Por exemplo:
u=1 v = 01 w = 01
u = 10 v = 10 w=1
u= v = 1010 w=1
Note que todas as cadeias das formas 1(01)i01, 10(10)i1, (1010)i1 pertencem a L.
Seja k=n+1. Considere a cadeia z=ak bk. Qualquer decomposio z=uvw deve ter em v o
mesmo nmero de a's e de b's, para que a propriedade de que o nmero de a's igual ao
de b's se mantenha nas cadeias u vi w. Se isso no acontecer, quando acrescentarmos
mais um v (aumentando i de 1), obteremos uma cadeia fora da linguagem. Portanto, v
deve ser da forma aj bj, com j>0, j que v no pode ser vazia. Mas nesse caso, u v2 w
conter a cadeia aj bj aj bj, com pelo menos um a depois de um b, o que no pode
acontecer na linguagem.
Exerccio 19: Mostre que, na construo usada na demonstrao do Teor. 4.11 parte
(c), no pode ser usado um afnd.
(reviso de 27fev97)
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 .
A B
a a A B b b
a a A a
Fig. 1 - rvore de derivao de aaaabb
Teorema 5.1: Seja G = (N, , P, S) uma glc. Ento, para qualquer cadeia x *,
x L(G) se e somente se existe uma rvore de derivao A na gramtica G, cujo
resultado x.
Demonstrao: Basta observar a correspondncia entre a substituio de noterminais
pelos lados direitos de suas regras na derivao e a criao dos filhos correspondentes
na rvore. Usando essa correspondncia possvel construir uma rvore de derivao
cujo resultado x a partir de uma derivao S * x; possvel tambm construir uma
derivao S * x a partir de uma rvore de derivao cujo resultado x. Os detalhes
da demonstrao so deixados como exerccio.
Observao. A partir de uma derivao. s possvel construir uma rvore; entretanto,
na direo oposta, possvel construir vrias derivaes, dependendo da ordem em
que os ns so considerados. O Exemplo 5.2 mostra algumas das vrias derivaes
que correspondem mesma rvore.
E + T
T F
T * F a
F ( E )
a E + T
T F
F a
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
A construo das duas rvores fica como exerccio.
Uma linguagem livre de contexto cujas gramticas so todas ambguas
chamada uma gramtica inerentemente ambgua.
Exemplo 5.4: Sejam L1 = {ai bj ck| i=j } e L2 = {ai bj ck| j=k }. A linguagem L
definida por L = L1 L2 inerentemente ambgua. As linguagens L1 e L2 no so
inerentemente ambguas, como se pode ver pelas suas respectivas gramticas G1 e G2.
1, 2, 3: S A B | A C | B D
4, 5: A a A | a
6, 7: B b B | b
8, 9: C c D | d C
10, 11: Y y | z Z
12, 13: Z z | y Y
Smbolos no terminais acessveis:
Em derivaes a partir de S podem aparecer S A B C D (regras 1, 2, 3).
Smbolos no terminais produtivos:
Derivaes que levam a cadeias de terminais: A (regra 5), B (regra 7), Y (regra
10), Z (regra 11), S (regra 1, j que A e B so produtivos.)
Logo, todos os noterminais, exceto S A B so inteis. Retirando todas as regras que
fazem referncia a noterminais inteis, temos:
1: S A B
4, 5: A a A | a
6, 7: B b B | b
Os smbolos restantes podem ser considerados inteis: C D Y Z c d y z.
E + T
T F
T * F a
F ( E )
a E + T
T F
F a
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:
Nota: a primeira verso deste captulo contou com a colaborao de Luiz Carlos Castro Guedes
(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.
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;
B simula todas as transies de A (exceto pela presena de I' no fundo da pilha), e
quando A atinge uma configurao [f, , ], indicando a aceitao de x, B atinge a
configurao [f, , I'], com o smbolo I' acrescentado no fundo da pilha;
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.
q a Z p
1 0 a I 0 a
2 0 b I 0 b
3 0 a a 0 aa
4 0 a b 0 ab
5 0 b a 0 ba
6 0 b b 0 bb
7 0 I 1
8 0 a 1 a
9 0 b 1 b
10 1 a a 1
11 1 b b 1
q a Z p comentrios
u X u [0, I, 0] iniciao
u [0, I, 1]
u a [0, I, 0] u [0, a, 0] 1
u a [0, I, 1] u [0, a, 1]
u b [0, I,0] u [0, b, 0] 2
u b [0, I, 1] u [0, b, 1]
Linguagens Formais, J. L. Rangel, 6-9
q a Z p comentrios
u a [0, a, 0] u [0, a, 0] [0, a, 0] 3
u [0, a, 1] [1, a, 0]
[0, a, 1] u [0, a, 0] [0, a, 1]
u [0, a, 1] [1, a, 1]
u a [0, b, 0] u [0, a, 0] [0, b, 0] 4
u [0, a, 1] [1, b, 0]
u a [0, b, 1] u [0, a, 0] [0, b, 1]
u [0, a, 1] [1, b, 1]
u b [0, a, 0] u [0, b, 0] [0, a, 0] 5
u [0, b, 1] [1, a, 0]
u b [0, a, 1] u [0, b, 0] [0, a, 1]
u [0, b, 1] [1, a, 1]
u b [0, b, 0] u [0, b, 0] [0, b, 0] 6
u [0, b, 1] [1, b, 0]
u b [0, b, 1] u [0, b, 0] [0, b, 1]
u [0, b, 1] [1, b, 1]
u [0, I, 1] u 7
u [0, a, 0] u [1, a, 0] 8
u [0, a, 1] u [1, a, 1]
u [0, b, 0] u [1, b, 0] 9
u [0, b, 1] u [1, b, 1]
u a [1, a, 1] u 10
u a [1, b, 1] u 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, , ]
(maio 99)
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.
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. Faa i=0.
2. Para j=0, ..., i, emita (i-j, j).
3. Incremente i de 1.
4. V para 2.
Neste procedimento, no foi especificada a forma de representao dos nmeros
naturais, ou de seus pares, de forma que qualquer representao pode ser usada.
Entretanto, usando mquinas de Turing como reconhecedores, s podemos
mostrar que Nat2 r.e. descrevendo uma linguagem cujos elementos representam os
elementos de Nat2, e uma mT que reconhece esta linguagem. As linguagens L1, L2 e
L3 abaixo so exemplos de linguagens que podem ser usadas com essa finalidade.
L1 = { ai bj | i, j Nat }
L2 = { $ 1i $ 1j $ | i, j Nat }
L3 = { $ x $ y $ | x, y Z}, onde Z = { 0 } {1}{ 0, 1 }*
$11$111$
$1x$11x$0
$xx$1xx$01
$xx$xxx$010
$xx$xxx$0101
$xx$xxx$010x$$1
$xx$xxx$01xx$$10
A efetiva construo da mquina, por uma das duas maneiras mencionadas, fica como
um exerccio.
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 sub-
rotina 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
a0 a1 a2 a3
a-1 a-2 a-3 a-4
ou seja, por
(a0, a-1) (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
o alfabeto (finito) de smbolos da fita, o alfabeto de smbolos de entrada, a
funo de transio, i K o estado inicial, e F K o conjunto de estados finais.
A funo de transio um mapeamento : K P(K {L, R}). Todos os
valores de so conjunto finitos.
Configurao. Da mesma maneira que para uma mT determinstica, uma
configurao de uma mT uma cadeia xqy, em que xy * o contedo da fita, sem
incluir nenhum dos brancos que existem direita, e qK o estado corrente.
Semelhantemente, a configurao inicial para a entrada x ix, e uma configurao xfy
final se o estado f final.
Mudana de configurao. A definio da relao mudana de configurao, |,
no oferece surpresas:
movimento para a direita:
se (p, b, R)(q, a), ento xqay | xbpy
caso particular: se (p, b, R)(q, ), ento xq | xbp
movimento para a esquerda:
se (p, b, L)(q, a), ento xcqay | xpcby
caso particular: se (p, b, L)(q, ), ento xcq | xpcb
Naturalmente, se (q, a)=, nenhuma configurao pode ser alcanada a partir
de uma configurao xqay, e a mquina pra. Caso particular: se a configurao for
xq, a mquina pra quando (q, )=.
Linguagem reconhecida por uma mT no determinstica. A linguagem aceita, ou
reconhecida por uma mT M definida por
L(M) = { x * | ix |* yfz, onde f F }
A aceitao se d quando o estado final atingido, no interessando em que
ponto da fita est a cabea, se h possibilidade de continuar a partir desse ponto, ou se
h outras configuraes no finais atingveis com a mesma entrada. Como nos outros
casos em que definimos mquinas no determinsticas, s nos interessa saber se existe
ou no a possibilidade de atingir um estado final.
Exemplo 7.6. A mT a seguir no determinstica. A linguagem aceita por essa
mquina { xx | x{0,1}* }.
Este captulo foi escrito a partir de uma verso inicial escrita com a colaborao de Luiz Carlos
Castro Guedes
2jul99
Decidibilidade e computabilidade.
Jos Lucas Rangel
8.1 - Introduo.
(junho 99)
9.1 - Introduo.
Como j vimos anteriormente, a classe das linguagens sensveis ao contexto
(lsc) uma classe intermediria entre a classe das linguagens recursivas e a classe das
linguagens livres de contexto (llc). J vimos anteriormente que a classe das llc est
propriamente contida na classe das lsc's: como aplicao do Lema do Bombeamento,
provamos que alguns exemplos de linguagens geradas por gramticas sensveis ao
contexto no so llc's.
Neste captulo, queremos apresentar os autmatos linearmente limitados, uma
classe de mquinas de Turing cuja operao restringida, de forma a aceitar apenas as
lsc's. Adicionalmente, queremos mostrar que a incluso da classe das lsc's na classe
das linguagens recursivas prpria, atravs de um exemplo de linguagem recursiva
que no uma lsc.
fase 3: (x1, z1, , [) (x2, z2, , ) (xm, zm, f, ) (xn, zn, , ]) * x1x2xn
Na ltima fase, a partir dos smbolos em que o estado (a terceira componente) final,
feita a substituio, de forma a deixar apenas os smbolos da primeira "trilha".
Os detalhes da construo da gramtica ficam como exerccio para o leitor.
(julho 99)
10.1 - Introduo.
10.4 Concluso
Com os exemplos e as propriedades estabelecidas neste captulo e nos
anteriores, a hierarquia das classes de linguagens definidas aqui pode ser representada
pela figura abaixo, em que todas as incluses indicadas so prprias.
linguagens
linguagens recursivamente enumerveis (tipo 0)
linguagens recursivas
linguagens sensveis ao contexto (tipo 1)
linguagens livres de contexto (tipo 2)
linguagens determinsticas
linguagens regulares (tipo 3)
(julho 99)
K = { A, B, C, D }
entrada: 0, 1
fita: , 0, 1, x
inicial: A
final: D
transies:
A0BxR B0B0R B1B1R BCxL C0DxR
aceitao de 01100
A01100 xB1100 x1B100 x11B00 x110B0
x1100B x110C0x x110xDx
Exemplo 2:
(ver Ex.1) Gramtica que gera L, simulando M
terminais: 0, 1
noterminais: S, T, X, Y, Z, W, $, A, B, C, D
inicial: S
regras:
S $AT
T 0XT | 1YT | Z
X0 0X Y0 0Y
X1 1X Y1 1Y
XZ Z0 YZ Z1
Z $
fase 2: (simula M)
$Ax$x*$D$x
(D o nico estado final)
A0 xB
B0 0B B1 1B
0B$ C0x$ 1B$ C1x$ xB$ Cxx$
(isto , aB$ Cax$, para a-{})
C0 0D
fase 3: (limpa)
D W
0W W 1W W xW W
W0 W W1 W Wx W
$W$
Para gerar 01100, temos a derivao:
(fase 1)
S $AT $A0XT $A0X1YT $A0X1Y1YT $A0X1Y1Y0XT
$A0X1Y1Y0X0XT $A0X1Y1Y0X0XT $A0X1Y1Y0X0XZ
$A0X1Y1Y0X0XZ $A01XY1Y0X0XZ $A01X1YY0X0XZ
$A011XYY0X0XZ $A011XY0YX0XZ $A011X0YYX0XZ
$A0110XYYX0XZ $A0110XYY0XXZ $A0110XY0YXXZ
$A0110X0YYXXZ $A01100XYYXXZ $A01100XYYXZ0
$A01100XYYZ00 $A01100XYZ100 $A01100XZ1100
$A01100Z01100 $A01100$01100
(fase 2)
$A01100$01100 $xB1100$01100 $x1B100$01100
$x11B00$01100 $x110B0$01100 $x1100B$01100
$x110C0x$01100 $x110xDx$01100
(fase 2)
$x110xDx$01100 $x110xWx$01100 $x110Wx$01100
$x11Wx$01100 $x1Wx$01100 $xWx$01100
$Wx$01100 $W$01100 01100
Exemplo 3:
(ver Exemplo 1)
all M: aceita L={ 0w0 | w{0,1}* }
K = { I, A, B, C, D }
entrada: 0, 1
fita: , 0, 1, x, [, ]
inicial: A
final: D
transies:
I[A[R
A0BxR B0B0R B1B1R B]C]L C0DxR
aceitao de 01100
I[01100] [A01100] [xB1100] [x1B100] [x11B00]
[x110B0] [x1100B] [x110C0x] [x110xDx]
Exemplo 4:
(ver Ex.3) Gramtica que gera L, simulando M
terminais: 0, 1
noterminais:
Temos:
a{0, 1, x}
b{0, 1}
q{I, A, B, C, D}
os no terminais so:
S
(ab) (duas trilhas, com a e b)
([ab) (no incio da fita)
(ab]) (no fim da fita)
(qab) (q l a)
(q[ab) (no incio da fita, q l [)
([qab) (no incio da fita, q l a)
(qab]) (no fim da fita, q l a)
(abq]) (no fim da fita, q l ])
(q[ab]) (caso de um smbolo, q l [)
([qab]) (caso de um smbolo, q l a)
([abq]) (caso de um smbolo, q l ])
inicial: S
regras:
(pode esquecer caso particular : L)
fase 2: (simula M)
Temos:
a, c {0, 1, x}
b, d {0, 1}
fase 3: (limpa)
(Dab) b
([Dab) b (D[ab) b
(Dab]) b (abD]) b
(D[ab]) b ([Dab]) b ([abD]) b
b(cd) bc (cd)b cb
([cd)b cb b(cd]) bc