331
LICENCIATURA EM ENGENHARIA INFORMÁTICA António Dourado Pereira Correia Advertência. Este documento é um texto de trabalho para apoio ao estudo da cadeira de Teoria da Computação. Não inclui toda a matéria leccionada na disciplina e naturalmente não dispensa a consulta da bibliografia complementar. O autor agradece qualquer comentário ou sugestão que o tolerante e paciente leitor entenda por bem fazer. Departamento de Engenharia Informática Faculdade de Ciências e Tecnologia Universidade de Coimbra Setembro 2009 TEORIA DA COMPUTAÇÃO

Automatos

Embed Size (px)

DESCRIPTION

Automatos

Citation preview

  • LICENCIATURA EM ENGENHARIA INFORMTICA

    Antnio Dourado Pereira Correia

    Advertncia. Este documento um texto de trabalho para apoio ao estudo da cadeira de Teoria da Computao.

    No inclui toda a matria leccionada na disciplina e naturalmente no dispensa a consulta da bibliografia

    complementar. O autor agradece qualquer comentrio ou sugesto que o tolerante e paciente leitor entenda por

    bem fazer.

    Departamento de Engenharia Informtica

    Faculdade de Cincias e Tecnologia

    Universidade de Coimbra

    Setembro 2009

    TEORIA DA COMPUTAO

  • ndice Geral

    Captulo 1. Introduo e definies bsicas 1

    Captulo 2. Autmatos finitos 43

    Captulo 3. Expresses regulares, linguagens regulares e gramticas regulares 115

    Captulo 4. Propriedades das linguagens regulares 153

    Captulo 5. Linguagens livres de contexto 179

    Captulo 6. Simplificao de gramticas e formas normais 213

    Captulo 7. Autmatos de Pilha 245

    Captulo 8. Propriedades das linguagens livres de contexto 273

    Captulo 9. Mquinas de Touring 299

  • Teoria da Computao Captulo 1 Introduo e Definies Bsicas

    LEI/DEI/FCTUC/2009/@ADC Documento de trabalho 1

    CAPTULO 1

    INTRODUO E DEFINIES BSICAS 1.1. Introduo 3

    1.2. Linguagens formais 3 1.2.1. Alfabetos, cadeias e operaes sobre cadeias 5

    1.2.2 .Operaes de conjuntos sobre linguagens 10

    1.3 Gramticas 17

    1.4 Autmatos 30

    1.5. Os trs paradigmas da computao 37

    Bibliografia 42

    Anexo 42

  • Teoria da Computao Captulo 1 Introduo e Definies Bsicas

    LEI/DEI/FCTUC/2009/@ADC Documento de trabalho 2

  • Teoria da Computao Captulo 1 Introduo e Definies Bsicas

    LEI/DEI/FCTUC/2009/@ADC Documento de trabalho 3

    1.1. Introduo

    As cincias da computao, numa interpretao genrica, tm a ver com todos os aspectos

    relacionados com os computadores e o seu funcionamento. H no entanto trs temas centrais

    que so delas estruturantes: autmatos, computabilidade, complexidade. As trs visam dar

    resposta questo primeira - quais so as capacidades e as limitaes fundamentais dos

    computadores? O que se pode computar? Estas que tm ocupado intensamente os cientistas da

    computao desde os anos 30 do sculo passado, quando a noo e o significado de

    computao surgiu no panorama cientfico.

    Nesta disciplina iremos abordar aqueles trs temas. Comearemos pelos autmatos e

    veremos depois os elementos introdutrios fundamentais da computabilidade e da

    complexidade.

    A teoria dos autmatos compe o edifcio formal que sustenta solidamente todo o

    desenvolvimento de processadores de texto, de compiladores e de hardware. Suporta tambm

    (atravs das gramticas associadas aos autmatos) todo o desenvolvimento das linguagens de

    programao. Assim linguagens, gramticas e autmatos so, com veremos, as trs faces de

    um mesmo prisma. Vejamos formalmente em que consistem.

    1.2.Linguagens formais

    Tal como as linguagens humanas, as linguagens formais (assim chamadas por serem definidas

    por um conjunto de formalismos matemticos abstractos) so faladas por autmatos, isto ,

    um autmato compreende, e sabe interpretar uma dada linguagem, de uma forma que veremos

    posteriormente. alis interessante constatar que os estudiosos das linguagens humanas (os

    linguistas) deram uma contribuio muito importante para o desenvolvimento da teoria das

    linguagens formais. Por exemplo Chomsky, de que falaremos no Captulo 6, um linguista.

    Uma linguagem exprime-se atravs de smbolos de uma certa forma (tal como as

    linguagens humanas ao longo da histria usaram smbolos diversos, desde os hieroglficos at

    aos caracteres latinos, passando pelos chineses, pelos gregos e pelos rabes). Poderemos

    definir formalmente esta realidade.

  • Teoria da Computao Captulo 1 Introduo e Definies Bsicas

    LEI/DEI/FCTUC/2009/@ADC Documento de trabalho 4

    1.2.1 Alfabeto, cadeias e operaes sobre cadeias

    Um alfabeto composto por um conjunto no vazio de smbolos, usualmente representada

    pela letra grega (sigma), de smbolo.

    ={smbolos}, conjunto no vazio de smbolos (letras, algarismos,...)

    Os smbolos de um alfabeto podem ser de qualquer natureza e assumir um aspecto

    arbitrrio. Qualquer alfabeto um conjunto, e esta a nica caracterstica comum. A prpria

    palavra alfabeto composta pela concatenao do primeiro e segundo smbolos grego, o alfa e

    o beta.

    Exemplos de alfabetos:

    = {a,b}, alfabeto composto pelas duas letras a e b.

    = {0,1}, alfabeto binrio composto pelos valores binrios 0 e 1.

    = {(,),[,] } , alfabeto dos parnteses

    = {0,1,2,3,4,5,6,7,8, 9 }, alfabeto dos algarismos rabes

    ={a,b,c, ..., z}, o alfabeto romano minsculo

    ={conjunto de todos as caracteres ASCII}, o alfabeto ASCII.

    = {copos, facas, garfos, pratos, colheres, tachos}, o alfabeto dos instrumentos de cozinha

    = {ma, pra, ameixa, banana, }, o alfabeto dos frutos.

    Qualquer objecto pode pertencer a um alfabeto. Por isso um alfabeto pode ser um

    conjunto de qualquer espcie de coisas.

    Por razes de simplicidade usam-se normalmente apenas letras, algarismos e outros

    caracteres comuns como #, $, &, etc.

  • Teoria da Computao Captulo 1 Introduo e Definies Bsicas

    LEI/DEI/FCTUC/2009/@ADC Documento de trabalho 5

    Juntando-se vrios caracteres de um alfabeto obtm-se uma cadeia (string, em ingls),

    w, formalmente definida como uma sequncias finitas de smbolos do alfabeto.

    Exemplo 1.2.1

    w= a, w=ab, w=abbaba, cadeias no alfabeto = {a,b}

    Exemplo 1.2.2

    w =1,w=2, w=23, w=5674, cadeias de algarismos rabes.

    Por vezes uma cadeia tambm se chama palavra. De facto nas linguagens humanas as

    palavras so cadeias de caracteres seguindo uma certa regra de formao a ortografia.

    Alguns autores de lngua inglesa (por exemplo Linz) usam o termo phrase frase) como sinnimo de cadeia. De facto uma cadeia gerada aplicando as regras (produes) de uma gramtica,

    tal como uma frase de uma linguagem humana se constri usando as regras da respectiva gramtica.

    Nesse sentido as palavras so os elementos atmicos da linguagem humana que correspondem aos

    smbolos de um alfabeto de uma linguagem formal. Para evitar confuses usaremos preferencialmente

    o termo cadeia.

    Fazendo a concatenao de duas cadeias w e v obtm-se uma terceira cadeia que por

    isso se chama a concatenao de w e v.

    Pode-se obter fazendo a concatenao direita (v direita de w), por exemplo sendo

    w= a1a2a3 ....an v= b1b2b3bn

    a concatenao direita de v com w , wv, ser

    wv=a1a2a3anb1b2b3bn

    e a concatenao esquerda, vw

    vw=b1b2b3bna1a2a3an

    Os caracteres numa cadeia seguem uma certa ordem. Por vezes estamos interessados em

    alterar essa ordem, obtendo-se cadeias derivadas da original. Por exemplo a cadeia reversa,

    obtm-se invertendo (da direita para a esquerda) a ordenao dos caracteres. A reversa da

    cadeia w acima ser, revertendo w,

  • Teoria da Computao Captulo 1 Introduo e Definies Bsicas

    LEI/DEI/FCTUC/2009/@ADC Documento de trabalho 6

    wR =an...a3a2a1

    O nmero de caracteres de uma cadeia pode ser qualquer, sendo por isso umas longas

    e outras curtas. Chama-se comprimento de uma cadeia, anotando-se pelo mdulo, |w|, o

    nmero de posies, ou de casas, ocupadas pelos caracteres na cadeia. Por exemplo 011011

    tem comprimento 6. Por vezes tambm se define comprimento como o nmero de caracteres

    da cadeia, o que est certo se se inclurem as repeties nesse nmero. De outro modo a

    cadeia anterior tem 2 caracteres (0 e 1) que, repetidos, ocupam 6 posies.

    Se uma cadeia no tem qualquer carcter (note-se que o singular de caracteres

    carcter, e no carater), ter 0 caracteres, sendo por isso vazia (um conjunto vazio), e denota-

    se por (alguns autores denotam por ) . O seu comprimento ser nulo, ||=0, e pode escolher-se de qualquer alfabeto.

    Se concatenarmos uma cadeia vazia com outra cadeia w qualquer, obtm-se

    w = w = w, w,

    para todo e qualquer w, tal como a unio de um conjunto com o conjunto vazio d o

    conjunto original, qualquer que ele seja.

    Certas cadeias tm formas especiais. Por exemplo abcdedcba ou abcdeedcba podem

    ler-se igualmente da frente para trs ou de trs para a frente. Elas tm um ponto de simetria.

    Em linguagem corrente chamam-se capicuas e mais formalmente chamam-se palndromos e

    so tais que w = wR. Voltaremos a falar deles.

    Subcadeia de uma cadeia w qualquer cadeia composta por caracteres sucessivos de

    w . Se dividirmos qualquer cadeia w em duas partes u e v, tal que w=uv, diz-se que u um

    prefixo e v um sufixo de w.

    Se por exemplo

    w=abbab

    Poderemos definir os seguintes prefixos de w:

    {, a, ab, abb, abba, abbab}

    e os seguintes sufixos de w:

  • Teoria da Computao Captulo 1 Introduo e Definies Bsicas

    LEI/DEI/FCTUC/2009/@ADC Documento de trabalho 7

    {abbab, bbab, bab, ab, b, }

    Note-se que cada prefixo est associado a um sufixo. O prefixo a est associado ao sufixo

    bbab e o sufixo ao prefixo abbab. A ordem por que esto escritos acima reflecte essa associao.

    Potncia n de uma cadeia, wn, uma cadeia obtida pela concatenao n vezes da

    cadeia w consigo prpria. Assim por exemplo

    w2 = ww

    w3 = www,

    etc.

    fcil de ver que

    w1=w

    Quanto a w0, ela ser a concatenao de w consigo prpria zero vezes. Se a

    concatenao uma vez d a prpria cadeia, a concatenao zero vezes d nada, ou seja, a

    cadeia vazia e portanto

    w0={}

    para todo e qualquer w.

    O sinal de potncia tambm se usa para exprimir a concatenao de um carcter

    consigo prprio. Por exemplo

    a3=aaa,

    1204=110000,

    anbm=aaabbb.

    Tambm se define potncia de um alfabeto, n, como o conjunto das cadeias desse alfabeto de comprimento n. Assim se ={0,1},

    0={}, cadeia vazia

  • Teoria da Computao Captulo 1 Introduo e Definies Bsicas

    LEI/DEI/FCTUC/2009/@ADC Documento de trabalho 8

    1={0,1} , cadeias com um carcter

    2={00,01,10,11}, cadeias com dois caracteres

    3={000, 001, 0010, , 111} cadeias com trs caracteres

    etc.

    (note-se que enquanto um conjunto de caracteres (smbolos), 1 um conjunto de cadeias, mesmo que tenham apenas um carcter).

    Se definirmos o conjunto de todas as potncias possveis de um alfabeto, esse conjunto

    ter todas as cadeias com zero, um, dois, , qualquer nmero de caracteres do alfabeto. Para

    exprimir este facto usa-se o smbolo estrela, *, para significar qualquer, e chama-se a * o fecho estrela do alfabeto (star-closure). Assim * conjunto de todas as cadeias que se podem obter pela concatenao de zero ou mais smbolos de . Contm sempre a cadeia nula . simplesmente o conjunto de todas as cadeias possveis no alfabeto , e uma forma simples e elegante de denotar esse conjunto infinito.

    Se excluirmos a cadeia vazia do fecho estrela, obtemos o fecho estrela positivo, +

    + =*-{}

    fcil de ver, pela definio, que quer * quer + so sempre conjuntos infinitos, mesmo quando o alfabeto finito.

    Chegamos agora finalmente definio de linguagem, um dos conceitos chave da

    computao:

    Definio 1.2.1. Linguagem : dado um alfabeto qualquer , linguagem L qualquer subconjunto de *.

    Assim sendo, num alfabeto qualquer podem-se definir mltiplas linguagens. Elas tero

    propriedades diferentes que lhes do caractersticas bem distintas, que estudaremos na ocasio

    oportuna. Uma linguagem num alfabeto no precisa de ter todos os caracteres desse alfabeto,

    pode ter apenas uma parte deles.

    Define-se frase (ou sentena) como qualquer cadeia na linguagem formal L

  • Teoria da Computao Captulo 1 Introduo e Definies Bsicas

    LEI/DEI/FCTUC/2009/@ADC Documento de trabalho 9

    A lngua portuguesa um conjunto de cadeias formadas pelas letras do nosso alfabeto

    latino. Na linguagem corrente cada cadeia uma palavra e uma frase pode ter vrias palavras.

    Na linguagem Java, um programa qualquer correctamente escrito um subconjunto de

    todas as cadeias possveis que se podem formar com os caracteres da linguagem. O seu

    alfabeto um subconjunto dos caracteres ASCII.

    Seja por exemplo o alfabeto ={a,b}.

    Nele *={,a,b,aa,ab,ba,bb,aaa,aab,aba,abb,baa,bab,bba,bbb, ...}, contm todas as combinaes possveis dos smbolos do alfabeto, incluindo a cadeia vazia.

    (i) O conjunto L1={a, ab, abb} uma linguagem em . uma linguagem finita.

    (ii) O conjunto L2={anbn: n0} uma linguagem em . uma linguagem infinita.

    As cadeias ab, aabb, aaabb, pertencem a L2 porque se podem escrever na forma

    respectivamente a1b1, a2b2, a3b3. Como veremos a gramtica da linguagem define as regras da

    formao das cadeias.

    J as cadeias aba, abb, aaababbab, no pertencem a L2 (tente escrev-las naquela

    forma de potncias ).

    Por vezes define-se uma linguagem exprimindo verbalmente as suas propriedades

    especficas que a distinguem de outra qualquer. Por exemplo:

    - o conjunto de cadeias em ={0,1} com um nmero de 0s igual ao nmero de 1s

    L={, 01, 10, 0011, 1100, 0110, 0101, 1001, }

    - o conjunto dos nmeros binrios cujo correspondente decimal primo

    L={10,11,101,111,1011, 1101, 10001, }

    Tambm se pode constatar que , a linguagem vazia, no tem qualquer cadeia, uma linguagem em qualquer alfabeto.

    Tambm {}, a linguagem composta apenas pela carcter vazio, uma linguagem em qualquer alfabeto.

  • Teoria da Computao Captulo 1 Introduo e Definies Bsicas

    LEI/DEI/FCTUC/2009/@ADC Documento de trabalho 10

    Note-se a diferena entre e {} : a primeira no tem qualquer cadeia e a segunda tem uma cadeia (a cadeia vazia de facto uma cadeia, mesmo que vazia).

    1.2.2. Operaes de conjuntos sobre linguagens e suas propriedades

    Uma linguagem , como vimos, um conjunto. Portanto aplicam-se-lhe todas as

    operaes sobre conjuntos. Se tivermos duas linguagens L1 e L2, poderemos fazer com elas as

    seguintes operaes:

    Unio: todas as cadeias que pertencem ou a uma ou a outra,

    L1L2 = {w: wL1 ou wL2},

    Interseco: todas as cadeias que pertencem simultaneamente a uma e a outra,

    L1L2 = {w: wL1 e wL2},

    Diferena de duas linguagens: todas as cadeias que pertencem a uma e no pertencem

    outra,

    L1 - L2 = {w: wL1 e wL2},

    L2 L1 = {w: wL1 e wL2}.

    Complemento de uma linguagem: todas as cadeias possveis no alfabeto respectivo

    (isto , *) menos as cadeias da linguagem complementada,

    Compl(L) =L =* - L.

    Reverso de uma linguagem: todas as cadeias que resultam da reverso das cadeias

    originais de L constituem a linguagem reversa de L denotada por LR

    LR = {wR : wL}.

    Concatenao de duas linguagens: todas as cadeias em que uma parte (prefixo)

    pertence primeira linguagem e a parte restante (sufixo), segunda

    L1L2={uv: uL1, vL2},.

  • Teoria da Computao Captulo 1 Introduo e Definies Bsicas

    LEI/DEI/FCTUC/2009/@ADC Documento de trabalho 11

    Dada a concatenao de L1 e L2 ser que L1 L1L2, para quaisquer L1 e L2 em quaisquer alfabetos 1 e 2 ?

    Tal ser possvel se e s se L2. Vejamos as vrias situaes possveis.

    (i) No caso em que os dois alfabetos so disjuntos, se no pertence a L2, ento a concatenao de uma qualquer cadeia de L1 com uma qualquer cadeia de L2 resulta numa

    cadeia que no pertence a L1 e por isso nenhuma cadeia de L1 neste caso pertence

    concatenao.

    (ii) no caso particular em que as duas linguagens partilham o mesmo alfabeto, ao

    concatenarmos a menor cadeia de L1 com a menor cadeia de L2, obtm-se uma cadeia maior

    do que a primeira, e portanto no possvel obter em L1L2 a menor cadeia de L1. Pelo menos

    essa no pertence a L1L2 e por isso o mesmo sucede a L1 (esta s pertence concatenao se

    todas as suas cadeias pertencerem). No caso extremo em que L1=L2, verifica-se a mesma

    situao.

    Mutatis mutandis da anterior L2 L1L2 se e s se L1

    Distributividade da concatenao em ordem unio

    Considerem-se, a ttulo de exemplo, as linguagens

    L1={a, ab, b},

    L2={0, 01}

    L3={11, 111, 1111}

    Ento

    L2L3={0,01,11,111,1111} e

    L1 . (L2L3) ={a, ab, b}.{0,01,11,111,1111}=

    ={a0,a01, a11,a111,a1111,ab0,ab01,ab11,ab111,ab1111,b0,b01, b11,b111,b1111}

    ={( a0,a01, ab0,ab01, b0, b01), (a11,a111,a1111, ab11,ab111,ab1111, b11,b111,b1111)}

  • Teoria da Computao Captulo 1 Introduo e Definies Bsicas

    LEI/DEI/FCTUC/2009/@ADC Documento de trabalho 12

    = {a,ab,b}.{0,01} {a,ab,b}{11, 111, 1111}=.{L1L2 L1L3 Este resultado pode-se generalizar: a concatenao distributiva em relao unio.

    L1 . (L2L3)= L1L2 L1L3.

    De facto se uma cadeia pertence unio de duas linguagens, ela ir entrar na

    concatenao. Por outro lado, se uma cadeia no pertence unio, ela no entrar na

    concatenao. Sero concatenadas todas as da unio e apenas elas.

    Ser a unio distributiva em relao concatenao?

    Uma propriedade definida assim genericamente tem que ser vlida para todos e

    quaisquer casos. Se formos capazes de encontrar um s caso em que isso se no verifique, a

    propriedade no geral e portanto a resposta no.

    Considerem-se novamente as trs linguagens acima.

    Faa-se

    L2L3={0, 01}.{11, 111, 1111}={011,0111,01111,0111,01111,011111}

    L1 (L2L3)={a, ab, b}{011,0111,01111,0111,01111,011111}=

    ={a, ab, b, 011,0111,01111,0111,01111,011111}

    Por outro lado,

    ( L1L2) = L1={a, ab, b}{0, 01}= {a, ab, b, 0, 01}

    (L1L3 ) = {a, ab, b} {11, 111, 1111}= {a, ab, b, 11, 111, 1111}

    Concatenando estas duas,

    ( L1L2). (L1L3 ) = {a, ab, b, 0, 01}.{a, ab, b, 11, 111, 1111}

    ={aa, aab, ab, a11,a111,a1111, ...}

    Ora as cadeias aa, aab, no pertencem a L1 (L2L3).

    Logo

  • Teoria da Computao Captulo 1 Introduo e Definies Bsicas

    LEI/DEI/FCTUC/2009/@ADC Documento de trabalho 13

    L1 (L2L3) ( L1L2) (L1L3 )

    e conclumos que em geral a unio no distributiva sobre a concatenao.

    A concatenao de uma linguagem com o conjunto vazio (linguagem vazia) resulta no

    conjunto vazio (analogamente ao produto de um nmero real por zero).

    L =

    A concatenao de uma linguagem L qualquer com a cadeia vazia resulta na linguagem L

    (analogamente ao produto de um nmero real pela unidade).

    L = L

    Na concatenao o conjunto vazio desempenha o papel de zero e a cadeia vazia o papel da

    unidade.

    Potncia de uma linguagem

    Define-se a potncia n de uma linguagem a partir da concatenao da linguagem

    com ela prpria (auto-concatenao) n vezes.

    Se concatenarmos uma linguagem zero vezes com ela prpria , vem L0 .

    Em que resulta ?

    Para um qualquer nmero real, elevando-o a zero obtm-se a unidade. Ento aqui ser

    natural considerar-se que a potncia zero de uma linguagem a unidade da concatenao, ou

    seja, a cadeia vazia. Podemos tambm considerar que a potncia nula de uma linguagem consiste

    em escolher zero cadeias dessa linguagem. Logo,

    L0={}

    L1=L

    L2=LL

    ...

  • Teoria da Computao Captulo 1 Introduo e Definies Bsicas

    LEI/DEI/FCTUC/2009/@ADC Documento de trabalho 14

    Chama-se fecho-estrela (star-closure, Kleene star) de uma linguagem L* ao conjunto

    de todas as cadeias que se podem obter por concatenao da linguagem com ela prpria, um

    nmero arbitrrio de vezes (incluindo zero vezes), ou seja,

    L* = L0L1L2L3......

    Se tivermos, por exemplo, a linguagem L={0,1}, o seu fecho estrela o conjunto de

    todas as cadeias de 0s e 1s, incluindo a cadeia vazia. De facto

    L0={} - todas as cadeias com zero caracteres

    L1 ={0,1} - todas as cadeias de 0s e 1s com um carcter

    L2 ={0, 1}.{0, 1}={00,01,10,11} - todas as cadeias de 0s e1s com dois caracteres

    L3={0, 1}.{0, 1}.{0,1}={00,01,10,11}.{0,1}={000,001,010,011,110,111}

    - todas as cadeias de 0s e 1s com trs caracteres

    L4={0, 1}.{0, 1}.{0,1}.{0,1} - todas as cadeias de 0s e 1s com quatro caracteres,

    E assim sucessivamente. Unindo agora todos os subconjuntos teremos o conjunto de

    todas as cadeias de 0s e 1s com zero, um, dois, trs, , qualquer nmero de caracteres, ou

    seja, todas as cadeias possveis de 0s e 1s. Assim o fecho estrela desta linguagem com duas

    cadeias uma linguagem infinita. Note-se que L* contm sempre , independentemente de L o conter ou no.

    Se considerarmos a linguagem L={0, 11}, o que dar o seu fecho estrela ?

    L0={} - pelas razes anteriores

    L1 ={0,11}

    L2 ={0, 11}.{0, 11}={00,011,110,1111}

    L3={0, 11}.{0, 11}.{0,11}={00,011,110,1111}.{0,11}=

    ={000,0011,0110,01111,1100,11011,11110,111111}

  • Teoria da Computao Captulo 1 Introduo e Definies Bsicas

    LEI/DEI/FCTUC/2009/@ADC Documento de trabalho 15

    E assim sucessivamente. Obtm-se todas as cadeias de 0s e 1s em que os 1s

    aparecem sempre aos pares. Por exemplo a cadeia 00110110, mas no 0010110 nem 0011010.

    Como se poder obter 00110110 a partir de ? De L6 possvel: 0011 pertence a L3, e 0110 pertence tambm a L3.

    Ainda neste exemplo o fecho estrela da linguagem finita com apenas duas cadeias

    resulta numa linguagem infinita.

    H algumas linguagens que tm a concatenao aparentemente estranhas.

    Se considerarmos L a linguagem que contm todas as cadeias de 0s (incluindo zero

    0), ento L*=L. Tal como se for a linguagem conjunto de todas as cadeias de 1s . L infinita,

    tal como o seu fecho estrela.

    E o fecho estrela da linguagem vazia, * ?

    0={}

    1=

    2=

    Unindo tudo vem

    *={} ={}

    Quanto linguagem com o carcter vazio, L={}, o seu fecho estrela L*={}.

    A linguagem e a linguagem {} so as duas nicas linguagens que tm um fecho estrela finito.

    Fecho-positivo (positive closure) de uma linguagem, L+ , o conjunto de todas as

    cadeias que se podem obter por concatenao da linguagem com ela prpria uma ou mais

    vezes. Se L no tem , + tambm no,

    L+ : L1L2L3...... = L* - {}

    Exemplo: Seja

  • Teoria da Computao Captulo 1 Introduo e Definies Bsicas

    LEI/DEI/FCTUC/2009/@ADC Documento de trabalho 16

    L={anbn, n1}

    Logo:

    L={ab, aabb, aaabbb, aaaabbbb, ....}

    L2= LL={ab, aabb, aaabbb, aaaabbbb, ...

    abab, abaabb, abaaabbb, abaaaabbbb, ...

    aabbab, aabbaabb, aabbaaabbb, aabbaaaabbbb, ...

    ........... }

    Procurando uma forma compacta para L2, pode-se escrever

    L2= {anbnambm, n1, m1}, n e m so independentes.

    A reversa de L fcil de calcular: basta revertermos a expresso que a define:

    LR={bnan, n1}

    Se tivermos necessidade de escrever o complemento de L de uma forma sinttica,

    como faz-lo? Trata-se de todas as cadeias que no obedeam regra de formao de L. Por

    exemplo aab, baa, ababab, bababa, aaaa, aaaa, bbaab, bbbbaa, . Ser fcil encontrar uma

    expresso compacta, em notao de conjuntos, que inclua todas as cadeias do complemento

    de L ? Fica o desafio ao leitor.

    E o fecho estrela L* ?

    Nem sempre a notao de conjuntos a mais adequada para representar linguagens.

    Por isso foram desenvolvidas representaes alternativas: as expresses regulares e as

    gramticas. Estud-las-emos em captulos posteriores. Mas vejamos desde j algumas noes

    bsicas de gramticas.

  • Teoria da Computao Captulo 1 Introduo e Definies Bsicas

    LEI/DEI/FCTUC/2009/@ADC Documento de trabalho 17

    1.3. Gramticas

    A gramtica de uma linguagem formal tem o mesmo objectivo da de uma linguagem humana:

    ela fixa, de modo que todos possamos entender, as regras de formao das palavras e das

    frases. Todas as linguagens escritas tm uma gramtica. a gramtica que d sentido

    linguagem: sem ela as pessoas no se entenderiam

    Uma gramtica tambm uma ferramenta para estudar matematicamente linguagens,

    muito poderosa, que ultrapassa as limitaes da notao de conjuntos anterior.

    Vejamos um exemplo da lngua portuguesa

    Exemplo 1.3.1

    H vrias gramticas da lngua portuguesa, normalmente identificadas pelo nome dos seus

    autores. Se usarmos a de Mateus e outros (Gramtica da Lngua Portuguesa, Mateus, M,H.M,

    A. M.Brito, I. Duarte, I. H Faria, Caminho Srie Lingustica, 1989), poderemos representar

    simbolicamente as regras de formao de uma frase (aqui feita para fins ilustrativos, e

    portanto muito simplificadas em relao riqueza da nossa lngua):

    Regra: uma frase composta por um sintagma nominal e um sintagma verbal.

    Pode no ter sintagma nominal ou o sintagma verbal; mas tem que ter pelo menos um

    deles.

    Simbolicamente escreve-se a regra de produo

    frase sintagma nominal sintagma verbal (produo 1)

    O sintagma nominal composto por um determinante e um nome (pelo menos um

    deles) ou pode ser vazio:

    sintagma nominal determinante nome | vazio (produes 2 e 3)

    O determinante pode ter um artigo ou um dectico, ou nada:

    determinante artigo | decticos | vazio (produes 4,5,6)

  • Teoria da Computao Captulo 1 Introduo e Definies Bsicas

    LEI/DEI/FCTUC/2009/@ADC Documento de trabalho 18

    O sintagma verbal composto por um verbo e um sintagma nominal (pelo menos um

    deles):

    sintagma verbal verbo sintagma nominal (produo 7)

    Para podermos formar (produzir) frases temos que ter palavras concretas e no apenas

    categorias de palavras. Elas, as palavras concretas, so os elementos terminais da gramtica.

    Por exemplo:

    verbo estuda | ama | compra | dorme|chove (produes 8 a 12)

    artigo o | a |um | uma| (produes 13 a 17)

    decticos este | esse | aquele | meu | teu | seu | (produes 18 a 24)

    nome Lus | Antnia | Isabel | livro | gelado | (produes 25 a 29)

    Com as regras de produo e os elementos terminais dados, poderemos agora formar

    frases.

    Por exemplo para produzir a frase

    a Antnia compra aquele gelado

    usam-se as regras de produo na ordem adequada para o fim em vista:

    frase sintagma nominal sintagma verbal produo 1

    determinante nome sintagma verbal produo 2

    determinante nome verbo sintagma nominal produo 7

    determinante nome verbo determinante nome produo 2

    determinante nome verbo dectico nome produo 5

    a nome verbo dectico nome produo 13

    a Antnia verbo dectico nome produo 26

  • Teoria da Computao Captulo 1 Introduo e Definies Bsicas

    LEI/DEI/FCTUC/2009/@ADC Documento de trabalho 19

    a Antnia compra dectico nome produo 10

    a Antnia compra aquele nome produo 20

    a Antnia compra aquele gelado produo 29

    Verifique o leitor se as seguintes frases obedecem gramtica dada:

    (i) O Joo foi ao cinema

    (ii) Chove

    (iii) A Isabel ama o Lus

    Este exemplo mostra como uma frase (ou orao), conceito geral e complexo, pode ser

    definida custa de elementos simples (decomposio da complexidade). Comea-se no

    conceito mais complexo (frase), e reduz-se sucessivamente at se obterem os elementos

    irredutveis com que se constri a lngua.

    A generalizao deste princpio leva-nos s gramticas formais isto , gramticas das

    linguagens formais, as linguagens dos computadores.

    As linguagens formais so construes matemticas (conjuntos) que obedecem a

    certas regras. Para que no haja equvocos, as gramticas formais devem ter uma estrutura

    clara, coerente, completa. Por isso usam-se notao e conceitos matemticos precisos para a

    sua definio e manipulao.

    Definio 1.3.1. Gramtica.

    Uma gramtica G definida por um quarteto

    G=(V, T, S, P)

    em que

    V : variveis, conjunto no vazio finito de objectos,

    T: smbolos terminais, conjunto no vazio finito de objectos,

  • Teoria da Computao Captulo 1 Introduo e Definies Bsicas

    LEI/DEI/FCTUC/2009/@ADC Documento de trabalho 20

    S V: varivel de inicializao, um smbolo especial, tambm chamado axioma,

    P : um conjunto finito de produes

    As variveis no podem ser smbolos terminais e vice-versa, isto V e T so conjuntos

    disjuntos. No nosso estudo so em geral caracteres.

    As regras de produo constituem o cerne da gramtica, pois atravs delas que uma

    cadeia de caracteres se transforma noutra cadeia de caracteres. Por isso elas definem uma

    linguagem associada gramtica.

    Gramticas diferentes podem produzir a mesma linguagem. Nesse caso so gramticas

    equivalentes. Mais frente estudaremos tcnicas e algoritmos para transformar uma gramtica

    numa outra sua equivalente.

    Embora uma linguagem possa ser produzida por vrias gramticas, uma gramtica

    produz uma e uma s linguagem. Teremos a relao ilustrada na figura 1.3.1.

    Figura 1.3.1 . Vrias gramticas podem produzir a mesma linguagem. Mas uma gramtica no

    pode produzir duas linguagens.

    As regras de produo de uma qualquer gramtica tm sempre a forma padro

    x y

    que se l (a cadeia) x produz (a cadeia) y .

    A cadeia produtora x tem que ter qualquer coisa, no pode ser a cadeia vazia (se assim

    no fosse produzir-se-ia a partir do nada, o que no teria significado). Este facto anota-se por

    Linguagens Gramticas

    G4

    G1 G2

    G3

    L1

    L2

  • Teoria da Computao Captulo 1 Introduo e Definies Bsicas

    LEI/DEI/FCTUC/2009/@ADC Documento de trabalho 21

    x (V T)+

    querendo-se dizer que a cadeia x pode ter variveis da gramtica e/ou smbolos terminais,

    sem a cadeia vazia (por isso se escreve + e no *).

    A cadeia produzida y, chamada o corpo da produo, pode conter variveis da

    gramtica, e/ou smbolos terminais, podendo ser a cadeia vazia. Neste caso quer dizer que a

    produo consiste simplesmente na anulao de x. Anota-se assim por

    y (V T)*

    sendo agora legtimo escrever ( * ) para admitir a possibilidade da cadeia vazia. De facto (V T)0 resulta na cadeia vazia.

    A produo substitui, numa forma sentencial, a cadeia x pela cadeia y. Isto ,

    dada uma cadeia w = uxv

    e a regra de produo x y,

    ____________

    por substituio de x por y em w, obtm-se a cadeia z = uyv

    Diz-se que w produz z , ou que z produzida por w e anota-se com seta larga

    w z

    w e z podem variveis e/ou smbolos terminsais, dependendo do caso, como veremos.

    As regras de produo podem aplicar-se por qualquer ordem e tantas vezes quantas as

    necessrias. Este facto permite que com um nmero finito de produes se possa obter uma

    linguagem infinita. Duas produes e um smbolo inicial so suficientes para produzir uma

    linguagem infinita. Por exemplo as duas produes seguintes

    S aS

    S

  • Teoria da Computao Captulo 1 Introduo e Definies Bsicas

    LEI/DEI/FCTUC/2009/@ADC Documento de trabalho 22

    geram qualquer cadeia no alfabeto ={a}, incluindo a cadeia vazia. Experimente o leitor gerar a cadeia aaa.

    Ser possvel obter, com uma s produo, uma linguagem infinita? S em certas

    gramticas especiais que estudaremos no Captulo 12.

    Entre uma forma sentencial inicial w1 e uma final wn poderemos passar por um

    grande nmero de formas sentencias intermdias, w1, w2, , ou seja,

    w1 w2 wn

    Diz-se que w1 produz wn ou, em escrita mais compacta (mais prtica), usando (*)

    para significar uma sequncia de produes simples,

    w1 wn

    (* ) exprime o facto de que para derivar wn a partir de w1 so necessrios um nmero no

    especificado de passos (incluindo eventualmente zero passos, como em w1 w1 ).

    As regras de produo podem ser aplicadas numa ordem qualquer. Por cada ordem,

    produz-se uma cadeia terminal. Ordens de derivao diferentes podem dar cadeias terminais

    iguais ou diferentes, conforme a gramtica concreta.

    O conjunto de todas as cadeias terminais que se podem obter por uma gramtica,

    compem a linguagem gerada por essa gramtica. Exprime-se pela expresso L(G),

    linguagem L da gramtica G. Em termos mais formais, dada a gramtica definida pelo

    quarteto

    G=(V, T, S, P)

    a linguagem da gramtica (ou gerada pela gramtica) composta por todas as cadeias

    terminais (sentenas, apenas com smbolos de T, ou eventualmente ) que se podem gerar a partir de S com as produes de P, por qualquer ordem qualquer nmero de vezes, ou seja,

    L(G) = {wT*: S w}

    Se uma dada cadeia pertence linguagem, w L(G), ento a sequncia

  • Teoria da Computao Captulo 1 Introduo e Definies Bsicas

    LEI/DEI/FCTUC/2009/@ADC Documento de trabalho 23

    S w 1 w2 ... wn w

    uma derivao da cadeia w. A cadeia w deve ter apenas smbolos terminais caracteres do

    alfabeto da linguagem, incluindo eventualmente .

    Qualquer derivao da gramtica comea sempre por S, que por isso tambm

    chamado o axioma da gramtica. Desde S at w passa-se por diversas expresses que tm

    variveis da gramtica ou uma mistura de variveis e de smbolos terminais. A essas

    expresses chama-se formas sentenciais da derivao: so as cadeias S, w1, w2, ..., wn .

    Exemplo 1.3.2.

    Seja a gramtica definida pelo quarteto

    G =({S}, {a,b}, S, P)

    Comparando com a definio 1, identificam-se os elementos do quarteto:

    Conjunto V das variveis: S

    Smbolos terminais: a,b , as cadeias terminais tero apenas estes smbolos

    Varivel de inicializao: S

    As produes P dadas por

    P1: S aSb : partindo do smbolo inicial S, coloca-se-lhe um a antes e um b depois.

    P2: S : o smbolo S pode ser substitudo pela cadeia vazia (isto , por nada).

    Uma derivao pode seguir o seguinte percurso:

    S aSb aplicando a produo P1

    aaSbb produo P1

    aaaSbbb produo P1

  • Teoria da Computao Captulo 1 Introduo e Definies Bsicas

    LEI/DEI/FCTUC/2009/@ADC Documento de trabalho 24

    ...

    pode-se continuar um nmero qualquer de vezes, at ao infinito. Vo-se obtendo sucessivas

    formas sentenciais.

    Em qualquer altura se pode aplicar a produo P2, substituindo S por , ou seja por nada. Nessa altura obtm-se uma frase da linguagem. Assim,

    ao fim da 1 produo obtm-se ab

    ao fim da 2 produo obtm-se aabb

    etc.,

    ao fim da nsima produo obtmse aaa....abbb...b = anbn

    Se aplicarmos primeiro a produo P2 obtm-se a cadeia vazia e no se pode

    prosseguir.

    Conclui-se assim que esta gramtica produz a linguagem composta por cadeias em que

    a primeira metade s tem as e a segunda metade s tem bs, ou seja, de uma forma

    matematicamente elegante, usando as noes que vimos anteriormente,

    L(G) = {anbn, n0}

    Este resultado to evidente que se pode dizer que no carece de demonstrao. Mas

    pode-se demonstrar formalmente, usando uma das tcnicas de prova conhecidas. Como se

    trata de demonstrar uma frmula para um nmero infinito de casos, o mais natural ser usar a

    prova por induo, associada noo de recursividade.

    O caso , correspondente a n =0 tem que ser tratado parte. Demonstra-se que ele se obtm aplicando a produo P2 a partir de S.

    Para os outros casos faamos a demonstrao por recursividade da produo P1 e

    induo.

    Queremos provar que qualquer que seja n 1, todas as formas sentenciais so da forma

    wn = anSbn

  • Teoria da Computao Captulo 1 Introduo e Definies Bsicas

    LEI/DEI/FCTUC/2009/@ADC Documento de trabalho 25

    - base da induo, n=1, verdade ?

    sim, resultante de uma vez P1 a partir de S.

    -hiptese indutiva: admitamos que verdade para n=k e para todos os anteriores, ou seja,

    verdade que

    wk = akSbk

    -passo indutivo: em consequncia verdade para k+1 ou seja

    wk+1 = ak+1Sbk+1

    Prova do passo indutivo (nesta prova h-de entrar a hiptese indutiva):

    Partindo de wk e por aplicao de P1 obtm-se wk+1

    wk+1awkb

    mas substituindo a hiptese indutiva nesta produo,

    wk+1a(akSbk )b

    Manipulando a expresso

    wk+1 (aak)S(bkb)

    ou ainda por definio de concatenao (potncia) de caracteres,

    wk+1 ak+1 Sbk+1

    Falta finalmente provar que aplicando P2 a qualquer forma sentencial na forma wn = anSbn,

    n1, se obtm uma sentena na forma anbn.

    anSbn anbn

    o que verdade.

    E a demonstrao est feita, quod erat demonstrandum (o que era preciso demonstrar)

    q.e.d.

  • Teoria da Computao Captulo 1 Introduo e Definies Bsicas

    LEI/DEI/FCTUC/2009/@ADC Documento de trabalho 26

    Exemplo 1.3.3:

    Encontrar uma gramtica que gere a linguagem

    L={an+1bn, n0}

    Esta linguagem parecida com a do exemplo anterior, com a diferena de que

    necessrio gerar um a adicional esquerda de b. Pode-se simplesmente ger-lo em primeiro

    lugar, aplicar depois regras de produo como no caso anterior:

    P1: S aS

    P2: S aSb

    P3: S

    Teramos assim a gramtica definida exactamente como a anterior:

    G = ({S}, {a,b}, S, P)

    Como as produes de podem aplicar por ordem arbitrria e um nmero arbitrrio de

    veses, aplicando P1, P1, P2, P3, obtm-se

    S aS aaS aaaSb aaab

    i.e. a3b, que no faz parte da linguagem.

    Para que isto no acontea, P1 s se pode aplicar uma vez. Introduz-se com esse

    objectivo uma varivel adicional, A, e definem-se as produes

    P1: S aA

    P2: A aAb

    P3: A

    em que S a varivel de inicializao. Note-se que partindo de S no se pode voltar a ele, e

    por isso P1 s se aplica uma vez, sendo sempre a primeira. Poderemos agora definir a

    gramtica G com o quarteto

  • Teoria da Computao Captulo 1 Introduo e Definies Bsicas

    LEI/DEI/FCTUC/2009/@ADC Documento de trabalho 27

    G=({A}, {a,b}, S, P)

    sendo P composto pelas trs produes P1, P2 e P3.

    Para demonstrar que uma dada linguagem gerada por uma certa gramtica, tem que

    se mostrar que:

    (i) por um lado toda a cadeia w L pode ser derivada a partir de S usando as produes P da gramtica ou seja

    (ii) por outro lado qualquer cadeia gerada pela gramtica G pertence linguagem L.

    Nem sempre fcil fazer as duas demonstraes, sobretudo a primeira. Ver por

    exemplo em Linz, exemplo 1.13. Recorre-se frequentemente prova por induo.

    Uma linguagem pode ser gerada por muitas gramticas, que por isso se dizem

    equivalentes ,

    G1 e G2 so gramticas equivalentes se L(G1)=L(G2)

    Na Fig. 1.1 as gramticas G2, G3 e G4 so equivalentes.

    Os palndromos so cadeias que tm interesse especial para o estudo de gramticas e

    autmatos. Vejamos mais em detalhe como se podem definir e gerar.

    Definio formal de palndromos ( PAL) sobre um alfabeto

    Seja PAL a linguagem constituda por todos os palndromos (capicuas) sobre um dado

    alfabeto. Pode-se definir pelas trs regras seguintes

    1. O carcter vazio simtrico, logo pertence aos palndromos.

    PAL

    2. Qualquer carcter isolado simtrico, logo um palndromo

    Para todo o a, a PAL,

    3. Se tivermos uma cadeia simtrica e lhe adicionarmos o mesmo carcter no princpio e no

    fim, resulta uma cadeia simtrica,.

  • Teoria da Computao Captulo 1 Introduo e Definies Bsicas

    LEI/DEI/FCTUC/2009/@ADC Documento de trabalho 28

    Para toda a cadeia w PAL , e todo o a, awa PAL

    Uma cadeia s pertence a PAL se puder ser gerada por estas 3 regras. Por outro lado se

    uma cadeia um palndromo, ento ela pode ser gerada por aquelas trs regras, aplicando-as

    as vezes necessrias pela ordem conveniente.

    Exemplo 1.3.4

    Seja o alfabeto = { a, b }

    Aplicando aquelas 3 regras,

    1. PAL

    2. a PAL, b PAL

    3. Para qualquer wPAL, awa PAL

    bwb PAL

    Qualquer cadeia pertence a PAL se e s se for gerada pelas regras 1, 2 e 3.

    Por exemplo:

    b PAL , regra 2

    aba PAL, regra 3

    babab PAL regra 3

    abababa PAL regra 3

    Como se poder escrever uma gramtica para esta linguagem?

    Poderemos tentar imitar as trs regras: primeiro gera-se um palndromo com a regra 1 ou a 2,e

    depois geram-se sucessivos palndromo, cada vez maiores, com a regra 3.

    Deste modo uma gramtica para esta linguagem pode ser obtida pelas derivaes seguintes:

    1 P1: S (regra 1)

  • Teoria da Computao Captulo 1 Introduo e Definies Bsicas

    LEI/DEI/FCTUC/2009/@ADC Documento de trabalho 29

    2 P2: S a (regra 2)

    P3: S b (regra 2)

    3 P4: S aSa (regra 3)

    P5: S bSb (regra 3)

    Por exemplo para gerar abba teremos a sequncia de produes

    S aSa abSba abba abba

    Pode-se escrever as 5 produes gramtica na forma compacta, usando | para o ou lgico

    S | a | b |

    S aSa | bSb

    1.4.Autmatos

    Os autmatos finitos so modelos abstractos de muitos dispositivos de hardware e de

    software. Aplicam-se nomeadamente em (Hopcroft& col)

    1- software para o projecto e o teste de circuitos digitais.

    2- Analisadores lexicais dos compiladores (que verificam se uma palavra, por

    exemplo um identificador, est bem escrita num programa).

    3- Software para busca de texto em ficheiros, na web, etc.

    4- Software de verificao de sistemas que tm um nmero finito de estados

    distintos, tais como protocolos de comunicao, protocolos de segurana, etc.

    Muitos componentes e sistemas digitais podem estar num entre um nmero finito de

    estados, e por isso a noo de estado central num autmato a eles associado. O estado

    permite lembrar o passado relevante do sistema (ele chegou l aps um certo nmero de

    transies, que so o seu passado). Se o nmero de estados de um sistema finito, poderemos

    represent-lo com uma quantidade limitada de recursos.

  • Teoria da Computao Captulo 1 Introduo e Definies Bsicas

    LEI/DEI/FCTUC/2009/@ADC Documento de trabalho 30

    Considere-se por exemplo um interruptor on-off. Se est off e se se pressiona, passa a

    on. Se est on e se se pressiona, passa a off . Ele ter por isso dois estados, o on (A) e o off (F)

    Desenhando, teremos os dois estados como dois vrtices de um grafo, Fig.1.3.1.

    Figura 1.4.1. Os dois estados do autmato que representa o interruptor on-off. F-fechado, A-

    aberto.

    Representando por arestas de um grafo as aces de pressionar ( Press) teremos a Fig. 1.4.2

    Figura 1.4.2. As transies entre os estados do autmato, provocadas pelo accionamento do

    interruptor.

    Para se saber como se inicializou o interruptor, identifica-se o estado inicial por uma seta,

    Figura 1.4.3. O autmato finito do interruptor.

    e tem-se finalmente o desenho de um autmato finito (de dois estados) que representa o

    funcionamento do interruptor, na Fig. 1.4.3.

    F A

    F A

    Press

    Press

    F A

    Press

    Press

  • Teoria da Computao Captulo 1 Introduo e Definies Bsicas

    LEI/DEI/FCTUC/2009/@ADC Documento de trabalho 31

    As etiquetas das arestas representam a aco exterior sobre o sistema (neste caso

    pressionar o interruptor) e as arestas a evoluo do sistema em consequncia dessa aco, que

    sempre uma transio entre dois estados (ou, como veremos, e generalizando a noo de

    transio, de um estado para ele prprio).

    Considere-se agora o autmato da figura 1.4.4.

    Figura 1.4.4. Um autmato finito que transita de estado pela entrada de letras.

    Inicializa-se no estado 1, recebe do exterior (l) a letra p e passa ao esto 2, depois com as

    letras a e i passa sucessivamente aos estados trs e 4.

    Poderamos nomear os estados de um modo mais sugestivo, tal que a sua etiqueta nos

    sintetizasse o que se passou at a. Teramos por exemplo a Fig. 1.4.5.

    Figura 1.4.5. O autmato anterior da Fig 1.4.4 com nova etiquetagem dos estados.mais

    sugestiva.

    Pode afirmar-se que o autmato de 4 estados capaz de reconhecer a palavra pai: se

    chegou ao estado 4, ela pareceu-lhe, caso contrrio nunca chega ao estado 4. Por esta razo

    diz-se que o autmato um aceitador da palavra pai. Para assinalar este facto o estado 4

    desenha-se com uma dupla circunferncia, como na figura 1.4.6.

    Figura 1.4.6. O autmato com estado final aceitador

    E chama-se estado final, ou estado aceitador, conforme os autores. O primeiro

    chama-se estado inicial.

    1 2 3 4p a i

    p pa pai p a i

    p pa pai p a i

  • Teoria da Computao Captulo 1 Introduo e Definies Bsicas

    LEI/DEI/FCTUC/2009/@ADC Documento de trabalho 32

    Vejamos um exemplo um pouco mais complexo.

    Exemplo 1.4.3

    Uma porta automtica de entrada de um servio pblico, rotativa, tem geralmente dois

    sensores, um frontal, e um na retaguarda, conforme esquematizado na Fig. 1.4.7.. O frontal

    detecta uma pessoa que se aproxima e o da retaguarda detecta a presena de uma pessoa na

    sua rea de observao.

    Figura 1.4.7. Uma porta de abertura automtica, rotativa.

    Quanto uma pessoa se aproxima para entrar a porta abre-se, girando sobre o seu eixo

    de fixao, se no estivar ningum detrs da porta, caso contrrio haveria um acidente. H um

    dispositivo electrnico, o controlador, que recebe os sinais dos dois sensores e conforme o

    caso manda abrir, fechar, ou manter-se como est. O controlador ter dois estados,

    correspondentes a porta aberta, A, e porta fechada, F. Tal como no exemplo anterior,

    poderemos desenhar dois vrtices de um grfico para esses dois estados.

    Figura 1.4.8. Os dois estado do autmato abridor da porta.

    Os dois sensores enviam, cada um, informao de presena ou ausncia de pessoas,

    que poderemos representar por 0 (ausncia) e 1 (presena).Teremos quatro situaes

    possveis, considerando simultaneamente os dois sensores:

    00 : ausncia de frente e detrs

    Sensor Fronta

    Sensor Rectag

    F A

  • Teoria da Computao Captulo 1 Introduo e Definies Bsicas

    LEI/DEI/FCTUC/2009/@ADC Documento de trabalho 33

    01: ausncia de frente e presena detrs

    10: presena de frente e ausncia detrs

    11: presena de frente e presena detrs.

    Em cada uma destas quatro situaes possveis o controlador tem que tomar uma

    deciso: fecha, abre ou deixa ficar como est ?

    Poderemos constatar que o alfabeto do autmato (o conjunto de informao externa

    que ele sabe ler) composto por aquelas quatro situaes, que poderemos associar a 4

    caracteres de um alfabeto, conforme a tabela

    Tabela 1.4.1. Codificao do alfabeto ao autmato. PF- presena frontal, PR presena na

    rectaguarda.

    PF PR Carcter

    0 0 00 a

    0 1 01 b

    1 0 10 c

    1 1 11 d

    Considerando as restries de segurana, teremos as transies possveis representadas na

    tabela (de transies) seguinte:

    Tabela 1.4.2. Transies entre os estados em funo dos caracteres de entrada lidos.

    A A A F A

    F A F F F

    d 11

    c 10

    b 01

    a 00

    EntradaEstado

  • Teoria da Computao Captulo 1 Introduo e Definies Bsicas

    LEI/DEI/FCTUC/2009/@ADC Documento de trabalho 34

    Agora fcil desenhar o grafo do autmato, com os dois ns correspondentes aos

    estados e as arestas correspondentes 8 transies da tabela. Obtm-se a figura seguinte.

    Figura 1.4.9. O autmato finito que representa o sistema de controlo de abertura da porta .

    Como que o controlador fecha e abre a porta? Enviando um sinal a um actuador

    mecnico. Poderemos assim considerar que o autmato tem uma sada que pode ter dois

    valores: 1 para abrir, 0 para fechar. Poderemos introduzir essa informao colocando sob a

    letra do estado o valor lgico correspondente da sada, como na figura seguinte

    Figura 1.4.10. O autmato anterior com a representao da sada. Veremos no Cap. 2 que este

    autmato se chama por isso de Mquina de Moore.

    Depois deste dois exemplos muito simples, estamos em condies de definir um

    autmato mais detalhadamente.

    Um autmato genrico tem os seguintes componentes:

    - um ficheiro de entrada, composto por uma cadeia num alfabeto

    - um mecanismo para leitura do ficheiro de entrada de modo que

    l a cadeia de entrada da esquerda para a direita, um carcter de cada vez,

    detecta o fim da cadeia

    A F

    b,d,a

    c

    a

    b,c,d

    A/1 F/0

    b,d,a

    c

    a

    b,c,d

  • Teoria da Computao Captulo 1 Introduo e Definies Bsicas

    LEI/DEI/FCTUC/2009/@ADC Documento de trabalho 35

    - uma sada, onde a unidade de controlo pode escrever

    - um dispositivo de memria temporria

    composto por um nmero ilimitado de clulas, cada uma capaz de armazenar

    um smbolo de um alfabeto (que pode ser diferente do alfabeto de entrada). O

    autmato pode ler e alterar o contedo dos registos de memria.

    - uma unidade de controlo que

    pode estar num de entre um certo nmero finito de estados internos,

    pode mudar de estado segundo alguma regra.

    Juntando tudo teremos a Fig. 1.4.11.

    Figura 1.4.11. Representao genrica de um autmato finito.

    O que lhe d a caracterstica de finito to s o nmero de estados da unidade de

    controlo: ele finito.

    Esta figura muito geral. Um autmato concreto pode no ter memria (como os

    exemplos que vimos), ou pode no ter sada (como o aceitador de pai). Mas todos tm a

    unidade de controlo e a entrada.

    O autmato funciona em tempo discreto, sequencialmente. Num dado instante k est

    num certo estado interno, k, e o mecanismo de entrada est a ler um smbolo sk no ficheiro de

    Unidade de Controlo

    qk

    Ficheiro de entrada Mem r i a

    S k

    m k

    y kFicheiro de sada

  • Teoria da Computao Captulo 1 Introduo e Definies Bsicas

    LEI/DEI/FCTUC/2009/@ADC Documento de trabalho 36

    entrada. No prximo instante de tempo, o estado interno do autmato vai ser determinado

    pelo estado actual, pelo smbolo lido entrada e pelo contedo da memria, mk. Essa

    dependncia definida pela funo de transio de estado f, que depende por isso do estado

    actual, da entrada actual e do contedo actual da memria, ou seja,

    qk+1 = f(qk, sk, mk)

    Entre dois instantes do tempo sucessivos pode produzir-se uma sada ou pode alterar-

    se o contedo da memria.

    Chama-se configurao do autmato ao conjunto composto por

    - o estado interno da unidade de controlo,

    - o ficheiro de entrada e

    - o contedo da memria.

    Chama-se um passo transio do autmato de uma configurao para a configurao

    seguinte.

    Todos ao autmatos que estudaremos se enquadram nesta descrio genrica. Os

    diversos tipos que estudaremos distinguem-se por

    i) a forma de produzir a sada , sendo

    aceitadores se reconhecem ou no a cadeia de entrada; no tm sada informam pelo

    estado final em que terminam a leitura da entrada

    transdutores se produzem cadeias de caracteres na sada com alguma utilidade

    ii) a natureza da memria temporria (o factor mais importante)sendo

    autmatos finitos se no sem tm memria temporrio ou

    autmatos de pilha se tm uma memria em pilha LIFO (em ingls pushdown

    automata, de empurrar (a pilha) para baixo ),

    mquinas de Turing se tm a memria em fita, de dimenso infinita, que pode

    ser lida e alterada em qualquer ordem

  • Teoria da Computao Captulo 1 Introduo e Definies Bsicas

    LEI/DEI/FCTUC/2009/@ADC Documento de trabalho 37

    iii) a natureza da funo de transio, dizendo-se

    determinsticos se dada uma configurao, existe um e um s comportamento

    futuro possvel ou

    no determinsticos se dada uma configurao, o prximo passo pode ter vrias

    alternativas.

    1.5. Os trs paradigmas da computao

    Quando falamos em computao, o que queremos dizer exactamente ?

    Em primeiro lugar computao poder ser o clculo do valor numrico de uma

    funo, como por exemplo da funo f(n), que calcula o n-sino nmero primo,

    ( )f n n simo nmero primo

    trata-se de uma funo unria, ou da funo g, produto de dois nmeros,

    ( , )g n m n m

    funo binria, de dois argumentos m e n ou ainda da funo h, soma de n nmeros,

    1 2 ... nh a a a

    funo n-ria (de n argumentos).

    Este tipo de computao mais antigo do que os computadores digitais, alis to

    antigo quanto a civilizao humana, dado que desde muito cedo o homem precisou de fazer

    clculos matemticos (para calcular o calendrio, por exemplo).

    Na era do computador digital h outros tipos de computao. Por exemplo, poderemos

    ter uma cadeia de 0s e 1s e calcular a sua paridade, ou o nmero de zeros. Ou ento

    queremos saber se uma cadeia um palndromo, ou se a palavra public est bem escrita

    num programa de computador em Java.

  • Teoria da Computao Captulo 1 Introduo e Definies Bsicas

    LEI/DEI/FCTUC/2009/@ADC Documento de trabalho 38

    Este tipo de computao parece nada ter ver, partida, com a computao do valor de

    funes. Trata-se do reconhecimento, ou classificao, de cadeias de smbolos. Como as

    cadeias de smbolos formam linguagens, este tipo de computao chama-se por isso

    reconhecimento de linguagens, o segundo paradigma da computao.

    O problema de reconhecimento de linguagens domina a teoria da computao.

    Falaremos dele repetidamente at ao final da disciplina e ele ocupa a maior parte dos livros de

    teoria da computao.

    Porque assim to importante?

    Em primeiro lugar porque muito representativo: pode-se reduzir qualquer problema

    de deciso a um problema de reconhecimento de linguagens.

    Em segundo lugar porque o problema do clculo do valor de uma funo pode tambm

    ser reduzido a um problema de reconhecimento de uma linguagem.

    Comecemos pela verificao da primeira razo.

    Considere-se o problema de deciso seguinte

    - o nmero natural n primo ?

    Trata-se de um problema de deciso: decidir se ou no, mas decidir de modo

    fundamentado.

    Construa-se no alfabeto ={1} a linguagem composta por cadeias de 1s que tm um comprimento igual a um nmero primo:

    L ={1n, n primo},

    em que como sabemos 1n = 1111 , n vezes

    Isto

    L={11, 111, 11111, 1111111, }

    Agora temos o problema de reconhecimento de linguagens

    - a cadeia 1n pertence linguagem L ?

  • Teoria da Computao Captulo 1 Introduo e Definies Bsicas

    LEI/DEI/FCTUC/2009/@ADC Documento de trabalho 39

    equivalente ao problema de deciso acima enunciado.

    Alm do clculo do valor de uma funo ou do reconhecimento de uma linguagem

    temos outro tipo de computao: o da transduo de cadeias, ou seja, a transformao de

    uma cadeia de smbolos por exemplo revertendo-a, deslocando-a para a esquerda ou para a

    direita, contando o nmero de as, etc. Temos aqui o terceiro paradigma da computao.

    De entre os trs paradigmas da computao, qual o mais importante?

    De facto nenhum mais importante do que o outro. Verifica-se at o princpio da

    inter-redutibilidade (Fig.1.5.1): qualquer instncia de um dos trs paradigmas de pode reduzir

    a uma instncia de qualquer um dos outros dois.

    Figura 1.5.1. Inter-redutibilidade entre os trs paradigmas da computao.

    Vejamos como.

    i) Qualquer caso de computao de uma funo pode ser reduzido a uma instncia do

    reconhecimento de uma linguagem.

    Exemplo 1.5.1. Seja a funo

    f(n) = m , m o n-simo nmero primo

    Tabela 1.5.1. Funo n-simo nmero primo

    Reconhecimento de Linguagens

    Transduo de cadeias

    Clculo de funes f(n)

  • Teoria da Computao Captulo 1 Introduo e Definies Bsicas

    LEI/DEI/FCTUC/2009/@ADC Documento de trabalho 40

    n 1 2 3 4 5 6

    f(n) 2 3 5 7 11 13

    Suponhamos que queremos calcular

    f(5) = ??

    Para reduzir este clculo a um problema de reconhecimento de linguagens faa-se a

    construo engenhosa seguinte (inspirado em Taylor):

    1 Usando a representao binria de nmeros naturais, constroem-se as cadeias que

    resultam da concatenao de 101, isto 5 em binrio, com os nmeros naturais (1, 2, 3, 4, 5,

    6, ), usando por exemplo # como separador:

    2 Define-se agora a linguagem L associada aos nmeros primos

    L ={Binrio(n)#Binrio(m)}

    (no esquecer que m o n-sio nmero primo).

    A computao do valor de f(5) equivalente determinao de qual a nica cadeia

    daquele conjunto que pertence a L . De facto h-de l estar, naquele conjunto de cadeias,

    101#1011

    Assim, procurando-a, ficamos a saber que

    f(5)=11

    ii) Reduo de uma classificao de cadeias a uma computao numrica de uma funo

    101#1 101#10 101#11 101#100 101#101 101#110 101#111

  • Teoria da Computao Captulo 1 Introduo e Definies Bsicas

    LEI/DEI/FCTUC/2009/@ADC Documento de trabalho 41

    Tomemos o caso do reconhecimento de palndromos.

    Em primeiro lugar faz-se uma codificao dos smbolos do alfabeto, de modo que cada

    smbolo fique associado a um e um s nmero natural em binrio.

    Por exemplo, em ={a,b}, se a = 01 e b = 10, ento o palndromo aba resulta no nmero natural 011001=2510.

    Em segundo lugar constri-se a linguagem dos palndromos, L(Pal),.

    L(Pal)= {a,b,aa,bb,aaa, aba,bab, bbb,

    e os seus cdigos,

    Cdigos= {01,10,0101,1010,010101, 011001,100110,101010, }

    A funo caracterstica de L ser

    1,se o cdigo de um palndromo( )

    0, se no o n

    nn

    Agora para se saber se 25 o cdigo de um palndromo, basta calcular o valor da

    funo caracterstica (25) que 1, e assim se conclui que aba um palndromo.

    Claro que para cada caso necessrio desenvolver o engenho para encontrar a forma

    de implementar o princpio da inter-redutibilidade. O que importa saber que sempre

    possvel encontrar uma soluo.

    Mas este princpio muito importante: ele permite que se use o problema da

    identificao de linguagens em teoria da computao como representativo dos trs

    paradigmas. Por isso o que usaremos ao longo da cadeira.

  • Teoria da Computao Captulo 1 Introduo e Definies Bsicas

    LEI/DEI/FCTUC/2009/@ADC Documento de trabalho 42

    Bibliografia

    An Introduction to Formal Languages and Automata, Peter Linz, 3rd Ed., Jones and Bartelett

    Computer Science, 2001

    Models of Computation and Formal Languages, R. Gregory Taylor, Oxford University Press,

    1998.

    Introduction to Automata Theory, Languages and Computation, 2nd Ed., John Hopcroft,

    Rajeev Motwani, Jeffrey Ullman, Addison Wesley, 2001.

    Elements for the Theory of Computation, Harry Lewis and Christos Papadimitriou, 2nd Ed.,

    Prentice Hall, 1998.

    Introduction to the Theory of Computation, Michael Sipser, PWS Publishing Co, 1997.

    Anexo 1. Tabela de nmeros primos

    2 3 5 7 11 13 17 19 23 29 31 37 41 43 47 53 59 61 67 71 73 79 83 89 97 101 103 107 109 113 127 131 137 139

    149 151 157 163 167 173 179 181 191 193 197 199 211 223 227 229 233 239 241 251 257 263 269 271 277 281

    283 293 307 311 313 317 331 337 347 349 353 359 367 373 379 383 389 397 401 409 419 421 431 433 439 443

    449 457 461 463 467 479 487 491 499 503 509 521 523 541 547 557 563 569 571 577 587 593 599 601 607 613

    617 619 631 641 643 647 653 659 661 673 677 683 691 701 709 719 727 733 739 743 751 757 761 769 773 787

    797 809 811 821 823 827 829 839 853 857 859 863 877 881 883 887 907 911 919 929 937 941 947 953 967 971

    977 983 991 997 1009 1013 1019 1021 1031 1033 1039 1049 1051 1061 1063 1069 1087 1091 1093 1097 1103

    1109 1117 1123 1129 1151 1153 1163 1171 1181 1187 1193 1201 1213 1217 1223 1229 1231 1237 1249 1259

    1277 1279 1283 1289 1291 1297 1301 1303 1307 1319 1321 1327 1361 1367 1373 1381 1399 1409 1423 1427

    1429 1433 1439 1447 1451 1453 1459 1471 1481 1483 1487 1489 1493 1499 1511 1523 1531 1543 1549 1553

    1559 1567 1571 1579 1583 1597 1601 1607 1609 1613 1619 1621 1627 1637 1657 1663 1667 1669 1693 1697

    1699 1709 1721 1723 1733 1741 1747 1753 1759 1777 1783 1787 1789 1801 1811 1823 1831 1847 1861 1867

    1871 1873 1877 1879 1889 1901 1907 1913 1931 1933 1949 1951 1973 1979 1987 1993 1997 1999 2003 2011

    2017 2027 2029 2039 2053 2063 2069 2081 2083 2087 2089 2099 2111 2113 2129 2131 2137 2141 2143 2153

    2161 2179 2203 2207 2213 2221 2237 2239 2243 2251 2267 2269 2273 2281 2287 2293 2297 2309 2311 2333

    2339 2341 2347 2351 2357 2371 2377 2381 2383 2389 2393 2399 2411 2417 2423 2437 2441 2447 2459 2467

    2473 2477 2503 2521 2531 2539 2543 2549 2551 2557 2579 2591 2593 2609 2617 2621 2633 2647 2657 2659

    2663 2671 2677 2683 2687 2689 2693 2699 2707 2711 2713 2719 2729 2731 2741 2749 2753 2767 2777 2789

    2791 2797 2801 2803 2819 2833 2837 2843 2851 2857 2861 2879 2887 2897 2903 2909 .

  • Teoria da Computao Captulo 2 . Autmatos Finitos

    LEI/DEI/FCTUC/2009/@ADC Documento de trabalho 43

    CAPTULO 2

    AUTMATOS FINITOS

    2.1. Introduo 45

    2.2.Aceitadores determinsticos 46

    2.3. A arte de construir DFAs 59

    2.4. Linguagens regulares 75

    2.5. Autmatos finitos no-determinsticos (DFAs) 83

    2.6 Equivalncia entre DFAs e NFAs 85

    2.7. Reduo do nmero de estados em Autmatos Finitos 97

    2.8 Aplicao dos DFAs na busca de texto 105

    2.9 Autmatos transdutores 107

    Mquinas de Mealy 108

    Mquinas de More 109

    Bibliogafia 112

    Apndice: Software de autmatos finitos 112

    JFLAP

    Deus ex-mquina

  • Teoria da Computao Captulo 2 . Autmatos Finitos

    LEI/DEI/FCTUC/2009/@ADC Documento de trabalho 44

  • Teoria da Computao Captulo 2 . Autmatos Finitos

    LEI/DEI/FCTUC/2009/@ADC Documento de trabalho 45

    2.1. Introduo

    No Cap.1 estudmos as noes bsicas de linguagens, gramticas e autmatos. Podem-se

    definir muitas linguagens a partir de um mesmo alfabeto, conforma as regras particulares de

    combinao dos caracteres do alfabeto.

    Por exemplo a partir do alfabeto = {a, b} e usando a notao de conjuntos poderemos definir as linguagens L1 = { anbm | n,m >= 0 }a que pertencem as cadeias : ,aabbbbb, aaaa, bbbb, ou a linguagem L2 = { anbn | n >= 0 } a que pertencem as cadeias: ,ab,aabb, aaabbb, aaaabbbb, ou ainda L3 = {a,b}* composta por qualquer cadeia de as e bs ,incluindo

    .. Quantas linguagens se podem definir com este alfabeto ?

    As linguagens podem ser definidas por uma gramtica, que indica como se formam as

    cadeias de caracteres. Conhecidas as suas produes fcil derivar cadeias da linguagem.

    Pode-se agora pr o problema ao contrrio: dada uma cadeia de caracteres, como saber se

    pertence a uma dada linguagem ? Se a cadeia for pequena pode ser relativamente simples, por

    inspeco visual, decidir se pertence ou no. Mas para uma cadeia grande de um gramtica

    mais elaborada, no fcil decidir.

    aqui que entram os autmatos finitos. Vimos no Cap. 1 um autmato aceitador da

    cadeia pai. Se fosse possvel construir um autmato que aceitasse todas as cadeias de uma

    dada linguagem (e s essas), ento para se saber se uma cadeia pertence a uma linguagem

    bastaria d-la a ler ao autmato. Se ele parasse no estado aceitador depois de concluir a sua

    leitura, a cadeia pertenceria linguagem. Caso contrrio no pertenceria.

    Infelizmente no possvel desenhar um autmato para uma qualquer linguagem. H

    linguagens para as quais ainda hoje no possvel decidir se uma cadeia lhe pertence ou no.

    Num mesmo alfabeto pode-se definir um nmero infinito de linguagens, cada uma delas

    com caractersticas prprias. Felizmente para algumas classes de linguagens possvel

    construir autmatos finitos aceitadores: o caso por exemplo das linguagens regulares, cujas

    propriedades veremos mais frente. Por agora basta-nos saber que possvel construir um

    autmato finito aceitador para uma linguagem regular.

  • Teoria da Computao Captulo 2 . Autmatos Finitos

    LEI/DEI/FCTUC/2009/@ADC Documento de trabalho 46

    Teremos assim a Figura 2.1.1.

    Figura 2.1.1. Relao entre linguagens, gramticas e autmatos.

    Existem outras classes de linguagens, que no regulares, para as quais possvel

    tambm construir autmatos aceitadores, naturalmente distintos dos das linguagens regulares.

    Vemos assim que h diferentes classes de linguagens e diferentes classes correspondentes de

    autmatos.

    Para as linguagens regulares, as mais simples, constroem-se autmatos finitos

    determinsticos, os autmatos tambm mais simples. Quando um autmato usado para

    reconhecer uma linguagem, mais exacto chamar-lhe aceitador. No entanto usaremos com

    frequncia o termo autmato, distinguindo-se a sua funo de aceitador dentro do contexto em

    que usado. Como veremos existem autmatos que no so aceitadores, isto , no so

    construdos para aceitar ou no uma linguagem, mas antes para executarem sobre as cadeias

    de caracteres uma dada operao (como alis j vimos no Cap. 1).

    2.2. Aceitadores determinsticos

    Um aceitador determinstico define-se como uma estrutura matemtica e desenha-se como um

    grafo.

    Exemplo 2.2.1.

    Linguagens L

    Gramticas G Geram as cadeias de L

    Autmatos Reconhecem as cadeias

    de L

  • Teoria da Computao Captulo 2 . Autmatos Finitos

    LEI/DEI/FCTUC/2009/@ADC Documento de trabalho 47

    Por exemplo o grafo seguinte representa um aceitador determinstico. O seu alfabeto

    ={0,1}.

    Figura 2.2.1 Grafo de um aceitador determinstico.

    Vejamos como funciona.

    O autmato est no estado inicial, q0, e apresenta-se-lhe entrada uma cadeia de 0s e

    1s, com por exemplo 1100.

    Ele vai ler os caracteres da esquerda para a direita, isto 1 >1 > 0 >0. As arestas

    representam as transies de estado quando o autmato l o carcter etiqueta da aresta.

    Estando em q0 e lendo 1, transita para q1. Estando em q2 e lendo 1, transita para q2, isto , fica

    onde est. Lendo agora 0, estando em q1, transita para q2. Lendo depois 0 transita para q3 e a

    fica, porque no h mais nada para ler.

    O estado q1 tem uma forma especial. Ele o estado aceitador. Se o autmato, partindo

    do estado inicial, leu a cadeia 1100 e terminou no estado aceitador, ento aceita essa cadeia.

    Poderemos ver outras que tambm aceita. Por exemplo 001, 0100, 1110001, etc. Se estiver

    em q0 e aparece um 1, vai para o aceitador; se estiver em q1 e aparece um 1, mantm-se no

    aceitador. Se estiver em q2 e aparece um 1, vai para o aceitador.

    Ento conclui-se que qualquer cadeia que termine num 1 aceite pelo autmato: de facto

    qualquer que seja o seu penltimo estado, o seu ltimo ser sempre o aceitador de ele ler

    apenas mais um 1. Mas h cadeias de outro tipo, como por exemplo 0100, que tambm, so

    aceites. Se depois do ltimo 1 aparecem dois zeros seguidos (e mais nada) ele termina

    tambm no estado aceitador. Portanto o autmato aceita as cadeias que terminam num 1 ou

    em 00 depois do ltimo 1.

    q0 q1 q2

    0

    1

    1 0

    0

    1

    Incio

  • Teoria da Computao Captulo 2 . Autmatos Finitos

    LEI/DEI/FCTUC/2009/@ADC Documento de trabalho 48

    Note-se que em cada estado o aceitador determinstico sabe exactamente o que deve

    fazer, porque tido lhe dito: de cada estado h duas arestas definindo as duas transies

    possveis, uma para cada carcter do alfabeto. Essas duas transies podem ser iguais, com

    acontece no estado q2. Pode-se simplificar o grafo colocando apenas uma aresta com duas

    etiquetas, com o na figura seguinte.

    Figura 2.2.2 Grafo do mesmo aceitador da Fig. 2.2.1

    Se tivssemos uma alfabeto com trs caracteres (por exemplo {a,b,c}, ento de cada

    estado teriam que partir sempre trs arestas explicitamente definidas (ainda que pudessem ser

    iguais). Um aceitador determinstico no tem qualquer capacidade de decidir em qualquer

    circunstncia, da o nome de determinstico. Consequentemente todas as transies possveis

    tm que estar explicitamente definidas. A funo de transio por isso uma funo total, isto

    , est explicitamente definida para todos os valores do seu domnio.

    Note-se que esta definio que estamos a adoptar no seguida por todos os autores.

    Alguns admitem que possam existir transies no definidas. Nestes, se aparecer entrada,

    num dado estado, um carcter para o qual no esteja explicitamente definida uma transio, o

    DFA morre, isto , passa a um estado no aceitador e no sai mais de l, quaisquer que sejam

    os caracteres seguintes na cadeia lida (mais tarde chamaremos ratoeira a este estado).

    Vimos que um autmato finito determinstico facilmente definido e descrito por um

    grafo. Tem cinco partes: um conjunto de estados, um conjunto de regras para transitar entre

    eles, um alfabeto de entrada que define os caracteres aceitveis entrada, um estado inicial,

    um estado final. Veremos casos que tm vrios estados finais. Para definir formalmente o

    autmato, usaremos todas essas cinco partes que compem um quinteto.

    q0 q1 q2

    0

    1

    1 0

    0,1

    Incio

  • Teoria da Computao Captulo 2 . Autmatos Finitos

    LEI/DEI/FCTUC/2009/@ADC Documento de trabalho 49

    Definio 2.2.1 Aceitador determinstico

    Um aceitador determinstico (usaremos o acrnimo dfa-, de deterministic finite

    accepter) definido pelo quinteto

    M=(Q,, , q0, F )

    em que : Q: o conjunto finito de estados internos

    : alfabeto de entrada (conjunto finito de caracteres)

    : Qx Q a funo total chamada funo de transio

    q0 Q o estado inicial

    F Q o conjunto de estados finais ou aceitadores

    Uma funo total quando definida para todos os valores possveis dos seus

    argumentos; caso contrrio diz-se parcial. Ao dizer-se que a funo de transio total,

    atendendo sua definio, isso quer dizer que ela tem que estar definida para todas as

    combinaes possveis de um estado e um carcter do alfabeto, isto , para todos os elementos

    do produto cartesiano Qx.

    Exemplo 2.2.2. O interruptor do Cap. 1

    Retomemos aqui o exemplo do interruptor do Cap. 1. Se definirmos a linguagem das

    sequncias de Press(P) tais que o interruptor fica ligado aps a sua aplicao (partindo do

    estado inicial F), teremos P, PPP, PPPPP, etc., ou seja, um nmero mpar de accionamentos

    do interruptor. Agora poderemos definir o autmato como um aceitador dessa linguagem,

    colocando a dupla circunferncia no estado A.

    Figura 2.2.3 Grafo do interruptor do Cap. 1.

    Aplicando-lhe a definio 2.1 v-se que

    F A

    P

    P

  • Teoria da Computao Captulo 2 . Autmatos Finitos

    LEI/DEI/FCTUC/2009/@ADC Documento de trabalho 50

    Q, conjunto de estados internos: {F, A}

    , alfabeto de entrada: {P}

    , funo de transio: F P A; A P F

    q0 , o estado inicial: F

    F, o estado final: {A}

    Exemplo 2.2.3.

    Seja o autmato da Fig. 2.2.4.

    Figura 2.2.4. Autmato do exemplo 2.2.3

    Aplicando-lhe de igual modo a definio 2.1 v-se que:

    Q, conjunto de estados internos: {1,2,3,4}

    , alfabeto de entrada: {a,b}

    , funo de transio: 1 a 2; 1 b 4, 2 b 3, etc.

    q0 , o estado inicial: 1

    F, o estado final: {4}

    Neste caso a funo de transio tem muitos elementos. Usando uma tabela especifica-se

    mais facilmente.

    Note-se que pelo facto de a funo de transio der total, a tabela tem que ter todas as clulas

    preenchidas. Neste caso para cada estado existem duas arestas possveis, uma para a e outra

    para b.

    1 2 3

    4

    a

    b

    b

    a

    a

    b

    b a

  • Teoria da Computao Captulo 2 . Autmatos Finitos

    LEI/DEI/FCTUC/2009/@ADC Documento de trabalho 51

    Tabela 2.2.1. Tabela de transies do DFA da Fig. 2.2.3.

    Se estado

    actual

    e a entrada

    actual

    o estado

    seguinte ser

    1 a 2

    1 b 4

    2 a 4

    2 b 3

    3 a 3

    3 b 4

    4 a 4

    4 b 4

    Qual ser a linguagem aceite por este autmato ?

    O estado 4 tem uma caracterstica: se o autmato l chegar, nunca mais de l sai, e por

    isso chama-se estado ratoeira, ou armadilha (trap) ou poo.

    A figura seguinte reduz o esquema geral de um autmato que vimos no Cap. 1 ao caso

    particular de um dfa.

    Note-se que um dfa no tem nem dispositivo de memria nem cadeia de sada. Tem apenas

    dispositivo de leitura e unidade de controlo. Conforme o contedo actual da clula lida, d-se

    ou no uma transio de estado dentro da unidade de controlo.

  • Teoria da Computao Captulo 2 . Autmatos Finitos

    LEI/DEI/FCTUC/2009/@ADC Documento de trabalho 52

    Figura 2.2.5. O esquema de um DFA. Note-se a ausncia de qualquer dispositivo de

    memria.

    A transio de um estado para outro depende do estado actual (antes da transio) e do

    carcter lido entrada no instante actual.

    Figura 2.2.6. A funo de transio de um DFA.

    Tabela 2.2.2

    Um autmato representa-se por um

    grafo em que os vrtices (ns)

    representam os estados e as arestas

    orientadas tm como etiquetas os

    caracteres lidos na cadeia de entrada. H

    trs tipos de vrtices, indicados na Tabela

    2.2.2., ao lado

    Smbolo Significado

    Estado normal

    Estado inicial

    Estado aceitador (ou final)

    Aresta

    cadeia de entrada

    a

    a

    b

    b

    a

    b

    q0

    q1 q2

    estado seguinte, movida,

    smbolo na sada (caso a tenha)

    carcter de entrada estado actual

    [*] carcter

    q0

    qf

    qi

  • Teoria da Computao Captulo 2 . Autmatos Finitos

    LEI/DEI/FCTUC/2009/@ADC Documento de trabalho 53

    Exemplo 2.2.4

    Figura 2.2.7 DFA do exemplo 2.2.4.

    Temos um autmato com trs estados, um de cada tipo. O alfabeto do autmato = {0,1}. Lendo com ateno as etiquetas das arestas pode-se escrever a seguinte tabela de

    transies. O DFA pode-se assim definir formalmente como

    M= (Q, S, , ,q0,F) com

    Q = {q0,q1,q2}, = {0,1}, F = {q2} e definida pela Tabela 2.2.4.

    Tabela 2.2.3. Funo de transio do exemplo 2.2.4.

    Qual ser a linguagem aceite pelo autmato? Um bom desafio para o leitor ...

    No Captulo 3 estudaremos as expresses regulares, uma tcnica de especificao de

    linguagens que tem uma lgebra prpria muito adequada para deduzir a definio da

    linguagem a partir de um DFA qualquer. Neste momento poderemos fazer o seguinte

    procedimento heurstico:

    -colocamo-nos no estado aceitador e vemos como l poderemos chegar,

    incio

    0

    1

    q2

    0

    0

    1

    q1 q0

    1

    Estados

    Entradas

    0 1

    q0

    q1

    q2

    q1 q0

    q2

    q0 q1

    q0

  • Teoria da Computao Captulo 2 . Autmatos Finitos

    LEI/DEI/FCTUC/2009/@ADC Documento de trabalho 54

    -depois andamos para trs e em cada estado vemos o mesmo. At que se consiga

    visualizar mentalmente a linguagem do autmato.

    Chega-se ao estado final a partir de q1 com um 0, ou seja, com (****)0.

    Chega-se a q1 com um 0 depois de 1: (***10)0. De modo que sempre que uma

    cadeia termine em 100, termina no estado aceitador. Se terminar em 1000 no aceita a cadeia.

    Mas aceita se terminar em 10000, 1000000, ou qualquer nmero par de zeros

    precedido de 1.

    Poderemos definir formalmente linguagem de um autmato finito.

    Definio 2.2.2a. Linguagem de um DFA

    Dado um DFA qualquer, M, a linguagem L aceite (ou reconhecida) por M o conjunto

    de todas as cadeias que, comeando a ser lidas no estado inicial, fazem com que o autmato

    alcance um dos estados finais depois de toda a cadeia ter sido lida. Escreve-se L(M) para

    dizer que L a linguagem aceite ou reconhecida por M.

    Que linguagens aceitam os seguintes autmatos ?

    Exmplo 2.2.5

    Fig. 2.2.8.

    Exemplo 2.2.6

    Fig. 2.2.9.

    Exemplo 2.2.7

    Incio q0 q1

    0 0 1

    1

    Incio q0 q1

    0 1

    1

    0

  • Teoria da Computao Captulo 2 . Autmatos Finitos

    LEI/DEI/FCTUC/2009/@ADC Documento de trabalho 55

    Fig. 2.2.10

    Um DFA pode ser definido pela explicitao da funo de transio e, a partir dela,

    facialmente se desenha o seu grafo.

    Exemplo 2.2.8

    Seja o DFA M = ({q0, q1, q2}, {a,b}, , q0, {q2}) cuja funo de transio a seguinte:

    (q0, a) = q1 Tabela de transies (q0, b) = q2 (q1, a) = q0 (q1, b) = q2 (q2, a) = q2 (q2, b) = q2 Nas transies aparecem trs estados q1, q2 e q3. O grafo do autmato desenha-se graficando as transies, depois de se desenharem os seus trs estados. Obtm-

    se assim a Fig. 2.2.11.

    Fig. 2 .2.11

    Ser possvel simplificar este DFA, isto , encontrar um outro com menos estados que

    aceite a mesma linguagem (e s a mesma) ?

    a

    b q0

    q1

    q2 q1

    q0

    q2 q2

    q2

    q2

    a

    a

    a,b

    q0 q1

    b b

    q2 q2

    q0 q1 q2 1 0

    0 0,1 1

  • Teoria da Computao Captulo 2 . Autmatos Finitos

    LEI/DEI/FCTUC/2009/@ADC Documento de trabalho 56

    Veremos em captulos posteriores algoritmos para simplificar autmatos, reduzindo ao

    mnimo possvel o nmero de estados. Neste momento poderemos apenas olhar com ateno

    para o DFA e verificar o que ele faz. Se aparecer um b, no estado inicial, vai para o aceitador

    q2. Se estiver em q1 e aparece um b, transita para q2 ; e se estiver em q2 e aparecer um b,

    mantm-se a. Portanto qualquer que seja o seu estado se parecer um b na cadeia de entrada,

    ele aceita-a: a sua linguagem portanto o conjunto de todas as cadeias em {a,b}* que

    contenham pelo menos um b. O autmato seguinte aceita essa linguagem.

    Fig. 2.2.12. Grafo equivalente ao

    da Fig. 2.2.11.

    Funo de transio estendida a cadeias de caracteres, *

    Na definio do DFA a funo de transio definida de tal forma que ela activada por um

    carcter. Se quisermos calcular a transio do DFA de uma configurao inicial para outra

    configurao aps um conjunto de transies, seria interessante dispor de uma forma de

    representao sucinta, compacta, que exprimisse essa transio salto resultante da leitura de

    um conjunto de caracteres ou de uma cadeia completa.

    Pode-se estender a noo de transio com esse objectivo. Em vez de escreve-se *, em que o asterisco quer dizer aps um certo nmero de transies.

    A funo de transio estendida assim definida por

    *: Q * Q

    a

    a,b

    b

    q2 q2

    q0

  • Teoria da Computao Captulo 2 . Autmatos Finitos

    LEI/DEI/FCTUC/2009/@ADC Documento de trabalho 57

    em que

    - o seu segundo argumento uma cadeia em vez de um carcter, e

    - o seu valor de sada d o estado do autmato depois de ler a (sub)cadeia.

    Por exemplo, se tivermos num autmato tal que

    (q0, a) = q1 e (q1, b) = q2 ento *(q0, ab)=q2

    Representando por grafos, teremos a Fig. 2.2.13.

    Figura 2.2.13. Ilustrao da funo de transio estendida. Em a) grafo normal; em b) grafo

    compactado usando uma transio estendida.

    A funo de transio estendida pode definir-se recursivamente do modo seguinte:

    (i) *(q,)= q

    (ii) *(q,wa)= (* (q, w), a)

    para todo o q Q, w*, a.

    Para o exemplo anterior teremos :

    * (q0, ab)= (* (q0, a), b)

    *(q0, a)=* (q0, a)= (*(q0, ), a)= (q0, a)=q1

    *(q0, ab)= ( q1, b)=q2

    q0 q1 q2 a b

    a) Funo de transio

    q0 q2 ab

    * b) Funo de transio estendida

  • Teoria da Computao Captulo 2 . Autmatos Finitos

    LEI/DEI/FCTUC/2009/@ADC Documento de trabalho 58

    Definio 2.2.2b.Linguagens de um DFA (definio formal)

    A linguagem L aceite (ou reconhecida) por um DFA M =(Q, , , q0, F) o conjunto de todas as cadeias em aceites por M, i.e.,

    L(M) = {w* : *(q0, w)F }

    A funo de transio e * so funes totais (definidas para todos os elementos do seu domnio). Em cada passo define-se um e um s movimento, e por isso o autmato se

    chama determinstico, no podendo fazer escolhas. Um autmato processa todas as cadeias

    em *, aceitando-as ou no.

    Quando no aceita uma cadeia, pra num estado no aceitador. O conjunto das cadeias

    em que isso se verifica constitui o complemento da linguagem L(M), que se pode definir

    formalmente por

    Complem(L(M)) = {w* : *(q0, w)F }

    Consideremos os autmatos da Fig. 2.2 14, diferentes apenas na identificao do estado

    final.

    O primeiro reconhece, como vimos, a linguagem das cadeias em {a,b}* que tenham pelo

    menos um b. O segundo aceita, no mesmo alfabeto, as cadeias que tenham apenas as. Isto ,

    a linguagem do segundo o complemento da linguagem do primeiro: se uma cadeia s tem

    as no tem nenhum b, e se tem pelo menos um b no contm s as.

    Figura. 2.2.14. Autmatos complementares no alfabeto {a,b}.

    a

    b

    q0

    a,b

    q1

    a,b

    a

    b

    q0

    q1

  • Teoria da Computao Captulo 2 . Autmatos Finitos

    LEI/DEI/FCTUC/2009/@ADC Documento de trabalho 59

    Repare-se que o estado no aceitador do primeiro autmato o estado aceitador do

    segundo; e o estado aceitador do primeiro o estado no aceitador do segundo. De facto,:

    - se uma cadeia aceite pelo primeiro no o pode ser pelo segundo: uma cadeia que

    termine no estado aceitador do primeiro tem que terminar no estado no aceitador do

    segundo;

    - e se uma cadeia recusada pelo primeiro tem que ser aceite pelo segundo: se uma

    cadeia termina no estado no aceitador do primeiro tem que terminar no estado aceitador do

    segundo.

    Para este autmato com dois estados, fcil de ver a relao entre os autmatos de

    linguagens complementares.

    Ser assim no geral ?

    De facto . Se um autmato M aceita uma linguagem L(M), ento o complemento de L

    ser reconhecida pelo autmato que se obtm de M invertendo neste a funo dos estados: os

    no aceitadores passam a aceitadores e os aceitadores passam a no aceitadores.

    2.3. A arte de construir DFAs

    Os exemplos de autmatos que vimos at aqui parecem simples, e a sua construo (em grafo)

    relativamente expedita.

    Casos h em que bem mais difcil obter uma soluo simples (na medida do possvel) e

    apropriada para uma dada funo.

    A expertise para desenhar DFAs depende mais da arte aprendida e treinada do que de

    uma teoria sofisticada.

    Vejamos um exemplo:

    Exemplo 2.2.9 Paridade individual

    Desenhar um autmato que, no alfabeto ={0,1}, aceite todas as cadeias com um nmero mpar de 1s.

  • Teoria da Computao Captulo 2 . Autmatos Finitos

    LEI/DEI/FCTUC/2009/@ADC Documento de trabalho 60

    Podemos comear a desenhar estados e arestas, por tentativa e erro, at que consigamos,

    com mais ou menos remendos, uma soluo. Se o conseguirmos, muito provavelmente

    obteremos um