Computabilidade e Linguagens Formais

Introdução à teoria dos autómatos
Notas baseadas em John E. Hopcroft, Rajeev Motwani, Jeffrey D. Ullman.
“Introduction to automata theory, languages and computation”. 2nd ed, AddisonWesley, 2001.
–
Gabriel David / Cristina Ribeiro
1
História


Teoria dos autómatos: estudo dos dispositivos computacionais
abstractos [máquinas]
Alan Turing (1930’s)
–
–

1940’s, 1950’s
–

Estudos em autómatos finitos para modelar o cérebro
Noam Chomsky (1950’s)
–

Estudou os limites de uma máquina abstracta equivalente às máquinas
actuais
Antes de haver computadores!
Gramáticas formais - relacionadas com autómatos abstractos; úteis em
compilação
S. Cook (1969)
–
Teoria da complexidade – o que é possível ou não computar
Introdução-2
Interesse da teoria dos autómatos

Útil na modelação de hardware e software
–
–
–
–

Projecto e teste de circuitos digitais
Análise lexical em compilação
Processamento de texto, pesquisa na Web
Máquinas de estados, protocolos de comunicação, criptografia
Autómato finito
–
–
–
–
Sistema que em cada momento está num de um nº finito de estados
Estado memoriza a porção relevante da história do sistema
Sendo finito tem que esquecer o que não for relevante
Pode ser implementado com recursos fixos
Introdução-3
Interruptor on/off
Press
Start
on
off
Press

Autómato finito mais simples – modela interruptor
–
–
Dois estados [círculos]: on e off
Uma só entrada [etiquetas nos arcos]: Press


–
–
Representa influência externa no sistema [transição de estado]
Carregar no botão tem um efeito dependente do estado
Estado inicial indicado por uma seta com a etiqueta Start
Pode existir um (ou mais) estados finais ou de aceitação, indicados
por círculo de linha dupla

Chegar a um desses estados significa que a sequência de entradas é boa
Introdução-4
Reconhecedor
Start

t
t
h
th
e
the
n
then
Se a entrada for a cadeia t-h-e-n o autómato evolui do estado
inicial para o final
–
–
Acumula a história das entradas
O seu objectivo é reconhecer a palavra “then”
Introdução-5
Representações estruturais

Gramáticas
–
–
Processar dados com estrutura recursiva [expressões]
Exemplo de regra gramatical: E  E + E

–

Uma expressão pode ser constituída por duas expressões ligadas por “+”
Usadas em analisadores [parsers] de compiladores
Expressões regulares
–
–
Descreve a estrutura de cadeias de caracteres
Exemplo: [1-9][0-9][0-9][0-9][-][0-9][0-9][0-9][ ][A-Z][a-z]*


Descreve “4200-465 Porto” mas falha “5505-032 Vila Real”
Correcção: [1-9][0-9][0-9][0-9][-][0-9][0-9][0-9]([ ][A-Z][a-z]*)*
Introdução-6
Conceitos centrais

Alfabeto é um conjunto finito e não vazio de símbolos
–
–
–

 = {0, 1} , alfabeto binário
 = {a, b, …, z} , conjunto das minúsculas
Conjunto dos caracteres ASCII
Cadeia (ou palavra) é uma sequência finita de símbolos escolhidos de
um alfabeto
–
–
–
–
01101 é uma cadeia do alfabeto  = {0, 1}
Cadeia vazia () tem zero ocorrências de símbolos
Comprimento de uma cadeia é o número de ocorrências de símbolos:
|01101| = 5, || = 0
Potência de um alfabeto k é o conjunto de cadeias de comprimento k,
formadas por símbolos do alfabeto  (produto cartesiano)



0 = {}
Se  = {0, 1} então 1 = {0, 1} , 2 = {00, 01, 10, 11}, 3 = {000, 001, …, 111}
Distinção entre  = {0, 1} conjunto de símbolos e 1 = {0, 1} conjunto de cadeias
Introdução-7
Linguagem

O conjunto de todas as cadeias sobre um alfabeto  é denotada por *
–
–
–

* = 0  1  2  …
+ = 1  2  …
* = 0  +
Linguagem L sobre um alfabeto  é um subconjunto de * (L  *)
–
Linguagem das cadeias com n 0’s seguidos de n 1’s

–
Conjunto dos números binários que são primos

–
{10, 11, 101, 111, 1011, …}
Linguagem vazia

–
{, 01, 0011, 000111, …}

Linguagem só com a cadeia vazia

{}
Introdução-8
Problema

Problema é a questão de decidir se, dada uma cadeia, ela é
membro de uma determinada linguagem
–

Dados w  * e L  *, w  L ?
É comum descrever uma linguagem através de um
construtor de conjuntos
–
{w | w consiste de um número igual de 0’s e 1’s}

–

Conjunto dos w tal que w…
{w | w é um programa em C sintacticamente correcto}
Problema de testar a primalidade
–
w  Lp ? em que w é uma cadeia com a representação binária de
um número e Lp é a linguagem que contém todas as cadeias que são
representações binárias de números primos
Introdução-9
Linguagem ou problema?

Problema em sentido comum
–
–

Pedido para calcular ou transformar uma entrada (ex: compilador)
Não uma questão de decisão (sim/não)
Para efeitos de estudos de complexidade, definir um problema em
termos de uma linguagem é adequado
–
–
É tão difícil resolver a questão da decisão como a do problema
Se for difícil decidir se uma cadeia pertence à linguagem LX das cadeias
válidas na linguagem de programação X então não é mais fácil traduzir
programas na linguagem X para código objecto



Se fosse, executava-se o tradutor e decidia-se da pertença a LX conforme o sucesso
do tradutor em produzir código objecto. O problema da decisão ficava fácil, o que
contradiz a suposição (prova por contradição)
Exemplo de redução de um problema a outro
Linguagens e problemas são a mesma coisa
–
Cadeias enquanto tal – linguagem;
objectos representados – problema
Introdução-10
Download

Introdução