Académique Documents
Professionnel Documents
Culture Documents
Teoria da Computao
ltima atualizao: 2/2/2009
1.1 Linguagem
Linguagem um conceito fundamental no estudo de Teoria da Computao, pois trata da forma precisa de expressar problemas, permitindo um desenvolvimento formal adequado ao estudo da computabilidade. A seguir so mostradas algumas definies:
1.1.1 Alfabeto
Um alfabeto um conjunto finito de smbolos ou caracteres. Um conjunto infinito no um alfabeto O conjunto vazio um alfabeto
Exemplos de alfabetos: {a, b, c} (conjunto vazio) No so alfabetos: Conjunto dos nmeros naturais, inteiros, etc... {a, b, aa, ab, ba, bb, aaa, ... }
3 Exemplos: |abcb| = 4 e || = 0
Tambm comum substituir w por alguma expresso com parmetros e descrever os strings na linguagem declarando condies sobre os parmetros. Exemplos: {0n1n | n 1}. L-se o conjunto de 0 elevado a n 1 elevado a n tal que n maior ou igual a 1; essa linguagem consiste nos strings {01, 0011, 000111, ...}. Note que, como ocorre com os alfabetos, podemos elevar
4 um nico smbolo a uma potncia n para representar n cpias desse smbolo. {0i1j | 0 i j}. Essa linguagem consiste em strings com alguns 0s (possivelmente nenhum) seguidos por um nmero igual ou superior de 1s.
Exemplos: Suponha o alfabeto = {a, b} e as palavras v = baa e w = bb, tem-se que: vw = baabb v = v = baa Uma concatenao definida sobre uma linguagem L no necessariamente fechada sobre L, ou seja, a concatenao de duas palavras de L no necessariamente uma palavra de L. Exemplo: Suponha a linguagem L de palndromos sobre = {a, b}. A concatenao das palavras aba e bbb resultam na palavra ababbb a qual no palndromo. Portanto a operao de concatenao no fechada sobre L.
2 Autmatos Finitos
Os autmatos finitos constituem um modelo til para muitos elementos importantes de hardware e software. Alguns exemplos: Software para projetar e verificar comportamento de circuitos digitais Analisador Lxico de um compilador tpico (isto , componente que divide o texto de entrada em unidades lgicas, como identificadores, palavraschave, etc.) Software para examinar grandes corpos de texto, como pginas Web Software para verificar sistemas de todos os tipos que tem um nmero finito de estados distintos, como protocolos de comunicao ou segurana Estes elementos tm como caractersticas estarem a todo o momento em um determinado estado de um conjunto finito deles. Como o conjunto finito a histria toda de execuo no pode ser memorizada, assim o sistema deve ser projetado a fim de memorizar apenas o que relevante. A vantagem de usar um nmero finito de estados que possvel implement-lo de uma forma simples em hardware como um circuito, ou em um software que possa tomar decises examinando apenas um nmero limitado de dados ou a prpria posio no cdigo. Exemplo de autmato finito: um interruptor que memoriza se est no estado ligado ou desligado, e permite que o usurio pressione um nico boto cujo efeito ser diferente de acordo com o estado em que o interruptor se encontra, ou seja, se ele estiver desligado e for pressionado ele ir ligar, e vice-versa.
pressionar
Os estados esto representados por crculos, e a ao (ou entrada) est representada pelos arcos. Neste caso temos os estados ligado e desligado, e ambos os arcos representam a ao de pressionar o boto. O estado inicial indicado pela palavra incio e por uma seta que leva a este estado. Frequentemente tambm precisamos
6 indicar um ou mais estados finais ou de aceitao, que representam que a entrada vlida, neste caso utilizamos crculos duplos para representar tais estados. Outro exemplo: um autmato que reconhece a palavra chave case, ele tem cinco estados que representam desde a string vazia at a palavra completa, passando por todos os seus prefixos.
inicio
c c
a ca
s cas
e case
O nico estado de aceitao aquele em que a palavra aparece completa. Podemos imaginar este autmato como parte de um analisador lxico, que estar analisando um a um os caracteres do programa. Na teoria dos autmatos, um problema a questo de verificar se uma dada string (palavra) elemento de uma linguagem especfica. Assim se um alfabeto e L uma linguagem sobre , ento dado um string w em *, definir se w est ou no em L.
7 e) Um conjunto de estados finais ou de aceitao F. O conjunto F um subconjunto de Q. Frequentemente um AFD denotado como uma tupla de cinco elementos, como se segue: A = (Q,,,q0,F) Onde A o nome do AFD, Q seu conjunto de estados, seu conjunto de smbolos de entrada, sua funo de transio, q0 seu estado inicial e F seu conjunto de estados de aceitao.
8 Cada uma dessas condies pode ser representada por um estado. A condio 3 representada pelo estado inicial q0, pois quando iniciamos ainda esperamos por 01. Se estivermos em q0 e recebermos um 1, ento devemos permanecer no estado q0. Isto (q0, 1) = q0. Entretanto, se estamos em q0 e vemos um 0, estaremos na condio 2, isto , no vimos 01, mas temos um 0. Assim vamos usar q2 para representar esta condio. A transio , portanto (q0, 0) = q2. Agora, estando em q2, podemos ver um 0, neste caso estaremos na mesma situao que antes, ou seja, continuamos com um 0 e esperando um 1. Portanto devemos ficar no mesmo estado (q2, 0) = q2. Porm se estamos em q2 e vemos uma entrada 1, sabemos agora que existe um 0 seguido de 1. Podemos ento passar para um estado de aceitao que chamaremos de q1 e que corresponde a condio 1. Assim: (q2, 1) = q1. Finalmente, estando no estado q1 qualquer que seja a entrada, ainda estaremos na condio 1, em que j vimos um 01. Assim permaneceremos neste estado, (q1, 1) = (q1, 0) = q1. Portanto, Q = {q0, q1, q2}, q0 o estado inicial como dito anteriormente e q1 o nico estado de aceitao portanto F = {q1}. Assim a especificao completa do autmato pode ser dada por: A = ({q0, q1, q2},{0,1}, , q0,{q1}) onde a funo de transio descrita anteriormente.
9 3. Existe uma seta no estado inicial q0, identificada como nicio. Essa seta no se origina em nenhum n. 4. Os ns correspondentes aos estados de aceitao (aqueles em F) so marcados por um crculo duplo. Todos os outros estados tem um nico crculo. Exemplo: abaixo vemos o diagrama de transies para o AFD que projetamos na seo anterior, e que aceita todos os strings que contem o substring 01:
1
Incio
0 0
0,1 1
q0
q2
q1
11 prximo smbolo no inicie o 01 final, mesmo que esse smbolo seja 0. Desse modo, o estado q0 pode fazer uma transio para ele mesmo em 0 e em 1. Porm, se o prximo smbolo 0, esse AFND tambm adivinha que o 01 final comeou. Um arco identificado por 0 leva portanto de q0 a q1. Note que existem dois arcos rotulados como 0 saindo de q0. O AFND tem a opo de ir para q0 ou q1 e, de fato, ele segue os dois caminhos. No estado q1 o AFND verifica se o prximo smbolo 1 e, nesse caso, vai para o estado q2 e aceita a entrada.
0,1
Incio
q0
q1
q2
Observe que no existe nenhum arco saindo de q1 rotulado com 0, e no existe nenhum arco saindo de q2. Nessas situaes, o encadeamento no AFND correspondente a esses a estes estados simplesmente morre, embora outros encadeamentos possam continuar a existir.
q0 {q0,q1} {q0}
12 q1 *q2 {q2}
Note que as tabelas de transies utilizadas nos AFD tambm servem para os AFND, sendo que a nica diferena que as respostas so dadas por conjunto de estados, em vez de um estado unitrio, assim necessrio o uso de chaves mesmo que haja um nico elemento. Quando no existe nenhuma transio de um estado dada uma entrada a resposta conjunto (vazio).
13 Podemos construir um AFD a partir de um AFND apenas construindo todos os subconjuntos de estados possveis do AFND, sem conhecer os detalhes especficos deste ltimo. A construo de subconjuntos comea a partir de um AFND N = (QN,,N,q0,FN). O objetivo descrever um AFD D = (QD,,D,q0,FD), tal que L(D) = L(N). Note que os alfabetos de entrada dos dois autmatos so os mesmos, e o estado inicial de D o mesmo de N. Os outros componentes so construdos da seguinte forma: QD o conjunto de subconjuntos de QN; isto , QD o conjunto potncia de QN. Note que, se QN tem n estados, ento QD ter 2n estados. Com freqncia, nem todos esses estados esto acessveis a partir do estado inicial de QD. Os estados inacessveis podem ser descartados; assim, o nmero de estados de D pode ser efetivamente muito menor que 2n. FD o conjunto de subconjuntos S de QN tais que S FN . Isto , FD representa todos os conjuntos de estados de N que incluem pelo menos um estado de aceitao N. Para cada conjunto S QN e para cada smbolo de entrada a em ,
D S , a
N p em s
p, a
Isto , para calcular D S , a , examinamos todos os estados p em S, vemos para quais estados N vai a partir de p sobre a entrada a e fazemos a unio de todos esses estados. Exemplo: seja N o autmato do nosso exemplo de autmato que aceita strings terminadas em 01. O conjunto de estados de N {q0, q1, q2}, a construo de subconjuntos produz um AFD com 23 = 8 estados, correspondendo a todos os subconjuntos deste trs estados. A seguir vemos a tabela de transio para estes 8 estados: 0 {q1} *{q2} {q0} {q0, q1} 1 {q0} {q2} {q0}
{q0, q1} {q0, q1} {q0, q2} *{q0, q2} {q0, q1}
*{ q0, q1, q2} {q0, q1} {q0, q2} Esta tabela de transies equivale a um autmato finito determinstico, pois embora as entradas na tabela sejam conjuntos, os estados do AFD gerado tambm so conjuntos. Para tornar este ponto mais claro podemos criar novos nomes para esses estados; por exemplo, A para , B para {q0} e assim por diante. 0 1
A A A B E B C A D *D A A E E F *F E B *G A D *H E F Dos oito estados, comeando no estado inicial B, s podemos acessar os estados B, E e F. Os outros cinco estados so inacessveis a partir do estado inicial e no precisam constar da tabela. possvel evitar esta etapa de tempo exponencial na construo de entradas da tabela atravs de uma avaliao de subconjuntos ociosos. Uma maneira de fazer isso partindo do subconjunto do estado inicial {q0} que sabemos que faz parte do AFD, descobrimos que D({q0},0) = {q0,q1} e D({q0},1} = {q0}, estes dados so obtidos do diagrama de transies do AFND. O conjunto {q0} antigo e j foi avaliado, porm o outro {q0,q1} novo e suas transies devem ser calculadas. Encontramos D({q0,q1},0) = {q0,q1} e D({q0,q1},1) = {q0,q2}. E iremos considerar todos os novos conjuntos que forem aparecendo at que nenhum novo conjunto aparea, e a a construo ter convergido. Assim teremos a seguinte tabela de transio: 0 {q0} {q0, q1} 1 {q0}
{q0}
0 0 {q0,q1} 1 0 1 {q0,q2}
0,1
{q0}
Observe que ele s tem trs estados, que por coincidncia o mesmo nmero de estados que AFND a partir do qual ele foi construdo. Porm ele tem seis transies comparado com as quatro transies do AFND.
16
0,1,...,9 +,{q0,q1} {q1}
Incio
. 0,1,...,9
{q1,q4} {q2,q3,q5}
0,1,...,9 0,1,...,9 . .
{q2}
0,1,...,9
{q3,q5}
0,1,...,9
O estado q1 representa a situao em que j vimos o sinal, se ele existir, e talvez alguns dgitos, mas no o ponto decimal. O estado q2 representa a situao em que acabamos de ver o ponto decimal, tendo visto ou no dgitos anteriores. Em q4 vimos pelo menos um dgito, mas no o ponto decimal. Assim em q3 vimos um ponto decimal e pelo menos um dgito, esteja ele antes ou depois do ponto decimal. Podemos permanecer em q3 lendo outros dgitos que existirem, e tambm podemos a qualquer momento adivinhar que a string de dgitos est completa e ir espontaneamente para q5, o estado de aceitao.
q0 {q1} {q1} q1 q2
2.3.2 Fecho-
A funo Fecho- (tambm conhecida como Fecho-Vazio e ECLOSE) de um estado pode ser definida informalmente como a funo que recebe um estado q e retorna o conjunto de estados composto por q e todos os estados em que possvel chegar a partir de q seguindo transies rotuladas por . Formalmente podemos definir Fecho-(q) recursivamente: O estado q est em Fecho-(q) Se o estado p est em Fecho-(q), e existe uma transio do estado p para o estado r rotulada por , ento r est em Fecho-(q) Para o nosso exemplo temos as seguintes funes Fecho-: Fecho-(q0) = {q0, q1} Fecho-(q2) = {q2} Fecho-(q4) = {q4} Fecho-(q1) = {q1} Fecho-(q3) = {q3, q5} Fecho-(q5) = {q5}
18 5. Mais uma vez iremos fazer o Fecho- de cada elemento do conjunto calculado na etapa anterior: o Fecho-(q2) U Fecho-(q3) = {q2} U {q3,q5} = {q2,q3,q5} 6. Agora iremos processar o smbolo 5 a partir dos estados obtidos na etapa anterior: o (q2,5) U (q3,5) U (q5,5) = {q3} U {q3}U = {q3} 7. E novamente iremos calcular o Fecho- dos elementos do conjunto que obtivemos na ltima etapa: o Fecho-(q3) = {q3,q5} 8. No temos mais nenhum smbolo para processar, portanto basta verificar se pelo menos um dos estados obtidos na ltima etapa estado final. Neste caso, q5 um estado final, portanto a string 8.5 aceita pelo nosso AFND.
i 1
c. Ento A S , a j 1 Fecho r j Exemplo: Vamos eliminar as transies vazias do nosso exemplo de AFND, que chamaremos de E. Construiremos um AFD A equivalente da seguinte forma:
19 1. O estado inicial de E q0, portanto o estado inicial de A ser Fecho-(q0), que {q0,q1}. 2. Devemos agora obter os sucessores de q0 e q1 para os vrios smbolos em , este smbolos so os sinais de + ou -, o ponto e os dgitos de 0 a 9. Sobre + e -, q1 no vai para lugar algum, enquanto q0 vai para q1. Assim ({q0,q1},+} ser o Fecho(q1). Como no existe nenhuma transio vazia saindo de q1, temos que ({q0,q1},+} = {q1}, e da mesma forma ({q0,q1},-} = {q1} 3. Em seguida calcularemos ({q0,q1},.}, como q0 no vai para lugar algum lendo o ponto, q1 e vai para q2, devemos calcular o Fecho- de q2. Como no h transies vazias saindo de q2, ({q0,q1},.} = {q2} 4. Finalmente, devemos calcular ({q0,q1},0}. Vemos que q0 no vai para lugar algum lendo 0, mas q1 vai para q1 e q4. Como nenhum desses dois estados tem transies vazias, conclumos que ({q0,q1},0} = {q1,q4}. Note que esta mesma transio vlida para todos os dgitos de 0 a 9. Assim calculamos todos os arcos saindo de {q0,q1}. Todas as outras transies so calculadas de modo semelhante, conforme ser demonstrado na aula, e finalmente chegaremos ao seguinte AFD A:
0,1,...,9 +,{q0,q1} {q1}
Incio
. 0,1,...,9
{q1,q4} {q2,q3,q5}
0,1,...,9 0,1,...,9 . .
{q2}
0,1,...,9
{q3,q5}
0,1,...,9
Note que, para evitar confuso, foram omitidas todas as transies para o estado , assim voc deve imaginar que para todo estado do diagrama em que no aparecem transies para um dado smbolo, essa transio tem como destino o estado . Alm disso, o estado tem transies para ele mesmo para todos os smbolos de .