100 likes | 263 Views
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, Addison-Wesley, 2001. Gabriel David / Cristina Ribeiro. História.
E N D
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, Addison-Wesley, 2001. Gabriel David / Cristina Ribeiro
História • Teoria dos autómatos: estudo dos dispositivos computacionais abstractos [máquinas] • Alan Turing (1930’s) • Estudou os limites de uma máquina abstracta equivalente às máquinas actuais • Antes de haver computadores! • 1940’s, 1950’s • Estudos em autómatos finitos para modelar o cérebro • Noam Chomsky (1950’s) • 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
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
Interruptor 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 Start on off Press
Reconhecedor • 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” h e n t Start th the then t
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]*)*
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
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 • {, 01, 0011, 000111, …} • Conjunto dos números binários que são primos • {10, 11, 101, 111, 1011, …} • Linguagem vazia • • Linguagem só com a cadeia vazia • {}
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
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